直观的解释是为了平衡概率分布,同时避免出现概率为0的情况(使得模型可以不用再做平滑化处理)。
从反向传播的角度推导一波:
softmax函数的形式为:
P(y=i)=eWiX∑Nj=1eWjX
P
(
y
=
i
)
=
e
W
i
X
∑
j
=
1
N
e
W
j
X
目标函数为:
L=−∑ktklogP(y=k) (tk表示目标类为1,其它类为0)
L
=
−
∑
k
t
k
l
o
g
P
(
y
=
k
)
(
t
k
表
示
目
标
类
为
1
,
其
它
类
为
0
)
令 Vi=WiX V i = W i X ,则:
∂L∂Vi=−tk1P(y=k)⋅∂P(y=k)∂Vi=−tk1P(y=k)⋅eWiX⋅∑Nj=1eWjX−eWiX⋅eWiX(∑Nj=1eWjX)2=−tk1P(y=k)⋅[P(y=k)−(P(y=k))2]=−tk∗(1−P(y=k))(452)(453)(454)(455)
(452)
∂
L
∂
V
i
=
−
t
k
1
P
(
y
=
k
)
⋅
∂
P
(
y
=
k
)
∂
V
i
(453)
=
−
t
k
1
P
(
y
=
k
)
⋅
e
W
i
X
⋅
∑
j
=
1
N
e
W
j
X
−
e
W
i
X
⋅
e
W
i
X
(
∑
j
=
1
N
e
W
j
X
)
2
(454)
=
−
t
k
1
P
(
y
=
k
)
⋅
[
P
(
y
=
k
)
−
(
P
(
y
=
k
)
)
2
]
(455)
=
−
t
k
∗
(
1
−
P
(
y
=
k
)
)
由上式第一个等式可以知道,当我们使用一般的归一化方法时(如min_max归一化),当
P(y=k)
P
(
y
=
k
)
很小时,梯度将变得很大(梯度爆炸),而softmax函数把它约去了,因此不会出现这个问题。
参考:多类分类下为什么用softmax而不是用其他归一化方法?
如何理解softmax(柔性最大),为什么不用别的归一化的函数?