渐变体面介绍
许多算法中都使用了梯度体面方法来最小化损失函数。在本简介中,我们将看到梯度下降的工作原理。此外,还将指出一些特殊功能。我们将以一个实际的例子为指导。
首先,我们需要一个损失函数。一个非常常见的方法是
其中y是目标变量的真实观测值,而yhat是预测值。这个函数看起来是一个平方函数-是的。但是,如果我们假设使用非线性方法预测yhat,则最终结果会更高。例如在深度
神经网络中,它是权重和输入特征的函数,它是非线性的。
因此,让我们假设函数看起来像下面的多项式-例如:
其中f是损失,x是权重。
f是损失函数
f'是x的一阶导数,
f''是x的第二阶导数。
我们想找到最小的。但是有两个最小值和一个最大值。因此,首先我们找出极限值在哪里。为此,我们使用牛顿迭代法。如果将切线设置为绿色函数的任意点x0,则可以计算线性切线为零的位置。通过此过程,我们迭代地逼近f'的零点,从而获得极值。x的截距应为x1。
当我们有x1时,我们重新开始。但是现在有了x1。
等等...
为了找到与x的三个交点,我们将x0设置为在功能图中可以看到的可疑零点附近。
x0 = c(1,-1,-4)
j = 1
for(x in x0){
for(i in 1:20){
fx = 6 * x ^ 5 + 20 * x ^ 4 + 8 * x ^ 3 + 15 * x ^ 2 + 40 * x +1
dfx = 30 * x ^ 4 + 80 * x ^ 3 + 24 * x ^ 2 + 30 * x + 40
x = x-fx / dfx
} Assign
(paste(“ x”,j,sep =“”),x)
j = j + 1
}
结果是:
x1 = -0.03
x2 = -1.45
x3 = -2.9
基本原理
现在我们知道f的极值在哪里,我们可以应用渐变体面-顺便说一句,对于梯度下降,您不需要知道极端在哪里,这对本例来说仅是重要的。为了搜索最小值,尤其是全局最小值,我们应用了体面的梯度。
渐变体面是一种迭代方法。它从初始值开始,然后向下移动。初始值通常是随机设置的,尽管还有其他方法。
其中,x是神经元关系的权重,而
是对粗蛋白重量的部分推导。在我是迭代指数。
为什么负的learning_rate乘以导数?好吧,如果推导为正,则意味着x的增加与f的增加同时出现,反之亦然。因此,如果导数为正,则x必须减小,反之亦然。
让我们从以下内容开始:
x = 2
我们将学习率设置为:
learning_rate = 。001
for (i in 1 :2000 ){
fx = 6 * x ^ 5 + 20 * x ^ 4 + 8 * x ^ 3 + 15 * x ^ 2 + 40 * x +1
x = x - fx * learning_rate
}
结果:
-0.03
在此很清楚为什么初始值(权重)如此重要。找到的最小值对应于x1而不是x3。这是由于x = 2的初始值。现在让我们将其更改为:
x = -2
对于(i in 1 :2000 ){
fx = 6 * x ^ 5 + 20 * x ^ 4 + 8 * x ^ 3 + 15 * x ^ 2 + 40 * x +1
x = x - fx * learning_rate
}
结果:
-2.9
这是我们一直在寻找的全球最低要求。
现在,我们将学习率更改为:
learning_rate = 。007
我们从以下内容开始:
x = 2
for(i在1:2000中){
fx = 6 * x ^ 5 + 20 * x ^ 4 + 8 * x ^ 3 + 15 * x ^ 2 + 40 * x + 1
x = x-fx * learning_rate
}
结果???
-2.67
如此明显的错误结果如何产生?
振荡
好吧,让我们绘制前100次迭代:
这种现象称为振荡并阻碍优化。这是因为在x = -3.03和x = -2.67时,两个相对侧的绝对增量f'相同:
如果我们从相反的两侧减去梯度,我们应该得到零差。
x = -2.67302
fx1 = 6 * x ^ 5 + 20 * x ^ 4 + 8 * x ^ 3 + 15 * x ^ 2 + 40 * x +1
x = -3.02809
fx2 = 6 * x ^ 5 + 20 * x ^ 4 + 8 * x ^ 3 + 15 * x ^ 2 + 40 * x +1
区别是:
0
学习率衰减
但是,振荡不仅是一种无法影响的现象,而且还由于选择的学习速率和损失函数的形状而发生。这种学习速度使算法从一侧跳到另一侧。为了解决这个问题,可以降低学习率。同样,我们从以下内容开始:
x = 2
初始学习率:
learning_rate = 。007
学习率衰减:
衰减 = learning_rate / 2500; 衰减
0.0000028
checkX = NULL
为(我 在 1 :2000 ){
fx = 6 * x ^ 5 + 20 * x ^ 4 + 8 * x ^ 3 + 15 * x ^ 2 + 40 * x +1
x = x - fx * (学习率 - 衰减 * i )
checkX = c (checkX , x )
}
这种不对称的楔形课程表明不断缩小的学习速度可以完成其任务。众所周知,-2.9是正确的值。
动量项
一种常用的方法是添加动量项。动量项是前一次迭代后值x(权重)的变化:
其中M是动量项的权重。这种方法可与球滚滚而下。转弯时,它随着获得的摆动而向后摆动。此外,球在平坦表面上滚动得更远。让我们检查一下添加动量项时振荡会发生什么。
从以下位置重新开始:
x = 2
学习率再次是:
learning_rate = 。007
动量权重设置为:
M = 。2
checkX = NULL
为(我 在 1 :2000 ){
fx = 6 * x ^ 5 + 20 * x ^ 4 + 8 * x ^ 3 + 15 * x ^ 2 + 40 * x +1
x = x - fx * 学习率 + M * x_1
X_1 = - FX * learning_rate
checkX = c (checkX , x )
}
结果:
-0.03
如您所见,虽然达到了最低要求,但不幸的是错误的最低要求。动量项可以防止振荡,但不能保证全局最小值。
结论
我们可以看到,梯度体面的优化过程高度依赖于初始值(权重)。因此,使用基于梯度体面的方法(例如神经网络)时找到的最佳解决方案可能不是最佳的。为了防止振荡,可以添加动量项或更改学习率。但这甚至不能保证找到全局最小值。

关注 CDA人工智能学院 ,回复“录播”获取更多人工智能精选直播视频!