RL for Sentence Generation

本篇博文主要总结下台大教授李宏毅深度学习课程中关于seqGAN 的相关内容,并且添加了自己的一些思考。

Policy Gradient

众所周知,强化学习的目标就是Maximizing Expected Reward,在seqGAN 中,如下图:

RL for Sentence Generation

上图中生成器是一个seq2seq 的模型,判别器就是所谓的Humam。那么不同的encoder_input h 能生成不同的x,我们把h,x 喂给判别器,让其进行评价评估,得到其reward

我们的目标就是希望最大化的这个Maximizing Expected Reward
RL for Sentence Generation

上面公式中的p(h) 可以理解为encoder_input 的分布,pθ(x|h)表示在当前encoder_input 下生成的所有x 的分布,注意因为有随机性,相同的h 不一定能生成相同的xθseq2seq 的模型参数。我们的就是不断的最大化上面的Rθ 来更新θ 然后更新生成器。

显然,我们可以将上式子理解成期望的形式:

RL for Sentence Generation

因为不可能穷举所有的训练数据,故只能采用sample 近似的方式

RL for Sentence Generation

由此产生了一个问题,我们需要更新生成器的参数θ,如果采用sample 的方式,则无法找到参数,参数是隐藏其中的,影响生成的x

好,此时采用policy gradient 的方法:
RL for Sentence Generation

然后我们用已经求得的Rθ 的导数,利用gradient_ascend 来更新θ

RL for Sentence Generation

显然:

  • R(hi,xi) 为正时,通过更新θ,更新后的 p(xi|hi) 会增大。
  • R(hi,xi) 为负时,通过更新θ,更新后的 p(xi|hi) 会减小。

经典的是policy gradientMLE 的比较:

RL for Sentence Generation

上面表格的总结非常精辟,强化学习的目标函数实际上就是MLE的每一项的前面加了个权重而已,这个权重就是reward;并且在MLE 的目标函数中,其xtrue target,而在RL 中,x 为生成所生成的。(避免bias exposure 问题)

在实际实现中,也很简单,在已知上面表格中的RL 目标函数,利用深度学习框架即可自动的求导使其最大化。 也可以理解为只是在MLE 的每一项前添加一个reward 权重即可,至于reward 如何得到,之前的博文中已讲过。