神经网络必须始终收敛吗?


16

介绍

步骤1

我编写了一个标准的反向传播神经网络,为了对其进行测试,我决定将其映射为XOR。

这是一个2-2-1网络(具有tanh激活功能)

X1  M1
        O1
X2  M2

B1  B2

为了进行测试,我手动将顶部中层神经元(M1)设置为AND门,将下层神经元(M2)设置为OR门(如果为true,则输出1;如果为false,则输出-1)。

现在,我还手动将连接M1-O1设置为-.5,将M2-O1设置为1,将B2设置为-.75

因此,如果M1 = 1且M2 = 1,则总和为(-0.5 +1 -0.75 = -.25)tanh(0.25)= -0.24

如果M1 = -1和M2 = 1,则总和为((-0.5)*(-1)+1 -0.75 = .75)tanh(0.75)= 0.63

如果M1 = -1和M2 = -1,则总和为((-0.5)*(-1)-1 -0.75 = -1.25)tanh(1.25)= -0.8

对于“第一次迭代”来说,这是一个相对较好的结果。

第二步

然后,我对这些权重进行了一些修改,然后使用误差传播算法(基于梯度下降)对它们进行训练。在此阶段,我保持输入神经元和中间神经元之间的权重不变,只是修改中间(和偏差)与输出之间的权重。

为了进行测试,我将权重设置为和.5 .4 .3(分别针对M1,M2和偏差)

但是,在这里,我开始遇到问题。


我的问题

我将学习率设置为0.2,然后让程序遍历训练数据(ABA ^ B)进行10000次以上的迭代。

大多数时候,权重收敛到一个好的结果。但是,有时这些权重会收敛到(例如)1.5、5.7和.9,这会导致输入{1,1}的+1输出(偶数)(当结果应为-1时)。

相对简单的ANN是否有可能根本无法收敛的解决方案,还是我的实现存在错误?

Answers:


13

(我假设“错误传播”是指我所说的“错误向后传播”。)

在《神经网络》(由海金撰写)的第231页上,他指出反向传播总是收敛的,尽管速率(用他的话来说)可能“非常慢”。

我认为您要问的不是算法是否将始终收敛,而是算法是否将始终收敛到最佳答案。不幸的是,它不会。即使在像您这样的简单情况下,也有可能存在局部最小值而不是全局最小值。

处理局部极值是优化中非常重要的主题,您可以找到许多有关如何处理它的建议。最常见的一种是听起来像您正在做的事情:随机重新启动(即只需多次运行算法,每次都从一个随机位置开始)。

为了弄清楚您的代码中是否有错误,我将打印出错误项并验证其在每次迭代中都会减少。如果是这样,那么您可能只是达到了局部最小值。


所有权重都增加(或神经元的权重增加得更快),这在输入为{1,0},{0,1},{0,0}时使误差最小,而在{1,1}时使误差最大。这是在线学习而不是批处理学习的问题吗?

@Shmuel:在线和批处理都将朝着渐变的方向发展。如果该梯度指向错误的方向,则它们都将朝错误的方向前进。如果您有兴趣,爬山上的Wikipedia页面提供了一些解决方法。
Xodarap 2012年

6

如果您已固定输入单位和隐藏单位之间的权重,并且仅在训练期间将隐藏权重修改为输出权重,则将没有局部最小值。使用固定的隐藏权重输入,您要解决的优化问题与逻辑回归相似,但具有tanh而不是S型函数。无论问题是凸的,并且应该只有一个全局最小值。

由于局部最小值不会引起您的问题,因此我建议对数值进行数值逼近,然后将其与您正在计算的值进行比较。如果您不确定如何执行此操作,那么Standford ULFDL教程将提供很好的概述。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.