Winograd Convolution 推導 - 從1D到2D


Winograd Convolution 推導 - 從1D到2D

 

姚偉峰
http://www.cnblogs.com/Matrix_Yao/

1D Winograd 卷積

1D Winograd算法已經有很多文章討論了,討論得都比較清楚,這里就不再贅述,僅列出結論。

輸入:四維信號
卷積核: 三維向量
輸出: 二維信號
可表示為:

其中:

 

2D Winograd卷積

2D Winograd可以由1D Winograd外推得到,因此為解決2D Winograd問題,首先要重溫1D 卷積解決的問題。在此復述一遍:
假設一個卷積核尺寸為3的一維卷積,假設每次我們輸出2個卷積點,則我們形式化此問題:F(2, 3)。
因為輸出為2,卷積核大小為3,對應的輸入點數應該為4,則此問題表述為:

輸入:四維信號
卷積核: 三維向量
因此,此卷積的矩陣乘形式應為:

 

請記住這個形式是Winograd算法解決的問題,后續2D算法將化歸為這個問題。
下面我們來定義2D 卷積問題,將1D卷積擴展一維:
假設一個卷積核尺寸為3x3的二維卷積,假設每次我們輸出2x2個卷積點,則我們形式化此問題:F(2x2, 3x3)。
因為輸出為2x2,卷積核大小為3x3,對應的輸入點數應該為4x4,則此問題表述為:

輸入

卷積核
因此,此卷積的 矩陣乘形式應為:

 

從這個式子里,我們可以看到1D卷積的影子,這個影子在我們對矩陣作了分塊后會更加明顯。

再明顯一點,我們寫成分塊矩陣乘的形式:

至此,我們對2D卷積推導出了跟1D形式一致的公式,只不過1D中的標量在2D中變成了小矩陣或者向量。

 

實操粉

對實操粉而言,到這個形式為止,已經可以寫代碼了。
由1D Winograd可知,我們可以將該式改寫為Winograd形式, 如下:

其中:

注意,這四個M的計算又可以用一維的F(2, 3) Winograd來做,因此2D Winograd是個嵌套(nested)的算法。

 

理論粉

對一個有追求的理論粉來說,只是得到可以寫程序的遞歸表達肯定是不完美的,他們還是希望有一個最終的解析表達的。其實也很簡單,我們把上面的式子規整規整,使得輸出成為一個標准的2x2矩陣,有:

可以寫為:

依1D Winograd公式, 並結合各M的公式,有下式。

注意到像這些都是2維列向量,hadamard product和concat可以交換而不影響結果,因此:

至此證得。

 

參考文獻

  1. Fast Algorithms for Convolutional Neural Networkse

  2. Fast Algorithms for Signal Processing

  3. Going beyond Full Utilization: The Inside Scoop on Nervana’s Winograd Kernels

  4. 卷積神經網絡中的Winograd快速卷積算法 注:本文關於2D Winograd的公式推導是錯誤的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM