Adam能和L2正则一起使用?
不能。
L2正则 在SGD中和weight decay是等价的,但是在Adam中就不等价了。
因为在Adam中,每个参数的梯度的计算和历史梯度相关,不是简单乘上学习率
参考:https://zhuanlan.zhihu.com/p/63982470
Adam能解决梯度爆炸?
不能。
理论上,Adam是不会发生梯度爆炸的问题,因为梯度更新式:
m
t
=
m
t
−
1
⋅
β
1
+
g
t
⋅
(
1
−
β
1
)
v
t
=
v
t
−
1
⋅
β
2
+
g
t
2
⋅
(
1
−
β
2
)
m
t
^
=
m
t
/
(
1
−
b
e
t
a
1
t
)
v
t
^
=
m
t
/
(
1
−
b
e
t
a
2
t
)
g
t
^
=
l
r
⋅
m
t
^
v
t
^
\begin{aligned} m_t &= m_{t-1}\cdot \beta_1 + g_t \cdot (1 - \beta_1)\\ v_t &= v_{t-1}\cdot \beta_2 + g_t^2 \cdot (1 - \beta_2)\\ \hat{m_t} &= m_t / (1-beta_1^t)\\ \hat{v_t} &= m_t / (1-beta_2^t)\\ \hat{g_t} &= lr \cdot \frac{\hat{m_t}}{\sqrt{\hat{v_t}}} \end{aligned}
mtvtmt^vt^gt^=mt−1⋅β1+gt⋅(1−β1)=vt−1⋅β2+gt2⋅(1−β2)=mt/(1−beta1t)=mt/(1−beta2t)=lr⋅vt^mt^
理想情况下,
g
t
^
=
l
r
⋅
m
t
^
v
t
^
≈
l
r
⋅
E
(
g
)
E
(
g
2
)
\hat{g_t} = lr \cdot \frac{\hat{m_t}}{\sqrt{\hat{v_t}}} \approx lr \cdot \frac{\mathbb{E}(g)} { \sqrt{\mathbb{E}(g^2)}}
gt^=lr⋅vt^mt^≈lr⋅E(g2)E(g) ,而其中
∣
E
(
g
)
E
(
g
2
)
∣
≤
1
| \frac{\mathbb{E}(g)} { \sqrt{\mathbb{E}(g^2)}} |\le1
∣E(g2)E(g)∣≤1,得到
g
t
^
≤
l
r
\hat{g_t} \le lr
gt^≤lr,即每次更新梯度的大小不会超过学习率,所以不会出现梯度爆炸的问题。
实际情况下,使用滑动平均且去偏之后,
g
t
^
=
l
r
⋅
m
t
^
v
t
^
\hat{g_t} = lr \cdot \frac{\hat{m_t}}{\sqrt{\hat{v_t}}}
gt^=lr⋅vt^mt^仍然是估计。
通常,
b
e
t
a
1
=
0.9
beta_1=0.9
beta1=0.9 和
b
e
t
a
2
=
0.999
beta_2=0.999
beta2=0.999,这样在滑动平均后,分子
m
t
^
\hat{m_t}
mt^ 会更偏向于当前梯度,分母
v
t
^
\hat{v_t}
vt^ 相对偏向于历史梯度,导致在梯度
g
t
g_t
gt爆炸后,滑动平均的分子
m
t
^
\hat{m_t}
mt^ 远大于分母
v
t
^
\hat{v_t}
vt^,导致最终计算的更新步长
g
t
^
\hat{g_t}
gt^也偏大,远远超出
l
r
lr
lr。所以,实际情况下Adam无法避免梯度爆炸问题。
Adam不需要学习率衰减?
需要。
在神经网络训练后期,梯度大小变化不大,经过滑动平均后,
m
t
^
v
t
^
\frac{\hat{m_t}}{\sqrt{\hat{v_t}}}
vt^mt^ 在这种情况下是接近 1 的,更新步长
g
t
^
\hat{g_t}
gt^保持在初始学习率
l
r
lr
lr。
如果初始学习率
l
r
lr
lr较大,则在网络训练后期,梯度保持在初始学习率
l
r
lr
lr,导致训练难以进一步收敛到极小值点。
为了在初期快速收敛,而后期稳定进入某个极小值,在设定较大初始学习率后,需要进行学习率衰减。
番外:mini batch
- 通常batch size是2的幂次,由于GPU并行度主要是2的幂次,而且GPU本身是SIMT架构,为了充分利用GPU资源,防止出现闲置。
- SGD 是求解 ∇ E ( log P ( x , y ∣ θ ) ) \nabla \mathbb{E}(\log \mathbb{P}(x, y|\theta)) ∇E(logP(x,y∣θ)),也就是 E ( ∇ log P ( x , y ∣ θ ) ) \mathbb{E}(\nabla \log \mathbb{P}(x, y|\theta)) E(∇logP(x,y∣θ))。所以,本质上也是求梯度的期望。
- 直接对从数据源对数据进行抽样后,再计算的mini batch梯度是 标准梯度(最小化泛化误差的梯度)的无偏估计,比如在线学习是无偏的,样本使用一次即丢弃;而对于从训练集中进行独立采样,在第一个epoch时,mini batch的梯度都是无偏估计,但在后续再从训练集中进行采样计算,则变成了有偏估计。
参考:http://www.huaxiaozhuan.com/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/chapters/4_optimization.html