目录
- 摘要
- Abstract
- 1. 与纯优化的区别
- 1.1 经验风险最小化
- 1.2 代理损失函数
- 1.3 批量算法和小批量算法
- 2. 神经网络中优化的挑战
- 2.1 病态
- 2.2 局部极小值
- 2.3 高原、鞍点和其他平坦区域
- 2.4 悬崖和梯度爆炸
- 2.5 长期依赖
- 2.6 非精确梯度
- 2.7 局部和全局结构间的弱对应
- 3. 基本算法
- 3.1 随机梯度下降(小批量算法)
- 3.2 动量
- 3.3 Nesterov动量
- 4. 参数初始化
- 参考
- 总结
摘要
本周,我了解了神经网络中优化的挑战,基本优化算法和参数初始化策略。
Abstract
This week, I learned about the challenges of optimization in neural networks, basic optimization algorithms, and parameter initialization strategies.
1. 与纯优化的区别
在大多数机器学习问题中,我们关注的某些性能度量 P P P,其定义在测试集上可能是不可解的,因此我们只能间接优化 P P P,希望通过降低代价函数 J ( θ ) J(\theta) J(θ)来提高 P P P。这一点与纯优化不同,纯优化直接最小化目标 J J J本身。训练深度模型的优化算法通常也会包括一些针对机器学习目标函数的特定结构进行的特化。
1.1 经验风险最小化
机器学习算法的目标是降低
J
(
θ
)
=
E
(
x
,
y
)
∼
p
d
a
t
a
L
(
f
(
x
;
θ
)
,
y
)
\displaystyle \Large J(\theta)=E_{(x,y)\sim p_{data}}L(f(x;\theta),y)
J(θ)=E(x,y)∼pdataL(f(x;θ),y)(
p
d
a
t
a
p_{data}
pdata是真实分布)这个式子表示的期望泛化误差。但是由于不知道数据的真实分布,只知道训练集中的样本,因此将机器学习问题转化为一个优化问题的最简单方法是最小化训练集上的期望损失,即把上面式子中的真实分布
p
d
a
t
a
p_{data}
pdata替换为训练集上的经验分布
p
^
d
a
t
a
\hat{p}_{data}
p^data。
经验风险最小化的公式为
E
(
x
,
y
)
∼
p
^
d
a
t
a
[
L
(
f
(
x
;
θ
)
,
y
)
]
=
1
m
∑
i
=
1
m
L
(
f
(
x
(
i
)
;
θ
)
,
y
(
i
)
)
.
\displaystyle \Large E_{(x,y)\sim\hat{p}_{data}}[L(f(x;\theta),y)]=\frac{1}{m}\sum_{i=1}^mL(f(x^{(i)};\theta),y^{(i)}).
E(x,y)∼p^data[L(f(x;θ),y)]=m1i=1∑mL(f(x(i);θ),y(i)).
在一系列不同理论构造的条件下,最优化经验风险也能使真实风险的期望下降。然而经验风险最小化很容易导致过拟合,并且在很多情况下经验风险最小化并非真的可行。最有效的现代优化算法是基于梯度下降的,但是很多有用的损失函数如0-1损失没有有效的导数,因此在深度学习上很少使用经验风险最小化。
1.2 代理损失函数
有时,损失函数并不能被高效地优化,比如对于线性分类器来说,精确地最小化0-1损失通常是不可解的。在这种情况下,通常会优化代理损失函数,代理损失函数作为原目标的代理,还具备一些优点。比如正确类别的负对数似然通常替代0-1损失函数,负对数似然允许模型估计给定样本类别的条件概率,如果该模型效果好,那么它能够输出期望最小分类误差所对应的类别。
在某些情况下,代理损失函数比原函数学到的更多。比如,使用对数似然替代函数时,在训练集上的0-1损失达到0之后,测试集上的0-1损失还能持续下降很长一段时间。这是因为即使0-1损失期望为0时,还能拉开不同类别的距离以改进分类器的泛化能力,获得一个更强壮的,更值得信赖的分类器。相较于简单地最小化训练集上的平均0-1损失,它能够从训练数据中抽取更多的信息。
1.3 批量算法和小批量算法
机器学习算法的目标函数通常可以分解为训练样本上的求和。机器学习中的优化算法在计算参数的每一次更新时通常仅使用整个代价函数中一部分项来估计代价函数的期望值。
比如最大似然估计问题可以在对数空间中分解成各个样本的总和:
θ
M
L
=
arg max
θ
∑
i
=
1
m
l
o
g
p
m
o
d
e
l
(
x
(
i
)
,
y
(
i
)
;
θ
)
.
\displaystyle\Large \theta_{ML}=\argmax_{\theta}\sum_{i=1}^mlogp_{model}(x^{(i)},y^{(i)};\theta).
θML=θargmaxi=1∑mlogpmodel(x(i),y(i);θ).
最大化这个总和等于最大化训练集在经验分布上的期望:
J
(
θ
)
=
E
(
x
,
y
)
∼
p
^
d
a
t
a
l
o
g
p
m
o
d
e
l
(
x
,
y
;
θ
)
.
\Large J(\theta)=E_{(x,y)\sim \hat{p}_{data}}logp_{model}(x,y;\theta).
J(θ)=E(x,y)∼p^datalogpmodel(x,y;θ).
优化算法用到的目标函数
J
J
J中的大多数属性也是训练集上的期望,比如梯度:
▽
θ
J
(
θ
)
=
E
(
x
,
y
)
∼
p
^
d
a
t
a
▽
θ
l
o
g
p
m
o
d
e
l
(
x
,
y
;
θ
)
.
\Large \triangledown_{\theta}J(\theta)=E_{(x,y)\sim\hat{p}_{data}}\triangledown_{\theta}logp_{model}(x,y;\theta).
▽θJ(θ)=E(x,y)∼p^data▽θlogpmodel(x,y;θ).
精确计算这个期望的代价很大,因为需要在整个数据集上的每个样本上评估模型。在实践中,可以从数据集中随机采样少量的样本,然后计算这些样本上的平均值。
n
n
n个样本均值的标准差为
σ
n
\displaystyle\frac{\sigma}{\sqrt{n}}
nσ,其中
σ
\sigma
σ是样本值真实的标准差。分母
n
\sqrt{n}
n表明使用更多的样本来估计梯度的方法的回报是低于线性的。如果能够快速地计算出梯度的估计值,而不是缓慢地计算准确值,那么大多数优化算法会收敛地更快。
在最坏的情况下,训练集中所有的
m
m
m个样本都是彼此相同的拷贝。基于采样的梯度估计可以使用单个样本计算出正确的梯度,而比原来的做法少花了
m
m
m倍的时间。在实践中可以发现大量样本都对梯度做出了非常相似的贡献。
使用整个训练集的优化算法被称为批量梯度算法;每次只使用单个样本的算法称为随机算法或者在线算法;大多数用于深度学习的算法使用一个以上又不是全部的训练样本,这些算法被称为小批量算法或者小批量随机算法。
小批量算法的典型示例是小批量随机梯度下降。只要没有重复使用样本,小批量梯度下降算法将遵循着真实泛化误差的梯度。很多小批量梯度下降方法的实现都会打乱数据顺序一次,然后多次遍历数据来更新参数。
2. 神经网络中优化的挑战
优化通常是一个极其困难的任务。传统的机器学习会小心设计目标函数和约束,以确保优化问题是凸的,从而避免一般优化问题的复杂度。在训练神经网络时,我们肯定会遇到一般的非凸情况。即使是凸优化,也并非没有问题。
2.1 病态
病态问题一般认为存在神经网络的训练过程中,具体体现在随机梯度下降会卡在某些情况,此时即使很小的更新步长也会增加代价函数。以代价函数的二级泰勒级数展开式来预测梯度下降中的
−
ϵ
g
-\epsilon g
−ϵg对代价函数产生的变化,代价函数会增加
1
2
ϵ
2
g
T
H
g
−
ϵ
g
T
g
\displaystyle\frac{1}{2}\epsilon^2g^THg-\epsilon g^Tg
21ϵ2gTHg−ϵgTg这么多值。当
1
2
ϵ
2
g
T
H
g
\displaystyle \frac{1}{2}\epsilon^2g^THg
21ϵ2gTHg超过
ϵ
g
T
g
\epsilon g^Tg
ϵgTg时,梯度的病态会成为问题。
在很多情况中,梯度范数
g
T
g
g^Tg
g