经典GAN学习笔记(一)

经典GAN 学习笔记(一)

我们需要GAN做什么?

  • 现在我们有一组数据 { x 1 , x 2 , x 3 . . . x N } \{x^{1},x^{2}, x^{3}...x^{N}\} {x1,x2,x3...xN},该数据的distribution 是 P d a t a ( x ) P_{data}(x) Pdata(x),该distribution未知。

  • 我们要构造一个distribution: P G ( x ) P_{G}(x) PG(x),使得它和 P d a t a ( x ) P_{data}(x) Pdata(x)越接近越好。 P G ( x ) P_{G}(x) PG(x)可以当作一个函数,它由参数 θ \theta θ来控制,这样子我们就可以写成 P G ( x ∣ θ ) P_{G}(x|\theta) PG(xθ)

  • 问题来了:那怎么衡量这两个distribution的接近程度呢?

    答:我们可以通过这两个distribution之间的divergence 来衡量,即: K L ( P d a t a ( x ) ∣ ∣ P G ( x ) ) KL\left(P_{data}(x)||P_{G}(x)\right) KL(Pdata(x)PG(x))

  • 此时可以将问题转换成如下数学表达式: a r g m i n θ K L ( P d a t a ( x ) ∣ ∣ P G ( x ) ) arg\underset{\theta}{min}KL\left(P_{data}(x)||P_{G}(x)\right) argθminKL(Pdata(x)PG(x))

  • 那么问题又来了:请简单描述一下上述问题的解决过程。

    答:虽然对 P d a t a 未 知 , 但 是 我 们 可 以 从 中 抽 样 出 足 够 多 的 数 据 { x 1 , x 2 , x 3 , . . . , x m } P_{data}未知,但是我们可以从中抽样出足够多的数据\{x^{1},x^{2},x^{3},...,x^{m}\} Pdata{x1,x2,x3,...,xm},然后对抽样出来的数据使用 P G ( x i ) P_{G}(x^{i}) PG(xi)计算其likelihood,likelihood越大,说明 P G P_{G} PG对应的distribution和 P d a t a P_{data} Pdata的越接近。

  • 此时问题可以转换成如下式子对应的问题:
    θ ∗ = a r g m a x θ ∏ i = 1 m P G ( x i ∣ θ ) (1) \begin{aligned}\tag{1}\theta^{*}=arg\underset{\theta}{max}\prod_{i=1}^{m}P_{G}({x^{i}|\theta})\end{aligned} θ=argθmaxi=1mPG(xiθ)(1)
    对以上式子做一些处理: θ ∗ = a r g m a x θ ∏ i = 1 m P G ( x i ∣ θ ) = a r g m a x θ l o g ∏ i = 1 m P G ( x i ∣ θ ) = a r g m a x θ ∑ i = 1 m l o g P G ( x i ∣ θ ) ≈ a g r m a x θ E x ∼ p d a t a [ l o g P G ( x i ∣ θ ) ] = a r g m a x θ ∫ x P d a t a ( x ) l o g P G ( x ∣ θ ) d x − ∫ x P d a t a ( x ) l o g P d a t a ( x ) d x = a r g m i n θ ∫ x P d a t a ( x ) l o g P d a t a ( x ) P G ( x ∣ θ ) d x = a r g m i n θ K L ( P d a t a ∣ ∣ P G ) \begin{aligned} \theta^{*}&=arg\underset{\theta}{max}\prod_{i=1}^{m}P_{G}({x^{i}|\theta})\\ &=arg\underset{\theta}{max} \quad log\prod_{i=1}^{m}P_{G}(x^{i}|\theta)\\ &=arg\underset{\theta}{max}\sum_{i=1}^{m}logP_{G}(x^{i}|\theta)\\ & \approx agr\underset{\theta}{max}E_{x\sim p_{data} }\left[logP_{G}(x^{i}|\theta)\right]\\ &= arg \underset{\theta}{max}\int_{x}P_{data}(x)logP_{G}(x|\theta)dx \color{red}{-\int_{x}P_{data}(x)logP_{data}(x)dx}\\ &=arg\underset{\theta}{min}\int_{x}P_{data}(x)log\frac{P_{data}(x)}{P_{G}(x|\theta)}dx\\ &= arg\underset{\theta}{min}KL\left(P_{data}||P_{G}\right) \end{aligned} θ=argθmaxi=1mPG(xiθ)=argθmaxlogi=1mPG(xiθ)=argθmaxi=1mlogPG(xiθ)agrθmaxExpdata[logPG(xiθ)]=argθmaxxPdata(x)logPG(xθ)dxxPdata(x)logPdata(x)dx=argθminxPdata(x)logPG(xθ)Pdata(x)dx=argθminKL(PdataPG)

    1.减去的那个部分对式子的最终结果没有影响

  • 那么问题来了:以上一番数学操作之后的告诉我们什么?

    最后的一个式子说明:我们在maximizing P G ( x i ∣ θ ) P_{G}(x^i|\theta) PG(xiθ)的likelihood其实等于我们在减少 P G P_{G} PG P d a t a P_{data} Pdata之间的divergence.

我们需要GAN构造一个 P G P_{G} PG

  1. 那么问题来了:怎么构造?

    答:我们可以将 P g ( x ∣ θ ) P_{g}(x|\theta) Pg(xθ)看成一个参数为 θ \theta θ的函数,又因为一个network可以构造出任意的函数(如果这个network的深度和neural够深够多的话),所以我们可以考虑通过训练一个network来逼近 P G P_{G} PG,我们称这个network为generator

  2. 将1中的问题描述转换成数学问题,如下式子:
    G ∗ = a r g m i n G D i v ( P G ( x ∣ θ ) , P d a t a ( x ) ) (2) \begin{aligned}\tag{2} G^{*}=arg\underset{G}{min}Div\left(P_{G}(x|\theta), P_{data}(x)\right) \end{aligned} G=argGminDiv(PG(xθ),Pdata(x))(2)

  3. 现在问题又来了:在式子(2)中,我们并不知道 D i v ( P G , P d a t a ) Div\left(P_{G},P_{data}\right) Div(PG,Pdata)如何计算,怎么办?

    答:可以考虑Discriminator.在GAN中D的工作是判断输入的数据是来自 P d a t a P_{data} Pdata还是 P G P_{G} PG,如果是来自前者,则输出一个大的数值,是后者则输出一个较小的值。根据这样的思想,我们去训练Discriminator

  4. 问题是:如何训练Discriminator?

    1. 写出Objective function如下:
      V ( G , D ) = E x ∼ p d a t a [ l o g D ( x ) ] + E x ∼ p G [ l o g ( 1 − D ( x ) ) ] (3) \begin{aligned}\tag{3} V\left(G,D\right)=E_{x\sim p_{data}} \left[logD(x)\right]+E_{x\sim p_{G}}\left[log(1-D(x))\right] \end{aligned} V(G,D)=Expdata[logD(x)]+ExpG[log(1D(x))](3)
    2. 训练Discriminator的问题转换为如下数学式子:
      D ∗ = a r g m a x D    V ( D , G ) (4) \begin{aligned}\tag{4} D^{*} = arg\underset{D}{max}\;V\left(D,G\right) \end{aligned} D=argDmaxV(D,G)(4)
    3. 对由(3)和(4)中的数学式子进行一番操作:
      D ∗ = a r g m a x D    V ( D , G ) = a r g m a x D E x ∼ p d a t a [ l o g D ( x ) ] + E x ∼ p G [ l o g ( 1 − D ( x ) ) ] = a r g m a x D ∫ x P d a t a ( x ) l o g D ( x ) d x + ∫ x P G ( x ) l o g ( 1 − D ( x ) ) d x = a r g m a x D ∫ x [ P d a t a ( x ) l o g ( D ( x ) ) + P G ( x ) l o g ( 1 − D ( x ) ) ] d x (5) \begin{aligned}\tag{5} D^{*}&=arg\underset{D}{max}\; V(D,G) \\ &= arg\underset{D}{max}E_{x\sim p_{data}} \left[logD(x)\right]+E_{x\sim p_{G}}\left[log(1-D(x))\right] \\ &=arg \underset{D}{max}\int_{x}P_{data}(x)logD(x)dx + \int_{x}P_{G}(x)log(1-D(x))dx \\ &=arg \underset{D}{max} \int_{x}\left[P_{data}(x)log(D(x))+P_{G}(x)log(1-D(x))\right]dx\\ \end{aligned} D=argDmaxV(D,G)=argDmaxExpdata[logD(x)]+ExpG[log(1D(x))]=argDmaxxPdata(x)logD(x)dx+xPG(x)log(1D(x))dx=argDmaxx[Pdata(x)log(D(x))+PG(x)log(1D(x))]dx(5)
      要maximizing (5),则相当于maximizing如下式子:
      D ∗ = a r g m a x D    P d a t a ( x ) l o g ( D ( x ) ) + P G ( x ) l o g ( 1 − D ( x ) ) (6) \begin{aligned}\tag{6} D^{*}=arg\underset{D}{max}\;P_{data}(x)log(D(x))+P_{G}(x)log(1-D(x)) \end{aligned} D=argDmaxPdata(x)log(D(x))+PG(x)log(1D(x))(6)
      已知: P d a t a ( x ) P_{data}(x) Pdata(x)不变,在训练Discriminator的时候固定Generator,所以(6)中的 P d a t a ( x ) P_{data}(x) Pdata(x) P G ( x ) P_{G}(x) PG(x)为常数,分别设a和b。为了方便,将D(x)简记为D。
      记:
      F ( D ) = a ∗ l o g ( D ) + b ∗ l o g ( 1 − D ) (7) \begin{aligned}\tag{7} F(D) = a*log(D)+b*log(1-D) \end{aligned} F(D)=alog(D)+blog(1D)(7)
      要求F(D)的最大值:对F进行求导,并使之等于零。解之得:
      D ∗ ( x ) = a a + b = P d a t a ( x ) P d a t a ( x ) + P G ( x ) (8) \begin{aligned}\tag{8} D^{*}(x) &= \frac{a}{a+b}\\ &= \frac{P_{data}(x)}{P_{data}(x)+P_{G}(x)} \end{aligned} D(x)=a+ba=Pdata(x)+PG(x)Pdata(x)(8)
      把(8)代入(3)得:
      V ( G , D ∗ ) = E x ∼ P d a t a [ l o g P d a t a ( x ) P d a t a ( x ) + P G ( x ) ] + E x ∼ P G [ l o g P G ( x ) P d a t a ( x ) + P G ( x ) ] = ∫ x P d a t a ( x ) l o g P d a t a ( x ) P d a t a ( x ) + P G ( x ) d x + ∫ x P G ( x ) l o g P G ( x ) P d a t a ( x ) + P G ( x ) d x = − 2 l o g 2 + K L ( P d a t a ∣ ∣ P d a t a + P G 2 ) + K L ( P G ∣ ∣ p d a t a + P G 2 ) (9) \begin{aligned}\tag{9} V(G,D^{*}) &= E_{x\sim P_{data}}\left[log\frac{P_{data}(x)}{P_{data(x)}+P_{G}(x)}\right] +E_{x\sim P_{G}}\left[log\frac{P_{G}(x)}{P_{data}(x)+P_{G}(x)}\right]\\ &= \int_{x}P_{data}(x)log\frac{P_{data}(x)}{P_{data}(x)+P_{G}(x)}dx+\int_{x}P_{G}(x)log\frac{P_{G}(x)}{P_{data}(x)+P_{G}(x)}dx\\ &= -2log2 + KL\left(P_{data}||\frac{P_{data}+P_G}{2}\right) + KL\left(P_{G}||\frac{p_{data}+P_{G}}{2}\right) \end{aligned} V(G,D)=ExPdata[logPdata(x)+PG(x)Pdata(x)]+ExPG[logPdata(x)+PG(x)PG(x)]=xPdata(x)logPdata(x)+PG(x)Pdata(x)dx+xPG(x)logPdata(x)+PG(x)PG(x)dx=2log2+KL(Pdata2Pdata+PG)+KL(PG2pdata+PG)(9)
      到这里:此时我们得出 D ∗ D^{*} D,然后再得出对应的 V ( G , D ∗ ) V(G,D^{*}) V(G,D)的值,此时V的值最大,而这个最大的V值刚好是 P d a t a P_{data} Pdata P G P_{G} PG之间的JSP divergence.这意味,我们终于解决了如何求得 P d a t a P_{data} Pdata P G P_{G} PG之间的Divergence这个问题。

      所以式子(2)就可以作如下转换:
      G ∗ = a r g m i n G D i v ( P G ( x ∣ θ ) , P d a t a ( x ) ) = a r g m i n G    m a x D V ( G , D ) (10) \begin{aligned}\tag{10} G^{*}&=arg\underset{G}{min}Div\left(P_{G}(x|\theta), P_{data}(x)\right) \\ &=arg\underset{G}{min}\;\underset{D}{max}V(G,D) \end{aligned} G=argGminDiv(PG(xθ),Pdata(x))=argGminDmaxV(G,D)(10)

    意思是说:我们对Discriminator进行训练,从数学上来说就最大化 Objective function的值,此时最大的值就是两个distribution之间的Divergence. 训练过程中可以使用Gradient Accent来实现。

  5. 现在,我们可以来考虑训练Generator这件事了。
    写出Objective function如下:
    V ( G , D ) = E x ∼ p d a t a [ l o g D ( x ) ] + E x ∼ p G [ l o g ( 1 − D ( x ) ) ] = ∫ x P d a t a ( x ) l o g D ( x ) d x + ∫ x P G ( x ) l o g ( 1 − D ∗ ( G ( x ) ) ) (11) \begin{aligned} \tag{11} V\left(G,D\right)&=E_{x\sim p_{data}} \left[logD(x)\right]+E_{x\sim p_{G}}\left[log(1-D(x))\right]\\ &=\int_{x}P_{data}(x)logD(x)dx + \int_{x}P_{G}(x)log(1-D^{*}(G(x))) \end{aligned} V(G,D)=Expdata[logD(x)]+ExpG[log(1D(x))]=xPdata(x)logD(x)dx+xPG(x)log(1D(G(x)))(11)
    在(11)式中,第一项表示数据从 P d a t a P_{data} Pdata中取样出来,即:原始数据,对应的期望,这个和Gnerator没有关系(训练Generalator的时候Discriminator固定),所以去掉该项。第二项则表示:现在,我们已经找到了那个最好的Discriminator,它使得V(G,D)的值就是两个distribution的divergence,由Generator生成的数据,作为 D ∗ D^{*} D的输入,此时我们希望V(D,G)的值越小越好,即确定 D ∗ D^{*} D的情况下,divergence越小越好,故,我们对第二项要做点什么。

    x ∼ P d a t a x\sim P_{data} xPdata表示数据是从 P d a t a P_{data} Pdata中抽样出来的,同理, x ∼ P G x\sim P_{G} xPG表示数据x是从 P G P_{G} PG中抽样出来的,也可以认为对应的Generator生成

  6. 对于(11)式,直接使用Gradient decent更新 V ( G , D ∗ ) V(G,D^{*}) V(G,D)中的参数G即可。如下:
    θ g ← θ g − η ∂ L ( G ) ∂ θ g 其 中 : G = V ( G , D ∗ ) , D ∗ 为 常 量 G 可 以 理 解 为 一 个 函 数 , 其 中 θ g 为 它 的 参 数 , 即 : G ( θ g ) (12) \begin{aligned} \theta_{g} \gets\theta_{g}-\eta\frac{\partial L(G)}{\partial \theta_{g}}\tag{12} \end{aligned}\\ 其中:G = V(G,D^{*}),D^{*}为常量 \\ G可以理解为一个函数,其中\theta_{g}为它的参数,即:G(\theta_{g}) θgθgηθgL(G)G=V(G,D),DGθgG(θg)(12)

  7. 在6的过程中,每更新一次G,都会导致 D ∗ D^{*} D改变,所以在训练G的时候,只更新一次G的参数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值