logsumexp函数分析
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/