了解什么是过拟合问题,如下面图片为例,咱们可以看到有两个类别,蓝色是分类曲线模型。算法
模型过拟合是由于模型过于复杂,能够经过对特征变量系数的调整来避免过拟合,而引入正则化正是为了实现这个目的,具体如何实现将在下一节说明。网络
常见的正则化方法有这几种:函数
说明:这里的F-范数指的是Frobenius范数,和logistics回归的L一、L2正则化的向量范数不同。学习
矩阵的F-1范数:矩阵全部元素的绝对值之和。公式为:测试
$$\left \| W \right \|_{1}=\sum_{i,j}\left |\omega _{i,j} \right |$$spa
矩阵的F-2范数:矩阵全部元素的平方求和后开根号。公式为:3d
$$\left \| W \right \|_{2}=\sqrt{\sum_{i,j}\left (\omega _{i,j} \right )^{2}}$$调试
假设神经网络的损失函数为J(W,b),参考逻辑回归的正则化,是在损失函数J(W,b)后面加一个正则化项,神经网络DNN也是同样的,只是变成了加F-范数,L1正则化与L2正则化以下所示:xml
$$L1: J(W,b)+\frac{\lambda }{2m}\sum_{l\epsilon L}\left \| W \right \|_{1}=J(W,b)+\frac{\lambda }{m}\sum_{l\epsilon L}\sum_{i,j}\left |\omega _{i,j} \right |$$blog
$$L2: J(W,b)+\frac{\lambda }{2m}\sum_{l\epsilon L}\left \| W \right \|_{2}=J(W,b)+\frac{\lambda }{2m}\sum_{l\epsilon L}\sqrt{\sum_{i,j}\left (\omega _{i,j} \right )^{2}}$$
这里m为样本数,l为各个隐藏层,$\lambda$为超参数,须要本身调试,L2中2m是为了后面求梯度的时候能够抵消掉常数2。
因为L1正则与L2正则原理类似,并且大多数神经网络模型使用L2正则,因此这里以L2为例来讲明为何能防止过拟合。
原损失函数$J(W,b)$加上正则项$\frac{\lambda }{2m}\sum_{l\epsilon L}\left \| W \right \|_{2}$以后的新损失函数$J(W,b)^{'}=J(W,b)+\frac{\lambda }{2m}\sum_{l\epsilon L}\left \| W \right \|_{2}$,在使用梯度降低训练模型时,目标是要最小化新的损失函数$ J(W,b)^{'}$,咱们在训练前先设置超参数$\lambda$,若设置较大的超参数$\lambda=0.9$,则相对于设置较小的超参数$\lambda=0.1$,咱们须要更小的权重F-2范数$\left \| W \right \|_{2}$才可以使得咱们达到最小化$ J(W,b)^{'}$的目的。因此若是咱们使用较大的超参数$\lambda$的时候,会使得W总体变得更加的稀疏,这样就可使得W的影响减小,从而避免了因为模型过于复杂致使的过拟合。
$$原损失函数:$$J(W,b)$$
$$原损失函数对第l层的权重矩阵W求梯度:$$\frac{J(W,b) }{\partial W^{l}}$$
$$原损失函数的W迭代公式为:$$W^{l}=W^{l}-\alpha \frac{J(W,b) }{\partial W^{l}},其中\alpha为学习率$$
$$新损失函数:$$J(W,b)^{'}=J(W,b)+\frac{\lambda }{2m}\sum_{l\epsilon L}\left \| W \right \|_{2}$$
$$新损失函数对第l层的权重矩阵W求梯度:$$\frac{J(W,b)^{'} }{\partial W^{l}}=\frac{J(W,b) }{\partial W^{l}}+\frac{\lambda }{m}W^{l}$$
$$新损失函数的W迭代公式为:$$W^{l}=W^{l}-\alpha \frac{J(W,b) }{\partial W^{l}}-\alpha \frac{\lambda }{m}W^{l}=\left ( 1- \alpha \frac{\lambda }{m}\right )W^{l}-\alpha \frac{J(W,b) }{\partial W^{l}},其中\alpha为学习率$$
对比原迭代公式与新迭代公式能够发现,原迭代公式W的系数为1,新迭代公式的系数为$\left ( 1- \alpha \frac{\lambda }{m}\right )$,因为$\alpha$、$\lambda$、m都是正数,因此新迭代公式在原来的基础上使权重矩阵W进行了缩减,使得W变得更小,这就是L2正则的权重衰减,这样可使得一些权重的值等于或更接近与0,从而减小了一些权重的影响,以极端情形来讲,若是衰减后权重为零,即该神经元的影响为0,至关于神经元从神经网络中去除,这样就减小了神经元的个数,从而下降了模型的复杂度,防止了过拟合。
L1 正则化项的效果是让权值 W 往 0 靠,使网络中的权值尽量为 0,也就至关于减少了网络复杂度,防止过拟合。事实上,L1 正则化能产生稀疏性,致使 W 中许多项变成零。
L2 正则化项的效果是减少权值 W。事实上,更小的权值 W,从某种意义上说,表示网络的复杂度更低,对数据的拟合刚恰好。
说明:所谓的Dropout指的是在用前向传播算法和反向传播算法训练DNN模型时,一批数据迭代时,随机的从全链接DNN网络中去掉一部分隐藏层的神经元,下面用两个图来解释:
原始的神经网络结构:
在对训练集中的一批数据进行训练时,咱们随机去掉一部分隐藏层的神经元(在训练模型的时候一般选择随机去除50%的神经元,长期实践证实效果较好),以下图:
总结Drop:去掉的神经元只是在当前的批次数据迭代中才去除,在下一批数据迭代的时候,要把DNN模型恢复成最初的全链接模型,再随机去掉部分隐藏层的神经元,接着去迭代更新W,b,每批数据迭代更新完毕后,要将残缺的DNN模型恢复成原始的DNN模型。
注意:Drop只有在数据量大的时候才可以使用,若数据量小可能会形成欠拟合的状况,另外,能够在容易形成过拟合的隐藏层使用Drop正则化。