直观的解释是为了平衡概率分布,同时避免出现概率为0的情况(使得模型可以不用再做平滑化处理)。
从反向传播的角度推导一波:
softmax函数的形式为:
P
(
y
=
i
)
=
e
W
i
X
∑
j
=
1
N
e
W
j
X
P ( y = i ) = \frac { e ^ { W _ { i } X } } { \sum _ { j = 1 } ^ { N } e ^ { W _ { j } X } }
P(y=i)=∑j=1NeWjXeWiX目标函数为:
L
=
−
∑
k
t
k
log
P
(
y
=
k
)
L = - \sum _ { k } t _ { k } \log P ( y = k )
L=−k∑tklogP(y=k)(
t
k
t_{k}
tk表示目标类为1,其他类为0)
令
V
i
=
W
i
X
V_{i}=W_{i}X
Vi=WiX,则:
∂
L
∂
V
i
=
−
t
k
1
P
(
y
=
k
)
⋅
∂
P
(
y
=
k
)
∂
V
i
=
−
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
=
−
t
k
1
P
(
y
=
k
)
⋅
[
P
(
y
=
k
)
−
(
P
(
y
=
k
)
)
2
]
=
−
t
k
∗
(
1
−
P
(
y
=
k
)
)
\begin{aligned} \frac { \partial L } { \partial V _ { i } } & = - t _ { k } \frac { 1 } { P ( y = k ) } \cdot \frac { \partial P ( y = k ) } { \partial V _ { i } } \\ & = - t _ { k } \frac { 1 } { P ( y = k ) } \cdot \frac { e ^ { W _ { i } X } \cdot \sum _ { j = 1 } ^ { N } e ^ { W _ { j } X } - e ^ { W _ { i } X } \cdot e ^ { W _ { i } X } } { \left( \sum _ { j = 1 } ^ { N } e ^ { W _ { j } X } \right) ^ { 2 } } \\ & = - t _ { k } \frac { 1 } { P ( y = k ) } \cdot \left[ P ( y = k ) - ( P ( y = k ) ) ^ { 2 } \right] \\ & = - t _ { k } * ( 1 - P ( y = k ) ) \end{aligned}
∂Vi∂L=−tkP(y=k)1⋅∂Vi∂P(y=k)=−tkP(y=k)1⋅(∑j=1NeWjX)2eWiX⋅∑j=1NeWjX−eWiX⋅eWiX=−tkP(y=k)1⋅[P(y=k)−(P(y=k))2]=−tk∗(1−P(y=k))
由上式第一个等式可以知道,当我们使用一般的归一化方法时(如min_max归一化),当
P
(
y
=
k
)
P(y=k)
P(y=k)很小时,梯度将变得很大(梯度爆炸),而softmax函数把它约去了,因此不会出现这个问题。
参考:多类分类下为什么用softmax而不是用其他归一化方法?
如何理解softmax(柔性最大),为什么不用别的归一化的函数?