1.Why
SoftMax , "软性"最大值,将分类的类别以概率形式输出,而不是“硬性”的Max
S
o
f
t
m
a
x
(
z
i
)
=
e
i
z
s
u
m
c
=
1
C
e
z
c
Softmax(z_i) = \frac{e^z_i }{sum_{c=1}^Ce^{zc}}
Softmax(zi)=sumc=1Cezceiz
其中,C是分类的总数,Zi 是i类的数值。
在这里插入图片描述
2.Problem?
2.1 数值溢出
因为引入了指数形式,所以当数值很大,数值溢出
解决 该问题,所以一般减去最大值,D为Zi中最大值
S
o
f
t
m
a
x
(
z
i
)
=
e
i
z
−
D
s
u
m
c
=
1
C
e
z
c
−
D
Softmax(z_i) = \frac{e^{z-D}_i }{sum_{c=1}^Ce^{z_c- D}}
Softmax(zi)=sumc=1Cezc−Deiz−D
2.2 求导方便
结论:
d
y
i
d
z
i
=
{
p
i
(
1
−
p
i
)
,
j
=
i
−
p
j
∗
p
i
,
j
≠
i
\frac{dy_i}{dz_i} = \begin{cases} p_i (1-p_i) ,j=i \\[2ex] -p_j*p_i ,j \neq i \end{cases}
dzidyi=⎩
⎨
⎧pi(1−pi),j=i−pj∗pi,j=i
详细推导,该链接https://zhuanlan.zhihu.com/p/105722023
是softmax的梯度就是对应的softmax值 - 真实值,那这个梯度下降就完事了
3 Application
SoftMax经常被用作网络的输出节点的 激活函数,例如卷积(CNN),Transformer等。并且因为求导方便,可以用过交叉熵损失函数。