结果在第一批样本进来后,图7-11中标记的神经元被关闭,在这次传播过程中,神经网络实际上变成了图7-12的样子,一个被压缩的神经网络。
这个缩小的网络适用且仅适用于这一批样本,包括正向传播与反向传播。在这次反向传播后,只有这个小网络对应的权重参数被修正。在下一批样本进来后,将所有开关打开,然后重新执行随机关闭的过程,以此类推。因此,在每次迭代中,我们在使用一个随机的、缩小的网络在训练,每次训练模型都不一样。
在实际编程操作中,每一层的“开关”是通过引入一个布尔向量d[1]实现的(维度与该层输出值a[1]相同,每个维度为0或1,表示关闭或打开),让d[1]与a[1]相乘,被关闭的神经元的输出值变为0,而未关闭的神经元保留原来a[1]的数值,然后将得到的值作为新的、被修正的a[1],并当作输入变量传递给下一层。
值得注意的是,在正向传播中,每一层神经元在计算后通常要进行数值修正。第1层的激活函数计算得到的数值a[1]要除以预设值概率p,这里的p是指开关为开启的概率(如此定义便于运算)。比如p=0.7,就意味着每个神经元被关闭的概率是30%,开启的概率是70%。这样做是为了保持a[1]的后续运算单元的期望值不变。因为在Dropout之后,神经元减少,传递给下一层的被修正的a[1]的所有维度中,只有期望为 $\mathfrak { p } ^ { * } \mathfrak { n }$ [1]的维度为非空值。为了让z[1+1]从数值上期望不变,会在a[1]进行dropout修正之后,再进行一个数值修正a[1]=a[1]/p,这样z[1+1]的数值就不会因为Dropout而“萎缩”了。这通常被称为反向失活(inverteddropout)。
Dropout只用在训练过程中,一旦参数被训练好后,在测试集计算中不使用Dropout,也就是说要开启所有神经元。另外要注意的是,要记住Dropout是一种正则化方法,只有当模型确实出现过拟合时才使用,否则无须使用。
人工智能与大数据技术导论
202