softmax分類器+cross entropy損失函數的求導


softmax是logisitic regression在多酚類問題上的推廣,\(W=[w_1,w_2,...,w_c]\)為各個類的權重因子,\(b\)為各類的門檻值。不要想象成超平面,否則很難理解,如果理解成每個類的打分函數,則會直觀許多。預測時我們把樣本分配到得分最高的類。

Notations:

  • \(x\):輸入向量,\(d\times 1\)列向量,\(d\)是feature數
  • \(W\):權重矩陣,\(c\times d\)矩陣,\(c\)是label數
  • \(b\):每個類對應超平面的偏置組成的向量, \(c\times 1\)列向量
  • \(z=Wx+b\):線性分類器輸出, \(c\times 1\)列向量
  • \(\hat{y}\):softmax函數輸出, \(c\times 1\)列向量
  • \(\vec{e}_j=[0,...,1,...,0]^T\in\mathbb{R}^{c\times 1}\),其中\(1\)出現在第\(j\)個位置
  • \(1_c\)表示一個全\(1\)\(c\)維列向量
  • \(y\):我們要擬合的目標變量,是一個one-hot vector(只有一個1,其余均為0),也是 \(c\times 1\)列向量 。 我們將其轉置,表示為一個列向量:

\[y=[0,...,1,...,0]^T \]

他們之間的關系:

\[\left\{\begin{aligned}&z=Wx+b\\& \hat{y}=\mathrm{softmax}(z)=\frac{exp(z)}{1_c^Texp(z)} \end{aligned}\right. \]

cross-entropy error定義為:

\[CE(z) = -y^Tlog(\hat{y}) \]

因為\(y\)是一個one-hot vector(即只有一個位置為1),假設\(y_k=1\),那么上式等於\(-log(\hat{y}_k)=-log(\frac{exp(z_k)}{\sum\limits_i exp(z_i)})=-z_k+log(\sum\limits_i exp(z_i))\)

依據chain rule有:

\[ \begin{aligned}\frac{\partial CE(z)}{\partial W_{ij}} &=tr\bigg(\big(\frac{\partial CE(z)}{\partial z}\big)^T\frac {\partial z}{\partial W_{ij}}\bigg)\\ &=tr\bigg( \big(\frac{\partial \hat{y}}{\partial z}\cdot\frac{\partial CE(z)}{\partial \hat{y}}\big)^T\frac {\partial z}{\partial W_{ij}} \bigg)\end{aligned}\]

注:這里我用了Denominator layout,因此鏈式法則是從右往左的。

我們一個一個來求。

\[\begin{equation}\begin{aligned}\frac{\partial \hat{y}}{\partial z}&=\frac{\partial ( \frac{exp(z)}{1_c^Texp(z)})}{\partial z}\\&= \frac{1}{1_c^Texp(z)}\frac{\partial exp(z)}{\partial z}+ \frac{\partial (\frac{1}{1_c^Texp(z)})}{\partial z}( exp(z) )^T\\&= \frac{1}{1_c^Texp(z)}diag(exp(z))-\frac{1}{(1_c^Texp(z))^2}exp(z)exp(z)^T\\&=diag(\frac{exp(z)}{1_c^Texp(z)})-\frac{exp(z)}{1_c^Texp(z)}\cdot (\frac{exp(z)}{1_c^Texp(z)})^T\\&=diag(\mathrm{ softmax}(z))- \mathrm{ softmax}(z) \mathrm{ softmax}(z)^T\\&=diag(\hat{y})-\hat{y}\hat{y}^T \end{aligned}\label{eq1}\end{equation} \]

注:上述求導過程使用了Denominator layout
設$a=a( \boldsymbol{ x}),\boldsymbol{u}= \boldsymbol{u}( \boldsymbol{x}) \(,這里\) \boldsymbol{ x}\(特意加粗表示是列向量,\)a\(沒加粗表示是一個標量函數,\) \boldsymbol{u}\(加粗表示是一個向量函數。在`Numerator layout`下,\)\frac{\partial a \boldsymbol{u}}{ \boldsymbol{x}}=a\frac{\partial \boldsymbol{u}}{\partial \boldsymbol{x}}+ \boldsymbol{u}\frac{\partial a}{\partial \boldsymbol{x}} \(,而在`Denominator layout`下,則為\)\frac{\partial a \boldsymbol{u}}{\partial \boldsymbol{x}}=a\frac{\partial \boldsymbol{u}}{\partial \boldsymbol{x}}+\frac{\partial a}{\partial \boldsymbol{x}} \boldsymbol{u}^T$,對比可知上述推導用的實際是Denominator layout
以下推導均采用 Denominator layout,這樣的好處是我們用梯度更新權重時不需要對梯度再轉置。

\[\begin{equation}\frac{\partial CE(z)}{\partial \hat{y}}=\frac{\partial log(\hat{y})}{\partial \hat{y}}\cdot \frac{\partial (-y^Tlog(\hat{y}))}{\partial log(\hat{y})}=\big(diag(\hat{y})\big)^{-1}\cdot(-y)\label{eq2}\end{equation} \]

\(z\)的第\(k\)個分量可以表示為:\(z_k=\sum\limits_j W_{kj}x_j+b_k\),因此

\[\begin{equation}\frac{\partial z}{\partial W_{ij}} =\begin{bmatrix}\frac{\partial z_1}{\partial W_{ij}}\\\vdots\\\frac{\partial z_c}{\partial W_{ij}}\end{bmatrix}=[0,\cdots, x_j,\cdots, 0]^T=x_j \vec{e}_i\label{eq3}\end{equation} \]

其中\(x_j\)是向量\(x\)的第\(j\)個元素,為標量,它出現在第\(i\)行。
綜合\(\eqref{eq1},\eqref{eq2},\eqref{eq3}\),我們有

\[\begin{aligned}\frac{\partial CE(z)}{\partial W_{ij}}&=tr\bigg(\big( (diag(\hat{y})-\hat{y}\hat{y}^T)\cdot (diag(\hat{y}))^{-1} \cdot (-y) \big)^T\cdot x_j \vec{e}_i \bigg)\\&=tr\bigg(\big( \hat{y}\cdot (1_c^Ty)-y\big)^T\cdot x_j \vec{e}_i \bigg)\\&=(\hat{y}-y)^T\cdot x_j \vec{e}_i={err}_ix_j\end{aligned} \]

其中\({err}_i=(\hat{y}-y)_i\)表示殘差向量的第\(i\)

我們可以把上式改寫為

\[\frac{\partial CE(z)}{\partial W}=(\hat{y}-y)\cdot x^T \]

同理可得

\[\frac{\partial CE(z)}{\partial b}=(\hat{y}-y) \]

那么在進行隨機梯度下降的時候,更新式就是:

\[\begin{aligned}&W \leftarrow W - \lambda (\hat{y}-y)\cdot x^T \\&b \leftarrow b - \lambda (\hat{y}-y)\end{aligned} \]

其中\(\lambda\)是學習率


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM