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