为什么要用softmax?
交叉熵代价函数和softmax激活函数的配合使用使得权值的梯度十分的简洁
交叉熵代价函数
E
=
−
Σ
y
i
l
o
g
y
^
i
E = -\Sigma y_ilog\hat y_i
E=−Σyilogy^i
softmax激活函数
y
^
=
f
(
Z
)
=
e
Z
t
∑
i
n
e
Z
i
\hat y = f(Z) = \dfrac{e^{Z_t}}{\sum_{i}^{n} e^{Z_i}}
y^=f(Z)=∑ineZieZt
我们通过梯度下降法来求出权值更新的方向,当交叉熵和softmax配合使用时,梯度十分简洁。
d
E
d
w
i
=
d
E
d
Z
i
⋅
d
Z
i
d
w
i
=
d
E
d
Z
i
⋅
X
\dfrac{dE}{dw_i} = \dfrac{dE}{dZ_i}·\dfrac{dZ_i}{dw_i} = \dfrac{dE}{dZ_i}·X
dwidE=dZidE⋅dwidZi=dZidE⋅X
d
E
d
Z
i
=
d
(
−
Σ
y
i
l
o
g
y
^
i
)
d
Z
i
\dfrac{dE}{dZ_i} = \dfrac{d( -\Sigma y_ilog\hat y_i)}{dZ_i}
dZidE=dZid(−Σyilogy^i)
由于真实分类中只有一个
y
i
=
1
y_i=1
yi=1,其余都是0,我们关心的只是真实的标签
y
t
=
1
y_t = 1
yt=1
d
E
d
Z
t
=
d
(
−
l
o
g
y
^
t
)
d
Z
t
\dfrac{dE}{dZ_t} = \dfrac{d( -log\hat y_t)}{dZ_t}
dZtdE=dZtd(−logy^t)
=
d
(
−
l
o
g
f
(
Z
t
)
)
d
Z
t
= \dfrac{d( -log f(Z_t))}{dZ_t}
=dZtd(−logf(Zt))
=
−
1
f
(
Z
t
)
f
′
(
Z
t
)
=-\dfrac{1}{f(Z_t)}f'(Z_t)
=−f(Zt)1f′(Zt)
=
−
1
f
(
Z
t
)
e
Z
t
(
Σ
e
Z
i
−
e
Z
t
)
(
Σ
e
Z
i
)
2
=-\dfrac{1}{f(Z_t)}\dfrac{e^{Z_t}(\Sigma e^{Z_i}-e^{Z_t})}{(\Sigma e^{Z_i})^2}
=−f(Zt)1(ΣeZi)2eZt(ΣeZi−eZt)
=
y
^
t
−
1
= \hat y_t-1
=y^t−1
故对于真实标签的梯度项为 d E d w t = ( y ^ t − 1 ) X \dfrac{dE}{dw_t} = (\hat y_t-1)X dwtdE=(y^t−1)X
作为一般项的梯度为[>>推导过程] d E d w i = ( y ^ i − y i ) X \dfrac{dE}{dw_i} = (\hat y_i-y_i)X dwidE=(y^i−yi)X