softmax
1. 概念
softmax 的核心在于 soft,而 soft 有软的含义,与之相对的是 hard 硬。很多场景中需要我们找出数组所有元素中值最大的元素,是指上都是求的 hardmax。
softmax 定义:
s
o
f
t
m
a
x
(
z
i
)
=
e
z
i
∑
j
=
1
n
e
z
j
softmax(z_i) = \frac{e^{z_i}}{\sum^n_{j=1}e^{z_j}}
softmax(zi)=∑j=1nezjezi
其中,
z
i
z_i
zi 为第i个结点的输出值,n为输出结点的个数,即分类的类别个数。通过 softmax 函数就可以将多分类的输出值转换为范围在[0, 1]和为 1 的概率分布。
- 引入指数形式的优点:
指数函数曲线呈现递增趋势,最重要的是斜率逐渐增大,也就是说在 x 轴上一个很小的变化,可以导致 y 轴上很大的变化。这种函数曲线能够啊ing输出的数值拉开距离。
- 引入指数形式的缺点:
指数函数的曲线斜率逐渐增大虽然能够将输出值拉开距离,但是也带来了缺点,当 z i z_i zi 值非常大的话,计算得到的数值也会变得非常大,数值可能会溢出。通常针对数值溢出的方法,是将每一个输出值减去输出值中的最大值。
2. softmax 函数求导
拥有三个输出结点的 softmax 函数的计算图:
对每一项求偏导,其中 i 表示输出结点的编号。
∂
y
i
∂
z
i
=
∂
∂
z
i
(
e
z
i
∑
j
=
1
n
e
z
j
)
\frac{\partial {{\text{y}}_{i}}}{\partial {{z}_{i}}}=\frac{\partial }{\partial {{z}_{i}}}(\frac{{{e}^{{{z}_{i}}}}}{\sum\limits_{j=1}^{n}{{{e}^{{{z}_{j}}}}}})
∂zi∂yi=∂zi∂(j=1∑nezjezi)
以
y
1
y_1
y1 为例:
y
1
=
e
z
1
e
z
1
+
e
z
2
+
e
z
3
y_1 = \frac{e^{z_1}}{e^{z_1} + e^{z_2} + e^{z_3}}
y1=ez1+ez2+ez3ez1
∂ y 1 ∂ z 1 = ∂ ∂ z 1 ( e z 1 ∑ j = 1 n e z j ) \frac{\partial {{\text{y}}_{1}}}{\partial {{z}_{1}}}=\frac{\partial }{\partial {{z}_{1}}}(\frac{{{e}^{{{z}_{1}}}}}{\sum\limits_{j=1}^{n}{{{e}^{{{z}_{j}}}}}}) ∂z1∂y1=∂z1∂(j=1∑nezjez1)
带分式的求导法则:
∂
y
1
∂
z
1
=
e
z
1
∑
j
=
1
n
e
z
j
−
(
e
z
1
)
2
(
∑
j
=
1
n
e
z
j
)
2
\frac{\partial {{\text{y}}_{1}}}{\partial {{z}_{1}}}=\frac{{{e}^{{{z}_{1}}}}\sum\limits_{j=1}^{n}{{{e}^{{{z}_{j}}}}}-{{({{e}^{{{z}_{1}}}})}^{2}}}{{{(\sum\limits_{j=1}^{n}{{{e}^{{{z}_{j}}}}})}^{2}}}
∂z1∂y1=(j=1∑nezj)2ez1j=1∑nezj−(ez1)2
提取一个公因式
e
z
1
e^{z_1}
ez1:
∂
y
1
∂
z
1
=
e
z
1
(
∑
j
=
1
n
e
z
j
−
e
z
1
)
(
∑
j
=
1
n
e
z
j
)
2
\frac{\partial {{\text{y}}_{1}}}{\partial {{z}_{1}}}=\frac{{{e}^{{{z}_{1}}}}(\sum\limits_{j=1}^{n}{{{e}^{{{z}_{j}}}}}-{{e}^{{{z}_{1}}}})}{{{(\sum\limits_{j=1}^{n}{{{e}^{{{z}_{j}}}}})}^{2}}}
∂z1∂y1=(j=1∑nezj)2ez1(j=1∑nezj−ez1)
拆分成两项乘积:
∂
y
1
∂
z
1
=
e
z
1
∑
j
=
1
n
e
z
j
⋅
∑
j
=
1
n
e
z
j
−
e
z
1
∑
j
=
1
n
e
z
j
\frac{\partial {{\text{y}}_{1}}}{\partial {{z}_{1}}}=\frac{{{e}^{{{z}_{1}}}}}{\sum\limits_{j=1}^{n}{{{e}^{{{z}_{j}}}}}}\text{ }\!\!\cdot\!\!\text{ }\frac{\sum\limits_{j=1}^{n}{{{e}^{{{z}_{j}}}}}-{{e}^{{{z}_{1}}}}}{\sum\limits_{j=1}^{n}{{{e}^{{{z}_{j}}}}}}
∂z1∂y1=j=1∑nezjez1 ⋅ j=1∑nezjj=1∑nezj−ez1
令
p
1
=
e
z
1
∑
j
=
1
n
e
z
j
{{\text{p}}_{1}}=\frac{{{e}^{{{z}_{1}}}}}{\sum\limits_{j=1}^{n}{{{e}^{{{z}_{j}}}}}}
p1=j=1∑nezjez1 ,则:
∂
y
1
∂
z
1
=
p
1
⋅
(1 -
p
1
)
\frac{\partial {{\text{y}}_{1}}}{\partial {{z}_{1}}}={{\text{p}}_{1}}\text{ }\!\!\cdot\!\!\text{ (1 - }{{\text{p}}_{1}})
∂z1∂y1=p1 ⋅ (1 - p1)