dropout的forward过程及backward反向传播过程

forward过程

假设以概率 p p p丢弃 K K K维输入向量 x = [ x 1 , x 2 , , , x K ] x=[x_1, x_2, ,, x_K] x=[x1,x2,,,xK]的某些值。
那么经过dropout之后的向量定义为 d d d,有
x ′ = d r o p o u t ( x ) x' = dropout(x) x=dropout(x)
这个过程相当于生成一个随机的 K K K维的mask,这个mask的生成过程如下:

r = r a n d ( K ) = [ r 1 , r 2 , , , r K ] , 其 中 0 < r i < 1 。 m a s k = { 0      r i < p 1      r i ≥ p r = rand(K) = [r_1, r_2, ,,r_K], 其中0<r_i <1。 \\ mask = \left\{ \begin{aligned} 0 \ \ \ \ r_i < p \\ 1 \ \ \ \ r_i \ge p \end{aligned} \right. r=rand(K)=[r1,r2,,,rK]0<ri<1mask={ 0    ri<p1    rip
然后 x x x m a s k mask mask做对应元素点乘(这个操作记为 @ @ @)。也就是
x ′ = d r o p o u t ( x ) = x @ m a s k x' = dropout(x) = x@mask x=dropout(x)=x@mask
这样的设计的dropout会出现一些问题。在训练的时候,dropout工作, x x x经过dropout之后的期望为
E [ x ] = p ∗ 0 + ( 1 − p ) ∗ x = ( 1 − p ) x E[x] = p*0 + (1-p)*x = (1-p)x E[x]=p0+(1p)x=(1p)x
在测试的时候,dropout是不工作的,此时 x x x的期望是 x x x。这样导致训练和测试的期望不一样,模型会不稳定。为了让训练时候 x x x的期望和测试时一直,一种做法是在训练时将dropout后的结果除以 1 − p 1-p 1p。这时也就相当于将mask变为:
r = r a n d ( K ) = [ r 1 , r 2 , , , r K ] , 其 中 0 < r i < 1 。 m a s k = { 0      r i < p 1 1 − p      r i ≥ p r = rand(K) = [r_1, r_2, ,,r_K], 其中0<r_i <1。 \\ mask = \left\{ \begin{aligned} 0 \ \ \ \ r_i < p \\ {1 \over 1-p} \ \ \ \ r_i \ge p \end{aligned} \right. r=rand(K)=[r1,r2,,,rK]0<ri<1mask=0    ri<p1p1    rip

backward

假设模型forward之后的loss是 l l l,如何求反向传播时 l l l x x x的梯度?
x = [ x 1 , x 2 , . . . , x K ] x ′ = d r o p o u t ( x ) = x @ m a s k l = f o r w a r d ( x ′ ) x = [x_1, x_2, ..., x_K] \\ x' = dropout(x) = x@mask \\ l = forward(x') x=[x1,x2,...,xK]x=dropout(x)=x@maskl=forward(x)
那么 d l d x = d l d x ′ d x ′ d x {dl \over dx} = {dl \over dx'}{dx' \over dx} dxdl=dxdldxdx
其中
d x ′ d x = { 0      r i < p 1 1 − p      r i ≥ p {dx' \over dx} = \left\{ \begin{aligned} 0 \ \ \ \ r_i < p \\ {1 \over 1-p} \ \ \ \ r_i \ge p \end{aligned} \right. dxdx=0    ri<p1p1    rip

猜你喜欢

转载自blog.csdn.net/mch2869253130/article/details/119809360