李宏毅机器学习课程笔记-3.梯度下降精讲

梯度下降伪代码

梯度下降可以优化损失函数的值,使其尽量小,即可找到最好(在数据集上拟合效果最好)的模型参数。

现在假设模型\(f\)中只有一个参数\(w\),则损失函数为\(L(f)=L(w)\),梯度下降算法如下(若模型有多个参数,按相同方法更新各参数)

初始化参数

随机选取一个\(w^0\)\(w^0\)并不一定是随机选取),令\(w=w^0\)

计算梯度

\(\frac{dL(f)}{dw}|_{w=w^0}\)

如果小于0,此时\(w\)增大则\(L(f)\)会减小;如果大于0,此时\(w\)减小则\(L(w)\)会减小。

如果模型有多个参数,则计算损失函数在各个参数方向上的偏导数。

更新模型参数

\(w^1=w^0-lr\frac{dL(f)}{dw}|_{w=w^0}\)

\(w\)的变化量取决于梯度和学习率(Learning Rate)的大小:梯度绝对值或学习率越大,则\(w\)变化量越大。

如果模型有多个参数,则用上一步计算出的偏导数对应更新各参数。

重复第2步和第3步

经过多次参数更新/迭代(iteration),可以使损失函数的值达到局部最小(即局部最优,Local Optimal),但不一定是全局最优。

自适应学习率(Adaptive Learning Rate)

梯度下降过程中,固定学习率并不合理。学习率太大,可能导致loss不减小反而增大;学习率太小,loss会减小得很慢。

基本原则是随着参数迭代更新,学习率应该越来越小,比如\(\eta^{t}=\frac{\eta}{\sqrt{t+1}}\)

更好的方法:每个参数有各自的学习率,比如Adagrad。

Adagrad

Adaptive Gradient Descent,自适应梯度下降。2011年提出,核心是每个参数(parameter)有不同的学习率

定义

每次迭代中,学习率要除以它对应参数的之前梯度的均方根(RMS) 。

\(w^{t+1}=w^t-\frac{\eta}{\sqrt{\sum_{i=0}^t(g^i)^2}}g^t\),其中\(t\)是迭代次数,\(w\)是参数,\(g\)是梯度,\(\eta\)是初始学习率。

随着参数迭代,\(t\)越来越大,\(\sqrt{\sum_{i=0}^t(g^i)^2}\)也越来越大,因此学习率的变化趋势是越来越小。

Adagrad的矛盾(Contradiction)

一般的梯度下降方法\(w^{t+1}=w^t-\eta^tg^t\)中,\(\eta^t\)是常量,梯度越大时,则参数更新的步幅越大,这是由\(g^t\)项决定的。

在Adagrad中,\(\eta\)是常量,梯度\(g^t\)越大时会使得参数更新的步幅越大,但\(\sqrt{\sum_{i=0}^t(g^i)^2}\)会使得参数更新的步幅越小,这是一个矛盾吗?

为什么要除以之前梯度的均方根?

一种直观的解释:增强参数更新步幅变化的惯性

与之前梯度相比如果现在的梯度更大,则现在梯度除以之前梯度会使参数更新的步幅更大;如果现在的梯度更小,则会使步幅更新的步幅更小。

这样就相当于增强了参数更新步幅变化的惯性,即如果参数更新的步幅突然变大或变小,就扩大这个趋势。

同时考虑一次梯度和二次梯度

在Adagrad中,之前梯度的均方根是用来通过一次梯度估计二次梯度(虽然可以直接使用二次梯度,但其很难计算)。

只考虑一个参数

当参数只有一个或只考虑一个参数时,梯度越大,离最优点就越远,参数更新的步幅应该越大。

考虑多个参数

当参数有多个或者考虑多个参数时,上述内容不一定成立。如果参数1的梯度比参数2的梯度大,但如果损失函数关于参数1的曲线比关于参数2的曲线更陡峭(即二次梯度更大),那参数1离最优点的距离可能比参数2更近。

所以当参数有多个或者考虑多个参数时,我们既要考虑一次梯度又要考虑二次梯度。

结论是一次梯度越大、二次梯度越小,离最优点就越远,参数更新的步幅应该越大。

SGD

Stochastic Gradient Descent,随机梯度下降,1847年提出,可以让训练过程更快。

普通梯度下降中需要计算所有样本的Loss,而SGD只计算一个样本的Loss,然后进行梯度下降。

梯度下降的数学理论

建议直接看李宏毅老师的本节视频,从42分27秒开始看,老师讲得很好。

初始化一组参数后,我们找到邻域中另一个使损失函数值最小的一组参数并更新参数(然后不断重复这一步骤)。

在极小的邻域中,可以利用泰勒级数将损失函数简化,然后求其最小值,损失函数简化后,要使其最小即是让其中两个向量的內积最小,由此可以得出新的一组参数的值(具体过程略),这就是梯度下降。

学习率的作用是限制邻域大小,学习率太大可能使邻域太大,导致损失函数展开成泰勒级数时的误差较大。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyppfy.html