找回密码
 立即注册
查看: 382|回复: 2

优化算法之梯度下降算法

[复制链接]
发表于 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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
发表于 2022-1-22 10:58 | 显示全部楼层
觉得吧,reference应该只写一个machine learning by Prof Andrew Ng (
发表于 2022-1-22 11:07 | 显示全部楼层
写的不错
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-9-22 21:31 , Processed in 0.066563 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表