Overfit
过拟合,效果如最右图所示
常见应对方案如下:- 增大数据集入手:
More data
ordata argumentation
- 简化模型参数入手:Constraint model complexity (
shallow
model,regularization
) ordropout
- dropout:
torch.nn.Dropout(0.1)
加一层 dropout 层, 设 dropout_prob = 0.1 - 注意 1) 区别和 tensorflow 中
tf.nn.dropout(keep_prob)
设置的相反; 2) 只在 train 的时候 dropout,测试的时候要 model.eval() 切换评估模式无 dropout
- dropout:
- 减少训练时间入手:
early stopping
(用 validation set 做提前的训练终止),是一个 trick
- 增大数据集入手:
- Regularization / weight decay : 使得在保持很好的 performance 的情况下用尽可能小的 weights
- L1-regularization: Loss + = λ ∑ ∣ θ i ∣ \text{Loss} += \lambda\sum|\theta_i| Loss+=λ∑∣θi∣
- L2-regularization:
Loss
+
=
1
2
λ
∑
θ
i
2
\text{Loss} +=\frac{1}{2}\lambda\sum\theta_i^2
Loss+=21λ∑θi2,最常用,代码具体实现:给优化器
optimizer
设置weight decay
= λ \lambda λ: 如optim.SGD(net.parameters(), lr=learning_rate, weight_decay=0.01)
- 注:如果没有 overfitting 但是设置了
weight decay
可能会导致性能下降,要先判断清楚是否要使用
- B站视频参考资料