1、过拟合
过拟合有回归过拟合和分类过拟合。
回归过拟合:
分类过拟合:
过拟合虽然会提高训练集的准确率,但是会导致测试集的误差变大。因此,如何提高神经网络的泛化能力成为影响模型能力的最关键因素。
2、防止过拟合的方式
2.1 增大数据集
数据挖掘领域流行着这样一句话,“有时候拥有更多的数据胜过一个好的模型”。一般来说更多的数据参与训练,训练得到的模型就越好。如果数据太少,而我们构建的神经网络又太复杂的话就比较容易产生过拟合的现象。
2.2 Early stopping(提前停止)
在训练模型的时候,我们往往会设置一个比较大的迭代次数。 Early stopping便是一种提前结束训练的策略用来防止过拟合。
一般的做法是记录到目前为止最好的validation accuracy,当连续10个Epoch没有达到最佳accuracy时,则可以认为accuracy不再提高了。此时便可以停止迭代了(Early Stopping)。
然而在实际操作中,验证集上的错误率变化曲线并不一定是上图所示的平衡曲线,很可能是先升高再降低。因此,提前停止的具体停止标准需要根据实际任务上进行优化。
2.3 Dropout(丢弃法)
当训练一个深层神经网络时,我们可以随机丢弃一部分神经元(同时丢弃其对应的连接边)来避免过拟合,这种方法称为丢弃法(Dropout Method) [Srivastava et al., 2014]。每次选择丢弃的神经元是随机的。最简单的方法是设置一个固定的概率
p
p
p。对每一个神经元都用一个概率
p
p
p来判定要不要保留。对于一个神经层
y
=
f
(
W
x
+
b
)
y = f(Wx + b)
y=f(Wx+b),我们可以引入一个丢弃函数
d
(
⋅
)
d(·)
d(⋅) 使得
y
=
f
(
W
d
(
x
)
+
b
)
y = f(W d(x) + b)
y=f(Wd(x)+b) 。丢弃函数
d
(
⋅
)
d(·)
d(⋅)的定义为:(剩下的明天再写)
2.4
l
1
l_1
l1 和
l
2
l_2
l2 正则化
正则化(Regularization)是一类通过限制模型复杂度,从而避免过拟合,提高泛化能力的方法,包括引入一些约束规则,增加先验、提前停止等。
在传统的机器学习中,提高泛化能力的方法主要是限制模型复杂度,比如采用
l
1
l_1
l1 和
l
2
l_2
l2 正则化等方式。而在训练深层神经网络时,特别是在过度参数(OverParameterized)时,
l
1
l_1
l1 和
l
2
l_2
l2 正则化的效果往往不如浅层机器学习模型中显著。因此训练深度学习模型时,往往还会使用其它的正则化方法,比如数据增强、提前停止、丢弃法、集成法等。
l
1
l_1
l1 正则化:
C
=
C
0
+
λ
n
∑
ω
∣
ω
∣
C=C_0+\frac{\lambda}{n}\sum_\omega\vert\omega\vert
C=C0+nλω∑∣ω∣
l
2
l_2
l2 正则化:
C
=
C
0
+
λ
2
n
∑
ω
ω
2
C=C_0+\frac{\lambda}{2n}\sum_\omega\omega^2
C=C0+2nλω∑ω2
其中,
C
0
C_0
C0 代表原始的代价函数,
n
n
n 代表样本的个数,
λ
\lambda
λ 就是正则项系数,权衡正则项与
C
0
C_0
C0 项的比重。
l
1
l_1
l1 正则化可以达到模型参数稀疏化的效果,
l
2
l_2
l2 正则化可以使得模型的权值衰减,使模型参数值都接近于0。
有关
l
1
l_1
l1 和
l
2
l_2
l2 范数问题请跳到这篇文章。范数
![](https://img-blog.csdnimg.cn/20200303154543967.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3lpbnhpYW9xaW5nMQ==,size_16,color_FFFFFF,t_70#pic_center)
上图为不同范数约束条件下的最优化问题示例,红线表示函数
l
p
=
1
l_p=1
lp=1,
F
F
F 为函数
f
(
θ
)
f(\theta)
f(θ) 的等高线(简单起见,这里用直线表示)。
从图中可以看出,
l
1
l_1
l1 范数的约束通常会使得最优解位于坐标轴上,而从使得最终的参数为稀疏性向量。此外,
l
1
l_1
l1 范数在零点不可导,因此经常下式来近似:
l
1
(
θ
)
=
∑
i
θ
i
2
+
ϵ
l_1(\theta)=\sum_i\sqrt{\theta_i^2+\epsilon}
l1(θ)=i∑θi2+ϵ
其中, ϵ \epsilon ϵ是一个非常小的常数。
参考文献:
《神经网络与深度学习》 邱锡鹏
AI-MOOC