主要針對神經網絡算法中的自定義求導和深度學習框架的矩陣運算層框架描述。
卷積運算
前向計算
先放一個原始的數據矩陣,在計算機視覺裏是圖像。
Data=⎣⎢⎢⎡aeimbfjncgkodhlp⎦⎥⎥⎤
對上述數據進行一維展平處理
Data_View=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡abcdefghijklmnop⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤
一個卷積核如下表示
Kernel=[x00x10x01x11]
上述卷積核與輸入尺寸配套的矩陣表示
Kernel_Mat=⎣⎢⎢⎡x00000x01x00000x01x00000x01x00x1000x01x11x10000x11x10000x11x10000x11⎦⎥⎥⎤
因此前向計算可以表示爲
Result=Data_View×Kernel_MatT
反向計算
從前向計算的結果可以很好地表示出矩陣卷積的反向計算
BackResult=(y×Data_View)T
其中,y是反向傳播後的輸入矩陣,也就是上一級中的梯度。BackResult用於更新卷積核的數據,因爲採用權重共享,因此該是0的地方還是0,不是0並且相同數據的地方更新的時候取一個均值就可以了。
池化運算
前向計算
還是上一節中的數據矩陣,最大值池化沒有參數,只用考慮反向傳播即可.前向傳播中,對上面的4×4數據進行2×2的池化,最後得到2×2的結果。
反向計算
對反向傳過來的梯度yg從2×2擴大到4×4。每一個多出來的部分都使用其他部分進行填充。相當於把2×2池化後的每個元素的微分結果平均到之前輸入的4個元素上,作爲上一個輸入的微分結果。
舉個例子,假設上一層傳過來的梯度矩陣是這樣子的
grad=[x00x10x01x11]
那麼,經過池化層後的梯度矩陣應該變成這樣子的
grad2=⎣⎢⎢⎡4x004x004x104x104x004x004x104x104x014x014x114x114x014x014x114x11⎦⎥⎥⎤
然後應該就是常規的自動微分流程了。
批歸一化運算
前向計算
公式如下
Y=Var[X]X−E[X]
反向計算
反向計算也比較容易
dX=Var[X]×dY+E[X]
Dropout運算
這個運算在這個博主的博客裏提到了。這裏就不贅述了。