当先锋百科网

首页 1 2 3 4 5 6 7

softmax_loss的真正名字应该是softmax cross entropy loss。因为softmax的定义是
f ( z i ) = s o f t m a x ( z i ) = e z i ∑ j e z j f(z_i)=softmax(z_i)=\frac{e^{z_i}}{\sum_je^{z_j}} f(zi)=softmax(zi)=jezjezi, softmax loss的定义是
L = − 1 N ∑ i = 0 N L i = − 1 N ∑ i = 0 N l o g f ( z i ) L=-\frac{1}{N}\sum_{i=0}^NL_i=-\frac{1}{N}\sum_{i=0}^{N}logf(z_i) L=N1i=0NLi=N1i=0Nlogf(zi)
其中 L i L_i Li是样本 ( X i , y i ) (X_i,y_i) (Xi,yi)的loss,所有样本的loss平均值就是最后的loss。
只考虑一个样本 ( X i , y i ) (X_i,y_i) (Xi,yi)的loss, L i = − l o g f ( z i ) = − z i + l o g ∑ j e z j L_i=-logf(z_i)=-z_i+log\sum_j{e^{z_j}} Li=logf(zi)=zi+logjezj。显然 L i L_i Li z i z_i zi导数和对 z j   j ≠ i z_j \ j \neq i zj j̸=i导数是不一样的,需要分开求解。

  • d L i d z i \frac{dL_i}{dz_i} dzidLi
    d L i d z i = − 1 + f ( z i ) \frac{dL_i}{dz_i} = -1 + f(z_i) dzidLi=1+f(zi)

  • d L i d z j   j ≠ i \frac{dL_i}{dz_j} \ j \neq i dzjdLi j̸=i
    d L i d z j = f ( z j ) \frac{dL_i}{dz_j} = f(z_j) dzjdLi=f(zj)

所以对于样本 ( X i , y i ) (X_i,y_i) (Xi,yi),计算出 s o f t m a x softmax softmax值(一个向量,维度和类别数目一致),令对应 y i y_i yi对应的元素减去1,其他元素保持不变,即完成 s o f t m a x softmax softmax求导。

z i z_i zi是softmax_loss的输入,以线性分类器为例, z i = x i × W z_i = x_i \times W zi=xi×W,其中
W . s h a p e = ( D , C ) ,   x i . s h a p e = ( 1 , D )   z i . s h a p e = ( 1 , C ) W.shape = (D,C), \ x_i.shape = (1,D) \ z_i.shape = (1,C) W.shape=(D,C), xi.shape=(1,D) zi.shape=(1,C), D是特征 x x x的维度,C是类别数目。前面得到 s o f t m a x softmax softmax的导数 d e l t a . s h a p e = ( 1 , C ) delta.shape = (1,C) delta.shape=(1,C)后,利用求导链式法则可以计算出loss对参数W的导数。
d L i d X i = n p . t r a n p o s e ( x i ) . d o t ( d e l t a ) \frac{dL_i}{dX_i}=np.tranpose(x_i).dot(delta) dXidLi=np.tranpose(xi).dot(delta)
以上单个样本 ( X i , y i ) (X_i,y_i) (Xi,yi) d W dW dW的贡献,多个样本时去平均值即可得到batch的 d W dW dW