在我意识到这存在之前,我在 Cross Validated 上发布了这个问题。我认为它更适合这里,那里没有答案,所以我删除了其他帖子。我已经复制了以下问题:
我一直在玩 MATLAB 中的神经网络工具箱,以直观地了解架构需求如何随特征维度扩展。
我整理了一个简单的例子,结果让我感到惊讶。我希望有人可以指出(a)我的不切实际的期望,或(b)神经网络工具箱的错误/滥用。
示例如下:我有一个简单的未归一化的一维高斯,我正在尝试学习。我执行以下操作:
x = -5:0.2:5;
y = exp(-x.^2/2);
net = feedforwardnet(2);
net = configure(net, x, y);
net = train(net, x, y);
y2 = net(x);
plot(x, y, 'o', x, y2);
legend('Data', 'NN');
这给了我很好的结果。我得到了下面的情节。
现在,我尝试将其扩展到二维,这就是我遇到麻烦的地方。我不认为我要求太多。我的数据不嘈杂,或者是稀疏的。我想如果我将足以增加维度的神经元数量增加一倍。这是我的代码:
x1 = -5:0.2:5;
x2 = -5:0.2:5;
[x1g, x2g] = meshgrid(x1, x2);
xv = [x1g(:)'; x2g(:)'];
yv = exp(-dot(xv,xv)/2);
net = feedforwardnet(4);
net = configure(net, xv, yv);
net = train(net, xv, yv);
y2v = net(xv);
plot3(xv(1,:), xv(2,:), yv, xv(1,:), xv(2,:), y2v, 'o');
legend('Data', 'NN');
我得到的情节是这样的:
这很可怜。也许我需要更多的神经元?也许如果我将维数加倍,我需要将神经元数量增加四倍。我得到了 8 个神经元:
也许有 8 个神经元我有很多权重可以适应,所以让我尝试使用正则化进行训练。我得到下面的情节trainbr
:
只有在大约 16 个神经元处,我才开始得到一些我认为合理的东西。
但是,仍然存在我不喜欢的振荡。现在我知道我正在以一种天真的方式开箱即用地使用它,或者我可能期望过高。但是这个简单的例子类似于我想要解决的真正问题。我有以下问题:
- 为什么从 1 维增加到 2 维会显着增加获得合适拟合所需的神经元数量?
- 即使当我使用大量神经元时,我也会得到振荡,这将成为我现实世界应用程序中的一个问题。我怎样才能摆脱它?
- 我读过的关于 NN 的大多数资源都表明神经元的数量要少得多。它们通常会声明“等于或小于输入变量的数量”之类的内容。这是为什么?多维高斯是病态吗?
- 如果我需要更智能地处理给定数量的神经元的网络,我需要做什么?我尝试重新训练网络以查看它是否是局部最小值问题,但我通常得到类似的拟合。
- 任何其他可能对这个问题有远程有用的东西都值得赞赏!