正则化L1 regularization、L2 regularization、Dropout

Regularization

重新定义了目标函数,为了通过使得将权重的值都接近于0,从而使得目标函数更加的平滑减少样本中的噪声对训练的结果所造成的影响,解决overfitting问题。
L ′ ( θ ) = L ( θ ) + λ ∣ ∣ θ ∣ ∣ θ = { w 1 , w 2 , . . . , w n } L'(\theta)=L(\theta)+{\lambda}||\theta||\\ \theta=\{w_1,w_2,...,w_n\} L(θ)=L(θ)+λθθ={w1,w2,...,wn}
其中n为样本的个数。
1.L1 regularization

L ′ ( θ ) = L ( θ ) + λ n ∣ ∣ θ ∣ ∣ 1 L'(\theta)=L(\theta)+\frac\lambda n||\theta||_1\\ L(θ)=L(θ)+nλθ1
将没有正则化之前的损失函数记为L( θ \theta θ),则采用L1正则化之后待优化的函数为:

∣ ∣ θ ∣ ∣ 1 = ∣ w 1 ∣ + ∣ w 2 ∣ + . . . + ∣ w n ∣ ||\theta||_1=|w_1|+|w_2|+...+|w_n| θ1=w1+w2+...+wn
而当 w 1 w_1 w1=0的时候此时是不可微的,需要做特殊处理,常将其微分的值置为0.
以参数 w 1 w_1 w1的更新为例,求参数 w t w_t wt对于损失函数L’的微分可得:
∂ L ′ ∂ w t = = ∂ L ∂ w t + λ n s g n ( w t ) \frac{\partial L'}{\partial w_t}==\frac{\partial L}{\partial w_t}+\frac\lambda n sgn(w_t) wtL==wtL+nλsgn(wt)
(其中sgn(x)为符号函数,其数学表达式如下所示:
f ( x ) = s g n ( x ) { 1 , if  x  > 0 0 , if  x  = 0  − 1 , if  x  < 0 f(x) =sgn(x) \begin{cases} 1, & \text{if $x$ > 0} \\ 0, & \text{if $x$ = 0 }\\ -1, & \text{if $x$ < 0} \end{cases} f(x)=sgn(x)1,0,1,if x > 0if x = 0 if x < 0

则对于参数 w 1 w_1 w1的更新如下所示:
w t + 1 ← w t − η ∂ L ′ ∂ w t = w t − η ( ∂ L ∂ w t + λ n s g n ( w t ) ) = w t − η ∂ L ∂ w t − η λ n s g n ( w t ) w_{t+1}\leftarrow w_t - \eta\frac{\partial L'}{\partial w_t}\\ =w_t-\eta \big(\frac{\partial L}{\partial w_t}+\frac \lambda n sgn(w_t)\big)\\ =w_t-\eta\frac{\partial L}{\partial w_t}-\eta\frac \lambda n sgn(w_t)\\ wt+1wtηwtL=wtη(wtL+nλsgn(wt))=wtηwtLηnλsgn(wt)
在L1中不论w的大小如何,目标函数在更新的过程中均减去一个较小的值 η λ n s g n ( w t ) \eta\frac \lambda n sgn(w_t) ηnλsgn(wt)

2.L2 regularization

在L2正则化中目标函数以及 θ \theta θ的取值如下所示:
L ′ ( θ ) = L ( θ ) + λ 2 n ∣ ∣ θ ∣ ∣ 2 ∣ ∣ θ ∣ ∣ 2 = ( w 1 ) 2 + ( w 2 ) 2 + . . . + ( w n ) 2 L'(\theta)=L(\theta)+\frac{\lambda}{2n}||\theta||_2\\ ||\theta||_2=(w_1)^2+(w_2)^2+...+(w_n)^2 L(θ)=L(θ)+2nλθ2θ2=(w1)2+(w2)2+...+(wn)2
w t w_t wt对L’求偏导数可以得到
Gradient:
∂ L ′ ∂ w t = ∂ L ∂ w t + λ n w t \frac{\partial L'}{\partial w_t}=\frac{\partial L}{\partial w_t}+\frac{\lambda }{n}w_t wtL=wtL+nλwt
w t w_t wt进行如下更新:
w t + 1 ← w t − η ∂ L ′ ∂ w = w t − η ( ∂ L ∂ w + λ n w t ) = ( 1 − η λ n ) w t − η ∂ L ∂ w w_{t+1} \leftarrow w_t - \eta \frac{\partial L'}{\partial w}\\ =w_t-\eta\big(\frac{\partial L}{\partial w}+\frac{\lambda }{n}w_t\big)\\ =(1-\eta\frac{\lambda }{n})w_t-\eta\frac{\partial L}{\partial w} wt+1wtηwL=wtη(wL+nλwt)=(1ηnλ)wtηwL
L2正则化中如果出现w的值较大,则w的值化下降较快,其最后训练出来的结果中所有的w均为较小的值,这是其相对与L1正则化的优点。

3.Dropout

以p的概率使每一个神经元失活,在训练阶段使用Dropout的时候会使得网络在训练集上的表现的变差(不过网络在训练集上的准确率一般没有多大意义)。假如在训练的时候对p设为0.5,则最后测试的时候则应该对输出的结果乘以0.5从而得到testing的weight和training的weight处于相同的数量级(一般深度学习的框架都会自动实现)。
正则化L1 regularization、L2 regularization、Dropout_第1张图片
↓ \Big\downarrow
正则化L1 regularization、L2 regularization、Dropout_第2张图片
↓ \Big\downarrow
正则化L1 regularization、L2 regularization、Dropout_第3张图片
Dropout可以看成是一种集成学习的方法,即在训练的过程中如果有m个神经元,采用了Dropout方法则可能出现的模型会有 2 m 2^m 2m种,每一种情况采用一个mini-batch来训练,最后综合考虑各个模型的效果从而实现ensemble learning.
有一个神经网络采用了Dropout的方法,以keep_prob=(1-p)的概率来保留每一个神经元,则最后的输出结果相当于原来的网络不采用Dropout方法的输出乘以(1-p),即:
f ( x ) d r o p o u t = f ( x ) w i t h o u t    d r o p o u t ∗ ( 1 − p ) f(x)_{dropout}=f(x)_{without\;dropout}*(1-p) f(x)dropout=f(x)withoutdropout(1p)
该方法在ReLU的activation function中的表现效果更好,因为其更加适合用线性的方法(刚好成比例)。

你可能感兴趣的:(Pytorch学习,深度学习笔记)