計算し直しました。
計算を行ったプログラムに間違えがあり、計算しなおしました。
計算間違えは、src_mask と tgt_mask を2次元から4次元に拡張する時に、
src_mask_4dim = src_mask_2dim[:,None,None,:].expand( -1, num_heads, src.size(1), -1 )
tgt_mask_4dim = tgt_mask_2dim[:,None,None,:].expand( -1, num_heads, tgt.size(1), -1 )
とすべきところを
src_mask_4dim = src_mask_2dim[:,None,:,None].expand( -1, num_heads, -1, src.size(1) )
tgt_mask_4dim = tgt_mask_2dim[:,None,:,None].expand( -1, num_heads, -1, tgt.size(1) )
としていました。
計算が終了したので記事をアップデートしました。考察が MAML のメリットはほとんどないから、メリットが若干あるに変わりました。
MAML による機械翻訳の学習を行った動機。
今までに、
のページで報告させていただいたように、画像分類、感情分析について MAML モデルを適用しました。少ないデータ量のタスクについて、そこそこの精度が得られたと考えています。次なるターゲットとして、MAML で機械翻訳をやってみようと考えました。タスクは言語です。いろいろな言語についての翻訳を学習させることにより、学習の仕方を学習して、その結果を特定の言語の翻訳の学習に適用するということになります。そこで、「machine translation MAML」でググると、「Meta-Learning for Low-Resource Neural Machine Translation」
という論文がヒットしました。かなり参考になりました。
この論文にあるように、学習データが十分ある言語を含めて MAML で学習した後、学習データの少ない言語について fine-tuningすることにより、学習が成り立つか確かめたいというのが動機です。
学習言語とデータ数。
学習データは、
http://www.statmt.org/europarl/
のデータを用いました。
今回の学習では、フランス語-英語 fr-en 100万センテンスペア、 ドイツ語-英語 de-en 100万センテンスペア、イタリア語-英語 it-en 50万センテンスペアを用いました。fr-en, de-en の学習データが十分にあると考え、it-en の学習データが少ないと考えます。fr-en 100万, de-en 100万を、it-en 50万データを2回登録して数を100万にして MAMLモデルで学習させます。その結果を用いて、it-en 50万センテンスペアで fine-tuning することにより、どの程度の精度がでるか測定しました。
機械翻訳モデル。
機械翻訳モデルは、Transformer Encoder-Decoder モデルを用いました。encoder, decoder 各8層なので、LayerNorm の配置は、Pre-LN を採用しました。embedding_dim =768, heads = 12, layers = 8 * 2, feed_forwad_dim = 768 * 4 です。
辞書と言語埋め込み。
辞書と言語埋め込みは、1ソース言語1ターゲット言語の機械翻訳と同様に行いました。fr, de, it について、スペースで分かち書きして、ソース辞書を作りました。fr, de, it の単語に言語の区別はありません。ターゲット辞書は en です。出現頻度の低い単語は <unk> としました。特別な単語は、<pad>, <sos>, <eos>, <unk>, <blank>, <mask> です。この結果、ソース辞書の単語数は、49528になりました。ターゲット言語の単語数は、20556 になりました。埋め込みは、ソース言語の埋め込みとターゲット言語の埋め込みを行いました。
位置エンコーディング
位置エンコーディングは、Positional Embedding を用いました。
MAMLによる fr+de+it→en 機械翻訳の学習。
損失と WER の曲線を掲載します。 WER は 20万ステップ(2epoch )で Train, Val ともに 0.36 程度です。自己回帰的な inference でテストしたテスト結果は、WER が0.595 です。ただし、RTX-A6000 一枚で、20万ステップを学習するのに 12日程度かかりました。
MAML 3言語で学習したモデルパラーメーターを初期値にイタリア語-英語 50万センテンスペアで fine-tuning した結果。
損失と WER の曲線を掲載します。WER は 10万ステップ( 3epoch 程度)で Train, Val ともに0.34程度です。自己回帰的な inference でテストしたテスト結果は、WER が 0.592 です。
比較のために初期化されたモデルパラメータでイタリア語-英語50万センテンスペアを通常学習させました。
損失と WER の曲線を掲載します。WER は、12万4000ステップ( 5 epoch )で 0.45 程度です。自己回帰的な inference でテストしたテスト結果は WER が0.648 程度です。
考察
以上より、データ数の少ない言語について、データ数の多い言語を用いて MAML で学習させることは、データ数の少ない言語のみで学習することに比べて、若干メリットがあるという考察が可能と考えられます。理由は、MAML + Fine Tuning の WER が 0.592 で、通常の学習の WER が 0.648 だからです。加えて、通常の学習では、過学習がおきているが、MAML + Fine Tuning では、過学習が回避できているということです。
測定に使ったプログラム
測定に使ったプログラムを
に置いておきます。参考になれば幸いです。