こちらの記事で事前学習-ファインチューニングについて説明しましたが、もう少し深く理解したいと思い、論文を読みましたので紹介したいと思います。
今回読んだ論文は以下の論文で、自然言語処理における転移学習(Transfer learning)の効果を詳しくみているものになります。
https://arxiv.org/abs/1603.06111
目次
Motivation
ディープ・ニューラル・ネットワークは複雑な非線形性を捉えることができますが、パラメータが多いためどうしてもオーバーフィッティングしやすいという傾向があります。
そのひとつの対処法が転移学習(transfer learning)、つまり事前学習-ファインチューニングになります。転移学習では、オーバーフィッティングを減らし、精度を改善されるために、別タスクであるソースタスク(\(\mathcal{S}\))から解きたいタスクであるターゲットタスク(\(\mathcal{T}\))に情報を転移します。
しかしながら、過去の研究では、転移学習の効果は一貫していませんでした。ある研究ではすごく精度が改善していたのに対し、別の研究では若干の改善にとどまったりしていました。
そこで、どういったタスク間の転移学習には効果があるのか、単語の埋め込み表現、隠れ層、アウトプット層のどの部分を転移させることが効果的なのかなどを検証しています。また、転移学習の方法として、ソースタスクで学習したパラメータをターゲットタスクの初期値とする方法(INIT)と、ソースタスクの言語モデル学習とターゲットタスクの2つを同時に解くマルチタスク・ラーニング(MULT)のどちらが有効か検証しています。
具体的には、以下の3つを検証しています。
データセット
データセットを確認しましょう。
Experiment 1は、文書分類のデータセットで、IMDB、MR、QCデータセットです。
- IMDB:positive、negativeがラベルである二値分類データセット
- MR:positive、negativeがラベルである二値分類の小さめのデータセット
- QC:質問文が何を聞いているのか(locationやtime、numberなど)を当てる6値分類のデータセット
IMDBとMRは“同じような意味をもつデータセット”となり、これらとQCは“違う意味のデータセット”になります。そして、(1)同じような意味を持つデータセット間での転移学習IMDB(\(\mathcal{S}\))→MR(\(\mathcal{T}\))、(2)違う意味のデータセット間での転移学習IMDB(\(\mathcal{S}\))→QC(\(\mathcal{T}\)) を比較します。
Experiment 2は、文章ペアの分類問題で、SNLI、SICK、MSRPになります。
- SNLI:textual entailment問題(2つの文章がentailmentかcontradicionかneutralか)の大きなデータセットです。
- SICK:SNLIと同じ問題の小さなデータセットです。
- MSRP:2つの文章が同じ意味かどうかを当てる二値分類データセットです。
こちらもSNLIとSICKは同じような意味をもつデータセットで、MSRPは違う意味のデータセットになります。
そして同じように、(1)同じような意味を持つデータセット間での転移学習SNLI(\(\mathcal{S}\))→SICK(\(\mathcal{T}\))、 (2)違う意味のデータセット間での転移学習SNLI(\(\mathcal{S}\))→MSRP(\(\mathcal{T}\)) の転移学習を比較します。
論文では見やすくデータセットをまとめてくれています。
モデル
モデルは2つを使用します。特別なモデルは使っていません。
- Experiment 1:LSTM-RNN
Long Short-Term Memory(LSTM)を使用します。LSTMの最後の時点(単語)の隠れ層の値にsoftmaxレイヤーで分類します。
- Experiment 2:CNN-pair
2つの文章をそれぞれウィンドウサイズ5のCNNとmax poolingで文章ベクトルを計算し、それらを連結させてsoftmaxレイヤーに投入します。
転移学習の手法
基本的には、ソースドメイン(\(\mathcal{S}\))で学習し、それをターゲットドメイン(\(\mathcal{T}\))に適用しますが、その方法として3つの方法があります。
- Parameter Initialization(INIT)
\(\mathcal{S}\)で学習したパラメータを\(\mathcal{T}\)での学習の初期値とする方法です。ターゲットタスクでの学習時に、パラメータを事前学習のまま固定する方法と、ファインチューニングする方法があります。ただし、ここでの事前学習は教師なし学習による言語モデルの事前学習ではなく、あくまで\(\mathcal{S}\)において教師ありのラベルを学習する事前学習になります。 - Multi-task Learning(MULT)
\(\mathcal{S}\)と\(\mathcal{T}\)で同時に学習します。 目的関数は、
$$
J=\lambda J_\mathcal{T} + \left(1- \lambda\right) J_\mathcal{S}, \hspace{5pt} \lambda \in (0, 1)
$$
とする方法がありますが、ここでは違う方法で、確率\(\lambda\)で\(\mathcal{T}\)のサンプルで学習し、確率\(1-\lambda\)で\(\mathcal{S}\)のサンプルで学習する方法で行っています。 - Combination(MULT+INIT)
上記の合わせ技です。まず、\(\mathcal{S}\)で事前学習します。それを初期値として、\(\mathcal{S}\)と\(\mathcal{T}\)で同時に学習し、ファインチューニングします。
MULTでは、\(\mathcal{T}\)での学習に\(\mathcal{S}\)が加わるので、ターゲットタスクを正則化する効果があります。一方で、INITは\(\mathcal{S}\)でえられた適切な意味のある情報を初期値として設定することにより、情報の転移を行っています。
実験結果
全体の転移
Table 3が1つめの結果です。上がExperiment 1、下がExperiment 2になります。
左側が“同じ意味を持つタスク間での転移”、右側が“違う意味のタスク間での転移”です。そして、Majorityは何も考えず、多い方または一番多いラベルを予測値とした場合の精度になります。
全体の転移
では、まず 左側が“同じ意味を持つタスク間での転移”のIMDB→MRの結果を見てみましょう。単語の埋め込み表現をWord2Vecで行い、あとはすべてスクラッチで学習したとき(上から2段目)の精度が75.1%で、単語の埋め込み表現、隠れ層を転移学習(ファインチューニング)し、アウトプットレイヤーのみスクラッチで学習させて場合(下から二段目)が、81.4%なので6%以上改善していることがわかります。
一方で、“違う意味のタスク間での転移”であるIMDB→QCの場合は、90.8%から90.4%と改善していません。Experiment 2でも同様の結果です。
また、IMDB→QCで、単語の埋め込み表現と隠れ層を事前学習し、パラメータを固定した場合、つまりファインチューニングしない場合だと(上から4段目)、55.6%と壊滅的な精度になってしまっています。ここから、“違う意味のタスク間ではうまく情報を転移できない”ということになります。
ということで、こちらがRQ1の答えになります。
レイヤー間の転移
続いて、レイヤー間の情報の転移に関して詳しく見ていきます。
アウトプット層
まず、同じ意味のタスク間におけるアウトプット層の情報転移の効果を見ます。
ベンチマークを2段目のスクラッチで学習する場合とします。IMDB→MRでは75.1%です。単語の埋め込み表現と、隠れ層をファインチューニングしない場合において、アウトプット層ーをスクラッチで学習する場合(4段目)の精度が78.8%と、ベンチマークと比べて上昇しています。一方で、アウトプット層も転移し、ファインチューニングしない場合(5段目)の精度は73.6%と、75.1%から低下しています。つまり、これはアウトプット層はタスクに特化されており、情報の転移はできないということになります。
SNLI→SICKも概ね同じような結果になっています。
隠れ層
そして、次に同じ意味のタスク間における単語の埋め込み表現と隠れ層の情報転移の効果を見ます。
IMDB→MRでは、単語の埋め込み表現だけ転移学習した場合(下から3段目)、ベンチマークから3%程度の改善が見られます(75.1%→78.3%)。また、単語の埋め込み表現と隠れ層も転移学習した場合(下から二段目)、さらに3%程度改善します(78.1%→81.4%)。つまり、単語の埋め込み表現も隠れ層も情報の転移の効果は大きいことがわかります。
一方で、SNLI→SICKでは、 単語の埋め込み表現だけ転移学習した場合(下から3段目)、ベンチマークとほぼ同じです(70.9%→71.0%)。そして、単語の埋め込み表現と隠れ層も転移学習した場合 は (下から二段目)、5.3%程度改善します(71.0%→76.3%)。ここから、このデータセットでは、隠れ層の情報転移の効果が大きいことがわかります。
この差の要因として、IMDB→MRはセンチメント分析ですが、センチメント分析では単語のセンチメント情報が重要なのに対し、SNLI→SICKデータセットはより文章の構成が重要なため、隠れ層が重要になってくるのではないかとのことです。
違う意味のタスク間の転移では、ベンチマークを上回るのは単語の埋め込み表現を転移させた場合のみ(下から3段目)となっています。逆に言うと、単語の埋め込み表現は違う意味のタスクでも転移できるということです。
以上がRQ2の答えになります。
学習率
“同じ意味を持つタスク間”での転移を考えます。ファインチューニング実施時の学習率の設定により、精度がどのように変わるかを見ています。
結果は図3です。Experiment 1(IMDB→MR)、Experiment2(SNLI→SICK)ともに\(\alpha=0.3\)という大き目の学習率を使った場合、少ないエポックでピークを迎えます。一方で、小さい学習率を使った場合は、ピークが遅くなっていますが、最終的には大きな学習率で学習したときのピークと同じ水準になっています。
つまり、最初は大きな学習率で学習を加速させ、徐々に小さくしていくというのが良さそうです。
転移するタイミング
\(\mathcal{S}\)での事前学習をどのタイミングで終了させて転移させるべきかを考えます。なぜかというと、\(\mathcal{S}\)で学習させすぎると、\(\mathcal{S}\)にオーバーフィッティングしてしまう可能性があるからです。また、事前学習を短く済ませられると、計算負荷を減らすことができます。
結果は図3です。事前学習は、IMDB、SNLIともに初めの数エポックは急速に精度が改善し、その後は緩やかに改善しています。
IMDB→MRでは、事前学習で精度を高めるほど、転移学習後の精度も改善していますが、それ以外のパターンでは改善していません。結局こちらはなんとも言えない結果になっています。
転移学習の手法
上では、転移学習の方法として、INIT、MULT、MULT+INITがあると説明しました。これらの手法で結果がどうなるかを見てみましょう。
結果は、図4です。\(\lambda\)を0から1に変化させて精度がどうなるかを見ています。\(\lambda=0\)の場合は、\(\mathcal{S}\)のみ、\(\lambda=1\)の場合は、\(\mathcal{T}\)のみになります。前提として、Experiment 1のINITの精度は81.4%、Experiment 2のINITの精度は76.3%です。
MULTについては、Experiment 1、Experiment 2ともに“同じ意味のタスク間の転移”では、小さな\(\lambda\)が精度が良く、INITと同程度の精度が達成できています。
MULT+INITについては、転移学習しない場合と比べれば当然良くなっていますが、INITやMULT単体と比べて精度は良くなっていません。
ということで、RQ3の答えは以下になります。
まとめ
転移学習(事前学習-ファインチューニング)について、少し深く見てみました。すごくわかりやすく、個人的には非常に面白かったので、今後の参考にしたいと思います。
一方で、今回は教師ありラベルによる転移学習でしたので、一般的なドメインのコーパスを用いた言語モデルの事前学習の場合はどうなるか気になります。ただ、この論文が示唆してることを考えるとある程度答えが想像できるかもしれませんね。