【深度學習】神經(jīng)網(wǎng)絡中幾個常用的求導公式
親愛的朋友們,多多有一段時間沒有更新啦,主要是我在學習transformers突然開始思考幾個神經(jīng)網(wǎng)絡相關(guān)的基本問題(模型結(jié)構(gòu)越寫越復雜,調(diào)包效果越來越好,是否還記得為什么而出發(fā)呢?),讀者朋友也可以看看是否可以自如回答:
什么是鏈式法則?
什么是Jacobin矩陣?
Jacobin有什么用處?
梯度的定義是什么?
方向?qū)?shù)和梯度的關(guān)系是什么?
神經(jīng)網(wǎng)絡中張量反向傳播有什么特點?
哪些特性保證了神經(jīng)網(wǎng)絡中高效的梯度計算?
我將我的總結(jié)神經(jīng)網(wǎng)絡中的數(shù)學基礎(chǔ)寫到了一起放到了github,做成了一個網(wǎng)站,當然網(wǎng)站中也會逐漸加入之前寫的transformer推送內(nèi)容:
https://erenup.github.io/deeplearningbasics/
還會持續(xù)更新,歡迎大家star或者提交issue/request~謝謝。
本來想一篇推送更新完,但考慮到大家時間有限,沒法一次看完,于是個人覺得把最常用的章節(jié)挑出來更新一下,本文公式較多,排版盡可能簡單化啦。
完整內(nèi)容請查閱網(wǎng)站~
1. 矩陣乘以列向量求
可以看作函數(shù)將輸入 經(jīng)過變換得到輸出,那么Jacobian矩陣
那么
由于 if else 0, 所以有
2.
3. 向量等于自身,求
因為 所以
所以,將其放在鏈式法則中進行矩陣乘法時候不會改變其他矩陣。
4. 對向量中每個元素進行變換, 求
由于所以
所以是一個diagonal matrix 且
矩陣乘以一個diagonal矩陣也就是每個元素進行幅度變換,因此鏈式法則中的矩陣乘以相當于和做elementwise 乘法。
5. ,求
我們開始引入更復雜的情況,因為神經(jīng)網(wǎng)絡中往往包含多次鏈式法則的引用,這里我們假設已經(jīng)知道,直接求。
假設神經(jīng)網(wǎng)絡的損失函數(shù)是標量,我們想計算的是損失函數(shù)對參數(shù)的梯度。我們可以想象神經(jīng)網(wǎng)絡這個函數(shù)輸入是一個形狀的參數(shù),輸出是一個標量,結(jié)合上一章節(jié)Jacobian知識我們可以知道形狀和一樣,所以在神經(jīng)網(wǎng)絡訓練的時候可以將參數(shù)減輕去參數(shù)的梯度乘以學習率。
根據(jù)鏈式法則,我們需要求出。這個三維的張量不方便表示且十分復雜,因此我們先只看對求導。
所以只有時候非零
所以
所以得到
6.
7.
假設神經(jīng)網(wǎng)絡到達softmax之前的輸出為,為分類數(shù)量,那么
所以
結(jié)語
本來對于矩陣求導還有些發(fā)怵的我,在熟練以上幾個公式之后發(fā)現(xiàn)神經(jīng)網(wǎng)絡反向傳播的求導也不是那么遙不可觸。希望能對大家有幫助。
覺得不錯幫點個贊、轉(zhuǎn)發(fā)、在看吧。謝謝
往期精彩回顧 本站qq群851320808,加入微信群請掃碼:
