logsumexp函数出现在很多地方,今天简单分析该函数。

在过去的文章函数光滑近似(1):maximum函数也讨论过该函数。

logsumexp函数

logsumexp函数表示为,

公式如其名。添加一个伸缩参数$\alpha \gt 0$,如下

对上式稍加变换容易获得如下形式,

在Tensorflow中,logsumexp函数实现接口为tf.reduce_logsumexp。考虑数值溢出问题,假设$c = \max(x_{1},\dots,x_{n})$,有

logsumexp函数有一个有趣的性质,对其求导获得大名鼎鼎的softmax函数,

上下界推导

从凸优化的角度,考虑到logsumexp的凸性,因此有

另一方面,假设有数据$x_1, \dots, x_n$,其中$x_j$最大,有

因此有,

也就是说当$\alpha \rightarrow \infty$时,$\frac{\log(n)}{\alpha} \rightarrow 0$,中间部分收敛于$\max(x_{1},\dots,x_{n})$。因此,选择一个足够大的$\alpha$​,logsumexp可以认为是max函数的光滑近似。

实现技巧

logsumexp的实现需要处理数值溢出。这里假设$c = \max(x_1, \dots, x_n)$,于是有,

这样$e^x$​的计算就可以避免数值溢出。

如果是使用TensorFlow框架,那就不用自己实现了,TensorFlow内置了 tf.reduce_logsumexp API。

总结

本文篇幅较短,简单推导logsumexp上下界,并获得结论logsumexp可以认为是max函数的光滑近似。

转载请包括本文地址:https://allenwind.github.io/blog/14441
更多文章请参考:https://allenwind.github.io/blog/archives/