redhat9i 发表于 2022-1-22 10:49

优化算法之梯度下降算法

在应用机器学习算法时,我们通常采用梯度下降法来对采用的算法进行训练。其实,常用的梯度下降法还具体包含有三种不同的形式,它们也各自有着不同的优缺点。
1.批量梯度下降法BGD

现在下面以LR算法为例对这三种算法从原理到代码进行讲解
由LR算法可知LR算法的损失函数为


损失函数J(θ)最小值时的θ则为要求的最佳参数。通过梯度下降法求最小值。θ的初始值可以全部为1.0,更新过程为:


其中(j表样本第j个特征(属性),共n个特征,alfa表示步长每次移动量大小可自由指定)
下面是偏导的求导过程:


结果:



代码


我们每一次的参数更新都用到了所有的训练数据(比如有m个,就用到了m个),如果训练数据非常多的话,是非常耗时的。
下面给出批梯度下降的收敛图:


从图中,我们可以得到BGD迭代的次数相对较少。
随机梯度下降法SGD

由于批梯度下降每跟新一个参数的时候,要用到所有的样本数,所以训练速度会随着样本数量的增加而变得非常缓慢。随机梯度下降正是为了解决这个办法而提出的。它是利用每个样本的损失函数对θ求偏导得到对应的梯度,来更新θ:


更新过程如下:


随机梯度下降是通过每个样本来迭代更新一次,对比上面的批量梯度下降,迭代一次需要用到所有训练样本(往往如今真实问题训练数据都是非常巨大),一次迭代不可能最优,如果迭代10次的话就需要遍历训练样本10次。

但是,SGD伴随的一个问题是噪音较BGD要多,使得SGD并不是每次迭代都向着整体最优化方向。

随机梯度下降收敛图如下:


我们可以从图中看出SGD迭代的次数较多,在解空间的搜索过程看起来很盲目。但是大体上是往着最优值方向移动。
min-batch 小批量梯度下降法MBGD

我们从上面两种梯度下降法可以看出,其各自均有优缺点,那么能不能在两种方法的性能之间取得一个折衷呢?既算法的训练过程比较快,而且也要保证最终参数训练的准确率,而这正是小批量梯度下降法(Mini-batch Gradient Descent,简称MBGD)的初衷。


我们假设每次更新参数的时候用到的样本数为10个(不同的任务完全不同,这里举一个例子而已)

更新伪代码如下:


拖了许久的梯度下降算法更新完了,克服懒惰。。。
reference

纯干货 | 机器学习中梯度下降法的分类及对比分析(附源码)
批量梯度下降(BGD)、随机梯度下降(SGD)、小批量随机梯度下降(MSGD)实现过程详解 - 云计算技术频道 - 红黑联盟
详解梯度下降法的三种形式BGD,SGD以及MBGD

DungDaj 发表于 2022-1-22 10:58

觉得吧,reference应该只写一个machine learning by Prof Andrew Ng (

mypro334 发表于 2022-1-22 11:07

写的不错
页: [1]
查看完整版本: 优化算法之梯度下降算法