1. Weight Decay 权重衰减
等价于L2范数正则化。为模型损失函数添加惩罚项,新的损失函数为:
L
=
l
(
w
,
b
)
+
λ
2
∣
∣
w
∣
∣
2
w
←
w
−
η
∂
L
∂
w
L = l(w,b) + \frac{\lambda}{2}||w||^2\\ w \larr w - \eta \frac{\partial L}{\partial w}\\
L=l(w,b)+2λ∣∣w∣∣2w←w−η∂w∂L
λ \lambda λ一般是一个很小的值,如0.01,更新的权值可以转化为 ( 1 − η λ ) w − η ∂ l ∂ w (1-\eta \lambda)w - \eta \frac{\partial l}{\partial w} (1−ηλ)w−η∂w∂l,即在更新权值前将其乘上一个接小于1的数,使权重的参数元素接近0。
2. Dropout 丢弃法
对某个隐层使用dropout,以概率p丢弃单元(有p的概率 h i h_i hi的输出会被置为0)。有些类似bagging的思想。相当于同时对一群共享参数的网络训练。训练时间更长,鲁棒性更好。
class dropout:
def __init__(self, p):
self.dropout_ratio = p
self.mask = None
# 第一种实现
def forward1(self, x, train_flag=True):
if train_flag:
self.mask = np.random.rand(*x.shape) > self.dropout_ratio # 以p的概率丢弃
return x * self.mask
else:
return x * (1 - self.dropout_ratio) # 测试时乘1-p
# 第二种实现
def forward2(self, x, train_flag=True):
if train_flag:
self.mask = np.random.rand(*x.shape) > self.dropout_ratio # 以p的概率丢弃
return x * self.mask /(1-p) # inverted dropout 训练时除以1-p进行缩放
else:
return x # 预测时不进行操作
def backward(self, dout):
return dout * self.mask
由于dropout添加了随机性,如果不进行处理,训练和测试是的输出期望将不一致。z为random mask,表示神经网络中被置0的项。通过积分边缘化随机性:
y
=
f
(
x
)
=
E
z
(
f
(
x
,
z
)
)
=
∫
p
(
z
)
f
(
x
,
z
)
d
z
y = f(x) = E_z(f(x,z)) = \int p(z)f(x,z)dz
y=f(x)=Ez(f(x,z))=∫p(z)f(x,z)dz
但是这种积分无法计算,因此,为了平均这种随机性,通过采样来逼近这个积分。对z多次采样,然后在测试时进行平均化。
dropout一般用在全连接层或卷积层。卷积层通常将feature map的均值调整为0而不是将所有输出均值调整为0。
3. Batch Normalization 批正规化
调整各层的激活值分布,使其拥有适当的广度,向神经网络中插入对数据进行正规化的层,以进行学习时的mini-batch为单位进行正规化,使数据的均值为0,方差为1,减小数据分布的偏向。
μ B ← 1 m Σ i = 0 m x i σ B ← 1 m Σ i = 0 m ( x i − μ B ) 2 x ^ i ← x i − μ B σ B 2 + ϵ \begin{aligned} \mu _B &\larr \frac{1}{m} \Sigma_{i=0}^m x_i \\ \sigma _B &\larr \frac{1}{m} \Sigma_{i=0}^m (x_i - \mu _B)^2 \\ \hat x_i &\larr \frac{x_i-\mu_B}{\sqrt{\sigma_B^2+\epsilon}} \end{aligned} μBσBx^i←m1Σi=0mxi←m1Σi=0m(xi−μB)2←σB2+ϵxi−μB
其中
μ
B
,
σ
B
2
\mu_B, \sigma_B^2
μB,σB2为mini-batch的m个输入数据的均值和方差。
y
i
←
γ
x
^
i
+
β
y_i \larr \gamma \hat x_i + \beta
yi←γx^i+β
接着对正规化的数据进行缩放和平移变换, γ , β \gamma, \beta γ,β为缩放参数和平移,是学习参数,一开始 γ = 1 , β = 0 \gamma=1, \beta=0 γ=1,β=0,然后通过学习调整到合适的值。
Batch Norm的优点:
- 可以使学习快速进行(增大学习率)
- 不那么依赖初始值
- 抑制过拟合
dropout 和Batch Norm的思想都是在训练期间给网络添加一些随机性,以防止其过拟合数据,在测试时希望抵消随机性,提升模型的泛化能力。
4. Early Stop 提前终止
5. Data Augmentation 数据增强
6. 对于传统机器学习:
(1)从数据入手,获得更多的数据集
(2)降低模型复杂度
(3)正则化
(4)集成学习方法