看一个简单例子:假设神经网络模型输出三分类结果 ( 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 也和我们这些俗人一样,只关心最大的分量,其他的一概无视。
按照上面的例子,如果去掉网络模型最后隐层的 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 输出。
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 编码。
softmax,和她的名字一样,温柔地提升老大地位。借助这个机制,可以使网络模型更快地输出优质的 one-hot 编码,缩短训练周期。