言語生成の強化学習をやっていく(手法紹介 Actor-Critic編②)

この記事は強化学習苦手の会 Advent Calendar 2020の10日目の記事です。

言語生成の強化学習 参ノ型 「Actor-Critic with Q-learning」

Deep Q-learningについて書くと言ったな、あれは嘘だ。言語生成の強化学習では方策$\pi$を方策勾配法で更新したいというモチベーションがベースになっているようなので、Q-learning単体の手法はサーベイ論文の方には載っていませんでした。Actor-CriticのCritic部分をQ関数の推定器で置き換えるという話はあるようですのでこちらを紹介したいと思います。

ちなみに、Q-learningを使う手法自体があんまり言語生成だとメジャーではないっぽいですね。論文によると、

Aside from these issues, there are problems inherent to specific applications that make it hard for researchers to combine RL techniques with current seq2seq models. For instance, in most of the NLP problems, the output or action space is massive comparing to the size of actions in a robotic or game-playing problems.
Deep Reinforcement Learning For Sequence to Sequence Models

とのことで、要するに「(Action space)デカ過ぎんだろ・・・」というのが問題のようです。おそらく学習が難しくなるのだと思います。

一応メリット的なものもあったので紹介しておくと、Q関数の推定器$Q_{\Psi}(s,a)$は状態$s$を入力として各行動$a$についての行動価値$Q(s,a)$を推定するので、推論時にもこれを活用することで推論時の出力を制御できるとのことです。以下、2つ紹介します。

[164] Decoding with Value Networks for Neural Machine Translation (NIPS2017)

タスクは機械翻訳です。Value network $v(s,a)$(Q関数の推定器であり、状態価値関数の推定器ではない)の導入によるActor-Criticへの拡張を行ったとのこと。推論時には予測確率に推定器$v(s,a)$で重みづけする方法を提案しています。このValue network $v(s,a)$はちょうどDQNの形をしているのかと思われます。

追記 2020.12.16 こちら、Actor-Criticではなかったです・・・Criticのみの導入ですね。Q学習の導入と言った方が良さそうです。

$\beta \times \frac{1}{|a|} \log P(a \mid x)+(1-\beta) \times \log v(s, a)$

ここで、$\beta$はハイパーパラメータです。実験ではcross validationで$\beta$を決めており、$\beta=0.8,0.85,0.9$でBLEUが良かったとのこと。$\beta=1.0$の結果が私気になります!全体的な性能向上はbeam searchと比べてBLEUが1.0ポイント程度の改善なのですが、当時は大きなインパクトがあったのでしょうか???

[167] Learning to Decode for Future Success (ArXiv)

タスクは機械翻訳と要約です。状態$s$を入力として生成する残りのトークン数を推定する状態価値推定器$V(s)$を利用したActor-Critic手法です。
「Q関数使ってないやんけ!」と思われるかもしれませんが、この手法では状態価値推定器$V(s)$を使って、ある意味力技で行動価値推定器$Q(s,a)$を表現します。
つまり、あるトークン$a$が生成されたと仮定して、これを次のRNNの入力として更新した隠れ層$h$(状態$s$)から、行動$a$をした時の価値$V(s)$(つまり$Q(s,a)$)が計算できるので、これを全語彙に対して行っているわけです(ほげ~~~)

推論時は、このQ関数の項を追加することで、長さに合わせてトークンを選択するのに役立つとのことでした。

目標とするになる長さを$N$とすると、以下のようになるようです。
$y_{t} = \underset{y}{\arg \max } \log p\left(y_{1: t} \mid X\right) -\lambda\left|(N-t)-Q\left(h_{t}\right)\right|^{2} $
残りの長さ$N-t$から離れてしまうトークンに対して、予測確率にペナルティを課すという形のようです。$λ$はハイパーパラメータです。生成結果は長さがイイ感じになってるのか私は結果から判断できませんでしたが、 repetition現象が抑えられてるなという印象でした。

他には、Actor-Criticを安定させるための学習時のテクニック的な話もありました。

[39] An Actor-Critic Algorithm for Sequence Prediction (ICLR2017)

RNNベースのCriticを提案しており、CriticはDQNと同様各語彙のQ値を直接推定するモデルとなっています。

Delayed actor

元々はContinuous control with deep reinforcement learningで提案された手法です。Actorの重みの更新を徐々に更新する手法です。ActorとCriticは交互に学習しているため、Actorの更新が激しいとCriticがちゃんと学習できない問題を解決するために考案されたようです。Fixed target networkとモチベーションは同じですね。前述の論文では"soft" target updateという呼び方をしていました。

Dealing with large action spaces

Action spaceを削減するために、Criticに以下の制約項$C$を追加する手法です。解釈としては、レアなトークンに対してペナルティを与えるようになっています。これによりCriticの推定が安定するようです。多様性を犠牲にしてしまうようにも見えますが、これはよくやられるんですかね?(よくわからん)

$C_{t}=\sum_{a}\left(\hat{Q}\left(a ; \hat{Y}_{1 \ldots t-1}\right)-\frac{1}{|\mathcal{A}|} \sum_{b} \hat{Q}\left(b ; \hat{Y}_{1 \ldots t-1}\right)\right)^{2}$

Reward shaping

言語生成の強化学習では遅延報酬しかないという話をしたと思いますが、それだと報酬がスパース過ぎるということで、遅延報酬を切り崩して即時報酬として段階的に与えるようにするという手法です。 生成された系列$\hat{Y}$のスコア(BLEUとか)を時刻ごとに計算して差分を即時報酬とするとのことです。

$r_{t}\left(\hat{y}_{t} ; \hat{Y}_{1 \ldots t-1}\right)=R\left(\hat{Y}_{1 \ldots t}\right)-R\left(\hat{Y}_{1 \ldots t-1}\right)$

[55] Fast Abstractive Summarization with Reinforce-Selected Sentence Rewriting (ACL2018)

サーベイ論文で紹介されていた学習激早論文です。これの紹介は後日やろうかなと思います(時間がなかった)。要約タスクのようですが、性能も他と比べて悪くないので良さそうです。

追記 2021.02.28 読みました。要約タスクにおいて学習を早める工夫は、Abstractive summarizationにおけるExtractor agentによる文選択とabstractor networkによる文生成の2段階にしている点が大きそうです。強化学習自体は文選択でROUGEを最大化するのに用いており、文生成に使っているわけではありませんでした・・・

DQNとDDQNとDueling networkについて

力尽きたので割愛します・・・言語生成における特別な話はないので、ご容赦願えれば幸いです・・・

まとめ

言語生成の強化学習に興味があって2ヶ月ほど少しずつ勉強を進めてきました。
現状の立ち位置としては、最後にfine-tuningするのにREINFORCEないしはその派生形を使うことが標準的で、CriticにQ関数を使ったDQNのような形は意外とこの時点ではあまり出てきていない(おそらく語彙サイズの問題で学習が難しくなってる)という印象でした。ただ、[55]の論文のようにまだ発展形があるようですので継続して勉強を進めていきたいと思います。