zoukankan      html  css  js  c++  java
  • 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)是学习率

  • 相关阅读:
    【转】Windows Server 2003为什么识别不了的移动硬盘
    VBSCRIPT常用函数【转】
    【轉】javascript实现图片缩略与优化
    【转】Tips:禁用Windows Beep声
    EXT同struts2后台交互一个中文问题
    ASCII码对照表[转]
    bat判断进程存在不存在
    look与look like
    美国俚语there was no snap in his turtle
    take credit for用法
  • 原文地址:https://www.cnblogs.com/wacc/p/5341676.html
Copyright © 2011-2022 走看看