寻求一个光滑的最大值函数

2021-07-08 16:52:04 浏览数 (1)

这篇文章的目的是推导最大值函数max(x,y)的一个光滑可导函数,并且该函数具有多阶可导性。实际上这和深度学习的关系并不是特别大,只有极少数情况会用到

在数学分析中,当xge0,yge0时,我们有

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 < 0end{cases} tag{2}

到此为止,我们要做的是利用一个函数g(x),将其仿射变换为f'(x)。而关于函数g(x)的选择,应该至少满足以下两点:

  1. 应该是个分段函数
  2. 求不定积分简单,或者说至少能查到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 < 0end{cases} tag{3}

于是就有f'(x)=text{sign}(x),下面只需要寻求text{sign}(x)的近似函数,很容易想到

text{sign}(x)=lim_{kto 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_{kto 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 < 0end{cases} tag{7}

那么

f'(x) = 2theta(x) - 1 tag{8}

下面只需要寻求theta(x)的近似函数,物理学家已经提供现成的函数给我们了,一个比较简单的形式是

theta(x)=lim_{kto infty} sigma(kx)=lim_{kto 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}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| = limlimits_{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|)\ &= limlimits_{k to infty}frac{1}{2k}{ln[e^{k(x y)} e^{-k(x y)}] ln[e^{k(x-y)} e^{-k(x-y)}]}\ &= limlimits_{k to infty}frac{1}{2k}ln(e^{2kx} e^{-2kx} e^{2ky} e^{-2ky}) end{aligned}tag{12}

由于式(1)是在xge 0, yge 0时成立的,所以式(12)中的e^{-2kx},e^{-2ky}都不重要了,我们也把它去掉,进一步得到

max(x,y) = limlimits_{k to infty}frac{1}{2k}ln(e^{2kx} e^{2ky}) tag{13}

或者写成

max(x,y) = limlimits_{k to infty}frac{1}{k}ln(e^{kx} e^{ky}) tag{14}

(14)式正是我们希望得到的理想的最大值函数。虽然我们的推导基于xge0,yge0,但是不难发现,对于x,y中出现负数时,上述公式仍然成立!它甚至还可以推广到多个变量的最大值函数:

max(x,y,z,dots)=lim_{kto 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 。由于xy都在指数位置上,因此它们的差距将会放得很大。虽然3和8这两个数虽然相隔不远,但e^3approx20.0855,e^8approx2980.96,两个幂差了几个数量级。因此,把e^3加到e^8上,几乎不会改变e^8的大小。对e^3 e^8取对数的结果和直接对e^8取对数的结果相差不多,并且这个函数可以通过控制k的大小实现精度控制,k越大则结果越近似

这实际上是做了这样的一个事情:找一个在整个实数域上都单调递增的函数,而且增长速度要快于线性增长,然后求和,最后取逆函数。因此,不难构造出类似的函数:我们选y=x^{2k 1},那么得到

max(x,y)=lim_{kto infty} sqrt[2k 1]{x^{2k 1} y^{2k 1}}tag{16}

当然,(16)的精度(或者说收敛速度)远没有(14)那么好,要提高精度也不难,比如

max(x,y)=lim_{kto infty} frac{1}{k}lnln left(e^{e^{kx}} e^{e^{ky}}right)tag{17}

References

  • 寻求一个光滑的最大值函数
  • 如何构造一个平滑的最大值函数

0 人点赞