softmax loss层的求导反向传播

  深度学习中的分类网络,一般都是使用softmax和交叉熵作为损失函数。关于softmax和cross entropy的介绍和解释可以详见我的另一篇博客softmax loss。这篇博客仅解释如何对softmax loss层进行求导反向传播。

  假设网络最后一层的输出为 z z ,经过softmax后输出为 p p ,真实标签为 y y (one hot编码),则损失函数为:

L=i=1Cyilogpi L = − ∑ i = 1 C y i log ⁡ p i

其中 C C 表示共有 C C 个类。

  对softmax loss层求导,即求 Lz ∂ L ∂ z ,可以通过求 Lzj ∂ L ∂ z j 进行说明。

Lzj=i=1Cyilogpizj=i=1Cyipipizj ∂ L ∂ z j = − ∑ i = 1 C y i ∂ log ⁡ p i ∂ z j = − ∑ i = 1 C y i p i ∂ p i ∂ z j

  因为 p p z z 经过softmax函数后的输出,即 p=softmax(z) p = s o f t m a x ( z )

pi=eziCk=1ezk p i = e z i ∑ k = 1 C e z k

pizj ∂ p i ∂ z j 的求解分为两种情况,即 i=j i = j ij i ≠ j ,分别进行推导,如下:

i=jpizj=pjzj=ezjCk=1ezkzj=ezjCk=1ezk+ezj×(1)×(1Ck=1ezk)2×ezj=pjp2j=pj(1pj) i = j 时 : ∂ p i ∂ z j = ∂ p j ∂ z j = ∂ e z j ∑ k = 1 C e z k ∂ z j = e z j ∑ k = 1 C e z k + e z j × ( − 1 ) × ( 1 ∑ k = 1 C e z k ) 2 × e z j = p j − p j 2 = p j ( 1 − p j )

ijpizj=ezi×(1)×(1Ck=1ezk)2×ezj=pipj i ≠ j 时 : ∂ p i ∂ z j = e z i × ( − 1 ) × ( 1 ∑ k = 1 C e z k ) 2 × e z j = − p i p j

故有,

Lzj=yjpjpj(1pj)ijyipi(pipj)=yi+pji=1Cyi=pjyj ∂ L ∂ z j = − y j p j p j ( 1 − p j ) − ∑ i ≠ j y i p i ( − p i p j ) = − y i + p j ∑ i = 1 C y i = p j − y j

表示成向量形式有

Lz=py ∂ L ∂ z = p − y

你可能感兴趣的:(deeplearning)