[機器學習] Backpropagation with Softmax / Cross Entropy

Hoskiss
Hoskiss stand
Published in
4 min readMay 12, 2019

--

先來張很 6 的圖緩和緩和氣氛,能把圖畫成這樣我是非常佩服…
(本文截圖出自 O’reilly《Deep Learning : 用Python進行深度學習的基礎理論實作》,是本蠻全面的好書,這邊想介紹一部分基本觀念,不會涉及太多重要內容,若有不妥請告知)

所以這張圖在做什麼呢,是在計算 softmax 跟 cross entropy 這兩層的backpropagation。順便重新理解一下 backpropagation 的概念,他的目標非常單純,我能想到的最直接說明,就是探討某一層 input 的變動,對於最後的 loss 會造成什麼變化,因為我們想要降低 loss,如果知道這個關係,我們就可以去改進我們的參數,也就是 gradient descent 要做的事情。我們來看個基本的例子:

設 z = x*y,x 與 y 是前一層的輸出,z 是這一層的輸出。而且假設我們已經知道改變 z 對於最後的 loss 會有什麼影響了,也就是說, 現在 ∂L / ∂z 這個值當成是已知數,那請問,改變前一層的 x 對於 loss 會有什麼影響呢,也就是 ∂L / ∂x 是多少?那回到基礎的微積分連鎖律,∂L / ∂x = (∂L / ∂z) * (∂z / ∂x) => ∂L / ∂x = (∂L / ∂z) * y,前後兩者是差一個乘上 y 值,也就是可以求得這兩者之間的關係。所以從圖上來看,從這一層輸出變化量對 loss 影響出發,可以求得前一層輸出變化量對 loss 影響的關係,如此往前計算,一層一層往前推就是 backpropagation,而且兩者的關聯可以用偏微分求得

所以書上用了一個圖形結構可以代表計算流程的方式,來計算神經網路很常用到的 softmax + cross entropy 層,整個的 backpropagation,其實花了一些時間才搞懂,而且覺得有點混淆,那我們試著拿起筆來算一下偏微吧!一樣照上面的圖,假設我們前面的神經網路產生三個 input a1, a2, a3,餵給 softmax + cross entropy (loss),而我們想求改變 a1 會對 loss 有什麼影響?在計算之前,對於 cross entropy 的公式可以再參考一下這篇,裡面的第二位解答有提到,對於模型架構只有單一輸出而判斷兩種分類的,cross entropy loss 適合寫成下列形式,其中 y’ 代表 ground truth 答案,y 代表模型預測

適合架構為單一輸出而判斷兩種分類

而如果模型架構是多重輸出而且答案是互斥的,也就是當某一個 y’(i) (i表示下標XD) 是 1 的時候,其他輸出的 y’ 是 0,代表我們的理想分類只會是其中一類,舉例來說就是單一數字的圖片辨識,目標是只代表一個數字。這個時候 cross entropy loss 就適合寫成下列形式

適合架構為多重輸出且分類答案是互斥的

有了基本概念後,開始來手動計算一下吧,不過以下用到的符號會跟最上面的架構圖一致,label 答案用 t 表示,而 predict 輸入會用 y 來表示,我們來求改變 a1 對於 loss 有什麼影響

我們考慮的 softmax + cross entropy 架構是處理分類問題,也就是 t 這個label,如果在正確分類時值為 1,錯誤分類時值為 0,而正確答案因為是互斥的,同時只會有一個 t 是 1,所以 t1 + t2 + t3 = 1。最後得到結果與書上推導結果一致,非常的簡潔呢這個係數 y1 - t1,是不是因為如此而設計出 softmax 呢?還沒研究原因,我現在猜想卻覺得有可能,大神們實在太厲害了 XD。如果喜歡這篇的話,麻煩幫我按下拍手給些鼓勵吧,任何回饋或建議也都歡迎喔~謝謝,我們接著繼續向機器學習學習

--

--

Hoskiss
Hoskiss stand

生活是不斷成長以追求平衡的巧妙融合