Generative Adversarial Imitation Learning(GAIL)
GAN
基本概念
在GAN生成对抗网络中,包含两个模型,一个生成模型,一个判别模型。
- 生成模型:负责生成看起来真实自然,和原始数据相似的实例。
- 判别模型:负责判断给出的实例是真实的还是人为伪造的。
生成模型努力去欺骗判别模型,判别模型努力不被欺骗,这样两种模型交替优化训练,都得到了提升。
算法流程
在上面的流程图中,Generator接收一个随机的噪声,根据这个噪声生成图片,discriminator判断这个图片是不是真实的,D(x)表示x为真实图片的概率,也可以看做是分数,如果为1就是100%真实,如果为0,就表示是伪造的图片。
训练过程
Generator和Discriminator构成了一个动态博弈的过程,如果Generator恢复了真实数据的分布,也就是说生成了和真实数据一模一样的样本,那么判别模型就无法判别图片的真实性,就只能给出50%的真实概率,基本等于乱猜,此时双方的利益都得到最大化,Generator生成的图片有50%的概率被判别正确,Discriminator有50%的概率猜对,此时生成模型和判别模型都不会再更新自己的权重,其实也利用了最大熵原理
GAN模型的目标函数:
minGmaxDV(D,G)=Ex−Pdata(x)[logD(x)]+Ez−pz(z)[log(1−D(G(z)))]\min_G \max_D V(D,G) = E_{x-P_{data}(x)}[logD(x)] + E_{z-p_z(z)}[log(1-D(G(z)))]minGmaxDV(D,G)=Ex−Pdata(x)[logD(x)]+Ez−pz(z)[log(1−D(G(z)))]
在训练中,D要最大化logD(x)和log(1-D(G(z))),G要最小化log(1-D(G(z))),也就是最大化D的损失
或者可以直接理解为G网络的loss是log(1-D(G(z))),D的loss是-(log(D(x)))+log(1-D(G(z)))
因此G网络训练的目标是让D(G(z))趋近于1,这样G的loss就会变小,而D网络是一个2分类,目标是分清真实数据和伪造数据,也就是希望D(x)区间于1,D(G(z))趋近于0,这也就体现了对抗的思想
简单理解:对于辨别器,如果得到的是生成图片辨别器应该输出 0,如果是真实的图片应该输出 1,得到误差梯度反向传播来更新参数。对于生成器,首先由生成器生成一张图片,然后输入给判别器判别并的到相应的误差梯度,然后反向传播这些图片梯度成为组成生成器的权重。直观上来说就是:辨别器不得不告诉生成器如何调整从而使它生成的图片变得更加真实。
GAIL
对于之前的IRL算法,都是先根据计算出奖励函数,而后根据奖励函数进行强化学习,优化策略,最后靠近专家策略。这样的做法在高维度的数据中,计算成本比较大,而且都是在计算奖励函数,并没有直接得出state-action之间的关系。
GAIL算法则跳过了计算奖励函数的部分,直接寻找专家策略
而对于Inverse Reinforcement Learning想要到达的结果和GAN相同,也就是Generator生成的策略(或者轨迹分布)与专家策略相同。
算法
输入:专家轨迹,随机初始策略和判别器的参数θ0,w0\theta_0,w_0θ0,w0
Step 1:开始循环
Step 2:根据初始策略生成样本轨迹
Step 3:使用梯度策略更新判别器参数
E^τi[∇wlog(Dw(s,a))]+E^τE[∇wlog(1−Dw(s,a))]\hat{E}_{\tau_i}[\nabla_w log(D_w(s,a))]+\hat{E}_{\tau_{E}}[\nabla_w log(1-D_w(s,a))]E^τi[∇wlog(Dw(s,a))]+E^τE[∇wlog(1−Dw(s,a))]
Step 4:使用判别器产生的Dw(s,a)D_w(s,a)Dw(s,a)看做代价函数,利用TRPO算法对θ\thetaθ做梯度下降,更新Generator
理论
问题表述:π\piπ为给定状态下选择状态,A为稳定随机策略集合,P(s’|s,a)为环境动力学函数,也就是状态转移概率,γ\gammaγ为折扣率,πE\pi_EπE为专家策略,期望定义为:
Eπ[c(s,a)]=E[∑t=0∞γtc(st,at)]E_\pi [c(s,a)] = E[\sum^\infty_{t=0}\gamma^t c(s_t,a_t)]Eπ[c(s,a)]=E[∑t=0∞γtc(st,at)]
对于一般的IRL(例如学徒学习):
minimizeπmaxc∈CEπ[c(s,a)]−EπE[c(s,a)]minimize_\pi max_{c\in C} E_\pi [c(s,a)]-E_{\pi_E}[c(s,a)]minimizeπmaxc∈CEπ[c(s,a)]−EπE[c(s,a)]
也就是用线性方程来表示,希望产生的策略期望无限接近专家策略期望。在GAIL中扩展了这个公式,一项利用凸函数ψ\psiψ,另一项利用最大熵原理,定义了因果熵,也就将问题转换为了在函数族C中寻找最优的优化问题:
maxc∈C(minπ∈∏−H(π)+Eπ[c(s,a)])−EπE[c(s,a)]max_{c\in C}(min_{\pi \in \prod}-H(\pi) + E_\pi[c(s,a)]) - E_{\pi_E}[c(s,a)]maxc∈C(minπ∈∏−H(π)+Eπ[c(s,a)])−EπE[c(s,a)]
其中,H(π\piπ) = Eπ[−logπ(a∣s)]E_\pi[-log\pi(a|s)]Eπ[−logπ(a∣s)]为策略π\piπ的折扣因果熵,因为在实际运行中专家策略无法直接获取,就只能通过专家轨迹的采样来估计,最终问题转为为最大因果熵中寻找代价函数的过程,策略熵最大化,进而是的期望代价函数最小化