这篇文章主要介绍发表在ICLR 2017上的论文
An Actor-Critic Algorithm For Sequence Predictionarxiv.org该论文利用强化学习中的Actor-Critic算法来训练神经网络并生成序列。基于log-likelihood的训练方法模型在训练和预测是不一致的。在训练的时候模型输入ground-truth tokens来生成下一个token,然而在预测时使用模型输出的tokens来生成下一个token。而作者提出的方法能够使训练过程和预测尽可能的相近,并且可以直接优化与任务相关的指标。下面具体介绍这篇论文。
1、Introduction
标准的训练RNN来生成序列的方法是最大化给定正确序列预测下一个token的log-likelihood,这种方法也叫做 teacher forcing 。在预测时,通过使用beam search等方法来根据学到的分布产生最可能正确的候选序列。但是在搜索过程中,模型是根据自己之前的输出来预测分布,而不是根据真实输出,这就是训练和预测矛盾的地方。已有的方法通过训练时从模型输出中采样的方法来尽可能避免这种问题,而这篇论文作者提出用强化学习的方法来直接提升测试指标(不再是log-likelihood)。作者使用critic网络来输出每个token的value,作者将其定义为如果网络输出token后并持续的根据概率分布采样输出时与具体任务相关的期望分数,也就是和状态动作值函数类似。这些预测的value可以指导序列预测网络的训练,也就是actor。
强化学习研究的是一种形式为reward的弱监督信息,这个reward和某个与具体任务相关的指标是标记类似的,而序列生成任务属于有监督学习的范畴,在这种设置下作者让critic的输入为ground-truth序列,也就是critic可以得到有更好reward甚至最优reward的专家动作序列。作者用时序差分的方法来训练critic,当然也用了“deep RL”的方法,比如target network。
2、Background
首先介绍论文中的符号。输入为
作者用soft attention机制来生成序列,也就是下面的公式
状态动作值函数如下,
3、Actor-Critic For Sequence Prediction
用
注意到作者在公式里使用了概率而没有使用概率的log形式。上式直观的意义是使得高value的动作的概率更大,降低 value的动作概率。上式的无偏估计为
为了降低方差,可以用参数化的
作者用参数为
Temporal-difference learning 如果用Monte-Carlo的方法得到回报然后用最小化均方误差的方法会早成比较大的方差,作者使用时序差分的方法来训练critic,也就是用
作为
Applying deep RL techniques 作者使用target network并用DDPG的方法来更新参数,这样会使得critic的输出更稳定。
Dealing with large action spaces 由于NLP中词表中词的个数巨大,因此动作空间也是非常大的,训练不容易收敛。作者对于不常被采样的词加了一个限制,也就是使得每次的输出与平均值更接近
Reward shaping 由于在最后一个时刻得到的score是一个非常稀疏的训练信息,作者对于不完整的序列有
Putting it all together 将以上方法整合在一个,论文的算法如下
文中的实验部分此处不再赘述,感兴趣的可以参考原文。