softmax函数
这里以神经网络多分类问题为例,假设输出层有
n
n
n个神经元,输出为
z
1
,
z
2
,
.
.
.
,
z
n
z_1,z_2,...,z_n
z1,z2,...,zn,经过softmax函数后的输出为
a
1
,
a
2
,
.
.
.
,
a
n
a_1,a_2,...,a_n
a1,a2,...,an,
a
i
a_i
ai的计算公式为:
a
i
=
e
z
i
∑
j
=
1
n
e
z
j
a_i=\frac{e^{z_i}}{\sum_{j=1}^{n}{e^{z_j}}}
ai=∑j=1nezjezi
交叉熵损失函数
假设真实标签为
y
1
,
y
2
,
.
.
.
,
y
n
y_1,y_2,...,y_n
y1,y2,...,yn,由于是分类问题,因此
y
i
y_i
yi的取值为0或1,并且
∑
i
=
1
n
y
i
=
1
\sum_{i=1}^{n}y_i=1
∑i=1nyi=1。则交叉熵损失函数为:
L
(
a
,
y
)
=
−
∑
i
n
y
i
ln
a
i
L(\bold{a},\bold{y})=-\sum_{i}^ny_i\ln a_i
L(a,y)=−i∑nyilnai
求导
下面详细介绍损失函数对
z
i
z_i
zi的导数求解过程。
根据链式求导可知,
∂
L
∂
z
i
=
∑
j
∂
L
∂
a
j
∂
a
j
∂
z
i
\frac{\partial L}{\partial z_i}=\sum_j \frac{\partial L}{\partial a_j}\frac{\partial a_j}{\partial z_i}
∂zi∂L=j∑∂aj∂L∂zi∂aj
之所以要先对每个
a
j
a_j
aj求导再求和是因为每个
a
j
a_j
aj的计算表达式中都含有
z
i
z_i
zi。另外,由于当
i
i
i和
j
j
j相等以及不等时求导结果不同,因此此式可以进一步写成:
∂
L
∂
z
i
=
∂
L
∂
a
i
∂
a
i
∂
z
i
+
∑
i
≠
j
∂
L
∂
a
j
∂
a
j
∂
z
i
\frac{\partial L}{\partial z_i}=\frac{\partial L}{\partial a_i}\frac{\partial a_i}{\partial z_i}+\sum_{i\neq j} \frac{\partial L}{\partial a_j}\frac{\partial a_j}{\partial z_i}
∂zi∂L=∂ai∂L∂zi∂ai+i̸=j∑∂aj∂L∂zi∂aj
当
i
=
j
i=j
i=j时:
∂
a
i
∂
z
i
=
∑
k
e
z
k
e
z
i
−
(
e
z
i
)
2
(
∑
k
e
z
k
)
2
=
e
z
i
∑
k
e
z
k
−
(
e
z
i
∑
k
e
z
k
)
2
=
a
i
(
1
−
a
i
)
\frac{\partial a_i}{\partial z_i}=\frac{\sum_k e^{z_k}e^{z_i}-(e^{z_i})^2}{(\sum_k e^{z_k})^2}=\frac{e^{z_i}}{\sum_k e^{z_k}}-(\frac{e^{z_i}}{\sum_k e^{z_k}})^2=a_i(1-a_i)
∂zi∂ai=(∑kezk)2∑kezkezi−(ezi)2=∑kezkezi−(∑kezkezi)2=ai(1−ai)
当
i
≠
j
i\neq j
i̸=j时:
∂
a
j
∂
z
i
=
−
e
z
i
(
∑
k
e
z
k
)
2
e
z
j
=
e
z
i
∑
k
e
z
k
e
z
j
∑
k
e
z
k
=
−
a
i
a
j
\frac{\partial a_j}{\partial z_i}=-\frac{e^{z_i}}{(\sum_k e^{z_k})^2}e^{z_j}=\frac{e^{z_i}}{\sum_k e^{z_k}}\frac{e^{z_j}}{\sum_k e^{z_k}}=-a_ia_j
∂zi∂aj=−(∑kezk)2eziezj=∑kezkezi∑kezkezj=−aiaj
因此
∂
L
∂
z
i
=
∂
L
∂
a
i
∂
a
i
∂
z
i
+
∑
i
≠
j
∂
L
∂
a
j
∂
a
j
∂
z
i
=
−
y
i
a
i
a
i
(
1
−
a
i
)
+
∑
i
≠
j
(
−
y
j
a
j
)
(
−
a
i
a
j
)
=
a
i
y
i
−
y
i
+
∑
i
≠
j
a
i
y
j
=
∑
j
a
i
y
j
−
y
i
=
a
i
∑
j
y
j
−
y
i
=
a
i
−
y
i
\begin{aligned} \frac{\partial L}{\partial z_i}&=\frac{\partial L}{\partial a_i}\frac{\partial a_i}{\partial z_i}+\sum_{i\neq j} \frac{\partial L}{\partial a_j}\frac{\partial a_j}{\partial z_i}\\ &=-\frac{y_i}{a_i}a_i(1-a_i)+\sum_{i\neq j}(-\frac{y_j}{a_j})(-a_ia_j)\\ &=a_iy_i-y_i+\sum_{i\neq j}a_iy_j\\ &=\sum_ja_iy_j-y_i\\ &=a_i\sum_jy_j-y_i\\ &=a_i-y_i \end{aligned}
∂zi∂L=∂ai∂L∂zi∂ai+i̸=j∑∂aj∂L∂zi∂aj=−aiyiai(1−ai)+i̸=j∑(−ajyj)(−aiaj)=aiyi−yi+i̸=j∑aiyj=j∑aiyj−yi=aij∑yj−yi=ai−yi