前言
推導下最小均方差(MSE)和交叉熵(CE)兩種loss函數的導數,看看還是否滿足誤差後傳的原則?有什麼區別?
在一般地網絡結構下是怎麼樣的?在CNN下又是怎麼推導的?在RNN結構下(LSTM)又是怎麼推導的?直接討論多元判別的情況,二元讀者自行推導。
MSE & CE
上個小圖,說明下最後輸出結構及兩種loss的形式。
MSE的思路:是不管哪個輸出維度,都想盡量靠近。
CE的思路:只將樣本集出現的概率最大化。交叉熵與最大似然是一致的,在前面講過,這裏不多說了。
樣本標籤表示爲one-hot類型。
輸出層的判別函數
二元判別時,更習慣用
其導數:
多元判別時,更習慣用
其中
其導數:
上述兩個函數,softmax退化爲二元時,就是sigmoid函數關係詳見。兩個函數的導數形式也很相近,就是一樣的,不過一個兼顧了多維判斷。notice:退化也是有條件的退化,去掉了一組判斷0的參數;二元的sigmoid判斷輸出是單節點的。
有人在博客裏亂寫,將二元判斷的情況胡亂推廣到多元判斷,要注意二元的單節點輸出是化簡的結構。
比如,二元下,MSE和CE做loss對
在二元且單節點輸出時,兩個導數間的差距是
但是在多元判斷時,用softmax做判斷函數的情況下:
在多元節點輸出時,兩個導數間的差距就不是簡單的
單樣本下求導
1)對MSE下的單樣本時輸入
其中
2)對CE下的單樣本時輸入
注意兩處導數的不同:
1)
2)
代入輸出節點的判別函數softmax的導數後:
發現用softmax做CE的最後一層判斷函數是非常好的,可以只將誤差部分後傳;而MSE則多引入一個判別導數部分。另外,CE比MSE要好的地方,僅對目標標記位置用力氣(True),對其他非標記位置不管,反而更容易集中,不像MSE會有多個位置分散判斷的集中力。
在一般網絡結構下,不同Loss對誤差後傳有什麼影響麼?
上個小圖表示倒數的後幾層。
對誤差後傳是沒有影響的,只是最後一層往前傳遞的內容有點變化而已。
1) CE損失函數下的倒數
對CE表示損失函數的網絡倒數第一層參數
對倒數第二層的
2) MSE下的求導:
比較發現:
網絡結構不變,對h的偏導不變,鏈式結構仍存在,不影響誤差後傳的整體結構;且由於最後層的各個節點累加仍然存在,也不影響多點集中向後的原則。
最後一層往前傳遞的內容在變化:
CE是
在網絡層間的傳遞,仍然遵循多路集中一點的原則。
思考:誤差後傳的基本結構是由網絡的串聯形式決定的,如果改變網絡的組織結構,化積爲和,就會改變整個參數更新體系,同時也能徹底解決掉梯度消失問題,甚至直接開闢一個新的ML分支。
卷積層和池化層導數
1)卷積層、卷積導數、誤差後傳
卷積的操作:
注意每個filter共享一個bias。
如何誤差後傳呢?由於卷積層的參數
其中
單樣本MSEloss爲:
對
誤差後傳計算小竅門:
反向傳播的誤差在某層
本層每個節點的激活
這樣自然就會將各種情況的參數作用形式合併到一個式子裏。
卷積層的誤差也是同樣如上所述規律。
計算下卷積圖中的卷積參數
將
2)池化層導數及誤差後傳
池化只是做採樣,只需要將依照選擇的動作,將誤差傳遞就好。
在反向傳播時,我們首先會把
在CNN網絡結構下,不同Loss對誤差後傳有什麼不同?
上面的推導也已經看到了,卷積和池化層,仍然遵循誤差後傳的規律。不同loss對誤差後傳無影響,唯一的影響是最後層後傳的內容不同(由於softmax判別函數的特殊性剛好與loss互相抵消掉部分內容);更新最後層參數的稍微不同(由於loss函數本身的不同導致)。
MSE後傳的是
CE後傳的是
RNN 結構下的BP
未完待續….
RNN的結構不同於傳統的網絡,也不同於CNN的網絡,而是以迭代的形式出現。傳統網絡,層內不共享參數,層間不共享參數;CNN是層內共享參數,層間不共享參數;RNN是層內不共享參數,層間共享參數。
並且輸入數據樣本和輸出表示上也不同於一般的情況,是連續的時間序列數據。表示也不是one-hot形式,而是以對應位置概率預測形式出現。比如,輸入[我 很 開心]==> 輸出[(0.8, 0.1, 0.1), (0.1, 0.9, 0.0), (0.2, 0.2, 0.6)]。
梯度優化方法應用位置
疑問:各種對參數更新的方法做的改進,比如,Adam怎麼應用過來呢?
錯誤的回答:目測應該是最後一層的導數求解後的改進,如果對每個激活的導數都改動,那是不是有點過分了,不能表示真實輸出和預測輸出的區別。梯度的改進是爲了能夠更真實地描述與最優解的距離,且能夠在更新參數時更快更直接朝着最優解方向。
正確的回答:梯度優化的方法,是對
batch normalize 怎麼加進去
1)batch normalize在一般網絡中,如何加入?
這個前面博客“Batch Norm的幾點說明”都推導過,是對激活函數的修改,對整個誤差後傳結構無影響。
2)batch normalize在CNN網絡中,如何加入?
這個也提到過,在前面博客裏,至於怎麼推導。只需將上面的激活函數對應的替換下就OK。
卷積計算與cross-relation計算等價
學過通信的童鞋,肯定都會對CNN裏面的卷積操作持懷疑態度,這分明不是卷積嘛,騙我沒學過信號與處理理論麼。裏面的計算轉換下,就會發現相通的地方。
總結
1. 雖然是不同的loss函數下,只要網絡結構仍然是層間直連,對誤差傳遞的多點往前集中的形式是無影響的。
2. 對某層參數求導時,敏感值的計算,每層的輸出側都是需要累加到一起的,再對該層的參數求導。
3. 交叉熵和均方差的loss函數,在最後層參數更新上是不一樣的,前者只對樣本類別標記下對應的參數更新,後者則是所有參數本次迭代都有更新。
4. 池化層由於無學習的動作,只是選擇,所以處理更爲簡單。