5

形形色色的Sigmoid(S型)函数

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

Sigmoid函数指S型的函数,盘点一下都有哪些?

Sigmoid函数指S型的函数,在一段区间内较快增长,该区间外区域饱和。

形形色色的Sigmoid函数

形形色色的Sigmoid函数,我们可以大致分为指数类型、代数类型以及基于误差函数逼近等思路。S性函数有一个特点就是,当xx较小时,有

S(x)≈xS(x)≈x

例如当xx较小时,tanh(x)≈xtanh⁡(x)≈x。

Logistic函数,

σ(x)=11+e−x=ex1+exσ(x)=11+e−x=ex1+ex

这种形式的函数事实上来自增长模型,微分方程表示为,

dPdt=r×P×(1−PK)dPdt=r×P×(1−PK)

PP为种群数量,rr为增长率,KK为环境容量,方程解得,

P(t)=K×P0ertK+P0(ert−1)=K1+(K−P0P0)e−rtP(t)=K×P0ertK+P0(ert−1)=K1+(K−P0P0)e−rt

把参数简约掉,就得到Logistic函数。过去的文章也提供光滑近似的导出思路,见Sigmoid函数导出的另外一个角度

Logit,顾名思义log it,对odds(p)odds⁡(p)​取对数变换,

logits(p)=log(odds(p))=logp1−plogits⁡(p)=log⁡(odds⁡(p))=log⁡p1−p

这里odds(p)=p1−podds(p)=p1−p,于是logits(p)∈[−∞,+∞]logits⁡(p)∈[−∞,+∞]没有上下限,于是可以方便地进行建模。例如最简单的线性模型,

logits(p)=log(p1−p)=xlogits⁡(p)=log⁡(p1−p)=x p(x)=11+e−xp(x)=11+e−x

这个函数其实很漂亮,其导数可以用自身来表示,

ddxσ(x)=ex⋅(1+ex)−ex⋅ex(1+ex)2=ex(1+ex)2=σ(x)(1−σ(x))ddxσ(x)=ex⋅(1+ex)−ex⋅ex(1+ex)2=ex(1+ex)2=σ(x)(1−σ(x))

可以在里面添加一个参数控制增长的陡峭程度,

σk(x)=11+e−kxσk(x)=11+e−kx

广义的Logistic函数,

f(x)=1(1+e−x)α,α>0f(x)=1(1+e−x)α,α>0

tanh(x)tanh⁡(x),

f(x)=tanhx=ex−e−xex+e−xf(x)=tanh⁡x=ex−e−xex+e−x

事实上,我们注意到,

tanh(x)=2σ(2x)−1tanh⁡(x)=2σ(2x)−1

同上,可以添加参数控制增长区间内的陡峭程度,

fk(x)=tanh(kx)=ekx−e−kxekx+e−kxfk(x)=tanh⁡(kx)=ekx−e−kxekx+e−kx

这些S型函数都是基于f(x)=exf(x)=ex,因此具有很好的梯度特性。

纯粹的代数函数也可以构造S型函数,如

f(x)=x(1+|x|k)1/kf(x)=x(1+|x|k)1/k

特殊形式如取k=2k=2,有,

f(x)=x(1+|x|2)1/2f(x)=x(1+|x|2)1/2

其出发点其实是逼近sign(x)=x|x|sign⁡(x)=x|x|这种形式。

从误差函数出发

误差函数,

erf(x)=1√π∫x−xe−t2dt=2√π∫x0e−t2dterf⁡(x)=1π∫−xxe−t2dt=2π∫0xe−t2dt

是一个像logistics函数图像一样的函数,易证erf(x√2)∈(−1,1)erf⁡(x2)∈(−1,1)​​,函数图像如下,

该函数有一个有趣的性质,

erf(erf−1x)=xerf⁡(erf−1⁡x)=x

误差函数的定义是积分形式,无法直接用初等函数直接计算。这里我们对其进行逼近。erf(x√2)erf⁡(x2)图像最容易让人联想到的函数是tanh(x)tanh⁡(x),它们之间的区别就在陡峭程度上。容易推导GELU与正态分布的累积分布函数Φσ(x)Φσ(x)或误差函数erf(x)erf⁡(x)​的关系,

GELU(x)=xΦ(x)=x×∫x−∞1|σ|√πe−(x/σ)2dx=x×[∫0−∞1|σ|√πe−(x/σ)2dx+∫x01|σ|√πe−(x/σ)2dx]σ=1=x2(1+erf(x√2))GELU⁡(x)=xΦ(x)=x×∫−∞x1|σ|πe−(x/σ)2dx=x×[∫−∞01|σ|πe−(x/σ)2dx+∫0x1|σ|πe−(x/σ)2dx]σ=1=x2(1+erf⁡(x2))

这里我们直接借鉴论文Gaussian Error Linear Units (GELUs)中的结论,注意到论文中有结论,

GELU(x)=xΦ(x)=x2(1+erf(x√2))≈x2(1+tanh[√2π(x+0.044715x3)])GELU⁡(x)=xΦ(x)=x2(1+erf⁡(x2))≈x2(1+tanh⁡[2π(x+0.044715x3)]) erf(x√2)≈tanh[√2π(x+0.044715x3)]erf⁡(x2)≈tanh⁡[2π(x+0.044715x3)]

这个近似形式上还是关于exex,因此能否用σ(αx)σ(αx)​来逼近呢?答案是可以的,可参看以上论文。

逼近符号函数

不严格来说,符合函数也可以看做是S型函数,

sign(x)=⎧⎨⎩−1if x<0,0if x=0,1if x>0.sign⁡(x)={−1if x<0,0if x=0,1if x>0.

由于sign(x)=x|x|sign⁡(x)=x|x|​,因此可以构造很多光滑版本,如,

sign(x)=x|x|≈x√x2+ε2sign⁡(x)=x|x|≈xx2+ε2

其中εε​​是一个接近0的数。稍微推广一下,

sign(x)=x|x|≈x2k√x2k+ε2ksign⁡(x)=x|x|≈xx2k+ε2k2k

其实就是上述f(x)=x(1+|x|k)1/kf(x)=x(1+|x|k)1/k​​​这种形式。此外还可以在|x||x|上修改,例如,

sign(x)=x|x|≈x√x2+μexsign⁡(x)=x|x|≈xx2+μex

不过这种S型是不对称的,因为exex​的增长并不是平缓的。于是,可以改造为对称形式,

sign(x)=x|x|≈x√x2+μex+e−xsign⁡(x)=x|x|≈xx2+μex+e−x

还有一种比较优雅的做法,注意到max函数可以表示为logsumexp形式,

|x|=max(x,−x)≈1αlog(e−αx+eαx)|x|=max(x,−x)≈1αlog⁡(e−αx+eαx) sign(x)=x|x|≈αxlog(e−αx+eαx)sign⁡(x)=x|x|≈αxlog⁡(e−αx+eαx)

其中αα是一个较大的数。

逼近阶跃(Heaviside step)函数

类似地,还有阶跃(Heaviside step)函数,其实和符号函数很像,前者把x<0x<0部分向上平移一个单位,

H(x)=ddxmax{0,x}={1,x>00,x≤0≈12+12tanh(kx)=11+e−2kxH(x)=ddxmax{0,x}={1,x>00,x≤0≈12+12tanh⁡(kx)=11+e−2kx

其光滑形式就是参数化的Logistic函数σk(x)=11+e−kxσk(x)=11+e−kx。Heaviside step函数还有一种关于狄拉克函数(dirac function)的定义,

H(x)=∫x−∞δ(s)dsH(x)=∫−∞xδ(s)ds

其中狄拉克函数为,

δ(x)={+∞x=00x≠0δ(x)={+∞x=00x≠0

狄拉克函数满足,

∫∞−∞δ(x)dx=1∫−∞∞δ(x)dx=1

狄拉克函数使用正态分布逼近,

δσ(x)=1|σ|√πe−(x/σ)2δσ(x)=1|σ|πe−(x/σ)2

因此其积分,即正态分布的累积分布函数可以作为H(x)H(x)​​的光滑近似。标准正态分布的累积分布函数可以用erf(x)erf⁡(x)​​​表示,

Φ(x)=1√2π∫x−∞e−t22dt=12(1+erf(x√2))∈(0,1)Φ(x)=12π∫−∞xe−t22dt=12(1+erf⁡(x2))∈(0,1)

因此,对于一般正态分布函数,其累积分布函数为,

F(x)=Φ(x−μσ)=12[1+erf(x−μσ√2)]μ=0F(x)=Φ(x−μσ)=12[1+erf⁡(x−μσ2)]μ=0

其中μ=0μ=0,σσ控制S形状以不同程度逼近H(x)H(x)。

本文总结了形形色色的S型函数,那么你心中完美的S型函数是谁呢?

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK