变分推断Variational Inference、生成对抗网络GAN
概述
- 介绍传统Imitation Learning的背景、算法、难点.IL学习的方式是通过Supervised Learning以state-action直接建立策略π(a∣s)的mapping,因此只能拟合数据与label的相关性.
- 引入额外监督信息r(s,a),尝试添加因果性,因此增加了灵活性(多solution应对更复杂的任务)的同时,付出了复杂度增大的代价(credit-assignment、exploration与exploitation).
- 对RL监督信息的来源、问题的建模、算法的大致分类进行了抽象介绍.
- 假设 无环境dynamics model,已知reward function、且为MDP的情况下,基于与真实环境交互得到的样本trajectory来估计梯度∇J(θ)或值函数Q∗(s,a),从而进行策略优化PI(Policy Improvement).
- 讨论了Policy Gradient、Value-based(V与Q)、Actor-Critic三大类型的model-free算法大致原理.
- 根据状态state、动作action的离散(discrete)或连续(continuous)、高维(high-dim)或低维(low-dim)进行Model-free算法选型.
- 主要介绍了LQR、iLQR、DDP三种规划(planning)算法
- 在LQR应对deterministic dynamics system,iLQR应对stochastic dynamics system,DDP是对dynamics model以及cost function都做了quadratic approximation的LQR扩展形态
- 引入了dynamics model p(s′∣s,a)或f(xt,ut) ,分为deterministic与stochastic两种,介绍了Model-based RL的基本算法(当然有进阶版)
- 介绍了Stochastic Optimizatin、MCTS和LQR framework三种经典规划算法planning,也统称Trajectory Optimization在已有dynamics model上怎么去做Optimal Control,得到较优控制序列
- 怎么更好的拟合dynamics model,引入DAgger、MPC replan、Uncertainty-Award、Latent Model来相应解决Distribution Mismatch、Compound Error、Diverse Exploration in State Space、State Representation的问题
- 介绍了通过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)为真实分布,q(x)为模型分布.
- 信息量
Ix0∼p(x)(x0)=−logp(x0)
p(x0) |
21 |
31 |
61 |
---|
logp(x0) |
−log2 |
−log3 |
−log6 |
I(x0) |
log2 |
log3 |
log6 |
说明:概率越小,信息量越大.
(啰嗦的缘由是希望从数值上得到直观印象,直接将−logp(x0)就看成一个整体,避免自己老是p(x0)小,logp(x0)小,−logp(x0)就大,像个呆板的沙雕=.=)
-
熵(Entropy)
H(p)=x0∼p(x)∑p(x0)[−logp(x0)]=∫p(x)[−logp(x)]dx=Ex0∼p(x)[−logp(x0)]
说明:真实分布p的信息量−logp(x)在自身的期望,熵越低分布越deterministic,熵越高分布越stochastic.
用途:用来衡量一个分布自身的随机程度,类似于数据中的方差variance.
(啰嗦的缘由是建立p(x)与−logp(x)的直观印象,p(x)小,−logp(x)大,即该样本x属于真实分布的概率小,则信息量−logp(x)大)
-
交叉熵(Cross Entropy)
H(p,q)=x0∼p(x)∑p(x0)[−logq(x0)]=∫p(x)[−logq(x)]dx=Ex0∼p(x)[−logq(x0)]说明:模型分布q的信息量−logq(x)在真实分布p下的期望,Cross Entropy越大p与q越不相似,Cross Entropy越小p与q越接近
用途:衡量模型分布与真实分布之间的相似程度,H(p)=H(p,p)
(又来啰嗦了,该样本x属于模型分布q的概率小,则信息量−logq(x)大,若属于真实分布p的概率大,则p(x)[−logq(x)]大,于是在该点x上,p,q越不相似,一高一低)
-
KL散度(Kullback–Leibler divergence)
KL(p,q)=x0∼p(x)∑p(x0)logq(x0)p(x0)=∫p(x)logq(x)p(x)dx=Ex0∼p(x)[logq(x)p(x)]
KL(p,q)=∫p(x)logq(x)p(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)
说明:两者越相似,q(x)p(x)→1,logq(x)p(x)→0,KL(p,q)越小;
用途:KL(p,q)是用来衡量两个分布之间的差异.
(突然啰嗦症晚期,由(1)可知,KL散度可看作两个分布信息量的差在真实分布p上的期望,两者相等时,期望为0;两者相差越远时,如在样本点x上,q(x)小,p(x)大,则两者信息量差距越大。由(2)可知,KL散度=交叉熵-熵.)
-
JS散度(Jensen-Shannon)
JS(p∣∣q)=21KL(p∣∣2p+q)+21KL(q∣∣2p+q)=21∫[p(x)logp(x)+q(x)2p(x)+q(x)logp(x)+q(x)2q(x)]dx
1.2小总结
一般数据来源为真实分布,算法拟合的为模型分布。
- H(q)衡量拟合数据的模型分布的随机程度,对于策略π(a∣s),一般希望其随机利于探索,则可在目标中添加maxθH(πθ(a∣s))即minθ−H(πθ(a∣s))
- H(p,q)与KL(p,q)主要区别是,当p为真实分布时,H(p)为常数,所以有minKL(p,q)=minH(p,q)−H(p)≡minH(p,q)。所以监督学习时,一般数据是真实分布,最小化KL散度等价于最小化交叉熵,可以算少一点。若要衡量两个模型分布的差异,则需要使用KL散度,如Knowledge Distillation,如TRPO中施加的约束,希望更新的Policy与之前的Poilcy差异不要太大DKL(πθ(a∣s)∣∣πθˉ(a∣s))≤ϵ
- JS散度是为了解决KL散度不对称性提出的一个指标。
二、 变分推断(Variational Inference)
2.1背景
现在有一个可看作从真实分布p采样的数据集D={x1,x2,...,xN},xi表示第i个样本,label为{y1,y2,...,yN},先忽略分类的label,用模型参数θ去拟合数据本身的概率密度p(x)
最大似然目标为:
θ←θargmaxN1i∑logpθ(xi)
假设数据有隐变量:p(x)=∫p(x∣z)p(z)dz
θ←θargmaxN1i∑log∫pθ(xi∣z)p(z)dz
由于关于隐变量的积分是intractable的,回顾一下EM算法:
logp(xi)=log∫pθ(xi∣z)p(z)dz=log∫pθ(xi,z)dz=log∫pθ(xi,z)qi(z)qi(z)dz=logEz∼qi(z)[qi(z)pθ(xi,z)](1)≥Ez∼qi(z)[logqi(z)pθ(xi,z)](2)=∫qi(z)logqi(z)pθ(xi,z)dz=∫qi(z)[−logqi(z)]dz+∫qi(z)logpθ(xi,z)dz=Ez∼qi(z)[logpθ(xi,z)]+H(qi)
(1)到(2)使用了logE[f]≥E[logf],且等号成立条件为qi(z)pθ(xi,z)=c,且∫qi(z)dz=1,c为常数,有
∫qi(z)dz=∫cpθ(xi,z)dz=1∫pθ(xi,z)dz=pθ(xi)=cqi(z)=cpθ(xi,z)=pθ(xi)pθ(xi,z)=pθ(z∣xi)
所以在EM算法中的最大似然目标变化如下:
θargmaxi∑logpθ(xi)=θargmaxi∑log∫pθ(xi,z)dz=θargmaxi∑Ez∼pθ(z∣xi)[logpθ(xi,z)]
(解释一下,由上面推导可知logpθ(xi)≥Ez∼qi(z)[logpθ(xi,z)]+H(qi),而等号成立时有qi(z)=pθ(z∣xi),所以相当于优化下界,EM算法流程为:
输入观察数据x=(x1,x2,⋯,xN),联合分布pθ(x,z),条件分布pθ(z∣x),迭代次数J
- 初始化参数θ0
- For j=1 to J 开始EM算法迭代:
E-step:
qi(zi)=p(zi∣xi,θj)L(θ,θj)=i=1∑Nz∼qi(z)∑qi(z)logpθ(xi,z)
M-step:
θj+1=θargmaxL(θ,θj)
- 直到θj+1收敛,输出模型参数θ
可参见刘建平的EM算法总结
算法是这样没有错,但细究一下,p(z∣x,θ)这个真实隐变量分布,如果不人为设定的话,应该如何计算呢?
这时候就需要变分推断通过迭代的方式,使q(z∣x)迭代地近似p(z∣x)这个分布了。因为数据复杂的时候,根本不清楚隐变量是什么情况呀,简单的时候可以假设每个样本xi服从一个隐变量高斯分布qi(z)=N(ui,σi),但复杂的时候,只能拟合隐变量的分布了。
总结:算法里已知的是观察数据,未知的是隐含变量z和模型参数θ,在E步,我们所做的事情是固定模型参数的值θj,优化隐含数据的分布p(z∣xi,θj),而在M步,我们所做的事情是固定隐含数据分布,优化模型参数的值
2.2 Variational Inference
由上一节可知,对于每一个样本有:
logp(xi)≥Ez∼qi(z)[logpθ(xi,z)]+H(qi)
记Li(p,qi)=Ez∼qi(z)[logpθ(xi,z)]+H(qi)
先下结论:
logp(xi)=Li(p,qi)+KL(qi(z)∣∣p(z∣xi))
然后证明:
KL(qi(z)∣∣p(z∣xi))=∫qi(z)logp(z∣xi)qi(z)dz=∫qi(z)logqi(z)dz−∫qi(z)logp(z∣xi)dz=−H(qi)−∫qi(z)logp(xi)p(xi,z)dz=−H(qi)−Ez∼qi(z)logp(xi,z)+∫qi(z)logp(xi)dz=−Li(p,qi)+logp(xi)
因此有:
θargmaxi∑logpθ(xi)≡θargmaxL(p,qi)同时qiargminKL(qi∣∣p(z∣xi))
对于每一个样本xi(或一个batch):
计算∇θLi(p,qi):
从简单分布qi(z)中采样隐变量z
∇θLi(p,qi)≈∇θlogpθ(xi∣z)
参数更新:θ←θ+α∇θLi(p,qi)
然后更新近似分布:qi←qiargmaxLi(p,qi)
那用来近似真实分布p(z∣xi)的qi应该是什么比较好呢?
如果是高斯分布有,z∼N(ui,σi),如果每个样本一个高斯分布,那就有N×(∣ui∣+∣σi∣)个参数,那可以选择GMM模型来拟合隐变量分布,即N个样本用M<N个高斯分布来拟合隐变量分布,嗯,这样需要按照经验来选择M,也可以。下面用神经网络为模型结构拟合高斯分布的参数吧~
我们需要建模的有pθ(x∣z),qϕ(z∣x),用θ代表隐变量下模型参数,用ϕ代表隐变量分布结构的参数

于是流程变为
对于每一个样本xi(或一个batch):
计算∇θL(pθ(xi∣z),qϕ(z∣xi)):
从简单分布qϕ(z∣xi)中采样隐变量z
∇θL≈∇θlogpθ(xi∣z)
更新模型参数:θ←θ+α∇θL
更新近似分布:ϕ←ϕ+α∇ϕL
∇ϕL的计算方式有两种:
- Policy Gradient形式
∇ϕLi=J(ϕ)Ez∼qϕ(z∣xi)[logpθ(xi∣z)+logp(z)]+H(qϕ(z∣xi))
记r(xi,z)=logpθ(xi∣z)+logp(z)
所以采样估计期望有:
∇J(ϕ)≈M1j∑∇ϕlogqϕ(zj∣xi)r(xi,zj)
∇H(qϕ(z∣xi))可看作对高斯分布的熵求导,即
若p(x)=(2πσ2)211exp{−2σ2(x−u)2},则H(p)=21(log2(πσ2)+1),仅与方差相关。
∇ϕLi=∇J(ϕ)+∇H(qϕ(z∣xi))
(qϕ(z∣x)拟合的是高斯分布的均值与方差,即uϕ,σϕ)
J(ϕ)=Ez∼qϕ(z∣xi)[r(xi,zj)]=Eϵ∼N(0,1)[r(xi,uϕ(xi)+ϵσϕ(xi))]
于是网络图如下:

目标函数为:
θ,ϕmaxN1i∑logpθ(xi∣μϕ(xi)+ϵσϕ(xi))−DKL(qϕ(z∣xi)∥p(z))
这个就是Variational AutoEncoder,总体梳理可以参见CS236的总结文章中的VAE。
三、GAN
3.1 原始GAN
-
GAN的优化目标如下:
θminϕmaxV(Gθ,Dϕ)=Ex∼pdata [logDϕ(x)]+Ez∼p(z)[log(1−Dϕ(Gθ(z)))]
-
对于判别器D的优化目标:
DmaxV(G,D)=Ex∼pdata[logD(x)]+Ex∼PG[1−logD(x)]=∫pdata(x)logD(x)+pG(x)(1−logD(x))dx
固定G,优化D时,Ex∼pdata[logD(x)]将属于pdata的样本x尽可能判为正例,将属于pG的样本x尽可能判为负例。
对D求导得最优判别器:
D∗(x)=pG(x)+pdata(x)pdata(x)
说明最优的判别器,对一个样本x,其属于G或者data的概率是一样的,则为21。
代入生成器G的优化目标:
GminV(G,D)=Ex∼pdata[logpG(x)+pdata(x)pdata(x)]+Ex∼PG[1−logpG(x)+pdata(x)pdata(x)]=Ex∼pdata[logpG(x)+pdata(x)2pdata(x)]+Ex∼PG[logpG(x)+pdata(x)2pdata(x)]−2log2=2JS(pdata(x)∣∣pG(x))−2log2
最优的生成器就是pG(x)=pdata(x)即JS(pdata(x)∣∣pG(x))=0
所以训练流程为:
-
从数据集D中采样m个样本x(1),x(2)...,x(m)
-
从隐变量先验分布p(z)中采样m个noisesz(1),z(2)...,z(m)
-
更新生成器G参数:∇θV(Gθ,Dϕ)=m1∇θi=1∑mlog(1−Dϕ(Gθ(z(i))))
-
更新判别器D参数:∇ϕV(Gθ,Dϕ)=m1∇ϕi=1∑m[logDϕ(x(i))+log(1−Dϕ(Gθ(z(i))))]
3.2 “-log D trick”的GAN
原始GAN在判别器D训练得比较好时,生成器G的优化目标变成:
GminV(G,D∗)=2JS(pdata(x)∣∣pG(x))−2log2
当pdata与pG重叠部分可忽略时,会出现JS散度为常数,导致训练过程中的梯度消失现象。
于是把G的优化目标魔改一下:
GminV(G,D)=GminEx∼PG(x)[log(1−D(x))]→GminEx∼PG(x)[−logD(x)]
写得详细点的话如下:
GminV(G,D)=GminEz∼p(z)[log(1−Dϕ(Gθ(z)))]→GminEz∼p(z)[−logDϕ(Gθ(z))]
固定D,调整θ,使得生成出来的样本x=Gθ(z),让优化目标Ez∼p(z)[−logDϕ(Gθ(z))]更小,即让−logD(x)更小,D(x)更大,从而直观上使得G生成的样本尽可能让D判别为正例。
我们已知:
Ex∼pdata[logD∗(x)]+Ex∼pG(x)[log(1−D∗(x))]=2JS(pdata(x)∣∣pG(x))−2log2
KL(pG∣∣pdata)=Ex∼pG[logpdata(x)pG(x)]=Ex∼pG[logpdata(x)+pG(x)pdata(x)pG(x)+pdata(x)pG(x)]=Ex∼pG[logD∗(x)1−D∗(x)]=Ex∼pG[log(1−D∗(x))]+Ex∼pG[−logD∗(x)]
所以更换G的目标函数后有:
GminV(G,D∗)=GminEx∼pG[−logD∗(x)]=GminKL(pG∣∣pdata)−Ex∼pG[log(1−D∗(x))]=GminKL(pG∣∣pdata)−[2JS(pdata(x)∣∣pG(x))−2log2−Ex∼pdata[logD∗(x)]]≡GminKL(pG∣∣pdata)−2JS(pdata(x)∣∣pG(x))(最后两项与G无关)
于是对于第二种目标函数,在D比较优的情况下:
- 第一项最小化KL(pG∣∣pdata)将生成器G拉近pdata
- 第二项最小化−JS(pdata(x)∣∣pG(x))将生成器G推远pdata
所以这种情况下会出现梯度不稳定,而且
- 对于一个G生成的样本x而言,当pG(x)→0,pdata(x)→1时,KL(pG∣∣pdata)→0。说明明明G生成了一个很接近真实分布的x,但是当前G还很差,使得pG(x)接近0,此时这个目标函数竟然接近0!这对G的参数θ几乎没改变。概括为“该优化目标会使得G没能生成真实样本”。
- 对于一个G生成的样本x而言,当pG(x)→1,pdata(x)→0时,KL(pG∣∣pdata)→+∞。说明此时G生成了一个很符合自身的样本x,但几乎不可能属于真实分布pdata,然而目标函数很大!概括为“该优化目标使得G生成了不真实的样本”
所以这种情况下会出现多样性不足即mode collapse的问题。
具体参考郑华滨的知乎文章
小结
上面是两种最原始的GAN,最核心的思想是G与D的对抗性训练,使G具备生成众多样本的特性。
这种对抗性训练也是IRL中的核心思想。
由最原始GAN的问题,由此衍生了一系列GAN的变种以及训练技巧,具体可参见下两个资料。
GAN Zoo Github
Tricks To Train GAN