深度学习 – 过拟合与dropout机制

过拟合,欠拟合

  • 过拟合(overfitting):学习能力过强,以至于把训练样本所包含的不太一般的特性都学到了。
  • 欠拟合(underfitting):学习能太差,训练样本的一般性质尚未学好。

下面是直观解释:

图

下面再举一个具体的例子: 如果我们有6个数据,我们选择用怎么样的回归曲线对它拟合呢?看下图

图

  1. 可以发现得到的直线 y = ba * x 并不能较为准确的描述训练数据的形态,我们说这不是一个良好的拟合,这也叫做欠拟合。
  2. 如果我们再加入一个特征值x^2,得到y = ab * xc * x^2 于是我们得到二阶多项式,一个稍好的拟合。
  3. 最后我们直接用五阶多项式去拟合,发现对于训练样本可以很好的拟合,但是这样的模型对预测往往效果不是非常好,这叫做过拟合(overfitting)。

在这里我们可以发现,原来过拟合和欠拟合和模型复杂度是相关的,具体描述如下图

图

也就是说,在模型相对复杂时,更容易发生过拟合,当模型过于简单时,更容易发生欠拟合。

为了防止过拟合,有很多方法,下面主要介绍在神经网络中经常用到的dropout。

Dropout

Dropout是2012年深度学习视觉领域的开山之作paper:《ImageNet Classification with Deep Convolutional》所提到的算法,用于防止过拟合。

基本思想:

dropout是指在深度学习网络训练的过程中,对于神经网络单元,按照一定的概率将其暂时从网络中丢弃,对于随机梯度下降算法来说,由于是随机丢弃,所以每个mini-batch都在训练不同的网络。

大规模神经网络的缺点:

  • 训练费时间
  • 容易产生过拟合

过拟合是很多机器学习的通病,为了解决过拟合问题,我们可能会想到L2正则化、或者减小网络规模。dropout很好的解决了这个问题。

图

因而对于一个有N个节点的神经网络,有了dropout后,就可以看做是2^n个模型的集合了,但是需要训练的参数数目依然不变,这就解脱了费时的问题。

深入了解dropout

Dropout可以看作是Bagging的极限形式,每个模型都在当一种情况中训练,同时模型的每个参数都经过与其他模型共享参数,从而高度正则化。在训练过程中,随机失活也可以被认为是对完整的神经网络抽样出一些子集,每次基于输入数据只更新子网络的参数(然而,数量巨大的子网络们并不是相互独立的,因为它们都共享参数)。在测试过程中不使用随机失活,可以理解为是对数量巨大的子网络们做了模型集成(model ensemble),以此来计算出一个平均的预测。

关于Dropout的Motivation:一个是类似于性别在生物进化中的角色:物种为了生存往往会倾向于适应这种环境,环境突变则会导致物种难以做出及时反应,性别的出现可以繁衍出适应新环境的变种,有效的阻止过拟合,即避免环境改变时物种可能面临的灭绝。还有一个就是正则化的思想,减少神经元之间复杂的共适应关系,减少权重使得网络对丢失特定神经元连接的鲁棒性提高。

dropout就是我们让它在前向传播的时候,让某个神经元的激活值以一定的概率P,让他停止工作。

图

以前我们网络的计算公式是:

z_i^{(l+1)} = w_i^{(l+1)}y^l + b_i^{(l+1)}

y_i^{(l+1)} = f(z_i^{(l+1)})

采用dropout后变成如下公式:

r_j^{(l)} = Bernoulli(p)

\tilde y^{(l)} = r^{(l)} * y^{(l)}

z_i^{(l+1)} = w_i^{(l+1)} \tilde y^{(l)} + b_i^{(l+1)}

y_i^{(l+1)} = f(z_i^{(l+1)})

再详细点的解释就是:我们要让某个神经元以概率P停止工作(也就是将这个神经元的激活值变为0), 那么这个概率怎么产生呢?答案就是伯努利分布,我们用伯努利函数,以概率P随机生成一个0、1的向量, 也就是上述公式中的r。



浙ICP备17015664号 浙公网安备 33011002012336号 联系我们 网站地图  
@2019 qikegu.com 版权所有,禁止转载