Cov2d反向傳播梯度的計算過程

我們用一個例子來說明:


xw=yx*w=y
並且
x=[x11x12x13x21x22x23x31x32x33],w=[w11w12w21w22],y=[y11y12y21y22]x=\begin{bmatrix} x_{11} & x_{12} & x_{13}\\ x_{21} & x_{22} & x_{23}\\ x_{31} & x_{32} & x_{33} \end{bmatrix}, \quad w=\begin{bmatrix} w_{11} & w_{12}\\ w_{21} & w_{22} \end{bmatrix}, \quad y=\begin{bmatrix} y_{11} & y_{12}\\ y_{21} & y_{22} \end{bmatrix}


{y11=w11x11+w12x12+w21x21+w22x22y12=w11x12+w12x13+w21x22+w22x23y21=w11x21+w12x22+w21x31+w22x32y22=w11x22+w12x23+w21x32+w22x33\left\{\begin{aligned} &y_{11} = w_{11}x_{11} + w_{12}x_{12}+w_{21}x_{21}+w_{22}x_{22}\\ &y_{12} = w_{11}x_{12} + w_{12}x_{13}+w_{21}x_{22}+w_{22}x_{23}\\ &y_{21} = w_{11}x_{21} + w_{12}x_{22}+w_{21}x_{31}+w_{22}x_{32}\\ &y_{22} = w_{11}x_{22} + w_{12}x_{23}+w_{21}x_{32}+w_{22}x_{33} \end{aligned}\right.

梯度
Lx=Lyyx=[δ11w11δ11w12+δ12w11δ12w12δ11w21+δ21w11δ11w22+δ12w21+δ21w12+δ22w11δ12w22+δ22w12δ21w21δ21w22+δ22w21δ22w22]\frac{\partial L}{\partial x} = \frac{\partial L}{\partial y}\frac{\partial y}{\partial x}=\begin{bmatrix} \delta_{11}w_{11} & \delta_{11}w_{12} + \delta_{12}w_{11} & \delta_{12}w_{12}\\ \delta_{11}w_{21} + \delta_{21}w_{11} & \delta_{11}w_{22} + \delta_{12}w_{21} + \delta_{21}w_{12} + \delta_{22}w_{11} & \delta_{12}w_{22} + \delta_{22}w_{12}\\ \delta_{21}w_{21} & \delta_{21}w_{22} + \delta_{22}w_{21} & \delta_{22}w_{22} \end{bmatrix}
其計算過程如下圖所示(其中不同顏色塊對應位置的值相加):
在這裏插入圖片描述
另外,可以用卷積的形式計算xx的梯度:
Lx=(00000δ11δ1200δ21δ2200000)(w22w21w12w11)\frac{\partial L}{\partial x} = \left( \begin{array}{ccc} 0&0&0&0 \\ 0&\delta_{11}& \delta_{12}&0 \\ 0&\delta_{21}&\delta_{22}&0 \\ 0&0&0&0 \end{array} \right) * \left( \begin{array}{ccc} w_{22}&w_{21}\\ w_{12}&w_{11} \end{array} \right)
此時卷積核ww需要旋轉180度,也即上下翻轉一次,然後左右翻轉一次。輸入矩陣需要增加padding

設正向卷積的padding爲pp,反向卷積的padding爲pp',則需要增加的padding爲:
p=kp1p' = k-p-1

其中kk是卷積核的大小,另外假設正向卷積的stride爲1。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章