李沐pytorch学习-DropOut

        DropOut 即丢弃法,一般用于全连接层的隐含层,卷积层一般不用。

        在训练时随机把一些神经元丢弃,不参与运算,防止过度依赖某个神经元。

        可用于防止过拟合。

        DropOut过程如图1所示,隐含层每个神经元丢弃概率为p,丢弃前隐含层的数值为:

H=\left [ h_1,h_2,h_3,h_4,h_5 \right ]

        丢弃后 h2 和 h3 被丢弃,丢弃后隐含层的数值为:

H=[\frac{h_1}{1-p},0,\frac{h_3}{1-p},\frac{h_4}{1-p},0]

李沐pytorch学习-DropOut_第1张图片 图1. DropOut示意图

Loss=f\left ( O \right )\\\\ O=H\times W_b\\\\ H=I\times W_a\\\\ O=\left [ o_1,o_2,o_3 \right ]\\\\ H=[\frac{h_1}{1-p},0,\frac{h_3}{1-p},\frac{h_4}{1-p},0]\\\\ I=\left [ x_1,x_2,x_3,x_4 \right ]\\\\ W_a=\begin{bmatrix} a_{1,1} &a_{1,2} &a_{1,3} & a_{1,4} &a_{1,5} \\ a_{2,1} &a_{2,2} &a_{2,3} & a_{2,4} &a_{2,5} \\ a_{3,1} &a_{3,2} &a_{3,3} & a_{3,4} &a_{3,5} \\ a_{4,1} &a_{4,2} &a_{4,3} & a_{4,4} &a_{4,5} \end{bmatrix}\\\\ W_b= \begin{bmatrix} b_{1,1}&b_{1,2} &b_{1,3} \\ b_{2,1}&b_{2,2} &b_{2,3} \\ b_{3,1}&b_{3,2} &b_{3,3} \\ b_{4,1}&b_{4,2} &b_{4,3} \\ b_{5,1}&b_{5,2} &b_{5,3} \end{bmatrix}

        因此梯度计算如下:

\frac{\partial Loss}{\partial W_2}=\frac{\partial f}{\partial O}\cdot \frac{\partial O}{\partial W_b}

先只看 o_1 分量       

因为:

李沐pytorch学习-DropOut_第2张图片

o_1=\frac{h_1}{1-p}\times b_{1,1}+0\times b_{2,1}+\frac{h_3}{1-p}\times b_{3,1}+\frac{h_4}{1-p}\times b_{4,1}+0\times b_{5,1}

        因此:

\frac{\partial O}{\partial W_b}=\left [ \frac{\partial o_1}{\partial b_{1,1}},\frac{\partial o_1}{\partial b_{1,2}},\frac{\partial o_1}{\partial b_{3,1}},\frac{\partial o_1}{\partial b_{4,1}},\frac{\partial o_1}{\partial b_{5,1}} \right ]\\=\left [ \frac{h_1}{1-p},0, \frac{h_3}{1-p}, \frac{h_4}{1-p},0 \right ]=H

        可见更新权重时,与被DropOut的神经元相连的梯度为零,因此被丢弃的神经元相关权重此次不参与更新。

你可能感兴趣的:(深度学习,pytorch,学习,人工智能)