共轭函数
共轭函数在最近火的不行的Gan生成对抗神经网络进阶版本的数学推理中有着神奇的作用,因此在这边记录下。
共轭函数的定义为:
$$
f ^ { * } ( t ) = \max _ { x \in \operatorname { dom } ( f ) } { x t - f ( x ) }
$$
当然如果去百度它不是这么写的,但这么写和一般的写法等价。
这个公式的
$$
x \in \operatorname { dom } ( f )
$$
表示x要在f的定义域内取值,这个蛮好理解的,不在定义域内就算不了。
那它具体在干一件什么事情呢?
可以看到式子的自变量是t,而当t定住后,式子希望在定义域内找到一个x使得右边大括号内的式子取得最大值。
它的物理意义是什么呢?
可以看到当t定住的时候,式子其实变成了y=xt−f(x),如果高兴也可以再把左右拆开,这样就会发现左边其实是以t为斜率的一根直线,而右边则是x的函数,那么max这货就是要找到原函数f(x)和以t为斜率的直线的最大距离点对应的
$$
x ^ { * }。
$$
说实在的,上面的解释我一看就懂,但完全不知所谓,心中十万只草泥马。最核心的问题在于,这个物理意义一点都不直观,而且这个公式怎么来的也不大清楚,感觉就是数学家随便写出来,然后脑袋一拍发现这东西有奇效!后面百度发现错怪了数学家,是物理学家搞出来的。。。我相信肯定有原因让他们把式子列成这样,但没查到,如果有知道的老哥请告诉我,万分感谢!
那么来看看它有什么性质好了。有两个比较重要的:
1.无论f(t)是不是凸函数,
$$
f ^ { * } ( t )
$$
是凸函数。
2.凸函数的共轭函数的共轭函数是它自己。
第一点其实蛮不明显的,尤其是看着
$$
f ^ { * } ( t )
$$
的表达式一晚上我也没想到怎么证明,但看到百度百科直接写”很明显能看出它是凸函数”然后半句解释都没有,而有些博客文章直接把这句话就抄了。。。给跪了。
那为什么呢?
上面是李宏毅大神的视频给出的图,因为在式子中tt是自变量,因此{xt−f(x)}其实是一堆的直线。而我们取定一个t要使得式子最大,其实就是做t轴的垂线,看看和垂线相交的最上面的点是哪个那就是最大值。
这样当我们跑完整个t之后,就可以得到
$$
f ^ { * } ( t )
$$
的表达式。
这个时候通过观察可以直接看出,
$$
f ^ { * } ( t )
$$
的斜率一定是不断增大的!那么它就是凸函数。当然从图上看可能会觉得虽然斜率是一直在增大,但在有些地方是不变的,这里无法直接从图上看出它是严格的凸函数,因此在这里存疑。但凸函数这点是一定的。
再来看第二点。假设现在t固定,而我们要求xt−f(x)的最大值其实就是要求式子对x求导后为0的位置。很容易可以算出最大值在f′(x)=t时取得。而因为f(x)是凸函数,因此只有唯一的一个x使得f′(x)=t,也就是说从原函数到其共轭函数x和t是一对一一对应关系。又从性质一我们知道反过来也是成立的。结合两个函数都是凸函数且变量互相一一对应,可以得出凸函数的共轭函数的共轭函数一定是它自己,如下图:
假设
$$
x_?\not=x_1
$$
则虚线部分将存在无映射的情况,与已知相背。当然这解释有点抽象,但实在是水平有限,不知道怎么从公式本身来证明这件事情。