読者です 読者をやめる 読者になる 読者になる

ブログではないです

読んだ論文と実験・研究のメモ書き

MULTI-TASK SEQUENCE TO SEQUENCE LEARNING [Luong+, ICLR'16]

概要

元論文

前回に引き続きニューラルネットによるmulti-task learningもの。 橋本さんの論文中のモデルでは各タスクを1つずつ解き状態ベクトルを後段のタスクへと渡していく構造であったが、 それに対してこのモデルではEncoder-Decoderモデルで解けるそれぞれのタスク間でEncoderやDecoderを共有することでmulti-task learningを行っている。

実験では
1. Encoderを共有してtranslation, parsing, unsupervised taskを解く(one-to-many)
2. Decoderを共有してtranslation ,image captioning, unsupervised taskを解く(many-to-one)
3. タスクによってどちらかを共有してtranslation, unsupervised taskを解く(many-to-many)
の3種を試している。論文中の図が分かりやすい。

Unsupervised taskとしてはauto-encoderやskip-thoughtを試している。skip-thoughtって何?と思って調べると Skip-thought Vectorsに関する解説記事 があった. 複数文からなる文章を入力として取り、Encoder-Decoderモデルである文をEncoderで読み込んだ後Decoder側でその前後の文を生成するモデルを学習することで文ベクトルを構築するとか。

学習の際はハイパーパラメータとして各タスクがどれだけ学習されるかの比率を設定した上で、それぞれのタスクを切り替えながら行う。(大きい方に対して1x, 0.1x, 0.01xで比較)

結果としては、多くの場合multi-taskで解くことによって結果は改善されている。ただし比率によってはデータがそこまでないタスクが頻繁に学習されて過学習っぽくなってしまったいる場合も。 また、one-to-manyモデルにおけるautoencoderタスクによるtranslation, parsingの改善は特に無かったらしい。autoencoderの導入によってEncoderが出力する意味表現が頑健なものになるんじゃないか、との考えは前からあったのでこれは意外な結果。

一方、many-to-manyモデルではunsupervised taskの導入によって改善している場合も。ただしautoencoderとskip-thoughtでその様相は異なり、 autoencoderではtranslationに対して小さめの方が精度が上がるのに対してskip-thoughtではtest pplは近いほど良くなるが,BLUEはむしろ下がってしまう。 筆者の考えとしてはskip-thoughtsはある文の前後の文を予想するタスクであるため、Encoder-Decoder間で同じ意味の文を扱うtranslationとタスクが異なってしまっている事が原因だろう、と述べている。

データ量に差があるタスクならともかく、unsupervised taskのデータ量はかなり大きめで、タスク間でDecoderを共有していないにも関わらず比率をメインのタスクよりもかなり小さくしたほうが良い、というのもうーん?この辺の比率をパラメータサーチしたくないよなあ・・・

雑感

Decoderを共有する(Many-to-one, Many-to-many)モデルではEncoderから異なるタスクの似たような文が与えられた際、文自体にはどのタスクの入力かの情報がないのでどのタスクのDecodeをすればいいのか混乱するんじゃないか?という気もする。Google’s Multilingual Neural Machine Translation System: Enabling Zero-Shot TranslationのようにタスクのシンボルをEncoderに加えるとかすれば結果が良くなったりしないだろうか。