在衡量建立模型的好坏时,我们通常使用误差函数来检测,并进行调参,以找到最好的拟合函数,使得达到误差最小化。
但通常会出现这样的情况:模型在训练集上拟合的很好,而在测试集上拟合的效果较差,误差较大(过拟合)。如图:我们应该让模型拟合停在一个合适的点(Testing error最低的地方)。
那么应该怎么知道Tesing set上的误差呢,我们可以使用训练集中的数据进行交叉验证(在训练集里采样验证集)。
还有一种方法是正则化:
L2正则化
假设原来模型用误差函数做为损失函数
l
o
s
s
loss
loss:
L
(
θ
)
,
θ
L(\theta),\theta
L(θ),θ在这里代表了模型中的参数。
正则化需要将损失函数稍作修改:
L
′
(
θ
)
=
L
(
θ
)
+
λ
1
2
∥
θ
∥
2
,
其
中
{
w
1
,
w
2
.
.
.
}
表
示
参
数
,
∥
θ
∥
2
=
(
w
1
)
2
+
(
w
2
)
2
+
…
表
示
参
数
的
平
方
和
,
1
/
2
是
希
望
在
1
求
导
时
约
掉
平
方
。
\mathrm{L}^{\prime}(\theta)=L(\theta)+\lambda \frac{1}{2}\|\theta\|_{2},其中\{w_1,w_2...\}表示参数,\|\theta\|_{2}=\left(w_{1}\right)^{2}+\left(w_{2}\right)^{2}+\ldots表示参数的平方和,1/2是希望在1求导时约掉平方。
L′(θ)=L(θ)+λ21∥θ∥2,其中{w1,w2...}表示参数,∥θ∥2=(w1)2+(w2)2+…表示参数的平方和,1/2是希望在1求导时约掉平方。
L
(
θ
)
L(\theta)
L(θ)考虑的是将误差或交叉熵最小化,
∥
θ
∥
2
\|\theta\|_{2}
∥θ∥2表示惩罚项,希望L2-范数的值越小越好,即描述网络的复杂度。
求梯度:
∂
L
′
∂
w
=
∂
L
∂
w
+
λ
w
\frac{\partial \mathrm{L}^{\prime}}{\partial w}=\frac{\partial \mathrm{L}}{\partial w}+\lambda w
∂w∂L′=∂w∂L+λw
更新参数:
w
t
+
1
←
w
t
−
η
∂
L
′
∂
w
=
w
t
−
η
(
∂
L
∂
w
+
λ
w
t
)
=
(
1
−
η
λ
)
w
t
−
η
∂
L
∂
w
w^{t+1} \leftarrow w^{t}-\eta \frac{\partial L^{\prime}}{\partial w} =w^{t}-\eta\left(\frac{\partial L}{\partial w}+\lambda w^{t}\right)\\=(1-\eta \lambda) w^{t}-\eta \frac{\partial \mathrm{L}}{\partial w}
wt+1←wt−η∂w∂L′=wt−η(∂w∂L+λwt)=(1−ηλ)wt−η∂w∂L
和原来的参数更新比较
w
t
w^t
wt的系数多了
(
1
−
η
λ
)
(1-\eta \lambda)
(1−ηλ),随着参数的更新,这一项会越来越接近零,后面的一项
η
∂
L
∂
w
\eta \frac{\partial \mathrm{L}}{\partial w}
η∂w∂L会和它取得平衡,当取得平衡时,学习就停止了。
L1正则化
和L2正则化不同的就是
θ
\theta
θ的不同。
L
′
(
θ
)
=
L
(
θ
)
+
λ
1
2
∥
θ
∥
1
,
其
中
:
∥
θ
∥
1
=
∣
w
1
∣
+
∣
w
2
∣
+
…
\mathrm{L}^{\prime}(\theta)=L(\theta)+\lambda \frac{1}{2}\|\theta\|_{1},其中:\|\theta\|_{1}=\left|w_{1}\right|+\left|w_{2}\right|+\ldots
L′(θ)=L(θ)+λ21∥θ∥1,其中:∥θ∥1=∣w1∣+∣w2∣+…
∂
L
′
∂
w
=
∂
L
∂
w
+
λ
sign
(
w
)
,
其
中
s
i
g
n
是
符
号
函
数
,
表
示
取
w
的
符
号
,
w
=
0
时
,
函
数
值
等
于
零
。
\frac{\partial \mathrm{L}^{\prime}}{\partial w}=\frac{\partial \mathrm{L}}{\partial w}+\lambda \operatorname{sign}(w),其中sign是符号函数,表示取w的符号,w=0时,函数值等于零。
∂w∂L′=∂w∂L+λsign(w),其中sign是符号函数,表示取w的符号,w=0时,函数值等于零。
更新参数:
w
t
+
1
←
w
t
−
η
∂
L
′
∂
w
=
w
t
−
η
(
∂
L
∂
w
+
λ
sign
(
w
t
)
)
=
w
t
−
η
∂
L
∂
w
−
η
λ
sign
(
w
t
)
\begin{array}{l}{w^{t+1} \leftarrow w^{t}-\eta \frac{\partial \mathrm{L}^{\prime}}{\partial w}=w^{t}-\eta\left(\frac{\partial \mathrm{L}}{\partial w}+\lambda \operatorname{sign}\left(w^{t}\right)\right)} \\ {=w^{t}-\eta \frac{\partial \mathrm{L}}{\partial w}-\eta \lambda \operatorname{sign}\left(w^{t}\right)}\end{array}
wt+1←wt−η∂w∂L′=wt−η(∂w∂L+λsign(wt))=wt−η∂w∂L−ηλsign(wt)即如果参数大于零,
−
η
λ
sign
(
w
i
)
-\eta \lambda \operatorname{sign}\left(w^{i}\right)
−ηλsign(wi)表示减去一个数,小于零就会加上一个数,即向零的位置移动一段距离。
λ
∈
(
0
,
1
)
\lambda \in (0,1)
λ∈(0,1),用于对经验误差与网络复杂度这两项进行折中,常通过交叉验证来估计。
采用L1范数时平方误差项等值项与正则化项等值线的交点常出现在坐标轴上,即
w
1
,
w
2
,
.
.
.
w_1,w_2,...
w1,w2,...为0,而在采用L2范数时,两者的交点常出现在某个象限中,即
w
1
,
w
2
,
.
.
.
w_1,w_2,...
w1,w2,...非0,所以,采用L1范数比L2范数更易于得到稀疏解。
w
w
w取得稀疏解意味着初始的d个特征中仅有对应着w的非零向量的特征会最终出现在最终模型中。基于L1正则化的学习方法是一种嵌入式选择方法,其特征选择过程和学习器训练过程融为一体,同时完成。
L2对参数较大的惩罚较强(因为它是参数乘一个小于1大于0的值,使它逼近零),L1对较大较小参数惩罚相同。
dropout(随机失活)
此外,dropout也可以解决过拟合的问题。
训练:
-
随机删除网络中的一些隐藏神经元,保持输入输出神经元不变
-
将输入通过修改后的网络进行前向传播,然后将误差通过修改后的网络进行反向传播
-
对于另外一批的训练样本,重复上述操作。
-
在训练的过程中随机的选择一些神经元( p % p\% p%)失活,每一个神经元都有哦一定的几率被去掉,其与之相连的参数权值则也会去掉。
-
然后使用新的神经网络进行训练。
通过dropout训练我们可以得到很多的模型。
一些参数在不同的网络中是相同的(有神经元重复)。
测试
测试时不需要进行dropout.
- 如果训练时的dropout rate是
p
%
p\%
p%,则在测试时所有的权重
w
w
w乘(
1
−
p
%
1-p\%
1−p%)。(适用于线性神经网络)
如果对训练得到的不同网络进行测试取均值,与将整个网络中的所有的权重 w w w乘( 1 − p % 1-p\% 1−p%)进行测试的结果近似。