现在让我们先抛开\mathrm{softmax}、\mathrm{CrossEntropy},好好讲一讲\mathrm{logits}。作为神经网络的最后一层的输出,\mathrm{logits}的每个元素对应于每个类别的得分,其取值范围是整个实数域。我们优化神经网络的目的就在于让目标类别的得分变大,非目标的得分变小。
假设有N个类别,i是我们的目标类别,那么我们需要得分s_i大于其它s_{j\ne i}。也就是
s_i - s_0 > 0 \\ s_i - s_1 > 0\\ ...\\ s_i - s_N > 0\\我们换个写法,也就是使[(s_i - s_0), (s_i - s_1), ..., (s_i - s_N)]的最小值大于0。
那么我们得到的优化目标为
J = \mathrm{min}(0, s_i - s_0, s_i - s_1, ..., s_i - s_N)
但是有一个问题,\mathrm{min}是不可导的,我们要寻求一个函数来替代\mathrm{min}。
现在\mathrm{LogSumExp}登场了,先讲一下\mathrm{LogSumExp}和\mathrm{max}函数在数学上有一些有趣的关系和性质。
1. 上界关系:
对于任意的数值列表 x_1, x_2, ..., x_n ,以下不等式始终成立:
\mathrm{max}(x_1, x_2, ..., x_n) \leq \mathrm{LogSumExp} (x_1, x_2, ..., x_n) = \log(\exp(x_1) + \exp(x_2) + ... + \exp(x_n))
这是因为取对数函数是一个单调递增的函数,且指数函数的和总是大于任何单独的项。
2. 近似关系:
当列表中的数值之间的差异非常大时,\mathrm{LogSumExp}的值接近于最大值。这是因为最大的那个值会主导指数的和。换句话说,当某一个数 x_i 比其他所有数都大得多时,\exp(x_i) 会远远大于其他的 \exp(x_j),因此\mathrm{LogSumExp}的值接近于 x_i 。
因此新的优化目标可以转化为
\begin{aligned} J&=-\mathrm{LogSumExp} (0, s_i - s_0, s_i - s_1, ..., s_i - s_N) \\ &=-\mathrm{log}(\mathrm{exp}(s_i - s_0), \mathrm{exp}(s_i - s_1), ..., \mathrm{exp}(s_i-s_i),...\mathrm{exp}(s_i-s_N))\\ &=-\mathrm{log}(\frac{\mathrm{exp}(s_i)}{\sum_j^N \mathrm{exp}(s_j)} ) \end{aligned}对,这就是交叉熵。