为什么学习率导致我的神经网络的权重急剧上升?


9

我正在使用tensorflow编写简单的神经网络以进行一些研究,并且在训练时遇到“ nan”权重的许多问题。我尝试了许多不同的解决方案,例如更改优化器,更改丢失,数据大小等,但无济于事。最后,我注意到学习速度的变化使我的体重产生了难以置信的变化。

使用.001(我认为是非常保守的)的学习率,最小化函数实际上将成倍地增加损失。一个世纪之后,损失可能从数千个跃升至一万亿个,然后达到无穷大('nan')。当我将学习率降低到.0001时,一切正常。

1)为什么单个数量级会产生这种影响?

2)为什么最小化函数实际上会执行与其功能相反的操作,并使损失最大化?在我看来,无论学习速度如何,都不应该发生这种情况。


你能告诉你如何初始化体重吗?
Himanshu Rai

我建议尝试使用亚当求解器。它的行为方式似乎更好,并且默认设置也更好,您也许可以使用默认的学习率。
DW

Answers:


9

您可能会发现深度学习的第8章很有帮助。在其中,作者讨论了神经网络模型的训练。这非常复杂,所以您遇到困难我并不感到惊讶。

一种可能性(除了用户错误之外)是您的问题病情严重。在计算更新时,梯度下降方法仅使用一阶导数(梯度)信息。当二阶导数(Hessian)病态时,这可能会引起问题。

作者引用:

即使优化凸函数,也会出现一些挑战。其中,最突出的是黑森州矩阵病态。在大多数数值优化中,这是一个非常普遍的问题,无论是凸优化还是其他优化,在第4.3.1节中都会进行详细描述。H

通常认为不适条件问题存在于神经网络训练问题中。通过使SGD被“卡住”,可以表现出不适,即使很小的步幅也会增加成本函数。[我的重点补充]

作者提供了一个简单的推导来证明可能是这种情况。使用梯度下降时,成本函数应更改为(二阶)

ε22GŤHG-εGŤG

其中是梯度,是Hessian,是学习率。显然,如果二阶导数较大,则第一项会淹没第二项,并且成本函数将增加而不是减少。由于第一项和第二项对缩放比例不同,因此缓解此问题的一种方法是减少(尽管当然,这可能会导致学习速度慢)。GHεεε


2
在我看来,这个法定答案为黑森州的病态提供了一个非常直观的解释。
奥伦·米尔曼

3

1)为什么单个数量级会产生这种影响?

2)为什么最小化函数实际上会执行与其功能相反的操作,并使损失最大化?在我看来,无论学习速度如何,都不应该发生这种情况。

有两个主要原因。第一个您在第一步中使用的数据与第二个步骤中使用的数据不同。如果在第一步中模型学习了这些值并落入局部最小值,那么很可能会给新值带来更大的损失。

第二个原因是成本函数的形状。您尝试通过小步长最小化该值,这些步长由两个因素给出:梯度和学习率。图像您的函数就像x ^ 2。如果您的值接近于0,则梯度将小于进一步的梯度,但是,如果您的学习率较大,则与其接近于0,您实际上会增加误差,因为您的新点基于等级和学习率比上一步进一步提高到0。这可能会发生多次。

看一下此链接:http : //www.statisticsviews.com/details/feature/5722691/Getting-to-the-Bottom-of-Regression-with-Gradient-Descent.html

如果您看到带有alpha 0.01和alpha 0.12的图形,您将看到第一个图形的学习率很小,因此梯度越来越接近最小值,但是在第二种情况下,学习率很大,以至于梯度移动一步一步走。


1
关于第二个原因- 该答案说明(使用简单函数)何时梯度下降可能会发散。这个问题的答案也有Python代码,所以你可以实验,看看在不同的场景梯度下降的行为..
奥伦米尔曼
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.