Neural Net ConvNetJs - 为什么不能收敛

Neural Net ConvNetJs - Why can't it converge

首先...我不认为这是 ConvNetJs 的问题,我认为这是我对神经网络的理解的问题。

给定 2 个随机数,检测加在一起的结果是否为偶数。

示例:

[4,6] = 真

[3,4] = 假

我的设置:

var layer_defs = [];
layer_defs.push({type:'input', out_sx:1, out_sy:1, out_depth:2});
layer_defs.push({type:'fc', num_neurons:20, activation:'relu'});
layer_defs.push({type:'softmax', num_classes:2});

net = new convnetjs.Net();
net.makeLayers(layer_defs);
var trainer = new convnetjs.Trainer(net, {method: 'adadelta', l2_decay: 0.001,batch_size: 10}

然后我对其进行了 10,000 次迭代训练(使用随机数)。它永远不会靠近。最多只有 56% 的准确率。

使用相同的设置但问题不同:

第一个数是否大于第二个数。 它在 1,000 次迭代中达到 99% 的准确率。

我尝试过的事情: 更多层 更多神经元 SVM 与 softmax

我想知道这是否是一个“不可分类”的问题。

问题是将两个数字相加并将结果分类为奇数或偶数的问题不适合神经网络。神经网络试图估计一个函数。被估计的函数越平滑,神经网络就越容易收敛。 (这可能不是 100% 正确,但可以解决这个问题)

为了帮助理解为什么这两个问题如此不同,假设我们将第一个数字设为常数。现在考虑添加第二个数字并尝试确定结果是奇数还是偶数的问题图。此图将随着第二个数字的每次增量来回摆动。

然而,第二个问题将是一个简单得多的图表。图形将只有一个点,它从小于、等于、大于切换。