Neural-Networks
神經網絡中的 Softmax 層
我正在嘗試向使用反向傳播訓練的神經網絡添加一個 softmax 層,因此我正在嘗試計算它的梯度。
softmax 輸出為在哪裡是輸出神經元數。
如果我推導出它,那麼我得到
類似於邏輯回歸。然而這是錯誤的,因為我的數值梯度檢查失敗。
我究竟做錯了什麼?我有一個想法,我也需要計算交叉導數(即) 但我不確定如何做到這一點並保持梯度的維度相同,以便適合反向傳播過程。
我對為此提供自己的答案感到有點不好,因為它被變形蟲和 juampa 很好地捕捉到了,除了關於如何將雅可比矩陣 還原為向量的最終直覺。
您正確導出了雅可比矩陣的對角線的梯度,也就是說
正如變形蟲所說,你還必須推導出雅可比行列式的非對角線條目,這會產生
這兩個概念定義可以方便地使用稱為Kronecker Delta的構造組合在一起,因此梯度的定義變為
所以雅可比矩陣是方陣
amoeba 和 juampa 已經涵蓋了到目前為止的所有信息。問題當然是,我們需要從已經計算的輸出錯誤中獲取*輸入錯誤。*由於輸出誤差的梯度取決於所有輸入,然後是輸入的梯度是
給定上面定義的雅可比矩陣,這可以簡單地實現為矩陣和輸出誤差向量的乘積:
如果 softmax 層是您的輸出層,那麼將其與交叉熵成本模型相結合可以將計算簡化為
在哪裡是標籤的向量,並且是 softmax 函數的輸出。簡化形式不僅方便,而且從數值穩定性的角度來看也非常有用。