Softmax 反向传播公式推导
标签(空格分隔): Caffe源代码
Softmax是深度学习最常见的激活函数,能够将输入按照某一维度进行归一化,输出(0, 1)的值
Softmax函数形式为:
f(xi)=exi∑j=1Kexj
f
(
x
i
)
=
e
x
i
∑
j
=
1
K
e
x
j
现在我们对Softmax函数进行求导,分为两种情况:
(1)当
k=i
k
=
i
时,
∂f∂xk=∂f∂xi=exi×∑j=1Kexj−e2xi(∑j=1Kexj)2=exi×(∑j=1Kexj−exi)(∑j=1Kexj)2=exi∑j=1Kexj×∑j=1Kexj−exi∑j=1Kexj
∂
f
∂
x
k
=
∂
f
∂
x
i
=
e
x
i
×
∑
j
=
1
K
e
x
j
−
e
2
x
i
(
∑
j
=
1
K
e
x
j
)
2
=
e
x
i
×
(
∑
j
=
1
K
e
x
j
−
e
x
i
)
(
∑
j
=
1
K
e
x
j
)
2
=
e
x
i
∑
j
=
1
K
e
x
j
×
∑
j
=
1
K
e
x
j
−
e
x
i
∑
j
=
1
K
e
x
j
显然,上面式子可以化简成如下:
∂f∂xk=f(xk)(1−f(xk))
∂
f
∂
x
k
=
f
(
x
k
)
(
1
−
f
(
x
k
)
)
(2)当
k≠i
k
≠
i
时
∂f∂xk=−exi×exk(∑j=1Kexj)2=−f(xi)f(xk)
∂
f
∂
x
k
=
−
e
x
i
×
e
x
k
(
∑
j
=
1
K
e
x
j
)
2
=
−
f
(
x
i
)
f
(
x
k
)
两者结合起来就是:
∂f∂xk=−∑i≠kf(xi)f(xk)+f(xk)(1−f(xk))=f(xk)−∑i=1Kf(xk)f(xi)
∂
f
∂
x
k
=
−
∑
i
≠
k
f
(
x
i
)
f
(
x
k
)
+
f
(
x
k
)
(
1
−
f
(
x
k
)
)
=
f
(
x
k
)
−
∑
i
=
1
K
f
(
x
k
)
f
(
x
i
)
那么在Caffe代码中怎么进行反向传播的呢?