寻求一个光滑的最大值函数
By 苏剑林 | 2015-05-02 | 128439位读者 |在最优化问题中,求一个函数的最大值或最小值,最直接的方法是求导,然后比较各阶极值的大小。然而,我们所要优化的函数往往不一定可导,比如函数中含有最大值函数$\max(x,y)$的。这时候就得求助于其他思路了。有一个很巧妙的思路是,将这些不可导函数用一个可导的函数来近似它,从而我们用求极值的方法来求出它近似的最优值。本文的任务,就是探究一个简单而有用的函数,它能够作为最大值函数的近似,并且具有多阶导数。下面是笔者给出的一个推导过程。
在数学分析中,笔者已经学习过一个关于最大值函数的公式,即当$x \geq 0, y \geq 0$时,我们有
$$\max(x,y)=\frac{1}{2}\left(|x+y|+|x-y|\right)\tag{1}$$
那么,为了寻求一个最大值的函数,我们首先可以考虑寻找一个能够近似表示绝对值$|x|$的函数,这样我们就把问题从二维降低到一维了。那么,哪个函数可以使用呢?
直接观察挺难发现哪个函数可以使用的,我们将问题逐步向简单推进。我们对$f(x)=|x|$求导,除了$x=0$这一点外,其他都可以顺利求导
$$f'(x) = \left\{\begin{aligned}1,&\,x > 0\\
-1,&\, x < 0\end{aligned}\right.\tag{2}$$
这是一个简单的分段函数,在物理中,这类函数十分常见,跟它最接近的,应该是单位阶跃函数$\theta(x)$:
$$\theta(x) = \left\{\begin{aligned}1,&\,x > 0\\
0,&\, x < 0\end{aligned}\right.\tag{3}$$
那么
$$f'(x)=2\theta(x)-1\tag{4}$$
下面只需要寻求$\theta(x)$的近似函数,物理学家已经提供现成的函数给我们了,一个比较简单的形式是[来源:维基百科]
$$\theta(x)=\lim_{k\to +\infty} \frac{1}{1+e^{-k x}}\tag{5}$$
那么我们就可以取$\frac{1}{1+e^{-k x}}$作为近似函数了,代入$(4)$式得到$\frac{2e^{k x}}{1+e^{k x}}-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{6}$$
不难发现,$(6)$式中的对数部分,在$k$足够大的时候,常数$2$的影响微乎其微,把它去掉之后,我们有一个比较简单的绝对值函数:
$$|x|=\lim_{k\to +\infty} \frac{1}{k}\ln(e^{kx}+e^{-kx})\tag{7}$$
结合$(7)$式和$(1)$式,我们就得到
$$\max(x,y)=\lim_{k\to +\infty} \frac{1}{2k}\left\{\ln[e^{k(x+y)}+e^{-k(x+y)}]+\ln[e^{k(x-y)}+e^{-k(x-y)}]\right\}\tag{8}$$
$(8)$式还可以再化简,我们得到
$$\max(x,y)=\lim_{k\to +\infty} \frac{1}{2k}\ln(e^{2kx}+e^{-2kx}+e^{2ky}+e^{-2ky})\tag{9}$$
并且由于$(1)$式是在$x\geq 0,y\geq 0$时成立的,所以$(9)$式中的$e^{-2kx}$和$e^{-2ky}$均变得不重要了,我们也把它们去掉,进一步得到
$$\max(x,y)=\lim_{k\to +\infty} \frac{1}{2k}\ln(e^{2kx}+e^{2ky})\tag{10}$$
或者写成
$$\max(x,y)=\lim_{k\to +\infty} \frac{1}{k}\ln(e^{kx}+e^{ky})\tag{11}$$
$(11)$式正是我们希望得到的理想的最大值函数。虽然我们的推导基于$x\geq 0,y\geq 0$,但是不难发现,对于$x,y$中出现负数时,上述公式仍然成立!它甚至还可以推广到多个变量的最大值函数:
$$\max(x,y,z,\dots)=\lim_{k\to +\infty} \frac{1}{k}\ln(e^{kx}+e^{ky}+e^{kz}+\dots)\tag{12}$$
关于$(11)$式更多的展示,请阅读Matrix67的《如何构造一个平滑的最大值函数》:
http://www.matrix67.com/blog/archives/2830
观察$(11)$式的结构可以看出,这实际上是做了这样的一个事情:找一个在整个实数域上都单调递增的函数,而且增长速度要快于线性增长,然后求和,最后取逆函数。因此,不难构造出类似的函数:我们选$y=x^{2k+1}$,那么得到
$$\max(x,y)=\lim_{k\to+\infty} \sqrt[2k+1]{x^{2k+1}+y^{2k+1}}\tag{13}$$
当然,$(13)$的精度(或者说收敛速度)远没有$(11)$那么好,要提高精度也不难,比如
$$\max(x,y)=\lim_{k\to +\infty} \frac{1}{k}\ln\ln\left(e^{e^{kx}}+e^{e^{ky}}\right)\tag{14}$$
综合精度和简洁两方面考虑,估计最优的选择就是$(11)$了。
转载到请包括本文地址:https://spaces.ac.cn/archives/3290
更详细的转载事宜请参考:《科学空间FAQ》
如果您还有什么疑惑或建议,欢迎在下方评论区继续讨论。
如果您觉得本文还不错,欢迎分享/打赏本文。打赏并非要从中获得收益,而是希望知道科学空间获得了多少读者的真心关注。当然,如果你无视它,也不会影响你的阅读。再次表示欢迎和感谢!
如果您需要引用本文,请参考:
苏剑林. (May. 02, 2015). 《寻求一个光滑的最大值函数 》[Blog post]. Retrieved from https://spaces.ac.cn/archives/3290
@online{kexuefm-3290,
title={寻求一个光滑的最大值函数},
author={苏剑林},
year={2015},
month={May},
url={\url{https://spaces.ac.cn/archives/3290}},
}
July 16th, 2015
具体在哪方面会需要光滑的最大值函数呢?
April 1st, 2018
LateX显示不成功,就是公式6 的第一行怎么推出第二行呢?
可以边预览边编辑
April 1st, 2018
$$\frac{2}{k}\ln(1+e^{kx})-x
=\frac{1}{k}\left[\ln(1+e^{kx})+\ln(1+e^{-kx})\right]$$
成功了,哈哈
$$\begin{aligned}2\ln (1+e^{kx}) =& \ln (1+e^{kx}) + \ln (1+e^{kx})\\
=&\ln (1+e^{kx}) + \ln \Big[e^{kx}(1+e^{-kx})\Big]\\
=&\ln (1+e^{kx}) + \ln (1+e^{-kx}) + \ln (e^{kx})\\
=&\ln (1+e^{kx}) + \ln (1+e^{-kx}) + kx\end{aligned}$$
September 27th, 2018
您好,为什么选用阶跃函数而不是选用sign(x)函数,sign(x)函数不是正好可对应于|x|的偏导吗?
September 28th, 2018
苏神您好,试了一下,似乎使用sign(x)也能推导出来结果,而且推导过程更为简洁;学习了
一样的,看你对哪个函数比较熟悉了...我对$\theta(x)$熟悉些
December 7th, 2019
哪位大神能列个对应的多个变量的光滑最小值函数么,本科生求救,模型最后卡在这里,超出了我的能力
$$\min(x,y,z,\dots)=-\max(-x,-y,-z,\dots)=-\lim_{k\to +\infty} \frac{1}{k}\ln(e^{-kx}+e^{-ky}+e^{-kz}+\dots)$$
顺便说一句,本文已经给出了多个变量的光滑最大值函数了,在这个基础上推导光滑最小值函数还“超出你的能力”的话,那建议你后面的工作都别做下去了。(这绝对是客观中肯的建议,而不是什么嘲讽)
February 26th, 2020
其实就是幂函数在无穷大的时候取到最大值...研究这个当loss函数么?
是有这个用途。这其实就是logsumexp算子,很多框架都有实现。
May 2nd, 2020
综合(1)(7)式,将|x|=\lim_{k\to +\infty} \frac{1}{k}\ln(e^{kx}+e^{-kx}),|y|=\lim_{k\to +\infty} \frac{1}{k}\ln(e^{ky}+e^{-ky})我怎么推导不出来(8)式呢?
综合(1)(7)式,将$|x|=\lim_{k\to +\infty} \frac{1}{k}\ln(e^{kx}+e^{-kx}),|y|=\lim_{k\to +\infty} \frac{1}{k}\ln(e^{ky}+e^{-ky})$我怎么推导不出来(8)式呢?(抱歉,刚刚没有显示)
我怎么知道你怎么推导不出来...
哈哈,我再推推,学习了
不需要推,x+y,x-y分别代入式(7)的x即可
May 2nd, 2020
感觉好像缺了 $\frac{\ln(e^{kx}+e^{-kx})}{\ln(e^{ky}+e^{-ky})}$,在上一楼的假设基础上。
June 3rd, 2020
剑林兄,《虽然我们的推导基于x≥0,y≥0,但是不难发现,对于x,y中出现负数时,上述公式仍然成立!》的原因是神马
因为它确实成立啊。。。