本篇博文主要总结下台大教授李宏毅深度学习课程中关于seqGANseqGANseqGAN 的相关内容,并且添加了自己的一些思考。
Policy Gradient
众所周知,强化学习的目标就是Maximizing Expected RewardMaximizing\ Expected\ RewardMaximizing Expected Reward,在seqGANseqGANseqGAN 中,如下图:
上图中生成器是一个seq2seqseq2seqseq2seq 的模型,判别器就是所谓的HumamHumamHumam。那么不同的encoder_input hencoder\_input\ hencoder_input h 能生成不同的xxx,我们把h,xh,xh,x 喂给判别器,让其进行评价评估,得到其rewardrewardreward 。
我们的目标就是希望最大化的这个Maximizing Expected RewardMaximizing\ Expected\ RewardMaximizing Expected Reward
上面公式中的∑p(h)\sum p(h)∑p(h) 可以理解为encoder_inputencoder\_inputencoder_input 的分布,pθ(x∣h)p_\theta (x|h)pθ(x∣h)表示在当前encoder_inputencoder\_inputencoder_input 下生成的所有xxx 的分布,注意因为有随机性,相同的hhh 不一定能生成相同的xxx。θ\thetaθ 是seq2seqseq2seqseq2seq 的模型参数。我们的就是不断的最大化上面的RθR_{\theta}Rθ 来更新θ\thetaθ 然后更新生成器。
显然,我们可以将上式子理解成期望的形式:
因为不可能穷举所有的训练数据,故只能采用samplesamplesample 近似的方式
由此产生了一个问题,我们需要更新生成器的参数θ\thetaθ,如果采用samplesamplesample 的方式,则无法找到参数,参数是隐藏其中的,影响生成的xxx。
好,此时采用policy gradientpolicy\ gradientpolicy gradient 的方法:
然后我们用已经求得的RRR 对θ\thetaθ 的导数,利用gradient_ascendgradient\_ascendgradient_ascend 来更新θ\thetaθ。
显然:
- 当R(hi,xi)R(h^i, x^i)R(hi,xi) 为正时,通过更新θ\thetaθ,更新后的 p(xi∣hi)p(x_i|h_i)p(xi∣hi) 会增大。
- 当R(hi,xi)R(h^i, x^i)R(hi,xi) 为负时,通过更新θ\thetaθ,更新后的 p(xi∣hi)p(x_i|h_i)p(xi∣hi) 会减小。
经典的是policy gradientpolicy\ gradientpolicy gradient 与MLEMLEMLE 的比较:
上面表格的总结非常精辟,强化学习的目标函数实际上就是MLE的每一项的前面加了个权重而已,这个权重就是rewardrewardreward;并且在MLEMLEMLE 的目标函数中,其xxx 为true targettrue\ targettrue target,而在RLRLRL 中,xxx 为生成所生成的。(避免bias exposurebias\ exposurebias exposure 问题)
在实际实现中,也很简单,在已知上面表格中的RLRLRL 目标函数,利用深度学习框架即可自动的求导使其最大化。 也可以理解为只是在MLEMLEMLE 的每一项前添加一个rewardrewardreward 权重即可,至于rewardrewardreward 如何得到,之前的博文中已讲过。