softmax公式
a j = e Z j ∑ i = 1 m e Z i a_j=\frac{e^{Z_j}}{\sum_{i=1}^{m}e^{Z_i}} aj=∑i=1meZieZj
简单解释一下这个公式, a j a_j aj表示最终输出第j类的概率,而第j类的概率是用 e Z j e^{Z_j} eZj比上所有类别的和。
损失函数
L
=
−
∑
i
y
i
ln
a
i
L=-\sum_i{y_i\ln{a_i}}
L=−∑iyilnai
损失函数用这个而不用平方差的形式,简单的说是因为这个训练出的模型效果更好。
详细解释请看这篇博客:平方损失函数与交叉熵损失函数
求导
先约定一下: d Z i dZ_i dZi表示 ∂ L ∂ Z i \frac{\partial L}{\partial Z_i} ∂Zi∂L
d Z i = ∂ L ∂ Z i = ∑ j ( ∂ L j ∂ a j ∂ a j ∂ Z i ) = ∑ j ( ∂ ( − y j ln a j ) ∂ a j ∂ a j ∂ Z i ) dZ_i=\frac{\partial L}{\partial Z_i}=\sum_j{(\frac{\partial L_j}{\partial a_j}\frac{\partial a_j}{\partial Z_i})}=\sum_j{(\frac{\partial {(-y_j\ln{a_j}})}{\partial a_j}\frac{\partial a_j}{\partial Z_i})} dZi=∂Zi∂L=∑j(∂aj∂Lj∂Zi∂aj)=∑j(∂aj∂(−yjlnaj)∂Zi∂aj)
先不看求和符号,分成两部分 ∂ ( − y j ln a j ) ∂ a j , ∂ a j ∂ Z i \frac{\partial {(-y_j\ln{a_j}})}{\partial a_j},\frac{\partial a_j}{\partial Z_i} ∂aj∂(−yjlnaj),∂Zi∂aj进行求导。
∂ ( − y j ln a j ) ∂ a j = − y j a j \frac{\partial {(-y_j\ln{a_j}})}{\partial a_j}=-\frac{y_j}{a_j} ∂aj∂(−yjlnaj)=−ajyj
∂
a
j
∂
Z
i
\frac{\partial a_j}{\partial Z_i}
∂Zi∂aj,这部分比较特殊,i和j代表不同的数,i表示一个特定的数,而j表示任意一个节点。
所以我们分两种情况:
1、i=j时:
∂
a
j
∂
Z
i
=
∂
a
i
∂
Z
i
=
∂
e
Z
i
∑
k
e
Z
k
∂
Z
i
=
e
Z
i
∑
k
e
Z
k
−
(
e
Z
i
)
2
(
∑
k
e
Z
k
)
2
\frac{\partial a_j}{\partial Z_i}=\frac{\partial a_i}{\partial Z_i}=\frac{\partial {\frac{e^{Z_i}} {\sum_k e^{Z_k}}}}{\partial Z_i}=\frac{e^{Z_i}\sum_k{e^{Z_k}}-(e^{Z_i})^2}{(\sum_k{e^{Z_k}})^2}
∂Zi∂aj=∂Zi∂ai=∂Zi∂∑keZkeZi=(∑keZk)2eZi∑keZk−(eZi)2
解释一下
(
e
Z
i
)
2
(e^{Z_i})^2
(eZi)2是怎么来的,对
∑
k
e
Z
k
\sum_k{e^{Z_k}}
∑keZk求导,等于对
e
Z
1
+
e
Z
2
+
.
.
.
e
Z
i
+
.
.
.
+
e
Z
n
e^{Z_1}+e^{Z_2}+...e^{Z_i}+...+e^{Z_n}
eZ1+eZ2+...eZi+...+eZn求导,因为k是从一开始的,肯定有一个k值和i相等,而其他
e
Z
k
e^{Z_k}
eZk相对于
Z
i
Z_i
Zi都是常数,求导变成零,只剩下
e
Z
i
e^{Z_i}
eZi,所以求导为上面的形式。继续推导。
上式=
e
Z
i
∑
k
e
Z
k
(
1
−
e
Z
i
∑
k
e
Z
k
)
=
a
i
(
1
−
a
i
)
\frac{e^{Z_i}}{\sum_ke^{Z_k}}(1-\frac{e^{Z_i}}{\sum_ke^{Z_k}})=a_i(1-a_i)
∑keZkeZi(1−∑keZkeZi)=ai(1−ai)
2、
i
≠
j
i\neq j
i̸=j时:
∂
a
j
∂
Z
i
=
∂
e
Z
j
∑
k
e
Z
k
∂
Z
i
=
−
e
Z
i
e
Z
j
(
∑
k
e
Z
k
)
2
=
−
a
i
a
j
\frac{\partial a_j}{\partial Z_i}=\frac{\partial {\frac{e^{Z_j}} {\sum_{k}e^{Z_k}}}}{\partial Z_i}=\frac{-e^{Z_i}e^{Z_j}}{(\sum_{k}{e^{Z_k}})^2}=-a_ia_j
∂Zi∂aj=∂Zi∂∑keZkeZj=(∑keZk)2−eZieZj=−aiaj
这里对
∑
k
e
Z
k
\sum_k{e^{Z_k}}
∑keZk求导方法和上面一样。
最后将上面的导数合并一下
∑
j
(
∂
L
j
∂
a
j
∂
a
j
∂
Z
i
)
=
∑
j
≠
i
(
∂
L
j
∂
a
j
∂
a
j
∂
Z
i
)
+
∑
j
=
i
(
∂
L
j
∂
a
j
∂
a
j
∂
Z
i
)
\sum_j{(\frac{\partial L_j}{\partial a_j}\frac{\partial a_j}{\partial Z_i})}=\sum_{j\neq i}{(\frac{\partial L_j}{\partial a_j}\frac{\partial a_j}{\partial Z_i})}+\sum_{j=i}{(\frac{\partial L_j}{\partial a_j}\frac{\partial a_j}{\partial Z_i})}
j∑(∂aj∂Lj∂Zi∂aj)=j̸=i∑(∂aj∂Lj∂Zi∂aj)+j=i∑(∂aj∂Lj∂Zi∂aj)
=
∑
j
≠
i
−
y
j
a
j
(
−
a
i
a
j
)
+
∑
j
=
i
−
y
i
a
i
a
i
(
1
−
a
i
)
=\sum_{j\neq i}{-\frac{y_j}{a_j}(-a_ia_j)}+\sum_{j=i}{-\frac{y_i}{a_i}}a_i(1-a_i)
=j̸=i∑−ajyj(−aiaj)+j=i∑−aiyiai(1−ai)
=
(
∑
j
≠
i
a
i
y
j
)
+
(
a
i
−
1
)
y
i
=
(
(
a
i
∑
j
≠
i
y
j
)
+
a
i
y
i
)
−
y
i
=(\sum_{j\neq i}{a_iy_j})+(a_i-1)y_i=((a_i\sum_{j\neq i}y_j)+a_iy_i)-y_i
=(j̸=i∑aiyj)+(ai−1)yi=((aij̸=i∑yj)+aiyi)−yi
=
a
i
(
∑
j
y
j
)
−
y
i
=
a
i
−
y
i
=a_i(\sum_jy_j)-y_i=a_i-y_i
=ai(j∑yj)−yi=ai−yi
最后我想说明一下,
(
(
a
i
∑
j
≠
i
y
j
)
+
a
i
y
i
)
((a_i\sum_{j\neq i}y_j)+a_iy_i)
((ai∑j̸=iyj)+aiyi)这里我用了两个括号,就是想给大家一个提示,因为
a
i
∑
j
≠
i
y
j
a_i\sum_{j\neq i}y_j
ai∑j̸=iyj这里少了一个
j
=
i
j=i
j=i的点,而后面有一个
a
i
y
i
a_iy_i
aiyi,合起来正好是
a
i
(
∑
j
y
j
)
a_i(\sum_jy_j)
ai(∑jyj);还有一点是最后的结果为什么去掉求和符号,对于分类问题
∑
j
y
j
\sum_jy_j
∑jyj等于1。
举个例子:
[
y
1
y
2
y
3
]
\begin{bmatrix} y1\\ y2 \\ y3 \end{bmatrix}
⎣⎡y1y2y3⎦⎤表示最终要分的三个类别,而分的类别最终只能有一种结果,所以
y
1
,
y
2
,
y
3
y1,y2,y3
y1,y2,y3中只有一个为1,其他全为零,所以求和为1。
softmax的案例将会在下一篇博客中详细介绍。