凸共轭和GAN有什么关系?
已知f共轭的共轭是f:
f∗(t)=x∈dom(f)max{xt−f(x)}
f(x)=t∈dom(f∗)max{xt−f∗(x)}
又知道F-Divergence的定义是:
Df(P∥Q)=∫xq(x)f(q(x)p(x))dx
将q(x)p(x)作为一个整体,带入到第二个式子,可以得到:
Df(P∥Q)=∫xq(x)f(q(x)p(x))dx
=∫xq(x)(t∈dom(f∗)max{q(x)p(x)t−f∗(t)})dx
思考
要解这个max的问题, 我们就要穷举所有的x, 然后找到q(x)p(x)t−f∗(t)对应的上确界(?),
但是我们现在不去解这个max的问题。我们学习一个D(x), 这个神经网络D的输入是x, 输出是t。 由于神经网络D
的拟合能力是有限的,因此:
Df(P∥Q)≥∫xq(x)(q(x)p(x)D(x)−f∗(D(x)))dx
=∫xp(x)D(x)−q(x)f∗(D(x))dx
为什么
q(x)p(x)D(x)−f∗(D(x))
是
t∈dom(f∗)max{q(x)p(x)t−f∗(t)}
的一个Lower Bound?
巧妙的转换
当神经网络通过学习变得足够好后, D(x)≈t, 此时 ∫xp(x)D(x)−q(x)f∗(D(x))≈Df(P∥Q)
于是:
Df(P∥Q)≈Dmax{∫xp(x)D(x)dx−∫xq(x)f∗(D(x))dx}
=Dmax{Ex∼P[D(x)]−Ex∼Q[f∗(D(x))]}
有没有很熟悉的感觉, 我们把P换成Pdata, 将Q换成PG, 就得到了:
Df(Pdata∥PG)≈Dmax{Ex∼Pdata[D(x)]−Ex∼PG[f∗(D(x))]}
和GAN的关系
GAN的最终目的:
G∗=argGminDf(Pdata∥PG)
=argGminDmax{Ex∼Pdata[D(x)]−Ex∼PG[f∗(D(x))]}
=argGminDmaxV(G,D)
回想一下在我们在最初学习GAN的时候是直接定义:
V(G,D)=Ex∼Pdata[logD(x)]+Ex∼PG[log(1−D(x))]
可以证明 (opens new window)使用这个上面这个V,我们minimize的其实是JS Divergence.
也就是说GAN里面的V是有一个通用形式的:
V(G,D)=Ex∼Pdata[D(x)]−Ex∼PG[f∗(D(x))]
也就是说GAN里面要Minimize的Divergence是有一个通用的形式的:
Df(Pdata∥PG)
f取不同的值可以量不同的Deivergence.
上式里面用到的有不是凸函数f本身,而是f的凸共轭f∗, 所以就想明白了为什么GAN和凸共轭有关系。
参考:
台大李宏毅老师GAN课程:GAN Lecture 5 (2018): General Framework (opens new window)