深度学习优化器+公式推导

本人学习记录,侵删,转载请署名

基础优化

w    =    w    +    Δ    w w\,\,=\,\,w\,\,+\,\,\varDelta \,\,w w=w+Δw

花书第8章Optimization for Training Deep Models中对机器学习中的优化器有如下定义:

finding the parameters θ \theta θ of a neural network that significantly reduce a cost function J ( θ ) J(\theta) J(θ) ,

which typically includes a performance measure evaluated on the entire training set as well as additional regularization terms

1. GD — 梯度下降

GD

1.1 BGD — 批量梯度下降

BGD

BGD(Batch Gradient Descent) 在求解梯度时一次性的将整个数据集进行迭代,从而计算出平均的梯度用于参数的更新

w i + 1 = w − η 1 m ∑ j = 0 m ∂ C ∂ w j w_{i+1}=w-\eta \frac{1}{m}\sum_{j=0}^m{\frac{\partial C}{\partial w}_j} wi+1=wηm1j=0mwCj

m m m 为数据量数, C C C 为损失函数

优势 — 每次迭代均会往最优化的方向跑,且由于考虑到整个数据集,下降时不会出现震荡
劣势 — 每次优化需遍历整个数据集,时间空间消耗巨大, 血亏

代码

1.2 SGD — 随机梯度下降

SGD(Stochastic Gradient Descent)— 在每次求解梯度时从数据集中随机的选取一个数据点进行梯度计算,从而更新参数

Δ w = − η J ′ ( w ) 或 w i + 1 = w − η ∂ C ∂ w \Delta w=-\eta J^{\prime}(w) 或 w_{i+1}=w-\eta \frac{\partial C}{\partial w} Δw=ηJ(w)wi+1=wηwC
η \eta η 指学习率, J ′ J^{\prime} J 指损失关于参数的梯度 ( ∇ w J ( w ) \nabla_{w} J(w) wJ(w) 也有这种形式) C C C 为损失函数

其中每次用于更新的数据量为1

优势 — 优化的速度很快

劣势 — 数据中会存在噪音,使得优化朝着并不是最优的方向而迭代. 且还可能使得训练的准确率降低. 但总体还是朝着优化的方向前进的

在这里插入图片描述

代码

1.3 MBGD — 小批量梯度下降

在这里插入图片描述

w = w − η ⋅ ∇ w J ( w ; x ( i : i + n ) ; y ( i : i + n ) ) w=w-\eta \cdot \nabla _wJ\left( w;x^{(i:i+n)};y^{(i:i+n)} \right) w=wηwJ(w;x(i:i+n);y(i:i+n))

MBGD(Mini-Batch Gradient Descent)将BGD和SGD求一个折中的办法,每次从数据集中选取一小部分的数据进行计算梯度

优势 — 加快梯度下降的迭代速度, 降低数据集中单一噪音数据点对优化的影响

劣势 — 对于鞍点, SGD会在鞍点附近停止更新, 而MSGD会在鞍点周围来回震荡

在这里插入图片描述

代码

2. Momentum

在这里插入图片描述

  1. 加速训练过程
  2. 解决 SGD 在 ravines 的情况下容易被困住, 就像一个深谷, SGD可能会在两侧左右横跳而达不到低谷

在这里插入图片描述

在这里插入图片描述

2.1 Simple momentum update

回顾一下普通的SGD
θ = θ − η ∇ θ J ( θ ) \theta=\theta-\eta \nabla_{\theta} J(\theta) θ=θηθJ(θ)

加了动量后的SGD PLUS!!!
v i = γ v i − 1 + η ∇ w J ( w ) w = w − v i \begin{array}{l} v_{i}=\gamma v_{i-1}+\eta \nabla_{w} J(w) \\ w=w-v_{i} \end{array} vi=γvi1+ηwJ(w)w=wvi
这里 v v v 初始为0, γ \gamma γ 为其中一个超参, 一般设定为 0.9 0.9 0.9 (参照上动态图)

优势 — 减少震荡, 跳出 ravines

劣势 — 一定程度上还是比较随机, 只是沿着梯度改变的方向前进

2.2 Nesterov momentum update (Nesterov Accelerated Gradient) (NAG)

v i = γ v i − 1 + η ∇ w J ( w − γ v i − 1 ) w = w − v i \begin{array}{l} v_{i}=\gamma v_{i-1}+\eta \nabla_{w} J(w - \gamma v_{i-1}) \\ w=w-v_{i} \end{array} vi=γvi1+ηwJ(wγvi1)w=wvi

在这里插入图片描述

蓝线 是 Momentum 的更新过程,在更新后的累计梯度后有一个明显的大跳跃

棕色线 是 NAG 的更新过程, 先是一段大跳跃(预测向量),而后的 红线 是一段修正向量

在这里插入图片描述

红线是momentum , 蓝线是NAG

个人觉得这可以在更新梯度时遇到"上坡"前放缓脚步,别直接冲出去了XD

优势 — 更新速度可顺应梯度的变化而改变

劣势 — "学习率"还是一个固定值,

3. Adaptive learning rate optimization algorithm

从训练集中采包含 m m m 个样本 { x ( 1 ) , … , x ( m ) } \left\{x^{(1)}, \ldots, x^{(m)}\right\} { x(1),,x(m)} 的小批量,对应目标为 y ( i ) y^{(i)} y(i)

计算梯度
g ← 1 m ∇ θ ∑ i L ( f ( x ( i ) ; θ ) , y ( i ) ) \boldsymbol{g} \leftarrow \frac{1}{m} \nabla_{\boldsymbol{\theta}} \sum_{i} L\left(f\left(\boldsymbol{x}^{(i)} ; \boldsymbol{\theta}\right), \boldsymbol{y}^{(i)}\right) gm1θiL(f(x(i);θ),y(i))

3.1 AdaGrad (Adaptive Subgradient)

在这里插入图片描述

r i = r i − 1 + g i 2 Δ w = η ϵ + r i g i w = w − Δ w \begin{aligned} r_{i} &=r_{i-1}+g_{i}^{2} \\ \Delta w &=\frac{\eta}{\epsilon+\sqrt{r_{i}}} g_{i} \\ w &=w-\Delta w \end{aligned} riΔww=ri1+gi2=ϵ+ri ηgi=wΔw

其中 ϵ \epsilon ϵ 是一个极小的正数,用来防止除以0, g i g_{i} gi 指在 i 处的梯度, g i 2 = g i ⊙ g i g_{i}^{2}=g_{i} \odot g_{i} gi2=gigi

⊙ \odot 指矩阵的 Hadamard product (哈达玛积), 即 [ a 11 b 11 a 12 b 12 ⋯ a 1 n b 1 n a 21 b 21 a 22 b 22 ⋯ a 2 n b 2 n ⋮ ⋮ ⋮ a m 1 b m 1 a m 2 b m 2 ⋯ a m n b m n ] \left[\begin{array}{cccc} a_{11} b_{11} & a_{12} b_{12} & \cdots & a_{1 n} b_{1 n} \\ a_{21} b_{21} & a_{22} b_{22} & \cdots & a_{2 n} b_{2 n} \\ \vdots & \vdots & & \vdots \\ a_{m 1} b_{m 1} & a_{m 2} b_{m 2} & \cdots & a_{m n} b_{m n} \end{array}\right] a11b11a21b21am1bm1a12b12a22b22am2bm2a1nb1na2nb2namnbmn

公式推导:
r i r_{i} ri 展开可得: 注意,i 从1开始
r i = r i − 1 + g i 2 = r i − 2 + g i − 1 2 + g i 2 = r 0 + g 1 2 + g 2 2 + ⋯ + g i 2 = r 0 + ∑ j = 1 i g j 2 \begin{aligned} r_{i} &=r_{i-1}+g_{i}^{2} \\ &=r_{i-2}+g_{i-1}^{2}+g_{i}^{2} \\ &=r_{0}+g_{1}^{2}+g_{2}^{2}+\cdots+g_{i}^{2} \\ &=r_{0}+\sum_{j=1}^{i} g_{j}^{2} \end{aligned} ri=ri1+gi2=ri2+gi12+gi2=r0+g12+g22++gi2=r0+j=1igj2

一般情况下 r 0 = 0 r_{0} = 0 r0=0 , 此时

Δ w = − η ϵ + r 1 g 1 = − η ϵ + g 1 g 1 \begin{aligned} \Delta w &=-\frac{\eta}{\epsilon+\sqrt{r_{1}}} g_{1} \\ &=-\frac{\eta}{\epsilon+g_{1}} g_{1} \end{aligned} Δw=ϵ+r1 ηg1=ϵ+g1ηg1

但本着分母不能为0的原则( g i g_{i} gi 不确定), 令 r 0 = ϵ r_{0} = \epsilon r0=ϵ, 此时就可以把位于分母处的 ϵ \epsilon ϵ这一保险去除了, 递推公式也变成了:

r i = r 0 + ∑ j = 1 i g j 2 = ϵ + ∑ j = 1 i g j 2 > 0 \begin{aligned} r_{i} &=r_{0}+\sum_{j=1}^{i} g_{j}^{2} \\ &=\epsilon+\sum_{j=1}^{i} g_{j}^{2}>0 \end{aligned} ri=r0+j=1igj2=ϵ+j=1ig

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值