这篇文章的目的是推导最大值函数 $\max (x,y)$ 的一个光滑可导函数,并且该函数具有多阶可导性。实际上这和深度学习的关系并不是特别大,只有极少数情况会用到
在数学分析中,当 $x\ge0,y\ge0$ 时,我们有
$$ \max(x,y) = \frac{1}{2}(|x+y|+|x-y|)\tag{1} $$
那么,为了寻求一个最大值的光滑函数,我们首先考虑寻找一个能够近似表示绝对值 $|x|$ 的函数。那么,哪些函数可以使用呢?
直接观察挺难发现哪个函数可以使用的,我们将问题逐步向简单推进。对 $f (x)=|x|$ 求导,除了 $x=0$ 这一点外,其他都可以顺利求导
$$ f'(x) = \begin{cases}1,\quad &x>0\\-1, \quad &x < 0\end{cases} \tag{2} $$
到此为止,我们要做的是利用一个函数 $g (x)$,将其仿射变换为 $f'(x)$。而关于函数 $g (x)$ 的选择,应该至少满足以下两点:
- 应该是个分段函数
- 求不定积分简单,或者说至少能查到 $\int g (x) dx$ 的结果
实际上 $g (x)$ 也确实有许多满足上述两点的选择,以下就分别给出选择 $\text {sign}(x)$ 和单位阶跃函数 $\theta (x)$ 的推导
$\text{sign}(x)$
首先回顾 $\text {sign}(x)$ 的形式:
$$ \text{sign}(x)=\begin{cases}1,\quad &x>0\\-1, \quad &x < 0\end{cases} \tag{3} $$
于是就有 $f'(x)=\text {sign}(x)$,下面只需要寻求 $\text {sign}(x)$ 的近似函数,很容易想到
$$ \text{sign}(x)=\lim_{k\to +\infty} \tanh(kx)\tag{4} $$
其中,$\tanh (x)=\frac {e^x-e^{-x}}{e^x+e^{-x}}$。由于 $f'(x)=\tanh (kx)$,积分得
$$ \begin{aligned} f(x) &= \frac{1}{k}\ln(\cosh(kx))\\ &=\frac{1}{k}\ln(\frac{e^{kx}+e^{-kx}}{2})\\ &=\frac{1}{k}[\ln(e^{kx}+e^{-kx})-\ln2] \end{aligned}\tag{5} $$
不难发现,(5) 式中的对数部分,在 $k$ 足够大的时候,常数 $\ln2$ 的影响微乎其微,把它去掉之后,我们有一个比较简单的绝对值函数:
$$ |x|=\lim_{k\to +\infty} \frac{1}{k}\ln(e^{kx}+e^{-kx})\tag{6} $$
$\theta(x)$
首先回顾单位阶跃函数 $\theta (x)$ 的形式:
$$ \theta(x)=\begin{cases}1,\quad &x>0\\0, \quad &x < 0\end{cases} \tag{7} $$
那么
$$ f'(x) = 2\theta(x) - 1 \tag{8} $$
下面只需要寻求 $\theta (x)$ 的近似函数,物理学家已经提供现成的函数给我们了,一个比较简单的形式是
$$ \theta(x)=\lim_{k\to +\infty} \sigma(kx)=\lim_{k\to +\infty} \frac{1}{1+e^{-k x}}\tag{9} $$
那么我们就可以取 $\frac {1}{1+e^{-kx}}$ 作为近似函数了,带入 (8) 式得到 $\frac {2}{1+e^{-kx}} - 1$,积分得
$$ \begin{aligned}f(x)&=\frac{2}{k}\ln(1+e^{kx})-x\\ &= \frac{1}{k}\ln(1+e^{kx}) +\frac{1}{k}[\ln(1+e^{kx}) -\ln e^{kx}]\\ &=\frac{1}{k}\left[\ln(1+e^{kx})+\ln(1+e^{-kx})\right]\\ &=\frac{1}{k}\ln(2+e^{kx}+e^{-kx})\end{aligned}\tag{10} $$
同理,当 $k$ 足够大的时候,常数 2 的影响微乎其微,把它去掉之后,我们同样得到一个比较简单的绝对值函数
$$ |x| = \lim\limits_{k \to +\infty}\frac{1}{k} \ln(e^{kx} + e^{-kx}) \tag{11} $$
对比 (6) 和 (11) 可知,无论选用 $\text {sign}(x)$ 还是 $\theta (x)$,最终 $|x|$ 的近似函数都是一样的,这也从侧面证明了这个式子的准确性
将式 (11) 带入到式 (1) 得
$$ \begin{aligned} \max(x,y) &= \frac{1}{2}(|x+y|+|x-y|)\\ &= \lim\limits_{k \to +\infty}\frac{1}{2k}\{\ln[e^{k(x+y)} + e^{-k(x+y)}]+\ln[e^{k(x-y)} + e^{-k(x-y)}]\}\\ &= \lim\limits_{k \to +\infty}\frac{1}{2k}\ln(e^{2kx}+e^{-2kx}+e^{2ky}+e^{-2ky}) \end{aligned}\tag{12} $$
由于式 (1) 是在 $x\ge 0, y\ge 0$ 时成立的,所以式 (12) 中的 $e^{-2kx},e^{-2ky}$ 都不重要了,我们也把它去掉,进一步得到
$$ \max(x,y) = \lim\limits_{k \to +\infty}\frac{1}{2k}\ln(e^{2kx}+e^{2ky}) \tag{13} $$
或者写成
$$ \max(x,y) = \lim\limits_{k \to +\infty}\frac{1}{k}\ln(e^{kx}+e^{ky}) \tag{14} $$
(14) 式正是我们希望得到的理想的最大值函数。虽然我们的推导基于 $x\ge0,y\ge0$,但是不难发现,对于 $x,y$ 中出现负数时,上述公式仍然成立!它甚至还可以推广到多个变量的最大值函数:
$$ \max(x,y,z,\dots)=\lim_{k\to +\infty} \frac{1}{k}\ln(e^{kx}+e^{ky}+e^{kz}+\dots)\tag{15} $$
补充
对于式 (14) 我们不妨设 $k=1$,令 $x=3,y=8$,则 $\ln (e^3 + e^8)\approx8.00672$ 。由于 $x$ 和 $y$ 都在指数位置上,因此它们的差距将会放得很大。虽然 3 和 8 这两个数虽然相隔不远,但 $e^3\approx20.0855,e^8\approx2980.96$,两个幂差了几个数量级。因此,把 $e^3$ 加到 $e^8$ 上,几乎不会改变 $e^8$ 的大小。对 $e^3+e^8$ 取对数的结果和直接对 $e^8$ 取对数的结果相差不多,并且这个函数可以通过控制 $k$ 的大小实现精度控制,$k$ 越大则结果越近似
这实际上是做了这样的一个事情:找一个在整个实数域上都单调递增的函数,而且增长速度要快于线性增长,然后求和,最后取逆函数。因此,不难构造出类似的函数:我们选 $f (x)=x^{2k+1}$,那么得到
$$ \max(x,y)=\lim_{k\to+\infty} \sqrt[2k+1]{x^{2k+1}+y^{2k+1}}\tag{16} $$
当然,(16) 的精度(或者说收敛速度)远没有 (14) 那么好,要提高精度也不难,比如
$$ \max(x,y)=\lim_{k\to +\infty} \frac{1}{k}\ln\ln \left(e^{e^{kx}}+e^{e^{ky}}\right)\tag{17} $$