解决过拟合的方法
L 2 L_2 L2正则化
权重衰减(weight decay)是最广泛使用的正则化的技术之一, 它通常也被称为
L
2
L_2
L2正则化。
简单来说就是在loss函数中加入一个权重的2-范数约束,这样能够保证权重向量比较小(W较小说明模型简单),更不容易过拟合。
L
(
w
,
b
)
+
λ
2
∥
w
∥
2
L(\mathbf{w}, b) + \frac{\lambda}{2} \|\mathbf{w}\|^2
L(w,b)+2λ∥w∥2
其中
L
(
w
,
b
)
=
1
n
∑
i
=
1
n
1
2
(
w
⊤
x
(
i
)
+
b
−
y
(
i
)
)
2
L(\mathbf{w}, b) = \frac{1}{n}\sum_{i=1}^n \frac{1}{2}\left(\mathbf{w}^\top \mathbf{x}^{(i)} + b - y^{(i)}\right)^2
L(w,b)=n1i=1∑n21(w⊤x(i)+b−y(i))2
权重更新的表达式为:
w
←
(
1
−
η
λ
)
w
−
η
∣
B
∣
∑
i
∈
B
x
(
i
)
(
w
⊤
x
(
i
)
+
b
−
y
(
i
)
)
\mathbf{w} \leftarrow \left(1- \eta\lambda \right) \mathbf{w} - \frac{\eta}{|\mathcal{B}|} \sum_{i \in \mathcal{B}} \mathbf{x}^{(i)} \left(\mathbf{w}^\top \mathbf{x}^{(i)} + b - y^{(i)}\right)
w←(1−ηλ)w−∣B∣ηi∈B∑x(i)(w⊤x(i)+b−y(i))
1 − η λ 1-\eta\lambda 1−ηλ 的值一般取1e-2、1e-3、1e-4
l2_loss = tf.nn.l2_loss(W1) + tf.nn.l2_loss(b1) + tf.nn.l2_loss(W2) + tf.nn.l2_loss(b2) + tf.nn.l2_loss(W3) + tf.nn.l2_loss(b3)
# 带有l2_loss的交叉熵代价函数
loss = tf.compat.v1.losses.softmax_cross_entropy(y,prediction) + 0.0005*l2_loss
dropout
原理:在某层神经元上不采用全连接方式,而只是部分神经元和上一层神经元间有连接,多用在多层感知机上,CNN上用的少。
dropout只能在训练时候用,在推理时候不用dropout
m = nn.Dropout(p=0.2)# 推理时候p=0
input = torch.randn(20, 16)
output = m(input)
本文介绍了两种常见的防止过拟合的技术:权重衰减(L2正则化)和Dropout。权重衰减通过在损失函数中加入权重的2-范数来限制模型复杂度;Dropout则是在训练过程中随机丢弃一部分神经元的连接,以此提高模型泛化能力。

被折叠的 条评论
为什么被折叠?



