1. one-hot 只关注最强分量
看一个简单例子:假设神经网络模型输出三分类结果 (z1,z2,z3)(z_1,z_2,z_3)(z1,z2,z3),已知某训练样本 xxx 的类别是 (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.).。我们看一下二者的损失函数:
Loss(w1)=∣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)
Loss(w2)=∣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)=11+e−y(3)\tag3
z=\sigma(y)=\frac{1}{1+e^{-y}}
z=σ(y)=1+e−y1(3)
于是
y=ln(z1−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=ey(5)\tag5
u=e^y
u=ey(5)
因为,
dey=eydy>dy,(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 变换公式,
u1=ey1ey1+ey2+ey3(7)\tag7
u_1 = \frac{e^{y_1}}{e^{y_1}+e^{y_2}+e^{y_3}}
u1=ey1+ey2+ey3ey1(7)
u2=ey2ey1+ey2+ey3(8)\tag8
u_2 = \frac{e^{y_2}}{e^{y_1}+e^{y_2}+e^{y_3}}
u2=ey1+ey2+ey3ey2(8)
u3=ey3ey1+ey2+ey3(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 编码,缩短训练周期。