Dropout · 深度学习 04

Hailiang Zhao | 2021/08/24

Categories: math Tags: deep-learning optimization dropout

在讲解 MLP 时我们给出了如下图所示的带有隐藏层的神经网络:

图 1 多层感知机

其中,对于单个样本 $\big([x_1, ..., x_4]^\top, y\big)$,隐藏单元 $h_i$ 的计算表达式为 $$ h_i = \phi \left(\vec{x}^\top W_h(:,i) + \vec{b_h}(i)\right). $$ 若对该隐藏层使用 dropout,则该层的每个隐藏单元有一定概率会被丢弃掉。设丢弃概率(超参数)为 $p$,则 $\forall i, h_i$$p$ 的概率会被清零,有 $1-p$ 的概率会被做拉伸。用数学语言描述即 $$ h'_i = \frac{\xi_i}{1-p}h_i, $$ 其中 $\xi_i$ 是一个随机变量,$p(\xi_i = 0) = p$$p(\xi_i=1) = 1-p$。 则 $$ \mathbb{E} \left[ h'_i \right] = h_i. $$ 这意味着 dropout 不改变输入的期望输出(这就是要除以 $1-p$ 的原因)。

下图给出了 dropout 的一个示例。 此时 MLP 的输出不依赖 $h_2$$h_5$。由于在训练中隐藏层神经元的丢弃是随机的,即 $h_1, ..., h_5$ 都有可能被清零,输出层的计算无法过度依赖 $h_1, ..., h_5$ 中的任一个, 从而在训练模型时起到正则化的作用,并可以用来应对过拟合。

图 2 Dropout 示例

Dropout 是一种训练时应对过拟合的方法,并未改变网络的结构。当参数训练完毕并用于测试时,任何参数都不会被 dropout。

最后

本文所使用的图片分别来自《动手学深度学习》(PyTorch 版)章节 3.8 章节 3.13

Dropout 的 PyTorch 实现见 本链接

转载申请

本作品采用 知识共享署名 4.0 国际许可协议 进行许可,转载时请注明原文链接。您必须给出适当的署名,并标明是否对本文作了修改。