14

函数光滑近似(1):maximum函数

 2 years ago
source link: https://allenwind.github.io/blog/9831/
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

函数光滑近似(1):maximum函数

函数的可微性在深度学习中很重要,因为在优化阶段,涉及到梯度的计算。但是深度学习中很多操作,如 max、argmax 等,无法求解梯度。为此,寻找这类操作的光滑近或次梯度似能够很好地解决梯度求解问题。当然这里并不是谈及深度学习中梯度计算的问题,而是探索常用函数如max、argmax、abs的光滑近似。预计会写一个系列,这里首先来谈谈max函数的光滑近似。

在深度学习中,如果一个操作用f表示,可能还会涉及到可学习的参数A,那么在神经网络模型训练阶段涉及到该操作(可以理解成是函数)的梯度计算

f(x,A)

A 为操作 f​ 有关的可学习的参数。有些情况下该操作并非光滑,不能直接计算梯度。这里举个例子:CNN 中的 Pooling 操作,不涉及可学习的参数。而 maxout 操作则涉及可学习的参数。

为了获得近似的梯度,让神经网络可训练下去,一种方法是寻求次梯度,可参看谈谈神经网络中的激活函数,另外一种方法是构造该操作的光滑近似。本系列就是围绕光滑近似问题展开,对不可导的函数(操作)进行光滑近似(函数光滑逼近)。

RELU激活函数在x=0处不可导,那么是不是对于深度学习模型来说就无法进行误差逆向传播优化?事实上,在工程上,有一种叫做次梯度的解决方案。我们都知道,绝对值函数f(x)=|x|在 x=0 不可微,但是对称可导(Symmetric derivative)

fs(0)=limx→0f(0+x)−f(0−x)2x=limx→0|x|−|−x|2h=0

在深度学习中,可以使用此方法作为不可导点的梯度计算。

就以RELU函数为例,当x>0时,梯度为1,当x<0时梯度为0。而0这个位置不存在梯度,而次梯度即选择[0,1]​区间中的任意值。在实现时,一般会选择一个区间内的固定值。

不过我们还是回到光滑近似这个思路上。

构造max的光滑近似

注意到 max 函数是一个凸函数,即

max(λxi+(1−λ)xj)≤λmax(xi)+(1−λ)max(xj)

我们也可以从其函数图像中直观感受其凸性。同时,max具有这样的性质,

max(αx)=αmax(x),α>0

最容易让人想到是如下的构造,

max(x,y)=|x+y|+|x−y|2

只需要高中的数学知识即可。但是绝对值本身还是不够光滑,在原点不可导。比较曲折的思路是在这个基础上解决abs函数的光滑性近似问题,另外还要考虑从二元到多元的推广。不过这里暂不从这个思路展开。从平方开发的角度看,有如下简单的近似,

max(x,y)=|x+y|+|x−y|2=12((x+y)+√(x−y)2)≈12((x+y)+√(x−y)2+α),α→0

这个近似是基于|x−y|=√(x−y)2,相当简洁。

根据 max 函数的定义,假设有数据x1,…,xn​,其中xj​最大,不难有

xj=max(x1,x2,…,xn)=logexj≤log(n∑i=1exi)≤log(nexj)=logn+xj=max(x1,…,xn)+logn max(x1,x2,…,xn)≤log(n∑i=1exi)≤max(x1,…,xn)+logn

添加一个参数 α>0 做缩放因子,有

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

取n=2,α=2​我们有特例,

|x|=max{−x,x}≤12log(e2x+e−2x)

通过squeeze theorem有,

limα→∞1αlog(n∑i=1eαxi)=max(x1,…,xn)

于是,我们可以拿该近似进行神经网络训练。因此,当α为较大的参数时,有近似,

max(x1,…,xn)≈1αlog(n∑i=1eαxi)

上式左边部分函数当α=1​​时,有一个特别顾名思义的名称,称为为 logsumexp。有趣的是,max的近似logsumexp的梯度梯度就是 softmax 函数,

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

也就是说,max 函数的上述光滑近似的梯度是 softmax 函数。我们容易误以为softmax是max的soft化,其实这是误解,正确答案是softmax是onehot(argmax)的soft化,下一篇会写到。

类似的思路

按照上述类似的思路,假设k>0有

xj=max(x1,x2,…,xn)=(xkj)1k≤(∑i=1xki)1k≤(nxkj)1k=n1kxj=n1kmax(x1,x2,…,xn)

其中 k≠0,于是有

max(x1,x2,…,xn)≤(∑i=1xki)1k≤n1kmax(x1,x2,…,xn)

中间部分如果加上模不就是 Lp 范数吗?没错,我们后期讨论。当 k→∞ 时,n1k=1,因此,

max(x1,x2,…,xn)≈(n∑i=1xki)1k

对于上述的二维情况,如下,

max(x,y)=limk→∞(xk+yk)1k

我们把 exi 替换层 xi 上式依然成立,

limα→∞1αlog(n∑i=1xαi)=max(x1,…,xn)

利用上述思路,还可以构造更多光滑逼近。

依据上述两个类似的思路,我们也有一些有趣的结论。易知,

n∑i=11|xi|⩾max(1|x1|,...,1|xn|)

易知max−min的关系,

max(1|x1|,...,1|xn|)=1min(|x1|,...,|xn|)

对上述不等式左右两边分别取倒数,改变符号,

1n∑i=11|xi|⩽min(|x1|,...,|xn|)

也就是说|x1|,…,|xn|的最小值大于其调和平均。

logsumexp凸优化角度

从凸优化的角度,考虑到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)

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

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

这结果也就是形式一。

基于argmax(补充)

在本系列的第二篇函数光滑近似(2):softmax与argmax我们知道,

one-hot(argmax(x))≈n∑i=1eαxin∑i=1eαxi

即带参数的softmax形式。基于这个结论我们也获得max的另外一种光滑近似,

max(x)=xargmax(x)=x⊗one-hot[argmax(x)]=n∑i=1xi×one-hot[argmax(x)][i]≈n∑i=1eαxin∑i=1eαxixi=n∑i=1xieαxin∑i=1eαxi

有三个关键点:

  • 如果α=0,则上式右侧为均值
  • 如果α=+∞,则上式右侧为max(x)
  • 如果α=−∞,则上式右侧为min(x)

取x1=0,x2=x,α=1​有特例一,

max(0,x)≈xex1+ex=xσ(x)

取x1=−x,x2=x,有特例二,

|x|=max{−x,x}≈x(eαx−e−αx)eαx+e−αx=xtanh(αx)

三种近似形式

通过以上推导,我们活动两种关于max(x1,…,xn)的近似形式。

max(x1,…,xn)≈1αlog(n∑i=1eαxi),α>0 max(x1,x2,…,xn)≈(n∑i=1|x|ki)1k,k>0 max(x1,x2,…,xn)≈n∑i=1xieαxin∑i=1eαxi,α>0 min(x)=−max(−x)

min的光滑近似可以由max​导出。

特例与可视化

上述形式一取n=2的特例,即二维情况

max(x,y)=limα→+∞log(eαx+eαy)α

使用matplotlib绘图制作,

对于形式一,取α=1, n=2,x1=0,x2=x,则relu函数有,

relu(x)=max{0,x}≈log(1+ex)

可以看到,softplus 不就是 relu 的光滑近似吗?也就是说softplus是relu关于max的光滑近似。类似地,Hinge loss也带有max函数,可以使用max的光滑近似获得该loss的光滑表示。

L0、L1、L2、L∞​ 中的应用

以上推导我们得到这样的结果,

max(x1,x2,…,xn)≈(n∑i=1xki)1k

事实上,在推导过程中稍加处理即可把右式变成范数形式,即

xj=max(x1,x2,…,xn)=(xkj)1k≤(∑i=1|xi|k)1k≤(nxkj)1k=n1kxj=n1kmax(|x1|,|x2|,…,|xn|)

因此,有,

(n∑i=1|xi|k)1k≈max(|x1|,|x2|,…,|xn|)

这里建立了Lp范数与max的关系。因此,L∞取|x1|,|x2|,…,|xn|中最大值,在距离度量中对应Chebyshev距离;L0取非零个数。

本文使用简单的思路导出max函数的光滑近似的两种形式,并讨论着两种形式的一些应用。

[1] https://en.wikipedia.org/wiki/Heaviside_step_function

[2] https://www.elen.ucl.ac.be/Proceedings/esann/esannpdf/es2014-153.pdf

[3] squeeze theorem

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK