1. 程式人生 > >在深度學習中Softmax交叉熵損失函式的公式求導

在深度學習中Softmax交叉熵損失函式的公式求導

(以下部分基本介紹轉載於點選開啟連結)

在深度學習NN中的output層通常是一個分類輸出,對於多分類問題我們可以採用k-二元分類器來實現,這裡我們介紹softmax。softmax迴歸中,我們解決的是多分類問題(相對於 logistic 迴歸解決的二分類問題),類標 \textstyle y 可以取 \textstyle k 個不同的值(而不是 2 個)。因此,對於訓練集 \{ (x^{(1)}, y^{(1)}), \ldots, (x^{(m)}, y^{(m)}) \},我們有 y^{(i)} \in \{1, 2, \ldots, k\}。(注意此處的類別下標從 1 開始,而不是 0)。例如,在 MNIST 數字識別任務中,我們有 \textstyle k=10 個不同的類別。


對於給定的測試輸入 \textstyle x,我們想用假設函式針對每一個類別j估算出概率值 \textstyle p(y=j | x)。也就是說,我們想估計 \textstyle x 的每一種分類結果出現的概率。因此,我們的假設函式將要輸出一個 \textstyle k

 維的向量(向量元素的和為1)來表示這 \textstyle k 個估計的概率值。 具體地說,我們的假設函式 \textstyle h_{\theta}(x) 形式如下:

\begin{align}h_\theta(x^{(i)}) =\begin{bmatrix}p(y^{(i)} = 1 | x^{(i)}; \theta) \\p(y^{(i)} = 2 | x^{(i)}; \theta) \\\vdots \\p(y^{(i)} = k | x^{(i)}; \theta)\end{bmatrix}=\frac{1}{ \sum_{j=1}^{k}{e^{ \theta_j^T x^{(i)} }} }\begin{bmatrix}e^{ \theta_1^T x^{(i)} } \\e^{ \theta_2^T x^{(i)} } \\\vdots \\e^{ \theta_k^T x^{(i)} } \\\end{bmatrix}\end{align}

注:這裡我們用類似機器學習裡面(θ^T)x 來代替(w^T)x+b

其中 \theta_1, \theta_2, \ldots, \theta_k \in \Re^{n+1} 是模型的引數。請注意 \frac{1}{ \sum_{j=1}^{k}{e^{ \theta_j^T x^{(i)} }} }這一項對概率分佈進行歸一化,使得所有概率之和為 1 。


為了方便起見,我們同樣使用符號 \textstyle \theta 來表示全部的模型引數。在實現Softmax迴歸時,將 \textstyle \theta 用一個 \textstyle k \times(n+1) 的矩陣來表示會很方便,該矩陣是將 \theta_1, \theta_2, \ldots, \theta_k 按行羅列起來得到的,如下所示:

\theta = \begin{bmatrix}\mbox{---} \theta_1^T \mbox{---} \\\mbox{---} \theta_2^T \mbox{---} \\\vdots \\\mbox{---} \theta_k^T \mbox{---} \\\end{bmatrix}

現在我們來介紹 softmax 迴歸演算法的代價函式。在下面的公式中,\textstyle 1\{\cdot\} 是示性函式,其取值規則為:

 值為真的表示式 

, \textstyle 1\{ 值為假的表示式 \textstyle \}=0。舉例來說,表示式 \textstyle 1\{2+2=4\}

 的值為1 ,\textstyle 1\{1+1=5\}的值為 0。我們的代價函式為:

\begin{align}J(\theta) = - \frac{1}{m} \left[ \sum_{i=1}^{m} \sum_{j=1}^{k}  1\left\{y^{(i)} = j\right\} \log \frac{e^{\theta_j^T x^{(i)}}}{\sum_{l=1}^k e^{ \theta_l^T x^{(i)} }}\right]\end{align}在Softmax迴歸中將 \textstyle x 分類為類別 \textstyle j的概率為:
p(y^{(i)} = j | x^{(i)} ; \theta) = \frac{e^{\theta_j^T x^{(i)}}}{\sum_{l=1}^k e^{ \theta_l^T x^{(i)}} }.

下面我們來看看求導的問題

softmax的函式公式如下:


中,表示第L層(通常是最後一層)第j個神經元的輸入,表示第L層第j個神經元的輸出,表示自然常數。注意看,表示了第L層所有神經元的輸入之和。

先給出aj對zi的偏導在後面要 用到


在J代價函式中取出對單一資料對(x(i), y(i))的
下面我們以L對Wj的偏導舉例:
注:左圖的Wj,bj,aj,zj,均是第L層的.Wj指的是W矩陣中的第j行
同理解得:
將loss擴充到整個資料集\{ (x^{(1)}, y^{(1)}), \ldots, (x^{(m)}, y^{(m)}) \}

則有:(ps:以下的k是指最後一層及L層的unit數,n是L-1層的unit數,m是資料集大小)


db[L]的python寫法:np.sum(A-Y, axis=1, keepdims=True)
最後順便附帶在python中J的實現
J = np.sum(Y * np.log(A + 1e-8)) * (-1 / m)
參考網址: softmax迴歸: http://ufldl.stanford.edu/wiki/index.php/Softmax%E5%9B%9E%E5%BD%92

softmax的log似然代價函式(公式求導)

http://m.blog.csdn.net/u014313009/article/details/51045303