1. one-hot 只关注最强分量
看一个简单例子:假设神经网络模型输出三分类结果 ( z 1 , z 2 , z 3 ) (z_1,z_2,z_3) (z1,z2,z3),已知某训练样本 x x x 的类别是 ( 1 , 0 , 0 ) (1,0,0) (1,0,0),模型参数调整前输出 ( 0.9 , 0.7 , 0.5 ) ) (0.9,0.7,0.5)) (0.9,0.7,0.5)),参数调整后输出为 ( 0.9 , 0.6 , 0.6. ) (0.9, 0.6, 0.6.) (0.9,0.6,0.6.).。我们看一下二者的损失函数:
L
o
s
s
(
w
1
)
=
∣
0.9
−
1
∣
+
∣
0.7
−
0
∣
+
∣
0.3
−
0
∣
=
1.1
(1)
\tag1 Loss(w_1) = |0.9-1|+|0.7-0|+|0.3-0|=1.1
Loss(w1)=∣0.9−1∣+∣0.7−0∣+∣0.3−0∣=1.1(1)
L
o
s
s
(
w
2
)
=
∣
0.9
−
1
∣
+
∣
0.5
−
0
∣
+
∣
0.5
−
0
∣
=
1.1
(2)
\tag2 Loss(w_2) = |0.9-1|+|0.5-0|+|0.5-0|=1.1
Loss(w2)=∣0.9−1∣+∣0.5−0∣+∣0.5−0∣=1.1(2)
因为采用 one-hot 编码,我们最关心向量分量的最大值和次大值之间的差距,这个差越大越好。虽然 (1)、(2) 两式结果一样,其实我们更看好 (2) 式的结果。因此,我们需要引入一种算法,拉开最大值与其他值之间的差距。
记得有人曾说过,大家都知道世界第一高峰,但是世界第二高峰却被大家忽略。one-hot 也和我们这些俗人一样,只关心最大的分量,其他的一概无视。
2. 去掉最后隐层的 sigmoid 函数
按照上面的例子,如果去掉网络模型最后隐层的 sigmoid 函数后,输出应该是什么呢?看下面方程:
z
=
σ
(
y
)
=
1
1
+
e
−
y
(3)
\tag3 z=\sigma(y)=\frac{1}{1+e^{-y}}
z=σ(y)=1+e−y1(3)
于是
y
=
l
n
(
z
1
−
z
)
(4)
\tag4 y=ln(\frac{z}{1-z})
y=ln(1−zz)(4)
可以算出,去掉最后隐层的 sigmoid函数,网络的输出是
z | y |
---|---|
(0.9, 0.7, 0.3) | (2.20,0.83,-0.85) |
(0.9, 0.5, 0.5) | (2.20,0.00, 0.00) |
从这个表中,我们可以看到,去掉 sigmoid 函数后,第二个结果更好了。这说明原模型最后隐层中的sigmoid函数实际上降低了最大分量和第二大分量的差距,不利于最后的 one-hot 输出。
3. softmax 逻辑回归
one-hot 输出要求分量的值域落在 [0, 1] 范围,于是我们需要把输出结果规范化一下,有人想到在此过程中能否进一步拉大第一名和第二名的距离?当然可以,做变换
u
=
e
y
(5)
\tag5 u=e^y
u=ey(5)
因为,
d
e
y
=
e
y
d
y
>
d
y
,
(
y
>
0
)
(6)
\tag6 \mathrm{d}e^y=e^y\mathrm{d}y\gt\mathrm{d}y,(y>0)
dey=eydy>dy,(y>0)(6)
可以断定,这个变换一定能加大第一名和第二名的距离。此外,此变换把自变量的定义域
(
−
∞
,
+
∞
)
(-\infty, +\infty)
(−∞,+∞) 变换到
(
0
,
+
∞
)
(0, +\infty)
(0,+∞),适合最归一化操作。于是我们得到 softmax 变换公式,
u
1
=
e
y
1
e
y
1
+
e
y
2
+
e
y
3
(7)
\tag7 u_1 = \frac{e^{y_1}}{e^{y_1}+e^{y_2}+e^{y_3}}
u1=ey1+ey2+ey3ey1(7)
u
2
=
e
y
2
e
y
1
+
e
y
2
+
e
y
3
(8)
\tag8 u_2 = \frac{e^{y_2}}{e^{y_1}+e^{y_2}+e^{y_3}}
u2=ey1+ey2+ey3ey2(8)
u
3
=
e
y
3
e
y
1
+
e
y
2
+
e
y
3
(9)
\tag9 u_3 = \frac{e^{y_3}}{e^{y_1}+e^{y_2}+e^{y_3}}
u3=ey1+ey2+ey3ey3(9)
最后我们看一下经过 softmax 变换后的输出结果,
z | y | u | 第一名/第二名 |
---|---|---|---|
(0.9, 0.7, 0.3) | (2.20,0.83,-0.85) | (0.77, 0.20, 0.04) | 3.85 |
(0.9, 0.5, 0.5) | (2.20,0.00, 0.00) | (0.82, 0.09, 0.09) | 9.11 |
显然,经过 softmax 变幻后,第一名和第二名分量之间的差距进一步放大,softmax 变换后结果更接近 one-hot 编码。
4. 一点体会
softmax,和她的名字一样,温柔地提升老大地位。借助这个机制,可以使网络模型更快地输出优质的 one-hot 编码,缩短训练周期。