应对过拟合问题的常用方法:正则化、丢弃法
1、L2范数正则化
在模型原先损失函数基础上添加L2范数惩罚项,从而得到训练所需要最小化的函数。L2范数惩罚项指的是模型权重参数每个元素的平方和与一个超参数的乘积。
ℓ(w1,w2,b)+λ2(w21+w22),(λ>0)
ℓ
(
w
1
,
w
2
,
b
)
+
λ
2
(
w
1
2
+
w
2
2
)
,
(
λ
>
0
)
比如,在小批量随机梯度下降中
w1←w1−η|B|∑i∈Bx(i)1(x(i)1w1+x(i)2w2+b−y(i))−λw1,
w
1
←
w
1
−
η
|
B
|
∑
i
∈
B
x
1
(
i
)
(
x
1
(
i
)
w
1
+
x
2
(
i
)
w
2
+
b
−
y
(
i
)
)
−
λ
w
1
,
w2←w2−η|B|∑i∈Bx(i)2(x(i)1w1+x(i)2w2+b−y(i))−λw2.
w
2
←
w
2
−
η
|
B
|
∑
i
∈
B
x
2
(
i
)
(
x
1
(
i
)
w
1
+
x
2
(
i
)
w
2
+
b
−
y
(
i
)
)
−
λ
w
2
.
L2范数正则化令权重w1和w2的每一步迭代分别添加了−λw1和−λw2。因此,L2范数正则化也称为权重衰减(weight decay)。我们有时也在惩罚项中添加偏差元素的平方和。
L2范数正则化可能对过拟合有效:
假设神经网络中某一个神经元的输入是x1,x2,使用激活函数ϕ并输出ϕ(x1w1+x2w2+b)。假设激活函数ϕ是ReLU、tanh或sigmoid,权重衰减使得w1,w2,b都非常接近0,那么输出也接近0,那么这个神经元的作用比较小,甚至就像是令神经网络少了一个神经元一样。给定训练数据集,过高复杂度的模型容易过拟合,但是令神经网络少了一个神经元等价于降低模型模型复杂度。
2、丢弃法
方法和原理
丢弃法的使用只发生在训练模型时,并非测试模型时。当神经网络中的某一层使用丢弃法时,该层的神经元将有一定概率被丢弃掉。设丢弃概率为p。具体来说,该层任一神经元在应用激活函数后,有p的概率自乘0,有1−p的概率自除以1−p做拉伸。丢弃概率是丢弃法的超参数。
def dropout(X, drop_prob):
assert 0 <= drop_prob <= 1
keep_prob = 1 - drop_prob
# 这种情况下把全部元素都丢弃。
if keep_prob == 0:
return X.zeros_like()
mask = nd.random.uniform(0, 1, X.shape) < keep_prob
return mask * X / keep_prob #自除以1−p
处理:
在每个神经元的输出hi中进一步用dropout(X, drop_prob)
处理,等价于增加一个dropout层,此时input为所有的hi。以drop_prob的概率使得hi=0,等价于使得该神经元不发挥作用,用来降低模型复杂度以应对过拟合。