datawhalechina / d2l-ai-solutions-manual

《动手学深度学习》习题解答,在线阅读地址如下:
https://datawhalechina.github.io/d2l-ai-solutions-manual/
Other
337 stars 63 forks source link

4.6.7感觉也不太对 #50

Open isCopyman opened 9 months ago

isCopyman commented 9 months ago

放在激活函数前后应该只影响前向传播,反向传播的话,那些被置为0的神经元对应的梯度应该都是不影响的,都是0

catcooc commented 8 months ago

你是对的 感谢指正 该处答案将做如下修改   考虑一个简单的单层没有偏置的神经网络,

$$ \hat{y}= \phi( \mathbf{W} \mathbf{x} ) $$

   $\hat{y}$ 是输出 ,    $\phi$ 是激活函数,    $\mathbf{W}$ 是权重,    $\mathbf{x}$ 是输入.

  定义dropout 为函数

$$ D(h,p)=\begin{cases}0 & \text{ 概率为 } p \ \frac{h}{1-p} & \text{ 其他情况}\end{cases} $$

  有

$$ \frac{\partial D(z,p) }{ \partial z}=\begin{cases}0 & \text{ 概率为 } p \ \frac{1}{1-p} & \text{ 其他情况}\end{cases} $$

  , 取L为损失函数,    $z=\mathbf{W} \mathbf{x}$,    $z^\prime=D(\mathbf{W} \mathbf{x},p)$

  考虑dropout 放在激活层后面

  前向传播

$$ \hat{y}=D(\phi(\mathbf{W} \mathbf{x}),p)=\begin{cases}0 & \text{ 概率为 } p \ \displaystyle\frac{\phi(\mathbf{W} \mathbf{x})}{1-p} & \text{ 其他情况}\end{cases} $$

  反向传播

$$ \frac{\partial L }{ \partial\mathbf{W}}=\frac{\partial L }{ \partial \hat{y}} \frac{\partial D(\phi(z),p)}{ \partial \phi(z)}\frac{\partial \phi(z)}{ \partial z}\frac{\partial z}{ \partial \mathbf{w}}=\begin{cases}0 & \text{ 概率为 } p \ \displaystyle\frac{\displaystyle\frac{\partial L }{ \partial \hat{y}} \frac{\partial \phi(z) }{ \partial z}\mathbf{x}}{1-p} & \text{ 其他情况}\end{cases} $$

  考虑dropout 放在激活层前面的情形

  前向传播

$$ \hat{y}=\phi(D(\mathbf{W} \mathbf{x},p))=\begin{cases}\phi(0) & \text{ 概率为 } p \ \displaystyle\phi(\frac{\mathbf{W} \mathbf{x}}{1-p}) & \text{ 其他情况}\end{cases} $$

  反向传播

$$ \frac{\partial L }{ \partial\mathbf{W}}=\frac{\partial L }{ \partial \hat{y}} \frac{\partial \phi(z^\prime)}{ \partial z^\prime}\frac{\partial D(\mathbf{z},p)}{ \partial z}\frac{\partial z}{ \partial \mathbf{w}}=\begin{cases}0 & \text{ 概率为 } p \ \displaystyle\frac{\displaystyle\frac{\partial L }{ \partial \hat{y}} \frac{\partial \phi(z^\prime)}{ \partial z^\prime}\mathbf{x}}{1-p} & \text{ 其他情况}\end{cases} $$

  由于激活函数 $\phi(0)$ 不一定为0所以dropout前置可能会使被置零的神经元在前向传播中还有会贡献值。