- 背景
- メリット
- 技術詳細
- 応用例
- まとめ
背景
多くの自然言語処理タスクで高性能を達成している deep learning モデル達だが,そのためには大規模な訓練用データセットが必要になる. しかし多くのプロジェクトではコストの関係でそのようなデータセットを構築するのは困難である. そこで近年 BERT をはじめとした転移学習 (Transfer Learning) が注目を集めている. BERT では入手可能なラベルなしの大規模なデータセットでモデルを事前学習 (pre-training) し,「温まった」状態で本来の目的であるがサイズは小さいラベルありデータセットで再学習 (fine-tuning) することで, そのデータが少量であったとしても高い性能を出すことを目的としたフレームワークである. BERT は,Transformer をベースとした巨大モデルを, まず教師データが不要な方法 (Masked Language Modeling & Next Sentence Prediction) で初期化し,その後で各種 NLP タスクに対して再学習している. このように pre-training を経ることで,大規模な言語リソースを利用して自然言語の統計的情報を獲得し,それを興味のタスクに流用することで高い性能を達成できる.
本記事では,Parameter-Efficient Transfer Learning for NLP で提案案された NLP における転移学習をさらに一歩進めた BERT への Adapter Modules について簡単に紹介する. 仕組み自体はこれより前に CV 分野で提案されていたが,BERT での活用は上記で初めてだった.
この論文 で設定されている問題は,前述の転移学習のものとは少し異なり,様々なタスクがシステムに流れてくる. 基本の転移学習システムでは,pre-training されたモデルをあるタスク (ex. テキスト感情分類) に対して fine-tuning したらそれ以降,別のタスク (ex. 質問応答) に応用されることはない. つまり,2 つの異なるタスクに対応したかったら,pre-training したモデルを 2 つに複製して,それぞれのタスクに fine-tuning する必要がある. 本論文ではこの制約が,クラウドサービス等で機械学習機能を提供する際にメモリ等の圧迫につながる問題となる言っている. 確かに,最近よく使われる BERT 等のモデルは非常にサイズが大きいため,単一のサーバーでいくつもメモリに載せておくこと,さらにはストレージに保存しておくことさえも問題となるケースは考えられる.
この問題を解決するために,Adapter Modules が提案された. どんなものかはあとで詳細に説明するが,概要としては,N 個のタスクに対応するために BERT 全体を N 個複製するのではなく,Adapter Modules と呼ばれる小さなパラメーターブロックのみを タスクごとに用意することで,パラメーター効率よく転移学習ができるというもの. 結果として,通常通り BERT 全体を N 個複製した時と比較して,性能はほとんど変わらずに pre-training された BERT の 3 % ほどのパラメーターを足すだけで済んだとのこと.
Adapter Modules
Adapter Modules (以後 AM) がどんなものなのか説明する.(画像は元論文から) AM は pre-trained BERT の各 transformer block の中に 2 つ挿入される.場所は 1. multi-headed attention レイヤー からの projection の後と 2. 二つの feed forward の後 になる.
構造
AM の中身はシンプルな bottle neck アーキテクチャになっている.
論文中では他にもいくつかのパターン,複雑なものも含めて試したが精度比較したところこのシンプルな構造が一番良かったのとのこと.
初期化方法
pre-trained BERT の内部に後から新しいパラメーターを持つブロックを挿入しているので,このままでは BERT が事前に獲得していた言語統計量が失われてしまう. そこで,AM 挿入後にこれのらパラメーターを挿入前の BERT の出力に近くなるように初期化している (near-identify initialization). 正直これをすることで,BERT が事前に獲得していた知識を復元することができるのかはわからないが,実験的にこれが安定した学習に必要だったとのころ.
学習方法
AM の初期化が済んだところで,学習のフェーズに入る. 従来の fine-tuning では,対象のタスクに対して BERT 全体のパラメータを更新しつつ学習するのだが AM を使う場合には, 新規に挿入した AM のパラメータのにを更新する. また,別のタスクにモデルを fine-tune したい時には,BERT 全体を別に用意するのではなくて,新しい AM を用意しそれを最初に挿入した AM と差し替えて 1. 初期化 (near-identify initialization) をして 2. AM のみ更新する fine-tunine をすれば良い. これは,fine-tuning の際に BERT 自身のパラメーターは更新せず AM のみを更新の対象とするため可能になる.
実験内容
これの性能を評価するために論文中では GLUE とその他いくつかのテキスト分類データセットで評価している. 詳細は省略するが,GLUE では 9 つのタスクがあるため従来のタスクでは BERT を 9 つ複製して fine-tuning するため BERT * 9 分のパラメータが必要とされていたが, AM を利用すれば BERT * 1.3 分だけのパラメータ量で済んだとのこと. そして必要なパラメーターを大幅に下げても,精度的には 80.4 → 80.0 の減少で済んでいる.
応用例
AM を BERT に応用した論文が投稿されたのは 2019/Jan だがすでに応用・改良した論文がいくつか存在するのでそれらを簡単に紹介していく.
- AdapterFusion: Non-Destructive Task Composition for Transfer Learning 複数のタスクのためにそれぞれ AM を用意して fine-tuning するのだが,他のタスクの知見も利用することができるように,AdapterFusion モジュールを用意した. あるタスクの推論を行うときに,他タスクの AM からの情報も混ぜ合わせて利用する.
- K-ADAPTER: Infusing Knowledge into Pre-Trained Models with Adapters AM を使って,pre-trained RoBERTa にさらなる factural knowledge を注入している.新しい知識には大規模コーパスから自動生成された,一般知識的なものと言語知識を利用した. 評価には一般知識を問うデータセットを用いて,結果として精度の向上を確認. RoBERTa の pre-trained 時の知識を破壊することなく,continual に外部知識を注入することができたとのこと.
- MAD-X: An Adapter-based Framework for Multi-task Cross-lingual Transfer BERT を low (または zero) resource な言語に対して転移学習する時に AM を活用する方法を提案.
まとめ
AM の基礎的な話から,その利用例を簡単に紹介した.
応用例では,モデルを複数のタスクに対して学習する際に発生する catastrophic forgetting (壊滅的忘却) と呼ばれる,新しいタスクに適応する際に事前知識を忘れてしまう問題への解決策として AM
を利用するパターンが多い印象.
BERT に別パラメーターを用意してそこだけ更新しているので,この問題が解決するのは当然な気もするが,結果としてモデルの最終的な出力を見た時に,元の知識が破壊されているということはないのだろうか.
また,事前学習された BERT をさらに中間タスクで学習し特別な知識 (eg 文法,一般知識) を付与してから,downstream タスクで最後に fine-tuning というのも流行っているので,
この用途での応用もこれからもっとでてくだろう.
産業的な応用では,多くの場面で必要になることはない気がする. BERT に応用した最初の論文で想定されているような,「単一のアプリケーションで複数のタスクに適応したい」という用件を持っている会社は数が限られるはず. それよりも,AdapterHub のような感じで,「各個別のデータセットで学習され公開されている AM 利用する」という事例の方が増えそう. 学習済み AM を host する側も BERT の学習済みパラメーターよりはコストがかからなそう.
最後にこの AM に関して自分の所感を一言で書くと,「超絶すごいってことはないが,今後発展が必要な転移学習に対する一つの面白いアプローチ」という感じだろうか.