ファインチューニング
Fine-tuning
概要(サマリー)
ファインチューニングとは、学習済みのAIモデルに追加の学習をさせ、特定の用途に合わせて調整することである。日本語では「微調整」と訳される。
すでに一通りの仕事ができる中途採用の社員に、自社のやり方を研修で覚えてもらうようなものだと考えるとよい。一から新人を育てる(モデルをゼロから学習させる)のは莫大な費用と時間がかかるが、すでに言葉を扱えるLLMに自社のデータを追加で学ばせるだけなら、はるかに小さいコストで済む。
ここで覚えておきたいのは、ファインチューニングが得意なのは知識を増やすことではなく、振る舞いを変えることだという点である。
詳細解説
何が変わるのか
ファインチューニングは、モデル内部の「重み」と呼ばれる数値を、追加のデータに合わせて少しずつ書き換える。その結果、次のようなことが変わる。
- 出力の形式: 必ず決まった項目のJSONで返す、決まった見出し構成で書く
- 口調・文体: 自社のブランドに合わせた話し方をする
- 専門分野の言い回し: 業界特有の言葉づかいや略語を自然に使う
- 判断の傾向: この種の問い合わせはこう分類する、という基準を体に覚えさせる
いずれも「どう振る舞うか」の話である。逆に「昨日の売上はいくらか」のような事実の知識を持たせる用途には向かない。データが変わるたびに学習をやり直すことになるからだ。
学習に使うデータの形
ファインチューニングでは、「こう聞かれたらこう答える」という組を大量に用意する。
{"messages": [
{"role": "user", "content": "商品が届きません"},
{"role": "assistant", "content": "【分類】配送遅延\n【緊急度】高\n【次の対応】配送業者へ照会"}
]}
{"messages": [
{"role": "user", "content": "領収書を再発行してほしい"},
{"role": "assistant", "content": "【分類】書類再発行\n【緊急度】低\n【次の対応】マイページ案内"}
]}
このような組を数十〜数千件用意して学習させると、同じ形式で答えるモデルができあがる。
データの質が結果を決める。件数を増やすより、ばらつきのない一貫した正解例を揃えるほうが効く。 形式が揺れているデータを大量に食わせると、揺れたまま覚えてしまう。
RAGとの使い分け
もっとも混同されやすい対比である。目的がまったく違う。
| ファインチューニング | RAG | |
|---|---|---|
| 変えるもの | モデル本体 | 渡す資料 |
| 向く用途 | 振る舞い・形式・口調 | 知識・事実 |
| 情報の更新 | 学習のやり直し | 資料の差し替え |
| コスト | 高い | 低い |
| 出典の提示 | できない | できる |
| 準備の手間 | 学習データの作成が必要 | 資料を用意するだけ |
判断の順番としては、まずプロンプトの工夫で足りないかを試し、次にRAGを試し、それでも駄目ならファインチューニングが定石である。プロンプトに例を数個入れるだけで形式が揃うなら、学習は不要である。
両方を併用することもある。「答え方はファインチューニングで固定し、答える中身はRAGで渡す」という組み合わせは理にかなっている。
軽量な手法(LoRAなど)
モデル全体の重みを書き換えるのは重い処理で、大量の計算資源が要る。そこで、モデル本体は凍結したまま、小さな追加部品だけを学習する手法が広く使われている。代表的なものがLoRAである。
- 学習にかかる時間と費用が大幅に下がる
- 学習結果が小さなファイルで済み、付け外しできる
- 用途ごとに部品を作り分け、必要に応じて切り替えられる
個人や小規模な用途でファインチューニングを試すなら、まずこの種の軽量な手法から入るのが現実的である。
うまくいかないときによくある原因
- データが少なすぎる・偏っている: 特定のパターンしか学習していないため、少し違う入力で崩れる
- 元のモデルが持っていた能力が落ちる: 特定用途に寄せた結果、それ以外が下手になる(破滅的忘却と呼ばれる)
- 学習しすぎ: 学習データを丸暗記してしまい、未知の入力に対応できなくなる
- そもそも知識を入れようとしている: 前述のとおり用途違いである
2つ目は見落とされやすい。「問い合わせ分類は完璧になったが、普通の会話が不自然になった」という状態は起こりうる。学習前後で、対象外の作業も含めて比較しておきたい。
費用と手間の目安
ファインチューニングには、学習そのものの費用に加えて次のコストがかかる。
- 学習データを作る手間(もっとも大きい。数百件でも人手で作ると重い)
- 学習後の評価(本当に良くなったかを測る仕組みが要る)
- モデルの管理(バージョン、切り替え、元に戻す手順)
- 元モデルが更新されたときの追随(作り直しになることがある)
最後の点は意外と重い。ベースのモデルが新世代に置き換わると、せっかく学習したモデルが古い世代のまま取り残される。「一度やったら終わり」ではなく、継続的に面倒を見る対象が増えると考えたほうがよい。
AIコーディングとの関係
個人開発や小規模なサイト運営でファインチューニングが必要になる場面は、実のところあまり多くない。AIに相談すると、聞いていないのにファインチューニングを提案されることがあるが、次の順で検討すれば大半は手前で解決する。
- プロンプトに指示と例を数個入れる
- システムプロンプトで役割と出力形式を固定する
- RAGで必要な資料を渡す
- それでも形式や口調が安定しないならファインチューニング
AIに実装を頼むときは、まず「ファインチューニングを使わずに解決する方法を3つ挙げて」と聞くとよい。そのうえで必要だと判断できたら、学習データの形式・件数・評価方法まで含めて設計してもらう。
「プロンプトの工夫で解決できないか、先に検討してほしい」と伝えるだけで、過剰な提案はかなり減る。
よくある勘違い
ファインチューニングすればAIが賢くなる?
賢くはならない。特定の作業に合わせて振る舞いが変わるだけで、推論能力そのものは上がらない。むしろ、対象外の作業では性能が落ちることがある。
社内文書を学習させれば内容を覚える?
覚えることもあるが、正確に引き出せる保証はない。文書の内容を根拠つきで答えさせたいなら、学習ではなくRAGが適している。学習させた情報は出典を示せず、間違えても原因を追えない。
一度やれば終わり?
元のモデルが更新されれば作り直しになり、業務が変われば学習データも作り直しになる。運用し続ける対象が1つ増えるという理解が必要である。
学習データは多いほどよい?
一貫性のないデータを増やすと、揺れをそのまま学習する。件数より質と一貫性が効く。まずは数十件の丁寧な例で試し、足りなければ増やすという順が安全である。
まとめ
- ファインチューニングは、学習済みモデルに追加学習をさせて特定用途に合わせる手法である
- 得意なのは振る舞い・形式・口調の調整であり、事実の知識を持たせる用途には向かない
- 知識を与えたいならRAG、振る舞いを変えたいならファインチューニングと使い分ける
- プロンプトの工夫 → RAG → ファインチューニング の順に検討すると無駄がない
- 学習データの質と一貫性が結果を決める。件数を増やすより揃えることが重要である
情報ソース
より詳しくAIに聞いてみよう
- ファインチューニングとRAGの違いを、どちらを選ぶべきかの判断基準つきで整理してください。
- ファインチューニング用の学習データを作るとき、質を上げるコツを教えてください。
- LoRAのような軽量な手法が、通常のファインチューニングと比べて何を省いているのか教えてください。
- 破滅的忘却とは何か、起きたときにどう気づけるかを教えてください。
- 自分の用途でファインチューニングが本当に必要か判断するために、AIにどう質問すればよいですか。