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\)是學習率