0

logsumexp函数分析

 2 years ago
source link: https://allenwind.github.io/blog/14441/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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

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

logsumexp函数

logsumexp函数表示为,

f(x1,x2,…,xn)=log(n∑i=1exi)f(x1,x2,…,xn)=log⁡(∑i=1nexi)

公式如其名。添加一个伸缩参数α>0α>0,如下

f(x1,x2,…,xn)=1αlog(n∑i=1eαxi)f(x1,x2,…,xn)=1αlog⁡(∑i=1neαxi)

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

g(x1,x2,…,xn)=(n∑i=1xαi)1αg(x1,x2,…,xn)=(∑i=1nxiα)1α

在Tensorflow中,logsumexp函数实现接口为tf.reduce_logsumexp。考虑数值溢出问题,假设c=max(x1,…,xn)c=max(x1,…,xn),有

f(x1,x2,…,xn)=log(n∑i=1exi)=log(n∑i=1exi−c+c)=c+log(n∑i=1exi−c)f(x1,x2,…,xn)=log⁡(∑i=1nexi)=log⁡(∑i=1nexi−c+c)=c+log⁡(∑i=1nexi−c)

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

∂∂xi(1αlog(n∑i=1eαxi))=eαxin∑i=1eαxi∂∂xi(1αlog⁡(∑i=1neαxi))=eαxi∑i=1neαxi

上下界推导

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

f(x1,x2,…,xn)=1αlog(n∑i=1eαxi)=1αlog(n×1nn∑i=1eαxi)≤log(n)α+1αlog(n∑i=11n×eαxi)≤log(n)α+1nn∑i=1xi≤log(n)α+max(x1,x2,…,xn)f(x1,x2,…,xn)=1αlog⁡(∑i=1neαxi)=1αlog⁡(n×1n∑i=1neαxi)≤log⁡(n)α+1αlog⁡(∑i=1n1n×eαxi)≤log⁡(n)α+1n∑i=1nxi≤log⁡(n)α+max(x1,x2,…,xn)

另一方面,假设有数据x1,…,xnx1,…,xn,其中xjxj最大,有

f(x1,x2,…,xn)=1αlog(n∑i=1eαxi)≥1αlog(eαxj)=max(x1,…,xn)f(x1,x2,…,xn)=1αlog⁡(∑i=1neαxi)≥1αlog⁡(eαxj)=max(x1,…,xn) max(x1,…,xn)≤1αlog(n∑i=1eαxi)≤log(n)α+max(x1,x2,…,xn)max(x1,…,xn)≤1αlog⁡(∑i=1neαxi)≤log⁡(n)α+max(x1,x2,…,xn)

也就是说当α→∞α→∞时,log(n)α→0log⁡(n)α→0,中间部分收敛于max(x1,…,xn)max(x1,…,xn)。因此,选择一个足够大的αα​,logsumexp可以认为是max函数的光滑近似。

logsumexp的实现需要处理数值溢出。这里假设c=max(x1,…,xn)c=max(x1,…,xn),于是有,

f(x1,x2,…,xn)=1αlog(n∑i=1eαxi)=1αlog(n∑i=1eα(xi−c+c))=1αlog(eαcn∑i=1eα(xi−c))=c+1αlog(n∑i=1eα(xi−c))f(x1,x2,…,xn)=1αlog⁡(∑i=1neαxi)=1αlog⁡(∑i=1neα(xi−c+c))=1αlog⁡(eαc∑i=1neα(xi−c))=c+1αlog⁡(∑i=1neα(xi−c))

这样exex​的计算就可以避免数值溢出。

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

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

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK