在机器学习中,我们经常会碰到不光滑的函数,但我们的优化方法通常是基于梯度的,这意味着光滑的模型可能更利于优化(梯度是连续的),所以就有了寻找非光滑函数的光滑近似的需求。事实上,本博客已经多次讨论过相关主题,比如 《寻求一个光滑的最大值函数》、 《函数光滑化杂谈:不可导函数的可导逼近》等,但以往的讨论在方法上并没有什么通用性。
不过,笔者从最近的一篇论文《SAU: Smooth activation function using convolution with approximate identities》学习到了一种比较通用的思路:用狄拉克函数来构造光滑近似。通用到什么程度呢?理论上有可数个间断点的函数都可以用它来构造光滑近似!个人感觉还是非常有意思的。
注:部分积分的计算可以参考常见积分求解
狄拉克函数
在很早之前的文章《诡异的Dirac函数》中,我们就介绍过狄拉克函数了。在现代数学中,狄拉克函数被定义为一个“泛函”而不是“函数”,但对于大多数读者来说,将它当作函数来理解是比较容易接受的。
简单来说,狄拉克函数 δ ( x ) \delta(x) δ(x)满足:
1、 ∀ x ≠ 0 , δ ( x ) = 0 \forall x\ne0,\delta(x)=0 ∀x=0,δ(x)=0
2、 δ ( 0 ) = ∞ \delta(0)=\infty δ(0)=∞
3、 ∫ − ∞ ∞ δ ( x ) = 1 \int_{-\infty}^{\infty}\delta(x)=1 ∫−∞∞δ(x)=1
直观来看,
δ
(
x
)
\delta(x)
δ(x)可以看成一个连续型的概率密度函数,采样空间为全体实数
R
\mathbb{R}
R,但是只有
x
=
0
x=0
x=0处概率非零,也即均值为
0
0
0、方差也为
0
0
0,所以从中采样必然只能采样到
0
0
0,因此成立如下恒等式:
∫
−
∞
∞
f
(
x
)
δ
(
x
)
d
x
=
f
(
0
)
(1)
\int_{-\infty}^\infty f(x)\delta(x)dx=f(0)\tag{1}
∫−∞∞f(x)δ(x)dx=f(0)(1)或者
∫
−
∞
∞
f
(
y
)
δ
(
x
−
y
)
d
y
=
f
(
x
)
(2)
\int_{-\infty}^\infty f(y)\delta(x-y)dy=f(x)\tag{2}
∫−∞∞f(y)δ(x−y)dy=f(x)(2)
这可谓是狄拉克函数最重要的性质,也是我们后面主要用到的恒等式。
光滑近似
如果我们能找到
δ
(
x
)
\delta(x)
δ(x)的一个光滑近似
φ
(
x
)
≈
δ
(
x
)
\varphi(x)\approx \delta(x)
φ(x)≈δ(x),那么根据(2),我们就有
g
(
x
)
=
∫
−
∞
∞
f
(
y
)
φ
(
x
−
y
)
d
y
≈
f
(
x
)
(3)
g(x)=\int_{-\infty}^{\infty}f(y)\varphi(x-y)dy\approx f(x)\tag{3}
g(x)=∫−∞∞f(y)φ(x−y)dy≈f(x)(3)
由于
φ
(
x
)
\varphi(x)
φ(x)是光滑的,所以
g
(
x
)
g(x)
g(x)也是光滑的,这也就是说,
g
(
x
)
g(x)
g(x)就是
f
(
x
)
f(x)
f(x)的一个光滑近似!这便是借助狄拉克函数的光滑近似来构建
f
(
x
)
f(x)
f(x)的光滑近似的核心思路了,在这个过程中,对
f
(
x
)
f(x)
f(x)的形式和连续性都没有太多限制,比如允许
f
(
x
)
f(x)
f(x)有可数个间断点(如取整函数
[
x
]
[x]
[x])。
那么狄拉克函数的光滑近似有哪些呢?现成的也有不少,比如:
δ
(
x
)
=
lim
σ
→
0
e
−
x
2
/
2
σ
2
2
π
σ
(4)
\delta(x) = \lim_{\sigma\to 0} \frac{e^{-x^2/2\sigma^2}}{\sqrt{2\pi}\sigma}\tag{4}
δ(x)=σ→0lim2πσe−x2/2σ2(4)或
δ
(
x
)
=
1
π
lim
a
→
0
a
x
2
+
a
2
(5)
\delta(x)=\frac{1}{\pi} \lim_{a \to 0}\frac{a}{x^2+a^2}\tag{5}
δ(x)=π1a→0limx2+a2a(5)
简单来说,就是找一个像正态分布那样钟形曲线的非负函数,想办法让钟形的宽度逐渐趋于0,但保持积分为1。还有另一个思路是留意到
∫
−
∞
x
δ
(
t
)
d
t
=
θ
(
x
)
=
{
1
,
(
x
>
0
)
0
,
(
x
<
0
)
(6)
\int_{-\infty}^x \delta(t)dt = \theta(x) = \left\{\begin{aligned}1,\,\, (x > 0) \\ 0,\,\, (x < 0)\end{aligned}\right.\tag{6}
∫−∞xδ(t)dt=θ(x)={1,(x>0)0,(x<0)(6)
也就是说,狄拉克函数的积分是“单位阶跃函数”
θ
(
x
)
\theta(x)
θ(x),如果我们能找到
θ
(
x
)
\theta(x)
θ(x)的光滑近似,那么将它求导就得到狄拉克函数的光滑近似。而
θ
(
x
)
\theta(x)
θ(x)的光滑近似,就是所谓的“S形”曲线了,比如sigmoid函数
σ
(
x
)
=
1
/
(
1
+
e
−
x
)
\sigma(x)=1/(1+e^{-x})
σ(x)=1/(1+e−x),所以我们有
δ
(
x
)
=
lim
t
→
∞
d
d
x
σ
(
t
x
)
=
lim
t
→
∞
e
t
x
t
(
1
+
e
t
x
)
2
(7)
\delta(x) = \lim_{t\to \infty} \frac{d}{dx}\sigma(tx) = \lim_{t\to \infty} \frac{e^{tx}t}{(1+e^{tx})^2}\tag{7}
δ(x)=t→∞limdxdσ(tx)=t→∞lim(1+etx)2etxt(7)
常用的就是式(4)和式(7)两个近似。
Relu激活
现在,我们就以上述思路为工具,推导ReLU激活函数 m a x ( x , 0 ) max(x,0) max(x,0)的各种光滑近似。
比如利用式(7),得到
max
(
x
,
0
)
≈
∫
−
∞
∞
e
t
(
x
−
y
)
t
(
1
+
e
t
(
x
−
y
)
)
2
max
(
y
,
0
)
d
y
=
∫
0
∞
e
t
(
x
−
y
)
t
y
(
1
+
e
t
(
x
−
y
)
)
2
d
y
=
log
(
1
+
e
t
x
)
t
(8)
\begin{aligned} \max(x,0)\approx&\, \int_{-\infty}^{\infty} \frac{e^{t(x-y)}t}{(1+e^{t(x-y)})^2} \max(y,0) dy\\ =&\,\int_0^{\infty} \frac{e^{t(x-y)}ty}{(1+e^{t(x-y)})^2}dy=\frac{\log(1+e^{tx})}{t} \end{aligned}\tag{8}
max(x,0)≈=∫−∞∞(1+et(x−y))2et(x−y)tmax(y,0)dy∫0∞(1+et(x−y))2et(x−y)tydy=tlog(1+etx)(8)
当t=1时,这便是SoftPlus激活函数。
如果换用式(4),那么结果是
max
(
x
,
0
)
≈
∫
−
∞
∞
e
−
(
x
−
y
)
2
/
2
σ
2
2
π
σ
max
(
y
,
0
)
d
y
=
∫
0
∞
e
−
(
x
−
y
)
2
/
2
σ
2
y
2
π
σ
d
y
=
1
2
[
x
erf
(
x
2
σ
)
+
x
+
2
π
σ
e
−
x
2
2
σ
2
]
(9)
\begin{aligned} \max(x,0)\approx&\, \int_{-\infty}^{\infty} \frac{e^{-(x-y)^2/2\sigma^2}}{\sqrt{2\pi}\sigma} \max(y,0) dy\\ =&\,\int_0^{\infty} \frac{e^{-(x-y)^2/2\sigma^2} y}{\sqrt{2\pi}\sigma}dy\\ =&\,\frac{1}{2} \left[x \,\text{erf}\left(\frac{x}{\sqrt{2} \sigma}\right)+x+\sqrt{\frac{2}{\pi }} \sigma e^{-\frac{x^2}{2 \sigma^2}}\right] \end{aligned}\tag{9}
max(x,0)≈==∫−∞∞2πσe−(x−y)2/2σ2max(y,0)dy∫0∞2πσe−(x−y)2/2σ2ydy21[xerf(2σx)+x+π2σe−2σ2x2](9)
这个ReLU的光滑近似貌似还没被研究过。
当然,如果仅仅是ReLU函数的光滑近似,那么还有更简单的思路,比如留意到
m
a
x
(
x
,
0
)
=
x
θ
(
x
)
max(x,0)=x\theta(x)
max(x,0)=xθ(x),这里的θ(x)就是前面提到的单位阶跃函数,所以问题可以转变为求θ(x)的光滑近似,我们已经知道sigmoid便是其中之一,所以很快得到
max
(
x
,
0
)
≈
x
σ
(
t
x
)
\max(x,0)\approx x\sigma(tx)
max(x,0)≈xσ(tx)
当
t
=
1
t=1
t=1时,这便是Swish激活函数。而如果用(4)进行计算
θ
(
x
)
\theta(x)
θ(x)的光滑近似,那么就得到
max
(
x
,
0
)
≈
x
∫
−
∞
∞
e
−
(
x
−
y
)
2
/
2
σ
2
2
π
σ
θ
(
y
)
d
y
=
x
∫
0
∞
e
−
(
x
−
y
)
2
/
2
σ
2
2
π
σ
d
y
=
1
2
[
x
+
x
erf
(
x
2
σ
)
]
(11)
\begin{aligned} \max(x,0)\approx&\, x\int_{-\infty}^{\infty} \frac{e^{-(x-y)^2/2\sigma^2}}{\sqrt{2\pi}\sigma} \theta(y) dy\\ =&\,x\int_0^{\infty} \frac{e^{-(x-y)^2/2\sigma^2}}{\sqrt{2\pi}\sigma}dy =\frac{1}{2}\left[x + x\,\text{erf}\left(\frac{x}{\sqrt{2}\sigma}\right)\right] \end{aligned}\tag{11}
max(x,0)≈=x∫−∞∞2πσe−(x−y)2/2σ2θ(y)dyx∫0∞2πσe−(x−y)2/2σ2dy=21[x+xerf(2σx)](11)
当
σ
=
1
\sigma=1
σ=1时,就是GeLU激活函数。
取整函数
可能读者觉得还不够意思,毕竟上面推导出来的都是现成的东西,而且不借助狄拉克函数也能推导出来。现在我们就来补充一个不怎么平凡的例子:取整函数的光滑近似。
取整函数分上取整和下取整两种,它们定义上有所不同,但是没有本质区别,这里以下取整为例子,我们记为
[
x
]
=
n
,
当且仅当存在
n
∈
Z
使得
x
∈
[
n
,
n
+
1
)
(12)
[x] = n, \,\,\text{当且仅当存在}n\in\mathbb{Z}\text{使得}x\in[n, n + 1)\tag{12}
[x]=n,当且仅当存在n∈Z使得x∈[n,n+1)(12)
假设
φ
(
x
)
\varphi(x)
φ(x)为狄拉克函数的某个光滑近似,那么
[
x
]
≈
∫
−
∞
∞
φ
(
x
−
y
)
[
y
]
d
y
=
∑
n
=
−
∞
∞
n
∫
n
n
+
1
φ
(
x
−
y
)
d
y
[x]\approx \int_{-\infty}^{\infty} \varphi(x-y)[y]dy = \sum_{n=-\infty}^{\infty}n\int_n^{n+1} \varphi(x-y)dy
[x]≈∫−∞∞φ(x−y)[y]dy=n=−∞∑∞n∫nn+1φ(x−y)dy
设
φ
(
x
)
\varphi(x)
φ(x)的原函数为
Φ
(
x
)
\Phi(x)
Φ(x),那么
φ
(
x
−
y
)
\varphi(x-y)
φ(x−y)关于
y
y
y的原函数就是
−
Φ
(
x
−
y
)
-\Phi(x-y)
−Φ(x−y),于是有
[
]
[
x
]
≈
∑
n
=
−
∞
∞
n
[
Φ
(
x
−
n
)
−
Φ
(
x
−
n
−
1
)
]
=
lim
M
,
N
→
∞
∑
n
=
−
M
N
(
n
−
1
)
Φ
(
x
−
n
)
−
n
Φ
(
x
−
n
−
1
)
+
Φ
(
x
−
n
)
=
lim
M
,
N
→
∞
N
Φ
(
x
−
N
−
1
)
−
(
M
+
1
)
Φ
(
x
+
M
)
+
∑
n
=
−
M
N
Φ
(
x
−
n
)
(14)
\begin{aligned}[] [x]\approx&\,\sum_{n=-\infty}^{\infty}n\big[\Phi(x-n) - \Phi(x-n-1)\big]\\ =&\,\lim_{M,N\to\infty}\sum_{n=-M}^{N}(n-1)\Phi(x-n) - n\Phi(x-n-1) + \Phi(x-n)\\ =&\,\lim_{M,N\to\infty} N\Phi(x-N-1) - (M+1)\Phi(x+M) + \sum_{n=-M}^{N} \Phi(x-n) \end{aligned}\tag{14}
[][x]≈==n=−∞∑∞n[Φ(x−n)−Φ(x−n−1)]M,N→∞limn=−M∑N(n−1)Φ(x−n)−nΦ(x−n−1)+Φ(x−n)M,N→∞limNΦ(x−N−1)−(M+1)Φ(x+M)+n=−M∑NΦ(x−n)(14)
对于
Φ
(
x
)
\Phi(x)
Φ(x)我们有
Φ
(
−
∞
)
=
0
\Phi(-\infty)=0
Φ(−∞)=0和
Φ
(
∞
)
=
1
\Phi(\infty)=1
Φ(∞)=1,所以假设我们关心的范围满足
−
M
≪
x
≪
N
−M\ll x \ll N
−M≪x≪N,那么
Φ
(
x
−
N
−
1
)
≈
0
\Phi(x-N-1)\approx 0
Φ(x−N−1)≈0和
Φ
(
x
+
N
)
≈
1
\Phi(x+N)\approx 1
Φ(x+N)≈1,所以此时:
[
]
[
x
]
≈
−
M
−
1
+
∑
n
=
−
M
N
Φ
(
x
−
n
)
=
∑
n
=
−
M
0
[
Φ
(
x
−
n
)
−
1
]
+
∑
n
=
1
N
Φ
(
x
−
n
)
(15)
\begin{aligned}[] [x]\approx&\, -M-1 + \sum_{n=-M}^{N} \Phi(x-n)\\ =&\,\sum_{n=-M}^0 \big[\Phi(x-n)-1\big] + \sum_{n=1}^N \Phi(x-n) \end{aligned}\tag{15}
[][x]≈=−M−1+n=−M∑NΦ(x−n)n=−M∑0[Φ(x−n)−1]+n=1∑NΦ(x−n)(15)
用
Φ
(
x
)
=
σ
(
t
x
)
\Phi(x)=\sigma(tx)
Φ(x)=σ(tx)作为例子,取
t
=
10
,
M
=
5
,
N
=
10
t=10,M=5,N=10
t=10,M=5,N=10,结果如下:
可以看到,确实与
[
x
]
[x]
[x]蛮近似的,增大
t
t
t能进一步提高近似程度。
文章小结
本文介绍了一种利用狄拉克函数来构造光滑近似的方法,其特点是比较通用,对原函数没有太严格的要求。作为例子,我们利用它导出了ReLU函数的各种常见近似以及取整函数的一个光滑近似。
转载
本文转载自苏神的用狄拉克函数来构造非光滑函数的光滑近似