过拟合(overfitting)
什么是过拟合?
所谓过拟合就是指在验证集和训练集上表现很好,但是在测试集上表现很差,也就是说泛化能力差。一般表现为: 高方差,低偏差
过拟合的原因
- 训练样本选取有误、样本标签错误等
- 样本噪声干扰过大
- 模型过于复杂
- 对于神经网络来说:
- 学习迭代次数太多
如何防止/解决过拟合问题?
- 扩大数据集
- 进行正则化(L1正则或者L2正则等)
- 采用合适的模型(控制模型的复杂度)
- Early stopping(通过迭代次数截断的方法来防止过拟合)
- Dropout(在神经网络中可以使用Dropout)
- 减少特征维度
欠拟合(underfitting)
什么是欠拟合?
欠拟合是指模型在训练集、验证集和测试集上表现都不好
欠拟合的原因是什么
- 模型复杂度低
- 模型训练迭代次数太少
如何解决欠拟合问题?
-
增加迭代次数
-
增加模型复杂程度
-
增加特征
正则化
L1正则化
在原始的损失函数后面加一个L1正则化项,即全部权重
ω
\omega
ω的绝对值的和,在乘以
λ
/
n
\lambda/n
λ/n
C
=
C
0
+
λ
n
∑
i
∣
ω
i
∣
C=C_0+\frac\lambda n\sum_i|\omega_i|
C=C0+nλi∑∣ωi∣
对应梯度
∂
C
∂
ω
=
∂
C
0
∂
ω
+
λ
n
s
g
n
(
ω
)
\frac{\partial C}{\partial\omega}=\frac{\partial C_0}{\partial\omega}+\frac\lambda nsgn(\omega)
∂ω∂C=∂ω∂C0+nλsgn(ω)
其中
s
g
n
(
ω
)
sgn(\omega)
sgn(ω)知识简单地取
ω
\omega
ω各个元素地正负号
s
g
n
(
ω
)
=
{
1
,
ω
>
0
0
,
ω
=
0
−
1
,
ω
<
0
sgn(\omega)= \begin{cases} 1,&\omega>0\\ 0,&\omega=0\\ -1,&\omega<0 \end{cases}
sgn(ω)=⎩
⎨
⎧1,0,−1,ω>0ω=0ω<0
L2正则化
L2正则化通常被称为权重衰减(weight decay),就是在原始的损失函数后面再加上一个L2正则化项,即全部权重
ω
\omega
ω的平方和,在乘以
λ
/
2
n
\lambda/2n
λ/2n。
C
=
C
0
+
λ
2
n
∑
i
ω
i
2
C=C_0+\frac\lambda{2n}\sum_i{\omega^2_i}
C=C0+2nλi∑ωi2
对应梯度
∂
C
∂
ω
=
∂
C
0
∂
ω
+
λ
n
ω
\frac{\partial C}{\partial\omega}=\frac{\partial C_0}{\partial\omega}+\frac\lambda n\omega
∂ω∂C=∂ω∂C0+nλω
如有错误,欢迎指正。谢谢