softmax分类器+cross entropy损失函数的求导

softmax是logisitic regression在多酚类问题上的推广,(W=[w_1,w_2,...,w_c])为各个类的权重因子,(b)为各类的门槛值。不要想象成超平面,否则很难理解,如果理解成每个类的打分函数,则会直观许多。预测时我们把样本分配到得分最高的类。

Notations:

  • (x):输入向量,(d imes 1)列向量,(d)是feature数
  • (W):权重矩阵,(c imes d)矩阵,(c)是label数
  • (b):每个类对应超平面的偏置组成的向量, (c imes 1)列向量
  • (z=Wx+b):线性分类器输出, (c imes 1)列向量
  • (hat{y}):softmax函数输出, (c imes 1)列向量
  • (vec{e}_j=[0,...,1,...,0]^Tinmathbb{R}^{c imes 1}),其中(1)出现在第(j)个位置
  • (1_c)表示一个全(1)(c)维列向量
  • (y):我们要拟合的目标变量,是一个one-hot vector(只有一个1,其余均为0),也是 (c imes 1)列向量 。 我们将其转置,表示为一个列向量:

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

他们之间的关系:

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

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)}{sumlimits_i exp(z_i)})=-z_k+log(sumlimits_i exp(z_i)))

依据chain rule有:

[ egin{aligned}frac{partial CE(z)}{partial W_{ij}} &=trigg(ig(frac{partial CE(z)}{partial z}ig)^Tfrac {partial z}{partial W_{ij}}igg)\ &=trigg( ig(frac{partial hat{y}}{partial z}cdotfrac{partial CE(z)}{partial hat{y}}ig)^Tfrac {partial z}{partial W_{ij}} igg)end{aligned}]

注:这里我用了Denominator layout,因此链式法则是从右往左的。

我们一个一个来求。

[egin{equation}egin{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( oldsymbol{ x}),oldsymbol{u}= oldsymbol{u}( oldsymbol{x}) (,这里) oldsymbol{ x}(特意加粗表示是列向量,)a(没加粗表示是一个标量函数,) oldsymbol{u}(加粗表示是一个向量函数。在`Numerator layout`下,)frac{partial a oldsymbol{u}}{ oldsymbol{x}}=afrac{partial oldsymbol{u}}{partial oldsymbol{x}}+ oldsymbol{u}frac{partial a}{partial oldsymbol{x}} (,而在`Denominator layout`下,则为)frac{partial a oldsymbol{u}}{partial oldsymbol{x}}=afrac{partial oldsymbol{u}}{partial oldsymbol{x}}+frac{partial a}{partial oldsymbol{x}} oldsymbol{u}^T$,对比可知上述推导用的实际是Denominator layout
以下推导均采用 Denominator layout,这样的好处是我们用梯度更新权重时不需要对梯度再转置。

[egin{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})}=ig(diag(hat{y})ig)^{-1}cdot(-y)label{eq2}end{equation} ]

(z)的第(k)个分量可以表示为:(z_k=sumlimits_j W_{kj}x_j+b_k),因此

[egin{equation}frac{partial z}{partial W_{ij}} =egin{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}_ilabel{eq3}end{equation} ]

其中(x_j)是向量(x)的第(j)个元素,为标量,它出现在第(i)行。
综合(eqref{eq1},eqref{eq2},eqref{eq3}),我们有

[egin{aligned}frac{partial CE(z)}{partial W_{ij}}&=trigg(ig( (diag(hat{y})-hat{y}hat{y}^T)cdot (diag(hat{y}))^{-1} cdot (-y) ig)^Tcdot x_j vec{e}_i igg)\&=trigg(ig( hat{y}cdot (1_c^Ty)-yig)^Tcdot x_j vec{e}_i igg)\&=(hat{y}-y)^Tcdot x_j vec{e}_i={err}_ix_jend{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) ]

那么在进行随机梯度下降的时候,更新式就是:

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

其中(lambda)是学习率

原文地址:https://www.cnblogs.com/wacc/p/5341676.html