1. 正则化
- 减小方差的策略
误 差 = 偏 差 + 方 差 + 噪 声 \Large误差=偏差+方差+噪声 误差=偏差+方差+噪声
- 偏差
偏差度量了学习算法的期望预测和真实结果的偏离程度,即刻画了学习算法的本身的拟合能力 - 方差
方差度量了同样大小的训练集的变动所导致的学习性能的变化,即刻画了数据扰动所造成的影响 - 噪声
噪声则表达了在当前任务上任何学习算法所能达到的期望泛化误差的下界
2. 减小方差的策略
c o s t = 1 n ∑ i = 1 n l o s s + r e g u l a r i z a t i o n _ t e r m cost=\frac{1}{n}\sum_{i=1}^nloss + regularization\_term cost=n1i=1∑nloss+regularization_term
2.1 L1正则化
- 正则项: ∑ l = 1 L ∣ ∣ W [ l ] ∣ ∣ m 1 \large\displaystyle\sum_{l=1}^{L}||W^{[\,l \,]}||_{m_1} l=1∑L∣∣W[l]∣∣m1,其中 l l l 是层号
2.2 L2正则化(权值衰减)
- 正则项: ∑ l = 1 L ∣ ∣ W [ l ] ∣ ∣ F 2 \large\displaystyle\sum_{l=1}^L||W^{[\, l\,]}||^2_F l=1∑L∣∣W[l]∣∣F2,其中 l l l 是层号
所以,我们在实际应用中,目标函数就为
o
b
j
=
L
o
s
s
+
λ
2
∑
l
=
1
L
∣
∣
W
[
l
]
∣
∣
F
2
obj = Loss + \frac{\lambda}{2}\sum_{l=1}^L||W^{[\, l\,]}||^2_F
obj=Loss+2λl=1∑L∣∣W[l]∣∣F2
其中,
λ
\lambda
λ 就是超参数,通常
λ
∈
(
0
,
1
)
\lambda \in(0,1)
λ∈(0,1)
-
使用(以随机梯度下降为例):
optim.SGD(params, lr=required, momentum=0, dampening=0, weight_decay=0, nesterov=False)
此处的参数weight_decay就是L2正则化的超参 λ \lambda λ
3. Dropout
随机失活一定概率的中间层神经元,在修改后的网络进行前向传播和误差反向传播,在一个mini-batch执行完后,继续对另一个mini-batch重复此操作。
nn.Dropout(p=0.5, inplace=False)
-
主要参数:
- p: 失活概率,也就是被舍弃的神经元的概率,一般默认0.5,因为可以生成的网络种类最多,增强泛化能力
-
一般Dropout放在Convolution层或Linear层之前,也就是激活函数的后面
一般代码实现是在训练时,权重乘以 1 1 − p \displaystyle\frac{1}{1-p} 1−p1,这样在测试时,不用对网络进行调整。