我昨天发布了这个问题,询问我的神经网络(我正在通过随机梯度下降的反向传播进行训练)是否陷入了局部最小值。 以下论文讨论了 XOR 神经网络中局部最小值的问题。第一篇论文说不存在局部最小值的问题,而下一篇论文(一年后撰写)说在 2-3-1 XOR 神经网络中存在局部最小值的问题(顺便说一句,我正在使用 3-3-1,即输入和隐藏层上的偏差)。 这些都是摘要(我无法访问全文,因此无法阅读):
- XOR 没有局部最小值:神经网络误差表面分析的案例研究。作者:Hamey LG. 澳大利亚悉尼麦考瑞大学计算系
- 2-3-1 XOR 网络的局部最小值。作者:Sprinkhuizen-Kuyper IG, Boers EW.
还有另一篇论文 [PDF]说最简单的 XOR 网络不存在局部最小值,但它似乎没有讨论 2-3-1 网络。
现在进入我的实际问题:我找不到任何讨论激活函数的选择、初始权重以及这对神经网络是否会陷入局部最小值产生什么影响的内容。 我问这个问题的原因是,在我的代码中,我尝试使用标准的 sigmoid 激活函数和双曲正切激活函数。 我注意到,在前一种情况下,我大约只有 20% 的时间会陷入困境,而在后一种情况下,我往往会更频繁地陷入困境。 我还在第一次初始化网络时随机化我的权重,所以我想知道一组特定的随机权重是否更容易使我的神经网络“陷入困境”。
就激活函数而言,由于误差最终与激活函数产生的输出相关,我认为存在影响(即,误差表面发生变化)。 但是,这仅仅是基于直觉,我更喜欢一个具体的答案(对于两点:初始权重和激活函数的选择)。
回答:
赋予神经网络的随机权重通常会立即限制学习期间可用的搜索空间部分。 当学习率较小时,尤其如此。
但是,在 XOR 情况下(使用 3-3-1 拓扑),不应该存在任何局部最小值。
我的建议是,由于网络非常小,因此当它似乎陷入局部最小值时,您应该打印边缘权重。 您应该能够快速评估权重是否正确,以及这些值距离给您一个完美的网络有多远。
对我来说,产生重大影响的一个技巧是,不要在每条训练数据之后立即更新权重,而是将误差批量处理,并在一个 epoch 结束时更新权重。 这可以防止我的网络在早期受到影响,如果我的前半部分输入数据属于同一个分类桶。
这引出了我的下一个问题,您确定您有均匀分布的训练样本吗? 如果您为神经网络提供 900 个正分类结果,但只有 100 个负分类结果,有时网络会认为说一切都在分类组中更容易,因为它这样做只有 10% 的错误率。 许多学习算法非常擅长找到这类事情。
最后,激活函数对它是否达到局部最小值应该没有什么影响。 激活函数主要用作将实数域投影到更小的已知范围的一种方式; sigmoid 函数为 (0,1),双曲正切激活函数为 (-1,1)。 您可以将此视为在给定神经层(也称为特征缩放)的所有学习特征上强制相等的一种方式。 由于事先不知道输入域,因此不像线性回归的常规特征缩放那么简单,因此必须使用激活函数,但在反向传播期间计算误差时,否则会进行补偿。