在机器学习中,我们经常会碰到不光滑的函数,但我们的优化方法通常是基于梯度的,这意味着光滑的模型可能更利于优化(梯度是连续的),所以就有了寻找非光滑函数的光滑近似的需求。事实上,本博客已经多次讨论过相关主题,比如《寻求一个光滑的最大值函数》《函数光滑化杂谈:不可导函数的可导逼近》等,但以往的讨论在方法上并没有什么通用性。

不过,笔者从最近的一篇论文《SAU: Smooth activation function using convolution with approximate identities》学习到了一种比较通用的思路:用狄拉克函数来构造光滑近似。通用到什么程度呢?理论上有可数个间断点的函数都可以用它来构造光滑近似!个人感觉还是非常有意思的。

狄拉克函数 #

在很早之前的文章《诡异的Dirac函数》中,我们就介绍过狄拉克函数了。在现代数学中,狄拉克函数被定义为一个“泛函”而不是“函数”,但对于大多数读者来说,将它当作函数来理解是比较容易接受的。

简单来说,狄拉克函数δ(x)满足:

1、\forall x\neq 0, \delta(x) = 0

2、\delta(0) = \infty

3、\int_{-\infty}^{\infty} \delta(x) dx = 1

直观来看,\delta(x)可以看成一个连续型的概率密度函数,采样空间为全体实数\mathbb{R},但是只有x=0处概率非零,也即均值为0、方差也为0,所以从中采样必然只能采样到0,因此成立如下恒等式:
\begin{equation}\int_{-\infty}^{\infty} f(x)\delta(x) dx = f(0)\end{equation}
或者
\begin{equation}\int_{-\infty}^{\infty} f(y)\delta(x-y) dy = f(x)\label{eq:base}\end{equation}
这可谓是狄拉克函数最重要的性质,也是我们后面主要用到的恒等式。

光滑近似 #

如果我们能找到\delta(x)的一个光滑近似\varphi(x)\approx \delta(x),那么根据\eqref{eq:base},我们就有
\begin{equation}g(x) = \int_{-\infty}^{\infty} f(y)\varphi(x-y) dy \approx f(x)\end{equation}
由于\varphi(x)是光滑的,所以g(x)也是光滑的,这也就是说,g(x)就是f(x)的一个光滑近似!这便是借助狄拉克函数的光滑近似来构建f(x)的光滑近似的核心思路了,在这个过程中,对f(x)的形式和连续性都没有太多限制,比如允许f(x)有可数个间断点(如取整函数[x])。

那么狄拉克函数的光滑近似有哪些呢?现成的也有不少,比如:
\begin{equation}\delta(x) = \lim_{\sigma\to 0} \frac{e^{-x^2/2\sigma^2}}{\sqrt{2\pi}\sigma}\label{eq:g}\end{equation}

\begin{equation}\delta(x)=\frac{1}{\pi} \lim_{a \to 0}\frac{a}{x^2+a^2}\end{equation}
简单来说,就是找一个像正态分布那样钟形曲线的非负函数,想办法让钟形的宽度逐渐趋于0,但保持积分为1。还有另一个思路是留意到
\begin{equation}\int_{-\infty}^x \delta(t)dt = \theta(x) = \left\{\begin{aligned}1,\,\, (x > 0) \\ 0,\,\, (x < 0)\end{aligned}\right.\end{equation}
也就是说,狄拉克函数的积分是“单位阶跃函数”\theta(x),如果我们能找到\theta(x)的光滑近似,那么将它求导就得到狄拉克函数的光滑近似。而\theta(x)的光滑近似,就是所谓的“S形”曲线了,比如sigmoid函数\sigma(x)=1/(1+e^{-x}),所以我们有
\begin{equation}\delta(x) = \lim_{t\to \infty} \frac{d}{dx}\sigma(tx) = \lim_{t\to \infty} \frac{e^{tx}t}{(1+e^{tx})^2}\label{eq:s}\end{equation}
常用的就是式\eqref{eq:g}和式\eqref{eq:s}两个近似。

ReLU激活 #

现在,我们就以上述思路为工具,推导ReLU激活函数\max(x,0)的各种光滑近似。

比如利用式\eqref{eq:s},得到
\begin{equation}\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}\end{equation}
t=1时,这便是SoftPlus激活函数。

如果换用式\eqref{eq:g},那么结果是
\begin{equation}\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}\end{equation}
这个ReLU的光滑近似貌似还没被研究过。

当然,如果仅仅是ReLU函数的光滑近似,那么还有更简单的思路,比如留意到\max(x,0)=x\theta(x),这里的\theta(x)就是前面提到的单位阶跃函数,所以问题可以转变为求\theta(x)的光滑近似,我们已经知道sigmoid便是其中之一,所以很快得到
\begin{equation}\max(x,0)\approx x\sigma(tx)\end{equation}
t=1时,这便是Swish激活函数。而如果用\eqref{eq:g}进行计算,那么就得到
\begin{equation}\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}\end{equation}
\sigma=1时,就是GeLU激活函数。

ReLU函数及其几个光滑近似的图像

ReLU函数及其几个光滑近似的图像

取整函数 #

可能读者觉得还不够意思,毕竟上面推导出来的都是现成的东西,而且不借助狄拉克函数也能推导出来。现在我们就来补充一个不怎么平凡的例子:取整函数的光滑近似。

取整函数分上取整和下取整两种,它们定义上有所不同,但是没有本质区别,这里以下取整为例子,我们记为
\begin{equation}[x] = n, \,\,\text{当且仅当存在}n\in\mathbb{Z}\text{使得}x\in[n, n + 1)\end{equation}

假设\varphi(x)为狄拉克函数的某个光滑近似,那么
\begin{equation} [x]\approx \int_{-\infty}^{\infty} \varphi(x-y)[y]dy = \sum_{n=-\infty}^{\infty}n\int_n^{n+1} \varphi(x-y)dy\end{equation}
\varphi(x)的原函数为\Phi(x),那么\varphi(x-y)关于y的原函数就是-\Phi(x-y),于是有
\begin{equation}\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}\end{equation}
对于\Phi(x)我们有\Phi(-\infty)=0\Phi(\infty)=1,所以假设我们关心的范围满足-M\ll x \ll N,那么\Phi(x-N-1)\approx 0\Phi(x+N)\approx 1,所以此时:
\begin{equation}\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}\end{equation}
\Phi(x)=\sigma(tx)作为例子,取t=10,M=5,N=10,结果如下:

取整函数的光滑近似效果

取整函数的光滑近似效果

可以看到,确实与[x]蛮近似的,增大t能进一步提高近似程度。

文章小结 #

本文介绍了一种利用狄拉克函数来构造光滑近似的方法,其特点是比较通用,对原函数没有太严格的要求。作为例子,我们利用它导出了ReLU函数的各种常见近似以及取整函数的一个光滑近似。

转载到请包括本文地址:https://kexue.fm/archives/8718

更详细的转载事宜请参考:《科学空间FAQ》

如果您还有什么疑惑或建议,欢迎在下方评论区继续讨论。

如果您觉得本文还不错,欢迎分享/打赏本文。打赏并非要从中获得收益,而是希望知道科学空间获得了多少读者的真心关注。当然,如果你无视它,也不会影响你的阅读。再次表示欢迎和感谢!

如果您需要引用本文,请参考:

苏剑林. (Oct. 10, 2021). 《用狄拉克函数来构造非光滑函数的光滑近似 》[Blog post]. Retrieved from https://kexue.fm/archives/8718

@online{kexuefm-8718,
        title={用狄拉克函数来构造非光滑函数的光滑近似},
        author={苏剑林},
        year={2021},
        month={Oct},
        url={\url{https://kexue.fm/archives/8718}},
}