一. 数值稳定性
1. 网络表示
我们的网络可以表示为:
h ( l ) = f l ( h ( l − 1 ) ) 因此 o = f L ∘ … ∘ f 1 ( x ) . \mathbf{h}^{(l)} = f_l (\mathbf{h}^{(l-1)}) \text{ 因此 } \mathbf{o} = f_L \circ \ldots \circ f_1(\mathbf{x}). h(l)=fl(h(l−1)) 因此 o=fL∘…∘f1(x).
如果所有隐藏变量和输入都是向量,
我们可以将
o
\mathbf{o}
o关于任何一组参数
W
(
l
)
\mathbf{W}^{(l)}
W(l)的梯度写为下式:
∂ W ( l ) o = ∂ h ( L − 1 ) h ( L ) ⏟ M ( L ) = d e f ⋅ … ⋅ ∂ h ( l ) h ( l + 1 ) ⏟ M ( l + 1 ) = d e f ∂ W ( l ) h ( l ) ⏟ v ( l ) = d e f . \partial_{\mathbf{W}^{(l)}} \mathbf{o} = \underbrace{\partial_{\mathbf{h}^{(L-1)}} \mathbf{h}^{(L)}}_{ \mathbf{M}^{(L)} \stackrel{\mathrm{def}}{=}} \cdot \ldots \cdot \underbrace{\partial_{\mathbf{h}^{(l)}} \mathbf{h}^{(l+1)}}_{ \mathbf{M}^{(l+1)} \stackrel{\mathrm{def}}{=}} \underbrace{\partial_{\mathbf{W}^{(l)}} \mathbf{h}^{(l)}}_{ \mathbf{v}^{(l)} \stackrel{\mathrm{def}}{=}}. ∂W(l)o=M(L)=def ∂h(L−1)h(L)⋅…⋅M(l+1)=def ∂h(l)h(l+1)v(l)=def ∂W(l)h(l).
2. 梯度消失
0.01的N次幂,如果N足够大,结果约等于0;
当sigmoid函数的输入很大或是很小时,它的梯度都会消失。
ReLU激活函数缓解了梯度消失问题
3. 梯度爆炸
1.01的N次幂,如果N足够大,结果可能会溢出
二. 参数初始化
由于可能发生梯度消失或爆炸的问题,需要对初始化参数进行合理的设置。
方式一:默认初始化,使用正态分布
方式二:Xavier初始化
Xavier初始化从均值为零,方差
σ
2
=
2
n
i
n
+
n
o
u
t
\sigma^2 = \frac{2}{n_\mathrm{in} + n_\mathrm{out}}
σ2=nin+nout2
的高斯分布中采样权重。
其他初始化方法
需要用启发式的初始化方法来确保初始梯度既不太大也不太小
三. 环境和分布偏移
现象:训练效果很好,但是实际预测效果极差。
原因:由于训练样本与实际样本的不一致。训练集和测试集并不来自同一个分布
1. 分布偏移
- 协变量偏移(无法适应新的领域,比如照片和卡通图片)自变量太多?
纠正方式:对数几率回归 - 标签偏移(原本A特征引起的问题,变成了B特征校准?)
纠正方式:真实风险中的恒等式进行更正 - 概念偏移(内容未持续更新)
纠正方式:使用新数据更新现有网络
真实风险是从真实分布中抽取的所有数据的总体损失的预期。然而,这个数据总体通常是无法获得的。经验风险是训练数据的平均损失,用于近似真实风险。在实践中,我们进行经验风险最小化。