training
training criteria
1.MSE
对于回归任务,可以使用MSE(mean square error)准则:
J
M
S
E
(
W
,
b
;
o
,
y
)
=
1
2
(
v
L
−
y
)
T
(
v
L
−
y
)
J_{MSE}(W,b;o,y)=\frac{1}{2}(v^L-y)^T(v^L-y)
JMSE(W,b;o,y)=21(vL−y)T(vL−y)
y
y
y表示标注结果,
v
v
v表示预测结果
2.CE
对于分类任务,可以使用CE(cross-entropy)准则:
J
C
E
(
W
,
b
;
o
,
y
)
=
−
∑
i
=
1
C
y
i
l
o
g
v
i
L
J_{CE}(W,b;o,y)=-\sum_{i=1}^Cy_ilogv_i^L
JCE(W,b;o,y)=−i=1∑CyilogviL
3.NLL
对于输出概率只有对应标注的为1,其他的概率都是0,所以CE可以简化为NLL(negative log-likilihood)准则:
J
N
L
L
(
W
,
b
;
o
,
y
)
=
−
l
o
g
v
c
L
J_{NLL}(W,b;o,y)=-logv_c^L
JNLL(W,b;o,y)=−logvcL
其中c表示标注的类别。
bp training
假设使用CE准则,层数为
l
=
1
,
2
,
.
.
.
,
L
l=1,2,...,L
l=1,2,...,L,每一层线性转化以后的输出为
z
t
l
=
W
t
l
∗
v
t
l
−
1
+
b
t
l
z_t^l=W_t^l*v_t^{l-1}+b_t^l
ztl=Wtl∗vtl−1+btl,非线性转化以后的输出为
v
t
l
v_t^l
vtl,误差为
e
t
l
e_t^l
etl.
BP推导比较简单,直接结果如下:
1.对于L层(最后一层)
Δ
W
t
L
J
C
E
(
W
,
b
;
o
,
y
)
=
Δ
z
t
L
J
C
E
(
W
,
b
;
o
,
y
)
∂
z
t
L
∂
W
t
L
=
(
v
t
L
−
y
)
(
v
t
L
−
1
)
T
\Delta _{W_t^L}J_{CE}(W,b;o,y)=\Delta _{z_t^L}J_{CE}(W,b;o,y)\frac{\partial z_t^L}{\partial W_t^L}=(v_t^L-y)(v_t^{L-1})^T
ΔWtLJCE(W,b;o,y)=ΔztLJCE(W,b;o,y)∂WtL∂ztL=(vtL−y)(vtL−1)T
Δ
b
t
L
J
C
E
(
W
,
b
;
o
,
y
)
=
(
v
t
L
−
y
)
\Delta _{b_t^L}J_{CE}(W,b;o,y)=(v_t^L-y)
ΔbtLJCE(W,b;o,y)=(vtL−y)
2.其他层
Δ
W
t
l
J
C
E
(
W
,
b
;
o
,
y
)
=
[
f
′
(
z
t
l
)
∙
e
t
l
]
(
v
t
l
−
1
)
T
\Delta _{W_t^l}J_{CE}(W,b;o,y)=[f'(z_t^l) \bullet e_t^l](v_t^{l-1})^T
ΔWtlJCE(W,b;o,y)=[f′(ztl)∙etl](vtl−1)T
Δ
b
t
l
J
C
E
(
W
,
b
;
o
,
y
)
=
f
′
(
z
t
l
)
∙
e
t
l
\Delta _{b_t^l}J_{CE}(W,b;o,y)=f'(z_t^l) \bullet e_t^l
ΔbtlJCE(W,b;o,y)=f′(ztl)∙etl
其中误差
e
t
l
e_t^l
etl如下:
e
t
L
−
1
=
(
W
t
L
)
T
e
t
L
e_t^{L-1}=(W_t^L)^Te_t^L
etL−1=(WtL)TetL
e
t
l
−
1
=
(
W
t
l
)
T
[
f
′
(
z
t
l
)
∙
e
t
l
]
e_t^{l-1}=(W_t^l)^T[f'(z_t^l) \bullet e_t^l]
etl−1=(Wtl)T[f′(ztl)∙etl]
tricks
data preprocessing
对于训练集
(
o
m
,
y
m
)
,
0
≤
m
<
M
(o^m,y^m) ,0\le m \lt M
(om,ym),0≤m<M,首先根据训练集计算均值和方差:
μ
i
=
1
M
∑
m
=
1
M
o
i
m
\mu_i=\frac{1}{M}\sum_{m=1}^Mo_i^m
μi=M1m=1∑Moim
δ
i
=
1
M
∑
m
=
1
M
(
o
i
m
−
μ
i
)
2
\delta_i=\sqrt{\frac{1}{M}\sum_{m=1}^M(o_i^m-\mu_i)^2}
δi=M1m=1∑M(oim−μi)2
然后训练集和测试集进行归一化:
o
~
i
m
=
o
i
m
−
μ
i
δ
i
\tilde{o}_i^m=\frac{o_i^m-\mu_i}{\delta_i}
o~im=δioim−μi
当特征的各个维度在同样的数值范围值归一化以后,可以进行更好的训练。
initialization
可以使用均值为0、方差为
δ
W
l
+
1
=
1
N
l
\delta_{W^{l+1}=\frac{1}{\sqrt{N_l}}}
δWl+1=Nl1的高斯分布,其中
N
l
N_l
Nl表示连接到这个节点的入边个数。
也可以使用RBM、DBM、autodecoder等高级方法进行模型初始化。
weight decay
为了解决过拟合问题引入正则化
dropout
dropout也是为了解决过拟合问题引入。
batch size
使用梯度下降的训练方法包括BGD/SGD/MBGD三种形式,三者的关系这片博客写的比较清楚。
BGD:更新一次参数使用全部训练集;目标函数是整体风险最小,收敛于全局最优;但是训练集较大的时候存在训练速度慢的问题。
SGD:更新一次参数使用一个训练数据;目标函数是单个样本风险最小(容易引入noise,反而有利于跳出局部最优),收敛于局部最优,当满足一定条件,可以接近全局最优;训练速度快(参数更新快);不容易并行,而且会在最小值附近震荡。
MBGH:更新一次参数使用minibatch的数据;介于BGD和SGD之间,方便并行;开始使用较小的batch size,后面使用较大的batch size
sample randomization
BGD不受影响,SGD和MBGD需要使用,如果训练数据的随机采样做的不好的话(比如都是同一个人的语音),会导致模型训练沿着特定的方向严重走偏。
momentum
如果当前模型参数的更新,不仅使用当前的梯度,还包含里之前梯度的信息(具备了全局的视角),那么收敛速度将会加快。引入了动量技术,梯度表示为:
Δ
W
t
l
=
ρ
Δ
b
t
−
1
l
+
(
1
−
ρ
)
1
M
b
∑
m
=
1
M
b
∇
W
t
l
J
(
W
,
b
;
o
m
,
y
m
)
\Delta W_t^l=\rho \Delta b_{t-1}^l+(1-\rho)\frac{1}{M_b}\sum_{m=1}^{M_b}\nabla_{W_t^l}J(W,b;o^m,y^m)
ΔWtl=ρΔbt−1l+(1−ρ)Mb1m=1∑Mb∇WtlJ(W,b;om,ym)
其中
ρ
\rho
ρ成为动量因子,使用SGD或者MBGD的时候,一般取值0.9-0.99。
learning rate
开始较大,后面减小
reproducibility and restartability
使用同样的random seed保证可以复现
使用check-point,可以中断以后接着上次的结果继续训练
参考文献
《automatic speech recognition a deep learning approach》 chapter 4