动手学深度学习4.6 dropout

709 阅读3分钟

参与11月更文挑战的第16天,活动详情查看:2021最后一次更文挑战

模型泛化的补充“平滑性”。

平滑性,即函数不应该对其输入的微小变化敏感。

也就是说一个好的模型需要对输入数据的扰动鲁棒。分为以下两个方面。


1. 使用有噪音的数据等价于Tikhonov正则

1995年,克里斯托弗·毕晓普证明了具有输入噪声的训练等价于Tikhonov正则化[Neural Networks for Pattern Recognition]

《深度学习》第七章的7.5写:对于某些模型而言,向输入添加方差极小的噪声等价于对权重施加范数惩罚(Bishop,1995a, b)。

  • Tikhonov正则化(吉洪诺夫正则化)

    作为最小二乘方法的代价函数 12Axb22\frac{1}{2}\|\boldsymbol{A} \boldsymbol{x}-\boldsymbol{b}\|_{2}^{2} 的改进, Tikhonov于 1963 年提出使 用正则化最小二乘代价函数

    J(x)=12(Axb22+λx22)J(x)=\frac{1}{2}\left(\|A x-b\|_{2}^{2}+\lambda\|x\|_{2}^{2}\right)

    式中 λ0\lambda \geqslant 0 称为正则化参数 (regularization parameters)。

  • 也就是说对输入添加极小的噪声可以认为和L2L_2正则化是一样的。也就是上一节的内容,见:动手学深度学习4.5 正则化 权重衰退推导 - 掘金 (juejin.cn)

2. 丢弃法:在层之间加入噪音

在一般情况下,噪声被添加到隐藏单元时鲁棒性会更加强大。向隐藏单元添加噪声就是Dropout算法的主要发展方向。

在2014年,斯里瓦斯塔瓦等人[Dropout: a simple way to prevent neural networks from overfitting]结合毕晓普的想法,并将其应用于到网络的内部层之间。在训练过程中,在计算后续层之前向网络的每一层注入噪声。他们意识到,当训练一个有多层的深层网络时,注入噪声只会在输入-输出映射上增强平滑性。

这种方法之所以被称为dropout ,因为我们从表面上看是在训练过程中丢弃(drop out)一些神经元。 在整个训练过程的每一次迭代中,dropout包括在计算下一层之前将当前层中的一些节点置零。

在每次训练迭代中,产生扰动点x\mathbf{x}'。并要求E[x]=xE[\mathbf{x}'] = \mathbf{x}。(E是期望)

在标准dropout正则化中,通过按保留(未丢弃)的节点的分数进行归一化来消除每一层的偏差。如下所示:

h={0 概率为 ph1p 其他情况\begin{aligned} h' = \begin{cases} 0 & \text{ 概率为 } p \\ \frac{h}{1-p} & \text{ 其他情况} \end{cases} \end{aligned}

根据设计,期望值保持不变,即E[h]=hE[h'] = h

比如:E[xi]=p0+(1p)xi1p=xi\begin{aligned} E\left[x_{i}'\right] &=p \cdot 0+(1-p) \frac{x_{i}}{1-p} =x_{i} \end{aligned}

实践中的dropout:

image.png

h=σ(W1x+b1)\mathbf{h} =\sigma\left(\mathbf{W}_{1} \mathbf{x}+\mathbf{b}_{1}\right)
h={0 概率为 ph1p 其他情况\begin{aligned} h' = \begin{cases} 0 & \text{ 概率为 } p \\ \frac{h}{1-p} & \text{ 其他情况} \end{cases} \end{aligned}

根据设计,期望值保持不变,即E[h]=hE[h'] = h

比如:E[xi]=p0+(1p)xi1p=xi\begin{aligned} E\left[x_{i}'\right] &=p \cdot 0+(1-p) \frac{x_{i}}{1-p} =x_{i} \end{aligned}

实践中的dropout:

image.png

h=σ(W1x+b1)h=dropout(h)o=W2h+b2y=softmax(o)\begin{aligned} &\mathbf{h} =\sigma\left(\mathbf{W}_{1} \mathbf{x}+\mathbf{b}_{1}\right) \\\\ &\mathbf{h}^{\prime}=\operatorname{dropout}(\mathbf{h}) \\ &\mathbf{o} =\mathbf{W}_{2} \mathbf{h}^{\prime}+\mathbf{b}_{2} \\ &\mathbf{y} =\operatorname{softmax}(\mathbf{o}) \end{aligned}

当我们将dropout应用到隐藏层,以pp的概率将隐藏单元置为零时,结果可以看作是一个只包含原始神经元子集的网络。在下图中,删除了h2h_2h5h_5。因此,输出的计算不再依赖于h2h_2h5h_5,并且它们各自的梯度在执行反向传播时也会消失。这样,输出层的计算不能过度依赖于h1,,h5h_1, \ldots, h_5的任何一个元素。


image.png

《退学率》


《动手学深度学习》系列更多可以看这里:《动手学深度学习》 - LolitaAnn的专栏 - 掘金 (juejin.cn)

笔记还在更新中…………