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