親愛的朋友們,多多有一段時間沒有更新啦,主要是我在學習transformers突然開始思考幾個神經網絡相關的基本問題(模型結構越寫越複雜,調包效果越來越好,是否還記得為什麼而出發呢?),讀者朋友也可以看看是否可以自如回答:
- 什麼是鍊式法則?
- 什麼是Jacobin矩陣?
- Jacobin有什麼用處?
- 梯度的定義是什麼?
- 方向導數和梯度的關系是什麼?
- 神經網絡中張量反向傳播有什麼特點?
- 哪些特性保證了神經網絡中高效的梯度計算?
我将我的總結神經網絡中的數學基礎寫到了一起放到了github,做成了一個網站,當然網站中也會逐漸加入之前寫的transformer推送内容:
https://erenup.github.io/deeplearningbasics/
還會持續更新,歡迎大家star或者送出issue/request~謝謝。
本來想一篇推送更新完,但考慮到大家時間有限,沒法一次看完,于是個人覺得把最常用的章節挑出來更新一下,本文公式較多,排版盡可能簡單化啦。
完整内容請查閱網站~
1. 矩陣
乘以列向量
求
可以看作函數将輸入
經過
變換得到輸出
,那麼Jacobian矩陣
那麼
由于
if
else 0, 是以有
2. 向量等于自身,求
因為
是以
,将其放在鍊式法則中進行矩陣乘法時候不會改變其他矩陣。
3. 對向量 中每個元素進行變換, 求
由于
是以
是以
是一個diagonal matrix 且
矩陣乘以一個diagonal矩陣也就是每個元素進行幅度變換,是以鍊式法則中的矩陣乘以
相當于和
做elementwise 乘法。
5. 求
我們開始引入更複雜的情況,因為神經網絡中往往包含多次鍊式法則的引用,這裡我們假設已經知道
,直接求
。
假設神經網絡的損失函數
是标量,我們想計算的是損失函數對參數
的梯度。我們可以想象神經網絡這個函數輸入是一個
形狀的參數,輸出是一個标量,結合上一章節Jacobian知識我們可以知道
形狀和
一樣,是以在神經網絡訓練的時候可以将參數減輕去參數的梯度乘以學習率。
根據鍊式法則,我們需要求出
。這個三維的張量不友善表示且十分複雜,是以我們先隻看對
求導
。
是以隻有
時候非零
是以
是以得到
假設神經網絡到達softmax之前的輸出為
,
為分類數量,那麼
是以
結語
本來對于矩陣求導還有些發怵的我,在熟練以上幾個公式之後發現神經網絡反向傳播的求導也不是那麼遙不可觸。希望能對大家有幫助。