神經網絡中快速傅立葉變換(FFT)的梯度傳遞

最近需要在神經網絡中構造複數酉矩陣做權重係數,使用了快速傅立葉變換和反變換.
但是FFT不是theano的現成操作模塊(有人寫過對應的代碼,所以應該會很快加進去了),所以想自己去寫梯度傳遞來徹底搞清楚這件事.
重新學一遍離散Fourier transform再加找梯度相關的文獻學習,整整花了一週時間.從本科一畢業DFT就忘光了...
在此總結了下,不得不說推倒的結果出來以後,真是出乎意料的漂亮,所以實現起來更是異常簡單.



傅立葉變換是線性變換.所以可以寫成F(x)=Fx的形式, F是復矩陣,x是向量.
如果是實數,根據d/dx (Ay)=A * d/dx (y). 大白話說,矩陣F乘向量x這種運算的雅可比矩陣(雅可比矩陣是函數的一階偏導數以一定方式排列成的矩陣)就是F矩陣本身.
雅可比矩陣乘以輸出端梯度就可以由F和向量的乘法實現了.
ok,拓展到複數領域,用的是F的共軛轉置,這裏有個簡單的例子大概理解一下https://math.stackexchange.com/questions/828689/complex-function-and-jacobian-matrix.
然而傅立葉變換矩陣不只如此,傅立葉變換矩陣F本身是個按比例(1/sqrt(N))縮放過的酉矩陣(scaled unitary matrix),其逆矩陣就是其共軛轉置的1/N, 具體的請看多倫多大學的論文證明11頁23式(http://www.cs.toronto.edu/~jepson/csc320/notes/fourier.pdf)
這麼一來,求傅立葉變換的梯度反向傳播,就是用傅立葉逆變換完成.注意,我們乎略1/N這個比例係數.因爲如果把傅立葉變換矩陣用sqrt(N)縮放一下編成酉矩陣的話,比例係數就是1了.
反之,傅立葉逆變換的梯度反向傳播,就是用傅立葉變換了來實現了.
奇妙~!


參考:

斯坦福大學快速傅立葉變換課堂視頻  http://open.163.com/movie/2008/2/A/L/M7Q4BLENR_M7QDNTVAL.html

傅立葉變換的在線教程  http://fourier.eng.hmc.edu/e161/lectures/fourier/fourier.html

西電DFT與FFT課件  http://web.xidian.edu.cn/kywang/files/20121027_164737.pdf

酉矩陣  https://zh.wikipedia.org/wiki/%E9%85%89%E7%9F%A9%E9%98%B5

谷歌羣組的討論  https://groups.google.com/forum/#!topic/theano-dev/ZqSf3lBH89U

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