基本概念
导数
设函数
y
=
f
(
x
)
y=f(x)
y=f(x)在点
x
0
x_0
x0的某个领域内有定义,当自变量
x
x
x在
x
0
x_0
x0有增量
Δ
x
Δx
Δx,
(
x
+
Δ
x
)
(x+Δx)
(x+Δx)也在该邻域内时,相应的函数取得增量
Δ
y
=
f
(
x
0
+
Δ
x
)
−
f
(
x
0
)
Δy=f(x_0+Δx) - f(x_0)
Δy=f(x0+Δx)−f(x0);当
Δ
x
→
0
\Delta{x}\to0
Δx→0时,
Δ
y
\Delta{y}
Δy与
Δ
x
\Delta{x}
Δx之比存在,则称函数
y
=
f
(
x
)
y=f(x)
y=f(x)在点
x
0
{x}_0
x0处可导,并称这个极限为函数
y
=
f
(
x
)
y=f(x)
y=f(x)在点
x
0
{x}_0
x0处的导数记为
f
′
(
x
0
)
{f}'({x}_0)
f′(x0)。
f
′
(
x
0
)
=
lim
x
0
→
0
Δ
y
Δ
x
=
lim
x
0
→
0
f
(
x
+
Δ
x
−
f
(
x
)
Δ
x
f'({x}_0)=\lim_{x_0\to0}\frac{\Delta{y}}{\Delta{x}}=\lim_{x_0\to0}\frac{f(x+\Delta{x}-f(x)}{\Delta{x}}
f′(x0)=limx0→0ΔxΔy=limx0→0Δxf(x+Δx−f(x)
偏导数
在多元函数下,导数与偏导数本质是一致的,都是当自变量的变化趋近于0时,函数值的变化量与自变量变化量比值的极限。
简单来说,导数,指的是一元函数中,函数
y
=
f
(
x
)
y=f(x)
y=f(x)在某点处沿x轴正方向的变化率;偏导数,指的是多元函数中,函数
y
=
f
(
x
0
,
x
1
,
.
.
.
x
n
)
y=f({x}_0, {x}_1,...{x}_n)
y=f(x0,x1,...xn)在某点处沿着
(
x
0
,
x
1
,
.
.
.
x
n
)
({x}_0, {x}_1,...{x}_n)
(x0,x1,...xn)中某一坐标轴正方向上的变化率。
α
α
x
j
f
(
x
0
,
x
1
,
.
.
.
x
n
)
=
lim
Δ
x
→
0
Δ
y
Δ
x
=
lim
Δ
x
→
0
f
(
x
0
,
.
.
.
,
x
j
+
Δ
x
j
,
.
.
.
,
x
n
)
−
f
(
x
0
,
.
.
.
x
j
,
.
.
.
,
x
n
)
Δ
x
\frac{\alpha}{\alpha{x_j}}{f({x}_0, {x}_1,...{x}_n)} = \lim_{\Delta{x\to0}}\frac{\Delta{y}}{\Delta{x}} = \lim_{\Delta{x\to0}}{\frac{f(x_0,...,{x}_j + \Delta{x_j},...,x_n ) - f(x_0, ...x_j, ..., x_n)}{\Delta{x}}}
αxjαf(x0,x1,...xn)=limΔx→0ΔxΔy=limΔx→0Δxf(x0,...,xj+Δxj,...,xn)−f(x0,...xj,...,xn)
方向导数
导数和偏导数,都是沿着坐标轴正方向讨论函数的变化率。当我们沿着函数在某点处的任意方向上考虑变化率时,便引出了方向导数的定义。
在多元函数中,偏导数针对的是某个坐标轴上自变量发生了变化,方向导数则针对的是某个方向,多个坐标轴上自变量发生了变化。偏导数本质属于方向导数的一种特殊情况。
α
α
l
f
(
x
0
,
x
1
,
.
.
.
x
n
)
=
lim
ρ
→
0
Δ
y
Δ
x
=
lim
ρ
→
0
f
(
x
0
+
Δ
x
0
,
.
.
.
,
x
j
+
Δ
x
j
,
.
.
.
,
x
n
+
Δ
x
n
)
−
f
(
x
0
,
.
.
.
x
j
,
.
.
.
,
x
n
)
ρ
\frac{\alpha}{\alpha{l}}{f({x}_0, {x}_1,...{x}_n)} = \lim_{{\rho\to0}}\frac{\Delta{y}}{\Delta{x}} = \lim_{{\rho\to0}}{\frac{f(x_0+\Delta{x_0},...,{x}_j + \Delta{x_j},...,x_n + \Delta{x_n})- f(x_0, ...x_j, ..., x_n)}{\rho}}
αlαf(x0,x1,...xn)=limρ→0ΔxΔy=limρ→0ρf(x0+Δx0,...,xj+Δxj,...,xn+Δxn)−f(x0,...xj,...,xn)
其中
ρ
=
(
Δ
x
0
2
)
+
.
.
.
+
(
Δ
x
j
2
)
+
.
.
.
+
(
Δ
x
n
2
)
\rho = \sqrt{(\Delta{x_0}^2)+ ... +(\Delta{x_j}^2)+...+(\Delta{x_n}^2)}
ρ=(Δx02)+...+(Δxj2)+...+(Δxn2)
梯度
梯度,本意是一个向量,表示函数在该点处的方向导数沿着该方向取得最大值,即在某点处所有方向导数最大对应的方向,函数在该点处沿着该方向变化最快,变化率最大。
g
r
a
d
f
(
x
0
,
.
.
.
,
x
j
,
.
.
.
x
n
)
=
(
α
f
α
x
0
,
.
.
.
α
f
α
x
j
,
.
.
.
,
α
f
α
x
n
)
gradf(x_0, ..., x_j,... x_n)=(\frac{\alpha{f}}{\alpha{x_0}}, ...\frac{\alpha{f}}{\alpha{x_j}}, ..., \frac{\alpha{f}}{\alpha{x_n}})
gradf(x0,...,xj,...xn)=(αx0αf,...αxjαf,...,αxnαf)
方向导数与梯度的关系
在二元函数下,方向导数可以表示如下:
α
f
α
l
=
α
f
α
x
∗
c
o
s
θ
+
α
f
α
y
∗
s
i
n
θ
\frac{\alpha{f}}{\alpha{l}} = \frac{\alpha{f}}{\alpha{x}}*cos\theta + \frac{\alpha{f}}{\alpha{y}}*sin\theta
αlαf=αxαf∗cosθ+αyαf∗sinθ
其中
θ
\theta
θ表示为方向向量与x轴之间的夹角。我们可以将上式子转换为两个向量的内积,表示如下:
α
f
α
l
=
[
α
f
α
x
,
α
f
α
y
]
∗
[
c
o
s
θ
,
s
i
n
θ
]
\frac{\alpha{f}}{\alpha{l}} = [\frac{\alpha{f}}{\alpha{x}}, \frac{\alpha{f}}{\alpha{y}}] * [cos\theta, sin\theta]
αlαf=[αxαf,αyαf]∗[cosθ,sinθ]
两个向量的内积可以表示为两个向量的模相乘,再乘以它们之间的夹角,表示如下:
α
f
α
l
=
α
f
α
x
2
+
α
f
α
y
2
∗
c
o
s
θ
2
+
s
i
n
θ
2
∗
c
o
s
φ
=
α
f
α
x
2
+
α
f
α
y
2
∗
1
∗
c
o
s
φ
\frac{\alpha{f}}{\alpha{l}} = \sqrt{\frac{\alpha{f}}{\alpha{x}}^2 + \frac{\alpha{f}}{\alpha{y}}^2} *\sqrt{{cos\theta}^2 + {sin\theta}^2} * cos\varphi = \sqrt{\frac{\alpha{f}}{\alpha{x}}^2 + \frac{\alpha{f}}{\alpha{y}}^2} * 1 * cos\varphi
αlαf=αxαf2+αyαf2∗cosθ2+sinθ2∗cosφ=αxαf2+αyαf2∗1∗cosφ
根据向量内积的几何意义,可知
φ
\varphi
φ为两个向量之间的夹角,即梯度与某个方向之间的夹角。当且仅当,该方向与梯度之间的夹角为0时,方向导数取得最大值。也即函数中某点方向导数最大对应的方向,也就是梯度的方向。
如何理解梯度下降法
简单来说,在神经网络中,梯度下降法是一种寻找损失函数最小化的方法。
直观版本
梯度下降法
以最简单的一元凸函数
f
(
x
)
=
x
2
f(x)=x^2
f(x)=x2为例,演示梯度下降法是如何找到函数最小值的。
假设起点
x
0
=
10
x_0=10
x0=10,类比神经网络权重初始化后的初值,如下图所示:
f
(
x
0
)
f(x_0)
f(x0)对应的梯度为:
g
r
a
d
(
f
(
x
0
)
)
=
α
f
α
x
i
=
f
′
(
x
0
)
=
(
2
x
∣
x
0
=
10
)
=
20
grad(f(x_0))=\frac{\alpha{f}}{\alpha{x}}i=f'(x_0)=(2x{|}_{x_0=10})=20
grad(f(x0))=αxαfi=f′(x0)=(2x∣x0=10)=20
对应的
x
x
x轴上的向量,
Δ
f
(
x
)
\Delta{f(x)}
Δf(x)是函数增长最快的方向,则
−
Δ
f
(
x
)
-\Delta{f(x)}
−Δf(x)是函数衰减最快的方向:
按照梯度下降法,移动一段距离,可得下一个位置:
x
1
=
x
0
−
η
Δ
f
(
x
0
)
x_1 = x_0 - \eta{\Delta{f(x_0)}}
x1=x0−ηΔf(x0)
其中,
η
\eta
η为步长,通过其可以控制移动的距离,假设
η
=
0.1
\eta=0.1
η=0.1,则下一个点的位置为:
x
1
=
x
0
−
η
Δ
f
(
x
0
)
=
10
−
0.1
∗
20
=
8
x_1 = x_0 - \eta{\Delta{f(x_0)}} = 10 - 0.1 * 20 = 8
x1=x0−ηΔf(x0)=10−0.1∗20=8
使用梯度下降法不断迭代,可以得到如下更新过程:
不断重复梯度下降过程,可以看到梯度值
Δ
(
f
(
x
)
\Delta(f(x)
Δ(f(x)是不断减少的,最终趋近于0,此时
Δ
f
(
x
)
=
f
′
(
x
)
=
0
\Delta{f(x)} = f'(x)=0
Δf(x)=f′(x)=0,函数取得最小值。
学习步长
在上述的计算过程中,使用学习步长 η \eta η来控制移动距离,现在来观察不同 η \eta η对最终结果的影响。
- η \eta η过小
设
η
\eta
η为0.01,迭代10次,可以看到距离底部还有很大一段距离。
- η \eta η合适
设
η
\eta
η为0.2,迭代10次,可以看到正好抵达底部。
- η \eta η较大
设
η
\eta
η为0.5,迭代10次,可以看到函数值在两个点之间摆荡。
- η \eta η过大
设
η
\eta
η为1.1,迭代10次,此时函数值越过底部,不断上升。
综上,可以在不同学习步长
η
\eta
η下,随着迭代次数增加,函数值的变化规律不同。
数学版本
梯度下降法是一种常用的一阶优化方法,用于求解无约束问题最简单、经典方法之一。对于一个无约束优化问题
m
i
n
f
(
x
)
minf(x)
minf(x),其中
f
(
x
)
f(x)
f(x)是一个连续可微函数,对于一个集合
x
0
,
x
1
,
.
.
.
x
n
{x_0, x_1,...x_n}
x0,x1,...xn,满足:
f
(
x
t
+
1
)
<
f
(
x
t
)
,
t
=
0
,
1
,
.
.
.
n
f(x_{t+1}) < f(x_t), t=0,1,...n
f(xt+1)<f(xt),t=0,1,...n
那么就可以收敛到局部极小值点,如下图所示:
那么
m
i
n
f
(
x
)
minf(x)
minf(x)就变成了如何找到下一个点
x
t
+
1
x_{t+1}
xt+1,并且保证
f
(
x
t
+
1
)
<
f
(
x
t
)
f(x_{t+1}) < f(x_t)
f(xt+1)<f(xt)。对于一元函数,函数值只会随着
x
x
x值变化而变化,因此下一个
x
t
+
1
x_{t+1}
xt+1是上一个
x
t
x_t
xt沿着某个方向走了一小步
Δ
x
\Delta{x}
Δx得到的。
由泰勒展开式:
f
(
x
+
Δ
x
)
≃
f
(
x
)
+
Δ
x
f
′
(
x
)
f(x+\Delta{x})\simeq{f(x)+\Delta{x}f'(x)}
f(x+Δx)≃f(x)+Δxf′(x)
式子坐标是当前的
x
x
x移动一小步
Δ
x
\Delta{x}
Δx得到的,近似等于右边。由于需要保证
f
(
x
t
+
1
)
<
f
(
x
t
)
f(x_{t+1}) < f(x_t)
f(xt+1)<f(xt),即
f
(
x
+
Δ
x
)
<
f
(
x
)
f(x+\Delta{x})<f(x)
f(x+Δx)<f(x),则
Δ
x
f
′
(
x
)
<
0
\Delta{x}f'(x) <0
Δxf′(x)<0.
假设
Δ
x
=
−
α
f
′
(
x
)
,
(
α
>
0
)
\Delta{x} = -\alpha{f'(x)}, (\alpha>0)
Δx=−αf′(x),(α>0),其中
α
\alpha
α是学习步长,从而
Δ
x
f
′
(
x
)
=
−
α
f
′
(
x
)
2
\Delta{x}f'(x)=-\alpha{{f'(x)}^2}
Δxf′(x)=−αf′(x)2。由于任何不为0的数的平方均大于0,因此可以保证
Δ
x
f
′
(
x
)
<
0
\Delta{x}f'(x)<0
Δxf′(x)<0。
从而,设定
f
(
x
+
Δ
x
)
=
f
(
x
−
α
f
′
(
x
)
)
f(x+\Delta{x}) = f(x -\alpha{f'(x)})
f(x+Δx)=f(x−αf′(x))
即可保证
f
(
x
+
Δ
x
)
<
f
(
x
)
f(x+\Delta{x})<f(x)
f(x+Δx)<f(x),也即
x
t
+
1
=
x
t
−
α
f
′
(
x
)
x_{t+1}=x_t-\alpha{f'(x)}
xt+1=xt−αf′(x),移动方向为负梯度方向。
梯度下降法的整体流程如下图所示:
优化函数
随机梯度下降法
随机梯度下降法,每次通过选择单个样本数据,对权重参数进行更新。
优点:
- 训练速度快,避免了批量梯度更新过程中的计算冗余问题;
- 当训练数据量比较大,也能以较快的速度收敛;
缺点:
- 由于每次样本都是随机抽样,导致模型训练完,可能只用到样本中的小部分,使得得到的梯度存在偏差;
- 此外,具有较高的方差,波动较大
批量梯度下降法
批量随机梯度下降法,每次需要遍历全部样本数据,来更新权重参数。
优点:
- 由于遍历了完整数据集,使得结果为全局最小值;
缺点:
- 模型训练速度慢,当数据量较大时,无法全部加载到内存中,且梯度计算复杂度较大;
mini-batch梯度下降法
每次迭代时考虑一小部分样本数据,来对权值参数进行更新。
优点:
- 降低SGD中高方差的问题,使得模型收敛更加稳定;
- 矩阵相乘,能加快计算速度;
缺点:
- 同样存在样本选择的随机性,并不能保证模型有好的收敛性;
指数加权平均法
在介绍后续多个优化函数之前,需要理解指数加权平均法,其本质是一个类似求平均数的方法。指数加权平均法可以用于估计变量的局部均值,使得变量的更新与一段时间内的历史取值有关,其中各观察值分别给予不同的权数,其加权系数随着时间呈指数式递减。
指数加权平均法与平均法相比,不需要保存过去所有的数值,计算量显著减少。
指数加权平均法的公式如下:
v
t
+
1
=
β
v
t
+
(
1
−
β
)
θ
t
+
1
v_{t+1} = \beta{v_t} + (1-\beta)\theta_{t+1}
vt+1=βvt+(1−β)θt+1
其中
v
t
+
1
v_{t+1}
vt+1代表到第
t
+
1
t+1
t+1天的平均值,
θ
t
+
1
\theta_{t+1}
θt+1表示第
t
+
1
t+1
t+1天的温度值,
β
\beta
β是可调节的超参数。下面分别验证指数加权平均法的三个重要属性:
- 局部平均
- 加权系数
- 系数随着时间指数递减
假设
β
=
0.9
\beta=0.9
β=0.9,那么可以得到指数加权平均法求平均值的过程如下:
v
100
=
0.9
v
99
+
0.1
θ
100
;
v_{100} = 0.9v_{99} + 0.1\theta_{100};
v100=0.9v99+0.1θ100;
v
99
=
0.9
v
98
+
0.1
θ
99
;
v_{99} = 0.9v_{98} + 0.1\theta_{99};
v99=0.9v98+0.1θ99;
v
98
=
0.9
v
97
+
0.1
θ
98
;
v_{98} = 0.9v_{97} + 0.1\theta_{98};
v98=0.9v97+0.1θ98;
对上述公式化简得到如下表达式:
v
100
=
0.1
θ
100
+
0.9
v
99
v_{100} = 0.1\theta_{100} + 0.9v_{99}
v100=0.1θ100+0.9v99
=
0.1
θ
100
+
0.9
∗
(
0.1
θ
99
+
0.9
v
98
)
=
0.1
θ
100
+
0.1
∗
0.9
θ
99
+
0.9
2
∗
(
0.1
θ
98
+
0.9
v
97
)
= 0.1\theta_{100} + 0.9*(0.1\theta_{99} + 0.9v_{98}) = 0.1\theta_{100} + 0.1 * 0.9 \theta_{99} + {0.9}^2* (0.1\theta_{98} + 0.9v_{97} )
=0.1θ100+0.9∗(0.1θ99+0.9v98)=0.1θ100+0.1∗0.9θ99+0.92∗(0.1θ98+0.9v97)
=
0.1
θ
100
+
0.1
∗
0.9
θ
99
+
0.1
∗
0.9
2
θ
98
+
0.9
3
v
97
= 0.1\theta_{100} + 0.1 * 0.9 \theta_{99} + 0.1 * {0.9}^2 \theta_{98} + {0.9}^3 v_{97}
=0.1θ100+0.1∗0.9θ99+0.1∗0.92θ98+0.93v97
通过上述表达式,可以看到,
v
100
v_{100}
v100等于每个观察值再乘以一个权值,同时权值随着时间呈指数式递减。还有一点就是指数加权平均法求得的平均数是一个局部平均值,那到底平均了多少个观察值,大致是
1
1
−
β
\frac{1}{1-\beta}
1−β1个,本例中
β
=
0.9
\beta=0.9
β=0.9,则参考了10个观察值。
为了让平均数运算更加准确,需要对指数加权平均进行偏差修正。下面通过一个例子介绍为什么需要进行偏差修公正,假设
β
=
0.98
\beta=0.98
β=0.98,初始化
v
0
=
0
v_0=0
v0=0,
θ
1
=
40
\theta_1=40
θ1=40。那么
v
1
=
β
v
0
+
(
1
−
β
)
θ
t
=
0.98
∗
v
0
+
0.02
θ
t
=
0.02
θ
t
=
8
v_1=\beta{v_0}+(1-\beta)\theta_t=0.98*v_0+0.02\theta_t=0.02\theta_t=8
v1=βv0+(1−β)θt=0.98∗v0+0.02θt=0.02θt=8
所以第一天的估测值不准,
v
2
=
0.98
v
1
+
0.02
θ
2
=
0.02
∗
0.98
∗
θ
1
+
0.02
θ
2
v_2=0.98v_1+0.02\theta_2 = 0.02*0.98*\theta_1 + 0.02\theta_2
v2=0.98v1+0.02θ2=0.02∗0.98∗θ1+0.02θ2,由于
θ
1
\theta_1
θ1和
θ
2
\theta_2
θ2都是整数,因此计算后的
v
2
v_2
v2要远小于
θ
1
\theta_1
θ1和
θ
2
\theta_2
θ2。
针对早期估测值不准的情况,使用
v
t
1
−
β
t
\frac{v_t}{1-\beta^t}
1−βtvt表示当天的值,其中
t
t
t表示天数,因此第二天的估测值为:
v
2
0.0396
\frac{v_2}{0.0396}
0.0396v2
随着
t
t
t值增加,
β
t
\beta_t
βt接近于0,所以当
t
t
t很大时,偏差修正几乎没有作用。
Momentum梯度下降法
动量梯度下降法的基本想法是计算梯度的指数加权平均数,并利用该梯度来更新权重。
对于mini-batch梯度下降法由于采样的随机性,使得每次下降并不都是严格朝最小方向下降,但是总体下降趋势是朝着最小方向的。
动量梯度下降法则是为了减少摆动的幅度,提高学习速度。
动量梯度下降法的表达式如下:
v
d
w
=
β
v
d
w
+
(
1
−
β
)
d
W
v_{dw} = \beta{v_{dw}} + (1-\beta)dW
vdw=βvdw+(1−β)dW
v
d
b
=
β
v
d
b
+
(
1
−
β
)
d
b
v_{db} = \beta{v_{db}} + (1-\beta)db
vdb=βvdb+(1−β)db
W
=
W
−
α
v
d
w
;
b
=
b
−
α
v
d
b
W= W-\alpha{v_{dw}};b = b-\alpha{v_{db}}
W=W−αvdw;b=b−αvdb
使用指数加权平均法求得局部的梯度平均值,代替原来单iteration的梯度值进行参数更新。其借用了物理中动量的概念,把参数优化想象成将球从山上推下来的任务,梯度值类似球的加速度,当前后梯度方向一致时,能加速学习,前后梯度方向不一致时,会抑制波动。
RMSprop
动量优化算法,虽然初步解决了参数优化过程中摆动幅度大的问题,所谓摆动幅度指的是优化后更新之后参数的变化范围,如下图所示,蓝色的为Momentum优化算法所走的路线,绿色为RMSprop优化算法所走的路线。
RMSprop的表达式如下:
S
d
w
=
β
S
d
w
+
(
1
−
β
)
(
d
W
)
2
S_{dw} = \beta{S_{dw}} + (1-\beta)(dW)^2
Sdw=βSdw+(1−β)(dW)2
S
d
b
=
β
S
d
b
+
(
1
−
β
)
(
d
b
)
2
S_{db} = \beta{S_{db}} + (1-\beta)(db)^2
Sdb=βSdb+(1−β)(db)2
W
=
W
−
α
d
W
S
d
w
;
b
=
b
−
α
d
b
S
d
b
W=W-\alpha{\frac{dW}{\sqrt{S_{dw}}}};b=b-\alpha{\frac{db}{\sqrt{S_{db}}}}
W=W−αSdwdW;b=b−αSdbdb
RMSprop梯度下降法首先使用指数加权平均法求得梯度平方的加权平均数,然后使用梯度比上加权平均数的平方根来更新权重参数。
RMSprop算法对梯度计算了微分平方加权平均数。这种做法有利于消除摆动幅度大的方向(当dW和db中有一个值比较大的时候,那么在更新权重或者偏置的时候除以它之前累积的梯度的平方根,更新幅值就会变小),用来修正摆动幅度,使得各个维度的摆动幅度都较小,另一方面使得网络的收敛更快。
Adam
Adam优化算法基本上就是将RMSprop和Momentum结合再一起,具体计算过程如下:
- 计算梯度 d W , d b dW,db dW,db;
- 计算动量的指数加权平均数 v d w = β 1 v d w + ( 1 − β 1 ) d W v_{dw} = \beta_1{v_{dw}} + (1-\beta_1)dW vdw=β1vdw+(1−β1)dW, v d b = β v d b + ( 1 − β ) d b v_{db} = \beta{v_{db}} + (1-\beta)db vdb=βvdb+(1−β)db;
- 使用RMSprop进行更新, S d w = β 2 3 S d w + ( 1 − β 2 ) ( d W ) 2 S_{dw} = \beta_23{S_{dw}} + (1-\beta_2)(dW)^2 Sdw=β23Sdw+(1−β2)(dW)2, S d b = β S d b + ( 1 − β ) ( d b ) 2 S_{db} = \beta{S_{db}} + (1-\beta)(db)^2 Sdb=βSdb+(1−β)(db)2;
- 进行偏差修正, v d W c o r r e c t e d = v d W 1 − β 1 t , v d b c o r r e c t e d = v d b 1 − β 1 t , S d W c o r r e c t e d = S d W 1 − β 2 t , S d b c o r r e c t e d = S d b 1 − β 2 t v_{dW}^{corrected} = \frac{v_{dW}}{1-\beta_1^t},v_{db}^{corrected} = \frac{v_{db}}{1-\beta_1^t},S_{dW}^{corrected}=\frac{S_{dW}}{1-\beta_2^t},S_{db}^{corrected}=\frac{S_{db}}{1-\beta_2^t} vdWcorrected=1−β1tvdW,vdbcorrected=1−β1tvdb,SdWcorrected=1−β2tSdW,Sdbcorrected=1−β2tSdb;
- 进行权值更新, W = W − α v d W c o r r e c t e d S d W c o r r e c t e d + ϵ , b = b − α v d b c o r r e c t e d S d b c o r r e c t e d + ϵ W=W-\alpha{\frac{v_{dW}^{corrected}}{\sqrt{S_{dW}^{corrected}}+\epsilon}},b=b-\alpha{\frac{v_{db}^{corrected}}{\sqrt{S_{db}^{corrected}}+\epsilon}} W=W−αSdWcorrected+ϵvdWcorrected,b=b−αSdbcorrected+ϵvdbcorrected
Adam算法结合了RMSprop和Momentum,是一种极其常用的学习算法,适用于不同神经网络。
参考链接:
https://blog.csdn.net/wo164683812/article/details/90382330
https://www.zhihu.com/question/36301367
https://blog.csdn.net/weixin_44492824/article/details/122270260
https://www.zhihu.com/question/305638940/answer/1639782992
https://www.zhihu.com/question/305638940/answer/606831354
https://zhuanlan.zhihu.com/p/36564434