深度强化学习CS285 lec13-lec15 基础知识:变分推断VI与GAN

陌路散爱 提交于 2020-02-29 16:59:22

概述


  1. 介绍传统Imitation Learning的背景、算法、难点.IL学习的方式是通过Supervised Learning以state-action直接建立策略π(as)\pi(a|s)的mapping,因此只能拟合数据与label的相关性.
  2. 引入额外监督信息r(s,a)r(s,a)尝试添加因果性,因此增加了灵活性(多solution应对更复杂的任务)的同时,付出了复杂度增大的代价(credit-assignment、exploration与exploitation).
  3. 对RL监督信息的来源、问题的建模、算法的大致分类进行了抽象介绍.
  1. 假设 无环境dynamics model,已知reward function、且为MDP的情况下,基于与真实环境交互得到的样本trajectory来估计梯度J(θ)\nabla J(\theta)或值函数Q(s,a)Q^*(s,a),从而进行策略优化PI(Policy Improvement).
  2. 讨论了Policy Gradient、Value-based(V与Q)、Actor-Critic三大类型的model-free算法大致原理.
  3. 根据状态state、动作action的离散(discrete)或连续(continuous)、高维(high-dim)或低维(low-dim)进行Model-free算法选型.
  1. 主要介绍了LQR、iLQR、DDP三种规划(planning)算法
  2. 在LQR应对deterministic dynamics system,iLQR应对stochastic dynamics system,DDP是对dynamics model以及cost function都做了quadratic approximation的LQR扩展形态
  1. 引入了dynamics model p(ss,a)p(s'|s,a)f(xt,ut)f(x_t,u_t) ,分为deterministic与stochastic两种,介绍了Model-based RL的基本算法(当然有进阶版)
  2. 介绍了Stochastic Optimizatin、MCTS和LQR framework三种经典规划算法planning,也统称Trajectory Optimization在已有dynamics model上怎么去做Optimal Control,得到较优控制序列
  3. 怎么更好的拟合dynamics model,引入DAgger、MPC replan、Uncertainty-Award、Latent Model来相应解决Distribution Mismatch、Compound Error、Diverse Exploration in State Space、State Representation的问题
  4. 介绍了通过dynamics model来辅助Policy学习的General Dyna-Style算法以及Divide and Conquer RL中的比较经典的Guided Policy Search.

本文主要是为推导较繁琐的lec14-Reframe Control As Inference与lec15-Inverse Reinforcement Learning进行基础铺垫,介绍变分推断VI、对抗生成网络GAN的理论基础,减轻一些负担,是是是,我知道这个都很常见啦,当回顾一下。
本文安排

  • 回顾一些信息论的概念,如信息量、熵Entropy、交叉熵Cross Entropy、KL散度、JS散度等.
  • 介绍Latent Variable Model、EM算法、变分推断VI
  • 介绍GAN的理论基础,这跟逆强化学习IRL联系很!很!很紧密!

一、简要回顾信息论

1.1 概念与公式


假设:p(x)p(x)为真实分布,q(x)q(x)为模型分布.

  • 信息量
    Ix0p(x)(x0)=logp(x0)I_{x_0\sim p(x)}(x_0)=-logp(x_0)
p(x0)p(x_0) 12\frac{1}{2} 13\frac{1}{3} 16\frac{1}{6}
logp(x0)logp(x_0) log2-log2 log3-log3 log6-log6
I(x0)I(x_0) log2log2 log3log3 log6log6

说明:概率越小,信息量越大.

(啰嗦的缘由是希望从数值上得到直观印象,直接将logp(x0)-logp(x_0)就看成一个整体,避免自己老是p(x0)p(x_0)小,logp(x0)logp(x_0)小,logp(x0-logp(x_0)就大,像个呆板的沙雕=.=)

  • 熵(Entropy)
    H(p)=x0p(x)p(x0)[logp(x0)]=p(x)[logp(x)]dx=Ex0p(x)[logp(x0)]H(p)=\sum_{x_0\sim p(x)}p(x_0)[-logp(x_0)]=\int p(x)[-logp(x)]dx=E_{x_0\sim p(x)}\big[-logp(x_0)\big]

    说明:真实分布pp的信息量logp(x)-logp(x)在自身的期望,熵越低分布越deterministic,熵越高分布越stochastic.
    用途:用来衡量一个分布自身的随机程度,类似于数据中的方差variance.
    (啰嗦的缘由是建立p(x)p(x)logp(x)-logp(x)的直观印象,p(x)p(x)小,logp(x)-logp(x)大,即该样本xx属于真实分布的概率小,则信息量logp(x)-logp(x)大)

  • 交叉熵(Cross Entropy)

    H(p,q)=x0p(x)p(x0)[logq(x0)]=p(x)[logq(x)]dx=Ex0p(x)[logq(x0)]H(p,q)=\sum_{x_0\sim p(x)}p(x_0)[-logq(x_0)]=\int p(x)[-logq(x)]dx=E_{x_0\sim p(x)}\big[-logq(x_0)\big]说明:模型分布qq的信息量logq(x)-logq(x)在真实分布pp下的期望,Cross Entropy越大p与q越不相似,Cross Entropy越小p与q越接近
    用途:衡量模型分布与真实分布之间的相似程度,H(p)=H(p,p)H(p)=H(p,p)
    (又来啰嗦了,该样本xx属于模型分布qq的概率小,则信息量logq(x)-logq(x)大,若属于真实分布pp的概率大,则p(x)[logq(x)]p(x)[-logq(x)]大,于是在该点xx上,p,qp,q越不相似,一高一低)

  • KL散度(Kullback–Leibler divergence)
    KL(p,q)=x0p(x)p(x0)logp(x0)q(x0)=p(x)logp(x)q(x)dx=Ex0p(x)[logp(x)q(x)]KL(p,q)=\sum_{x_0\sim p(x)}p(x_0)log\frac{p(x_0)}{q(x_0)}=\int p(x)log\frac{p(x)}{q(x)}dx=E_{x_0\sim p(x)}\Big[log\frac{p(x)}{q(x)}\Big]
    KL(p,q)=p(x)logp(x)q(x)dx=p(x)[[logq(x)][logp(x)]]dx=Ep(x)[I(q)I(p)](1)=p(x)logp(x)dx+p(x)[logq(x)]dx=H(p)+H(p,q)0(2) \begin{aligned} KL(p,q)&=\int p(x)log\frac{p(x)}{q(x)}dx\\ &=\int p(x)\Big[[-logq(x)]-[-logp(x)]\Big]dx\\ &=E_{p(x)}\Big[I(q)-I(p)\Big]\quad (1)\\ &=\int p(x)logp(x)dx+\int p(x)[-logq(x)]dx\\ &=-H(p)+H(p,q)\geq0 \quad(2)\\ \end{aligned}

    说明:两者越相似,p(x)q(x)1,logp(x)q(x)0\frac{p(x)}{q(x)}\rightarrow1,log\frac{p(x)}{q(x)}\rightarrow0KL(p,q)KL(p,q)越小;
    用途:KL(p,q)KL(p,q)是用来衡量两个分布之间的差异.
    (突然啰嗦症晚期,由(1)(1)可知,KL散度可看作两个分布信息量的差在真实分布pp上的期望,两者相等时,期望为0;两者相差越远时,如在样本点x上,q(x)q(x)小,p(x)p(x)大,则两者信息量差距越大。由(2)(2)可知,KL散度=交叉熵-熵.)

  • JS散度(Jensen-Shannon)
    JS(pq)=12KL(pp+q2)+12KL(qp+q2)=12[p(x)log2p(x)p(x)+q(x)+q(x)log2q(x)p(x)+q(x)]dx \begin{aligned} JS(p||q)&=\frac{1}{2}KL(p||\frac{p+q}{2})+\frac{1}{2}KL(q||\frac{p+q}{2})\\ &=\frac{1}{2}\int\Big[ p(x)log\frac{2p(x)}{p(x)+q(x)}+q(x)log\frac{2q(x)}{p(x)+q(x)}\Big]dx\\ \end{aligned}

1.2小总结


一般数据来源为真实分布,算法拟合的为模型分布。

  • H(q)H(q)衡量拟合数据的模型分布的随机程度,对于策略π(as)\pi(a|s),一般希望其随机利于探索,则可在目标中添加maxθH(πθ(as))\max_\theta H(\pi_\theta(a|s))minθH(πθ(as))\min_\theta-H(\pi_\theta(a|s))
  • H(p,q)H(p,q)KL(p,q)KL(p,q)主要区别是,当p为真实分布时,H(p)H(p)为常数,所以有minKL(p,q)=minH(p,q)H(p)minH(p,q)minKL(p,q)=minH(p,q)-H(p)\equiv minH(p,q)。所以监督学习时,一般数据是真实分布,最小化KL散度等价于最小化交叉熵,可以算少一点。若要衡量两个模型分布的差异,则需要使用KL散度,如Knowledge Distillation,如TRPO中施加的约束,希望更新的Policy与之前的Poilcy差异不要太大DKL(πθ(as)πθˉ(as))ϵD_{KL}\big(\pi_\theta(a|s)||\pi_{\bar\theta}(a|s)\big)\leq\epsilon
  • JS散度是为了解决KL散度不对称性提出的一个指标。

二、 变分推断(Variational Inference)


2.1背景

现在有一个可看作从真实分布pp采样的数据集D={x1,x2,...,xN}D=\{x_1,x_2,...,x_N\}xix_i表示第ii个样本,label为{y1,y2,...,yN}\{y_1,y_2,...,y_N\},先忽略分类的label,用模型参数θ\theta去拟合数据本身的概率密度p(x)p(x)

最大似然目标为:

θarg maxθ1Nilogpθ(xi)\theta\leftarrow \argmax_\theta \frac{1}{N}\sum_ilogp_\theta(x_i)

假设数据有隐变量:p(x)=p(xz)p(z)dzp(x)=\int p(x|z)p(z)dz

θarg maxθ1Nilogpθ(xiz)p(z)dz\theta\leftarrow \argmax_\theta \frac{1}{N}\sum_ilog\int p_\theta(x_i|z)p(z)dz

由于关于隐变量的积分是intractable的,回顾一下EM算法:

logp(xi)=logpθ(xiz)p(z)dz=logpθ(xi,z)dz=logpθ(xi,z)qi(z)qi(z)dz=logEzqi(z)[pθ(xi,z)qi(z)](1)Ezqi(z)[logpθ(xi,z)qi(z)](2)=qi(z)logpθ(xi,z)qi(z)dz=qi(z)[logqi(z)]dz+qi(z)logpθ(xi,z)dz=Ezqi(z)[logpθ(xi,z)]+H(qi) \begin{aligned} logp(x_i)&=log\int p_\theta(x_i|z)p(z)dz\\ &=log\int p_\theta(x_i,z)dz\\ &=log\int p_\theta(x_i,z)\frac{q_i(z)}{q_i(z)}dz\\ &=logE_{z\sim q_i(z)}\Big[\frac{p_\theta(x_i,z)}{q_i(z)}\Big]\quad (1)\\ &\geq E_{z\sim q_i(z)}\Big[log\frac{p_\theta(x_i,z)}{q_i(z)}\Big]\quad(2)\\ &=\int q_i(z)log\frac{p_\theta(x_i,z)}{q_i(z)}dz\\ &=\int q_i(z)[-logq_i(z)]dz+\int q_i(z)logp_\theta(x_i,z)dz\\ &=E_{z\sim q_i(z)}\Big[logp_\theta(x_i,z)\Big]+H(q_i) \end{aligned}

(1)(1)(2)(2)使用了logE[f]E[logf]logE[f]\geq E[logf],且等号成立条件为pθ(xi,z)qi(z)=c\frac{p_\theta(x_i,z)}{q_i(z)}=c,且qi(z)dz=1,c\int q_i(z)dz=1,c为常数,有

qi(z)dz=pθ(xi,z)cdz=1pθ(xi,z)dz=pθ(xi)=cqi(z)=pθ(xi,z)c=pθ(xi,z)pθ(xi)=pθ(zxi)\int q_i(z)dz=\int\frac{p_\theta(x_i,z)}{c}dz=1\\ \int p_\theta(x_i,z)dz=p_\theta(x_i)=c\\ q_i(z)=\frac{p_\theta(x_i,z)}{c}=\frac{p_\theta(x_i,z)}{p_\theta(x_i)}=p_\theta(z|x_i)

所以在EM算法中的最大似然目标变化如下:
arg maxθilogpθ(xi)=arg maxθilogpθ(xi,z)dz=arg maxθiEzpθ(zxi)[logpθ(xi,z)] \begin{aligned} \argmax_\theta \sum_ilogp_\theta(x_i)&=\argmax_\theta\sum_ilog\int p_\theta(x_i,z)dz\\ &=\argmax_\theta \sum_i E_{z\sim p_\theta (z|x_i)}[logp_\theta(x_i,z)]\\ \end{aligned}
(解释一下,由上面推导可知logpθ(xi)Ezqi(z)[logpθ(xi,z)]+H(qi)logp_\theta(x_i)\geq E_{z\sim q_i(z)}\Big[logp_\theta(x_i,z)\Big]+H(q_i),而等号成立时有qi(z)=pθ(zxi)q_i(z)=p_\theta(z|x_i),所以相当于优化下界,EM算法流程为:
输入观察数据x=(x1,x2,,xN)x=(x_1,x_2,\cdots,x_N),联合分布pθ(x,z)p_\theta(x,z),条件分布pθ(zx)p_\theta(z|x),迭代次数JJ

  1. 初始化参数θ0\theta_0
  2. For j=1 to J 开始EM算法迭代:
    E-step:
    qi(zi)=p(zixi,θj)L(θ,θj)=i=1Nzqi(z)qi(z)logpθ(xi,z)q_i(z_i)=p(z_i|x_i,\theta_j)\\ L(\theta,\theta_j)=\sum_{i=1}^N\sum_{z\sim q_i(z)}q_i(z)logp_\theta(x_i,z)
    M-step:
    θj+1=arg maxθL(θ,θj)\theta_{j+1}=\argmax_\theta L(\theta,\theta_j)
  3. 直到θj+1\theta^{j+1}收敛,输出模型参数θ\theta

可参见刘建平的EM算法总结
算法是这样没有错,但细究一下,p(zx,θ)p(z|x,\theta)这个真实隐变量分布,如果不人为设定的话,应该如何计算呢?
这时候就需要变分推断通过迭代的方式,使q(zx)q(z|x)迭代地近似p(zx)p(z|x)这个分布了。因为数据复杂的时候,根本不清楚隐变量是什么情况呀,简单的时候可以假设每个样本xix_i服从一个隐变量高斯分布qi(z)=N(ui,σi)q_i(z)=N(u_i,\sigma_i),但复杂的时候,只能拟合隐变量的分布了。
总结:算法里已知的是观察数据,未知的是隐含变量zz和模型参数θ\theta,在E步,我们所做的事情是固定模型参数的值θj\theta_j,优化隐含数据的分布p(zxi,θj)p(z|x_i,\theta_j),而在M步,我们所做的事情是固定隐含数据分布,优化模型参数的值

2.2 Variational Inference

由上一节可知,对于每一个样本有:
logp(xi)Ezqi(z)[logpθ(xi,z)]+H(qi)logp(x_i)\geq E_{z\sim q_i(z)}\Big[logp_\theta(x_i,z)\Big]+H(q_i)

Li(p,qi)=Ezqi(z)[logpθ(xi,z)]+H(qi)记 L_i(p,q_i)=E_{z\sim q_i(z)}\Big[logp_\theta(x_i,z)\Big]+H(q_i)

先下结论:
logp(xi)=Li(p,qi)+KL(qi(z)p(zxi))logp(x_i)=L_i(p,q_i)+KL\big(q_i(z)||p(z|x_i)\big)

然后证明:

KL(qi(z)p(zxi))=qi(z)logqi(z)p(zxi)dz=qi(z)logqi(z)dzqi(z)logp(zxi)dz=H(qi)qi(z)logp(xi,z)p(xi)dz=H(qi)Ezqi(z)logp(xi,z)+qi(z)logp(xi)dz=Li(p,qi)+logp(xi) \begin{aligned} KL(q_i(z)||p(z|x_i))&=\int q_i(z)log\frac{q_i(z)}{p(z|x_i)}dz\\ &=\int q_i(z)logq_i(z)dz-\int q_i(z)logp(z|x_i)dz\\ &=-H(q_i)-\int q_i(z)log\frac{p(x_i,z)}{p(x_i)}dz\\ &=-H(q_i)-E_{z\sim q_i(z)}logp(x_i,z)+\int q_i(z)logp(x_i)dz\\ &=-L_i(p,q_i)+logp(x_i) \end{aligned}

因此有:

arg maxθilogpθ(xi)arg maxθL(p,qi)arg minqiKL(qip(zxi))\argmax_\theta\sum_ilogp_\theta(x_i)\equiv \argmax_\theta L(p,q_i)同时\argmin_{q_i} KL(q_i||p(z|x_i))

对于每一个样本xix_i(或一个batch):
\quad 计算θLi(p,qi)\nabla_\theta L_i(p,q_i)
\quad \quad 从简单分布qi(z)q_i(z)中采样隐变量zz
\quad \quad θLi(p,qi)θlogpθ(xiz)\nabla_\theta L_i(p,q_i)\approx\nabla_\theta logp_\theta(x_i|z)
\quad参数更新:θθ+αθLi(p,qi)\theta \leftarrow\theta+\alpha\nabla_\theta L_i(p,q_i)
\quad然后更新近似分布:qiarg maxqiLi(p,qi)q_i\leftarrow\argmax_{q_i}L_i(p,q_i)

那用来近似真实分布p(zxi)p(z|x_i)qiq_i应该是什么比较好呢?

如果是高斯分布有,zN(ui,σi)z\sim N(u_i,\sigma_i),如果每个样本一个高斯分布,那就有N×(ui+σi)N\times(|u_i|+|\sigma_i|)个参数,那可以选择GMM模型来拟合隐变量分布,即NN个样本用M<NM<N个高斯分布来拟合隐变量分布,嗯,这样需要按照经验来选择M,也可以。下面用神经网络为模型结构拟合高斯分布的参数吧~

我们需要建模的有pθ(xz),qϕ(zx)p_\theta(x|z),q_\phi(z|x)θ\theta代表隐变量下模型参数,用ϕ\phi代表隐变量分布结构的参数
在这里插入图片描述在这里插入图片描述于是流程变为
对于每一个样本xix_i(或一个batch):
\quad 计算θL(pθ(xiz),qϕ(zxi))\nabla_\theta L(p_\theta(x_i|z),q_\phi(z|x_i))
\quad \quad 从简单分布qϕ(zxi)q_\phi(z|x_i)中采样隐变量zz
\quad \quad θLθlogpθ(xiz)\nabla_\theta L\approx\nabla_\theta logp_\theta(x_i|z)
\quad更新模型参数:θθ+αθL\theta \leftarrow\theta+\alpha\nabla_\theta L
\quad更新近似分布:ϕϕ+αϕL\phi\leftarrow\phi+\alpha\nabla_\phi L

ϕL\nabla_\phi L的计算方式有两种:

  • Policy Gradient形式
    ϕLi=Ezqϕ(zxi)[logpθ(xiz)+logp(z)]J(ϕ)+H(qϕ(zxi))\nabla_\phi L_i=\underbrace{E_{z\sim q_\phi(z|x_i)}\Big[logp_\theta(x_i|z)+logp(z)\Big]}_{J(\phi)}+H(q_\phi(z|x_i))

r(xi,z)=logpθ(xiz)+logp(z)记r(x_i,z)=logp_\theta(x_i|z)+logp(z)

所以采样估计期望有:
J(ϕ)1Mjϕlogqϕ(zjxi)r(xi,zj) \nabla J(\phi)\approx \frac{1}{M}\sum_j\nabla_\phi logq_\phi(z_j|x_i)r(x_i,z_j)
H(qϕ(zxi))\nabla H(q_\phi(z|x_i))可看作对高斯分布的熵求导,即

p(x)=1(2πσ2)12exp{(xu)22σ2}p(x)=\frac{1}{(2\pi\sigma^2)^{\frac{1}{2}}}exp\{{-\frac{(x-u)^2}{2\sigma^2}}\},则H(p)=12(log2(πσ2)+1)H(p)=\frac{1}{2}\big(log2(\pi\sigma^2)+1\big),仅与方差相关。
ϕLi=J(ϕ)+H(qϕ(zxi))\nabla_\phi L_i=\nabla J(\phi)+\nabla H(q_\phi(z|x_i))

qϕ(zx)q_\phi(z|x)拟合的是高斯分布的均值与方差,即uϕ,σϕu_\phi,\sigma_\phi)

  • Reparameterization trick

J(ϕ)=Ezqϕ(zxi)[r(xi,zj)]=EϵN(0,1)[r(xi,uϕ(xi)+ϵσϕ(xi))] \begin{aligned} J(\phi)&=E_{z\sim q_\phi(z|x_i)}\big[r(x_i,z_j)\big]\\ &=E_{\epsilon\sim N(0,1)}\big[r(x_i,u_\phi(x_i)+\epsilon\sigma_\phi(x_i))\big] \end{aligned}
于是网络图如下:
在这里插入图片描述
目标函数为:

maxθ,ϕ1Nilogpθ(xiμϕ(xi)+ϵσϕ(xi))DKL(qϕ(zxi)p(z)) \max _{\theta, \phi} \frac{1}{N} \sum_{i} \log p_{\theta}\left(x_{i} | \mu_{\phi}\left(x_{i}\right)+\epsilon \sigma_{\phi}\left(x_{i}\right)\right)-D_{\mathrm{KL}}\left(q_{\phi}\left(z | x_{i}\right) \| p(z)\right)

这个就是Variational AutoEncoder,总体梳理可以参见CS236的总结文章中的VAE

三、GAN

3.1 原始GAN

  • GAN的优化目标如下:
    minθmaxϕV(Gθ,Dϕ)=Expdata [logDϕ(x)]+Ezp(z)[log(1Dϕ(Gθ(z)))] \min _{\theta} \max _{\phi} V\left(G_{\theta}, D_{\phi}\right)=\mathbb{E}_{\mathbf{x} \sim \mathbf{p}_{\text {data }}}\left[\log D_{\phi}(\mathbf{x})\right]+\mathbb{E}_{\mathbf{z} \sim p(\mathbf{z})}\left[\log \left(1-D_{\phi}\left(G_{\theta}(\mathbf{z})\right)\right)\right]

  • 对于判别器D的优化目标:
    maxDV(G,D)=Expdata[logD(x)]+ExPG[1logD(x)]=pdata(x)logD(x)+pG(x)(1logD(x))dx \begin{aligned} \max_{D}V(G,D)&=E_{x\sim p_{data}}\big[logD(x)\big]+E_{x\sim P_G}\big[1-logD(x)\big]\\ &=\int p_{data}(x)logD(x)+p_G(x)(1-logD(x))dx\\ \end{aligned}

    固定G,优化D时,Expdata[logD(x)]E_{x\sim p_{data}}\big[logD(x)\big]将属于pdatap_{data}的样本xx尽可能判为正例,将属于pGp_G的样本x尽可能判为负例。
    DD求导得最优判别器
    D(x)=pdata(x)pG(x)+pdata(x) D^*(x)=\frac{p_{data}(x)}{p_G(x)+p_{data}(x)}

    说明最优的判别器,对一个样本xx,其属于G或者data的概率是一样的,则为12\frac{1}{2}
    代入生成器G的优化目标
    minGV(G,D)=Expdata[logpdata(x)pG(x)+pdata(x)]+ExPG[1logpdata(x)pG(x)+pdata(x)]=Expdata[log2pdata(x)pG(x)+pdata(x)]+ExPG[log2pdata(x)pG(x)+pdata(x)]2log2=2JS(pdata(x)pG(x))2log2 \begin{aligned} \min_{G}V(G,D)&=E_{x\sim p_{data}}\big[log\frac{p_{data}(x)}{p_G(x)+p_{data}(x)}\big]+E_{x\sim P_G}\big[1-log\frac{p_{data}(x)}{p_G(x)+p_{data}(x)}\big]\\ &=E_{x\sim p_{data}}\big[log\frac{2p_{data}(x)}{p_G(x)+p_{data}(x)}\big]+E_{x\sim P_G}\big[log\frac{2p_{data}(x)}{p_G(x)+p_{data}(x)}\big]-2log2\\ &=2JS(p_{data}(x)||p_G(x))-2log2 \end{aligned}

最优的生成器就是pG(x)=pdata(x)p_G(x)=p_{data}(x)JS(pdata(x)pG(x))=0JS(p_{data}(x)||p_G(x))=0

所以训练流程为:

  1. 从数据集DD中采样m个样本x(1),x(2)...,x(m)x^{(1)},x^{(2)}...,x^{(m)}

  2. 从隐变量先验分布p(z)p(z)中采样m个noisesz(1),z(2)...,z(m)z^{(1)},z^{(2)}...,z^{(m)}

  3. 更新生成器GG参数:θV(Gθ,Dϕ)=1mθi=1mlog(1Dϕ(Gθ(z(i))))\nabla_\theta V(G_\theta,D_\phi)=\frac{1}{m}\nabla_\theta\sum_{i=1}^mlog(1-D_\phi(G_\theta(z^{(i)})))

  4. 更新判别器DD参数:ϕV(Gθ,Dϕ)=1mϕi=1m[logDϕ(x(i))+log(1Dϕ(Gθ(z(i))))]\nabla_\phi V(G_\theta,D_\phi)=\frac{1}{m}\nabla_\phi\sum_{i=1}^m\Big[logD_\phi(x^{(i)})+log(1-D_\phi(G_\theta(z^{(i)})))\Big]

3.2 “-log D trick”的GAN

原始GAN在判别器D训练得比较好时,生成器G的优化目标变成:

minGV(G,D)=2JS(pdata(x)pG(x))2log2\min_{G}V(G,D^*)=2JS(p_{data}(x)||p_G(x))-2log2

pdatap_{data}pGp_G重叠部分可忽略时,会出现JS散度为常数,导致训练过程中的梯度消失现象

于是把G的优化目标魔改一下:

minGV(G,D)=minGExPG(x)[log(1D(x))]minGExPG(x)[logD(x)]\min_{G}V(G,D)=\min_GE_{x\sim P_G(x)}\big[log(1-D(x))\big]\rightarrow \min_GE_{x\sim P_G(x)}\big[-logD(x)\big]

写得详细点的话如下:
minGV(G,D)=minGEzp(z)[log(1Dϕ(Gθ(z)))]minGEzp(z)[logDϕ(Gθ(z))]\min_{G}V(G,D)=\min_GE_{z\sim p(z)}\big[log(1-D_\phi(G_\theta(z)))\big]\rightarrow \min_GE_{z\sim p(z)}\big[-logD_\phi(G_\theta(z))\big]

固定DD,调整θ\theta,使得生成出来的样本x=Gθ(z)x=G_\theta(z),让优化目标Ezp(z)[logDϕ(Gθ(z))]E_{z\sim p(z)}\big[-logD_\phi(G_\theta(z))\big]更小,即让logD(x)-logD(x)更小,D(x)D(x)更大,从而直观上使得G生成的样本尽可能让D判别为正例。

我们已知:

Expdata[logD(x)]+ExpG(x)[log(1D(x))]=2JS(pdata(x)pG(x))2log2 \begin{aligned} E_{x\sim p_{data}}\big[logD^*(x)\big]+E_{x\sim p_G(x)}\big[log(1-D^*(x))\big]=2JS(p_{data}(x)||p_G(x))-2log2\\ \end{aligned}

KL(pGpdata)=ExpG[logpG(x)pdata(x)]=ExpG[logpG(x)pG(x)+pdata(x)pdata(x)pdata(x)+pG(x)]=ExpG[log1D(x)D(x)]=ExpG[log(1D(x))]+ExpG[logD(x)] \begin{aligned} KL(p_G||p_{data})&=E_{x\sim p_G}\Big[log\frac{p_G(x)}{p_{data}(x)}\Big]\\ &=E_{x\sim p_G}\Big[log\frac{\frac{p_G(x)}{p_G(x)+p_{data}(x)}}{\frac{p_{data}(x)}{p_{data}(x)+p_G(x)}}\Big]\\ &=E_{x\sim p_G}\Big[log\frac{1-D^*(x)}{D^*(x)}\Big]\\ &=E_{x\sim p_G}\big[log(1-D^*(x))\big]+E_{x\sim p_G}\big[-logD^*(x)\big] \end{aligned}

所以更换G的目标函数后有:
minGV(G,D)=minGExpG[logD(x)]=minGKL(pGpdata)ExpG[log(1D(x))]=minGKL(pGpdata)[2JS(pdata(x)pG(x))2log2Expdata[logD(x)]]minGKL(pGpdata)2JS(pdata(x)pG(x))G \begin{aligned} \min_GV(G,D^*)&=\min_GE_{x\sim p_G}\big[-logD^*(x)\big]\\ &=\min_GKL(p_G||p_{data})-E_{x\sim p_G}\big[log(1-D^*(x))\big]\\ &=\min_GKL(p_G||p_{data})-\Big[2JS(p_{data}(x)||p_G(x))-2log2-E_{x\sim p_{data}}\big[logD^*(x)\big]\Big]\\ &\equiv \min_GKL(p_G||p_{data})-2JS(p_{data}(x)||p_G(x)) (最后两项与G无关) \end{aligned}

于是对于第二种目标函数,在D比较优的情况下:

  1. 第一项最小化KL(pGpdata)KL(p_G||p_{data})将生成器G拉近pdatap_{data}
  2. 第二项最小化JS(pdata(x)pG(x))-JS(p_{data}(x)||p_G(x))将生成器G推远pdatap_{data}

所以这种情况下会出现梯度不稳定,而且

  1. 对于一个G生成的样本xx而言,当pG(x)0,pdata(x)1p_G(x)\rightarrow0,p_{data}(x)\rightarrow1时,KL(pGpdata)0KL(p_G||p_{data})\rightarrow0。说明明明G生成了一个很接近真实分布的xx,但是当前G还很差,使得pG(x)p_G(x)接近0,此时这个目标函数竟然接近0!这对G的参数θ\theta几乎没改变。概括为“该优化目标会使得G没能生成真实样本”。
  2. 对于一个G生成的样本xx而言,当pG(x)1,pdata(x)0p_G(x)\rightarrow1,p_{data}(x)\rightarrow0时,KL(pGpdata)+KL(p_G||p_{data})\rightarrow+\infty。说明此时G生成了一个很符合自身的样本xx,但几乎不可能属于真实分布pdatap_{data},然而目标函数很大!概括为“该优化目标使得G生成了不真实的样本

所以这种情况下会出现多样性不足即mode collapse的问题。

具体参考郑华滨的知乎文章

小结

上面是两种最原始的GAN,最核心的思想是G与D的对抗性训练,使G具备生成众多样本的特性。

这种对抗性训练也是IRL中的核心思想。

由最原始GAN的问题,由此衍生了一系列GAN的变种以及训练技巧,具体可参见下两个资料。

GAN Zoo Github
Tricks To Train GAN

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!