梯度下降优化算法

摘要:
优点是实现简单,缺点是通常不能保证解决方案是全局最优的。
梯度下降优化算法

梯度下降是常用的优化方式,具体的算法有:

  • 梯度下降法
    • 批梯度下降(Batch Gradient Descent, BGD)
    • 随机梯度下降(Stochastic Gradient Decent, SGD)
    • 小批量梯度下降(Mini-Batch Gradient Decent, MBGD)
  • 梯度下降优化
    • 动量梯度下降(Gradient Descent with Momentum)
    • 均方根支(Root Mean Square Prop, RMSprop)
    • 自适应矩估计(Adaptive Moment Estimation, Adam)

简单介绍上述优化方法

知识储备

梯度下降法

梯度下降法(gradient descent)是求解无约束最优化问题的一种最常用方法,是一种迭代算法,每一步需要求解目标函数的梯度向量。优点是实现简单,缺点是一般情况下不能保证解是全局最优的。

导数

 梯度下降优化算法第1张

 方向导数定义: 如上图, p′ 沿着 l 趋于 p 时,如果函数的增量 f(x+Δx,y+Δy)−f(x,y) 与 pp′ 两点间的距离 ρ=(Δx)2+(Δy)2 的比值的极限存在,则称此极限为 p 沿着 l 方向的导数,记作

(1)∂f∂l=limρ→0f(x+Δx,y+Δy)−f(x,y)ρ

更一般的,对于函数 f(x) , 在 x0 处的导数为

f′(x0)=limx→x0f(x)−f(x0)x−x0=limΔx→0f(x0+Δx)−f(x0)Δx

梯度

函数在某点的梯度的方向与取得最大方向导数的方向一致,而模为方向导数的最大值

定义: 设函数 z=f(x,y) 在平面区域D内,具有一阶连续偏导数,则对于每一点 p(x,y)∈D , 都可定义一个向量 ∂f∂x→i+∂f∂y→j 满足梯度的条件,则这向量称为 z=f(x,y) 在点 p(x,y) 的梯度,记作

gradf(x,y)=∂f∂x→i+∂f∂y→j

牛顿法和拟牛顿法

牛顿法和拟牛顿法也是求解无约束最优化问题的常用方法,优点是收敛速度快。一般用来求解大规模数据的优化问题

海森矩阵(Hessian Matrix)

海森矩阵是一个多变量实值函数二阶偏导数组成的方块矩阵,假设有一实数函数 f(x1,x2,...,xn) ,如果 f 所有的二阶偏导数都存在,那么海森矩阵为对称矩阵, f 的海森矩阵的第 ij 项即为 H(f)ij(x)=DiDjf(x) ,其中 x=(x1,x2,...,xn) 即

 梯度下降优化算法第2张

 更一般的海森矩阵也可表示为

H(x)=[∂2f∂xi∂xj]n×n

正定半正定矩阵

  • 正定矩阵:所有特征值大于0 (>0)
  • 负定矩阵:所有特征值小于0 (<0)
  • 半正定矩阵: 所有特征值为非负(>=0)
  • 半负定矩阵:所有特征值为非正(<=0)
  • 不定矩阵:特征值有正有负

牛顿法

牛顿法是迭代算法,每一步需要求解目标函数的海森矩阵的逆矩阵,计算方法比较复杂,这里不详细叙述,具体可阅读Newton's method in optimization

拟牛顿法

拟牛顿法是通过正定矩阵近似的海森矩阵的逆矩阵来简化牛顿法的计算过程,常用算法有 DFP, BFGS

等高线

在几何上 z=f(x,y) 表示一个曲面,当曲面被平面 z=c 所截,得到的曲线 {z=f(x,y)z=c 在 xoy 面上的投影方程 f(x,y)=c 称为等值线,几何上称为等高线

 梯度下降优化算法第3张

 梯度下降法

批梯度下降(Batch Gradient Descent, BGD)

批梯度下降法在更新参数时使用所有样本来进行更新

J(w,b)=1m∑i=1mL(y(i)^,y(i))+λ2m∑∥w∥F2wj:=wj−α∂J(w,b)∂wjbj:=bj−α∂J(w,b)∂bj

其中 λ2m∑∥w∥F2 是L2正则项, α 是学习速率 learning rate

BGD的梯度下降图

 梯度下降优化算法第4张

 BGD的优缺点

  • 优点:最小化所有训练样本的损失函数得到全局最优
  • 缺点:当样本数目很多时,训练过程很慢

Python伪代码

1
2
3
4

for epoch in range(epochs):
    # 是对每个epoch的所有数据进行计算的
    grad = loss_fn(*args, **kwargs)
    params = params - learning_rate * grad

随机梯度下降(Stochastic Gradient Decent, SGD)

每次通过一个样本来迭代更新

J(w,b)=L(y(i)^,y(i))+λ2∑∥w∥F2wj:=wj−α∂J(w,b)∂wjbj:=bj−α∂J(w,b)∂bj

SGD的梯度下降图

 梯度下降优化算法第5张

 SGD的优缺点

  • 优点:训练速度快
  • 缺点:不易找到全局最优

Python伪代码

1
2
3
4
5

for epoch in range(epochs):
    shuffle(data)
    for example in data:
        grad = loss_fn(*args, **kwarga)
        params = params - learning_rate * grad

小批量梯度下降算法(Mini-Batch Gradient Decent, MBGD)

对随机梯度下降和批梯度下降进行了折衷, 每次用 t(1<t<m) 个样本进行更新

J(w,b)=1k∑i=1kL(y(i)^,y(i))+λ2k∑∥w∥F2wj:=wj−α∂J(w,b)∂wjbj:=bj−α∂J(w,b)∂bj

MBGD的梯度下降图

 梯度下降优化算法第6张

 Python伪代码

1
2
3
4
5

for epoch in range(epochs):
    shuffle(data)
    for batch in next_batch(data, batch_size):
        grad = loss_fn(*args, **kwargs)
        params = params - learning_rate * grad

梯度下降优化

优化的方式一般有两种:

  • 算法
  • 优化方法的选择,比如大数据量下采用牛顿法/拟牛顿法进行优化

指数加权平均

是一种常用的序列数据处理方式

St={Y1 if t=1βSt−1+(1−β)Yt if t>1

Yt 为 t下的实际值, St 为 t 下加权平均后的值, β 为权重

动量梯度下降(Gradient Descent with Momentum)

是计算梯度的指数加权平均数,并利用该值来更新参数值

υdw=βυdw+(1−β)dwυdb=βυdb+(1−β)dbw:=w−αυdwb:=b−αυdb

SGD 在局部沟壑中很容易发生振荡,所以在这种情况下下降速度会很慢,而动量能在一定程度上抑制这种震荡,使得SGD的下降更平稳

如下图为不加Momentum和加了Momentum的区别

 梯度下降优化算法第7张

 未加Momentum的SGD

 梯度下降优化算法第8张

 加了Momentum的SGD

特点:当前后梯度方向一致时,Momentum梯度下降能够加速学习;前后梯度方向不一致时,Momentum梯度下降能够抑制震荡

均方根支(Root Mean Square Prop, RMSProp)

在梯度进行指数加权平均的基础上引入了平方和平方根

Sdw=βSdw+(1−β)dw2Sdb=βSdb+(1−β)db2w:=w−αdwSdw+ϵb:=b−αdwSdb+ϵ

ϵ 一般值很小,主要是用来提高数值稳定性,防止分母过小

特点: 当 dw 或 db 较大时,dw2 和 db2 也会较大,因此 Sdw Sdb 也是较大的,最终使得 dwSdw+ϵ dbSdb+ϵ 较小,这也减少了振荡

自适应矩估计(Adaptive Moment Estimation, Adam)

可以认为是 Momentum 和 RMSProp 的结合

υdw=β1υdw+(1−β1)dw,υdb=β1υdb+(1−β1)dbSdw=β2Sdw+(1−β2)dw2,Sdb=β2Sdb+(1−β2)db2υdwcorrect=υdw1−β1t,υdbcorrect=υdb1−β1tSdwcorrect=Sdw1−β2t,Sdbcorrect=Sdb1−β2tw:=w−αυdwcorrectSdwcorrect+ϵb:=b−αυdbcorrectSdbcorrect+ϵ

β1为第一阶矩,β2 为第二阶矩

各优化算法的比较

 梯度下降优化算法第9张

 梯度下降优化算法第10张

 

免责声明:文章转载自《梯度下降优化算法》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇tar.xz结尾的文件的解压缩方法ES6 Promise 用法讲解下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

PyTorch的自动混合精度(AMP)

https://zhuanlan.zhihu.com/p/165152789 PyTorch 1.6版本今天发布了,带来的最大更新就是自动混合精度。release说明的标题是: Stable release of automatic mixed precision (AMP). New Beta features include a TensorPipe...

MindSpore模型精度调优实战:常用的定位精度调试调优思路

摘要:在模型的开发过程中,精度达不到预期常常让人头疼。为了帮助用户解决模型调试调优的问题,我们为MindSpore量身定做了可视化调试调优组件:MindInsight。 本文分享自华为云社区《技术干货 | 模型优化精度、速度我全都要!MindSpore模型精度调优实战(二)》,原文作者:HWCloudAI 。 引言: 在模型的开发过程中,精度达不到预期常...

权值初始化

设计好神经网络结构以及loss function 后,训练神经网络的步骤如下: 初始化权值参数 选择一个合适的梯度下降算法(例如:Adam,RMSprop等) 重复下面的迭代过程: 输入的正向传播 计算loss function 的值 反向传播,计算loss function 相对于权值参数的梯度值 根据选择的梯度下降算法,使用梯度值更新每个权值参数...

AI框架导学篇--01

AI框架入门 01 作者:elfin 目录 1、数据加载与数据分析 1.1 导入数据 1.2 查看对象的方法、属性 1.3 查看数据集的描述 1.4 查看波士顿数据集的特征名 1.5 查看房间数信息 2、波士顿房价预测 2.1 数据转换与分析 2.2 根据历史报价(报价字典) 2.3 KNN-K近邻估计 2.4 线性回归 2.4.1...

优化算法

1.梯度下降法 1.1梯度 在微积分里面,对多元函数的参数求∂偏导数,把求得的各个参数的偏导数以向量的形式写出来,就是梯度。比如函数f(x,y), 分别对x,y求偏导数,求得的梯度向量就是(∂f/∂x,∂f/∂y)T,简称grad f(x,y)或者▽f(x,y)。 微积分中使用梯度表示函数增长最快的方向;因此,神经网络中使用负梯度来指示目标函数下降最快的方...

梯度下降和EM算法,kmeans的em推导

I. 牛顿迭代法给定一个复杂的非线性函数f(x),希望求它的最小值,我们一般可以这样做,假定它足够光滑,那么它的最小值也就是它的极小值点,满足f′(x0)=0,然后可以转化为求方程f′(x)=0的根了。非线性方程的根我们有个牛顿法,所以 然而,这种做法脱离了几何意义,不能让我们窥探到更多的秘密。我们宁可使用如下的思路:在y=f(x)的x=xn这一点处,我...