転移学習とファインチューニング:事前学習を活かす
学んだ知識を別のタスクに活かす転移学習とファインチューニングを学びます。基礎層では、大きなデータで事前に学んだモデルを手元の課題に作り替える、という考え方をつかみます。深掘り層では、事前学習・事前学習済みモデル・自己教師あり学習・半教師あり学習のしくみ、Few-shot と One-shot、そして破滅的忘却の問題を説明できるようになります。発展では、少ないパラメータで効率よく微調整する LoRA などの考え方を扱います。
ねらい
このレッスンでは、あるところで学んだ知識を別のタスクに活かす転移学習(てんいがくしゅう)と、その中心にあるファインチューニングを学びます。
このレッスンで学ぶ事前学習と自己教師あり学習は、いまの大規模言語モデルや基盤モデルを支える土台です。あとの章のマルチモーダルや言語モデルの理解につながります。
基礎
「大きなデータで前もって学んだモデルを土台に、手元の課題へ作り替える」という全体像をつかみます。
1. 学んだ知識を別のタスクに移す
ディープラーニングのモデルをひとつの課題のためにゼロから学ばせるには、大量のデータと計算が要ります。手元に十分なデータが無いことも多く、そのたびにゼロから学ぶのは大変です。
そこで、すでに大きなデータで学び終えたモデルを土台にします。大きなデータで前もって学ぶことを事前学習(じぜんがくしゅう)と呼び、その結果できたモデルを事前学習済みモデルと呼びます。事前学習済みモデルは、画像や言葉についての一般的な特徴をすでに幅広く身につけています。
この事前学習済みモデルを土台に、手元の課題に合わせて仕上げます。土台があるぶん、少ないデータでも高い精度に届きやすくなります。学んだ知識を別のタスクに移して活かすこの全体の考え方を転移学習と呼びます。
ポイント
転移学習は、大きなデータで学んだ事前学習済みモデルを土台に、少ないデータで新しい課題を学ぶ方法です。ゼロから学ぶ手間を大きく減らせます。
2. 仕上げの2つのやり方
事前学習済みモデルを手元の課題に仕上げるやり方には、大きく2つあります。
ひとつは、土台のモデルはそのまま使い、その出力を受け取る新しい部分だけを付け足して学ぶやり方です。土台は特徴を取り出す役に徹し、その上で判断する部分だけを学びます。
もうひとつは、土台のモデルの中身も含めて、手元の課題に合わせて学び直すやり方です。これをファインチューニングと呼びます。英語の fine-tuning で、細かく調整するという意味です。土台の知識を活かしつつ、課題に合わせて全体を微調整します。
どちらを選ぶかは、手元のデータの量や課題の近さで変わります。基礎層では、「土台を活かして仕上げる2つのやり方がある」とつかんでおけば十分です。
ここまでの要点
- 事前学習は、大きなデータで前もって幅広く学ぶことです。その結果が事前学習済みモデルです。
- 転移学習は、事前学習済みモデルを土台に、新しい課題を少ないデータで学ぶ考え方です。
- 仕上げには、新しい部分だけを足すやり方と、全体を微調整するファインチューニングがあります。
まずは全体像をつかめれば十分という人は、ここで区切って大丈夫です。「大きく学んだ土台を手元の課題に作り替える」と押さえられていれば、この先の深掘りに進む土台はできています。
発展
ここからは、そもそも大きなデータでどうやって学ぶのか、少ない例からどう学ぶのか、そして学び直しにつきものの問題をくわしく見ます。
3. 自己教師あり学習:正解なしの大量データから学ぶ
事前学習には、大量のデータが要ります。しかし、人が正解のラベルを付けたデータを大量に用意するのは、費用も手間も大きくなります。この難しさを乗り越える鍵が、自己教師あり学習です。
自己教師あり学習は、正解ラベルを人が付けなくても、データそのものから問題と答えを自動で作り出して学ぶ方法です。たとえば文章なら、一部の単語を隠して、その隠した単語を当てさせます。隠した単語という正解は、もとの文章がそのまま持っています。人がラベルを付けなくても、大量の文章から、問題と答えのペアがいくらでも作れます。
このしくみのおかげで、インターネット上にある膨大な文章や画像をラベル付けなしにそのまま事前学習に使えます。いまの大規模言語モデルが、あれほど大量のデータで学べるのは、この自己教師あり学習の力によります。
似た言葉に、半教師あり学習があります。半教師あり学習は、少量のラベル付きデータと、大量のラベルなしデータを組み合わせて学ぶ方法です。ラベル付けの手間を抑えつつ、大量のデータを活かします。自己教師あり学習が正解をデータ自身から作るのに対し、半教師あり学習は少量の本物のラベルを大量のラベルなしデータで補う、という違いがあります。
ポイント
自己教師あり学習は、データ自身から問題と答えを作るため、人のラベル付けなしに大量のデータで事前学習できます。大規模言語モデルの土台になっています。
理解の確認
自己教師あり学習は、データの一部を隠して当てさせるなど、データ自身から問題と答えを作って学びます。人のラベル付けが要らないため、大量のデータで事前学習できます。半教師あり学習は、少量のラベル付きと大量のラベルなしのデータを組み合わせて学ぶ、別の方法です。
4. 少ない例から学ぶ:Few-shot と One-shot
事前学習済みモデルが十分に賢くなると、新しい課題をごく少ない例だけで扱えることがあります。
Few-shot(フューショット)は、少数の例を手がかりに、新しい課題に取り組むことを指します。One-shot(ワンショット)は、そのうち例がたった1つの場合です。ちなみに、例をまったく与えずに取り組むことは Zero-shot と呼びますが、これはマルチモーダルのレッスンで扱います。
とくに大規模言語モデルでは、いくつかの例を問いかけの文中に書いて示すだけで、モデルの中身を学び直さなくても、その場で新しい課題に対応できることが知られています。少ない例で人の意図を読み取れるのは、事前学習で幅広い知識を身につけているからです。
理解の確認
Few-shot は少数の例から、One-shot は1つの例から、新しい課題に取り組むことです。事前学習で幅広く学んだモデルは、少ない例でも新しい課題に対応できることがあります。
5. 破滅的忘却:学び直しで前の知識が消える
ファインチューニングには、注意すべき問題があります。新しい課題に合わせて学び直すと、前に身につけていた知識が失われてしまうことがあるのです。これを破滅的忘却(はめつてきぼうきゃく)と呼びます。英語で catastrophic forgetting と書きます。
人であれば、新しいことを覚えても、前に覚えたことが一気に消えることはあまりありません。ところがニューラルネットワークは、新しいデータに合わせて重みを大きく書き換えると、前の課題に必要だった重みまで上書きしてしまい、前の能力を失うことがあります。
破滅的忘却を避けるには、学び直しの度合いを抑える、前の課題のデータも混ぜて学ぶ、重要な重みは大きく変えないようにする、といった工夫がとられます。次の発展で見る、少ないパラメータだけを動かすやり方も、土台の知識を保つのに役立ちます。
注意
ファインチューニングで新しい課題を学ぶと、前に身につけた知識が失われる破滅的忘却が起こることがあります。学び直しの度合いや、変える範囲を工夫して抑えます。
理解の確認
破滅的忘却は、新しい課題に合わせて学び直すと、前に身につけた知識が失われる現象です。ニューラルネットワークが、前の課題に必要だった重みまで上書きしてしまうために起こります。
パラメータ効率の良い微調整
ここからは、大規模モデルの実務を理解する手がかりになります。なお、ここでは考え方だけを扱い、具体的な手順やプログラムには立ち入りません。
大規模言語モデルは、パラメータが非常に多いため、ファインチューニングで全部の重みを学び直すには、大きなメモリと計算が要ります。そこで、大部分の重みは固定したまま、ごく一部の小さな追加部分だけを学ぶ考え方が広まりました。パラメータ効率の良い微調整と呼ばれます。
代表例が、LoRA(ローラ)です。英語で Low-Rank Adaptation と書きます。もとの重みはそのままにして、その脇に小さな低ランクの補正を付け足し、その補正だけを学びます。低ランクとは、少ない情報量で表せるという意味で、追加で学ぶパラメータをごくわずかに抑えられます。多くの課題では、この小さな補正だけでも十分な適応ができることが知られています。土台を書き換えないため、破滅的忘却も起こりにくくなります。
さらに、もとのモデルを粗い数値精度に圧縮してメモリを節約しつつ、この低ランクの補正を学ぶ工夫もあります。QLoRA(キューローラ)などと呼ばれます。限られた計算資源でも大きなモデルを微調整できるようにする方向です。
これらに共通するのは、精度をなるべく保ちながら、必要なメモリと計算を減らす、というトレードオフの工夫です。加えて、大きなモデルの知識を小さなモデルに移す蒸留も、転移の一種として使われます。蒸留のしくみは、軽量化のレッスンでくわしく学びます。また、人の指示に従いやすくする指示チューニングも、事前学習済みモデルを役立つ受け答えへ仕上げる調整として重要です。
理解度の確認
説明できる項目にチェックを入れましょう。すべて確認できたら、完了ボタンで記録します。
分からなかった点・気になった点
読み込み中です。