随机梯度下降

说来惭愧,在过去的几篇个人记录中,过于关注布置的课题和衍生知识,竟然忘记了深度学习最最最基础的随机梯度下降,这是不好的因为每次在看到什么新的名词或者算法的时候都会或多或少提到随机梯度下降,我就需要再回去看一遍,遂补坑.

梯度下降法

记得看到过一个说法,深度学习最关键的是设计各种各样的优化,所以把要最小化或者最大化的函数称为目标函数,当其最小化的时候,也叫做损失函数(loss function),损失函数描述了在对模型进行训练以后,预测值和真实值的差距,但是要求最小值,求导等于0显然不现实,因为不可能每个loss函数都友好到只有平方项,所以我们引入梯度下降法,虽然我不知道为什么来的,但是我要学.
梯度:我们知道曲面上方向导数的最大值的方向就代表了梯度的方向,所以梯度是一个向量,所以对其下降的时候,就是要沿着梯度的反方向进行权重的更新,直到找到数据的最优解.
可以理解为如果想要下山,我们每一步都走在下降最快的步子,显然是最快的,这就是一个贪心的思想(局部最优到整体最优).

批量梯度下降

它的具体思路是在更新每一参数时都使用所有的样本来进行梯度的更新.因而理论上来说一次更新的幅度是比较大的.如果样本不多的情况下,当然是这样收敛的速度会更快.但是很多时候,样本很多,更新一次要很久.
公式:
\(\theta_j=\theta_j+\alpha \sum_{i=1}^{m}(y^{i}-h_{\theta}^{x^{i}})x_{j}^{i}\)

随机梯度下降

随机也就是说我们用样本中的一个例子来近似我所有的样本,来调整\(\theta\),因而随机梯度下降是会带来一定的问题,因为计算得到的并不是准确的一个梯度,在解决最优化问题和凸问题的时候,虽然不是每次迭代得到的损失函数都向着全局最优方向,但是大的整体的方向是向全局最优解的,最终的结果往往是在全局最优解附近.相比于批量梯度,这样的方法更快,更快收敛,虽然不是全局最优,但很多时候是可以接受的.
公式:
\(\theta_{t+1}=\theta_t-\eta\nabla f_i(\theta_i)\)

mini-batch梯度下降

在每次更新时用b个样本,其实批量的梯度下降就是一种折中的方法,他用了一些小样本来近似全部的.
公式:
\(J(\theta_0,\theta_1)=\frac{1}{2m'}\sum_{i=1}^{m'}(h_{\theta}(x^{(i)}-y^{(i)})^2\)
mini-batch的SGD算法中一个关键参数是学习率.在实践中,有必要随着时间的推移逐渐降低学习率—学习率衰减.
因为在最后接近最优解的时候,我们希望步长小一点,使得只进行小幅度摆动.如果降低学习率,目标函数能够进一步降低,有助于算法的收敛,更容易接近最优解.

posted @ 2025-06-14 13:39  Merlin·Lee  阅读(8)  评论(0)    收藏  举报