世界一シンプルなファインチューニング理解 — 合体ではなく調整だ
66M個の数字を少し変えること。データをモデルに注入するのでも、モデル同士を合体するのでもない
ファインチューニングを初めて聞くとこう理解する
ほぼ全員がこう誤解する。全部間違い。
誤解1:「学習済みモデルにデータを合体する?」
❌ 学習済みモデル + IMDBデータ = 新モデル(合体)
違う。データはモデルの「中に」入らない。
誤解2:「元の訓練データに自分のデータを追加する?」
❌ Wikipedia(元データ)+ IMDB(自分のデータ)→合わせて再訓練
違う。元の訓練データ(Wikipedia)は一切触らない。
誤解3:「pipeline('sentiment-analysis')にIMDBを合わせる?」
❌ pipeline() + IMDB = より良いpipeline
違う。pipeline()は完成モデルを「使う」ツールに過ぎない。
実際に起きること
ファインチューニングは数字を変えること。それだけ。
DistilBERTは66,000,000個の数字(重み)でできている。この数字が「英語を理解する方法」を保存している。
ファインチューニング:
1. IMDBレビューをモデルに入れる→モデルが「肯定60%」と予測
2. 正解と比較→正解は「否定」→間違い
3. 66M個の数字を少し調整
4. 25,000回繰り返す→感情分類が上手くなる
変わるのは数字だけ。 データがモデルに「入る」のではない。データを「見ながら」数字を調整する。
例え
事前学習 = 大学4年間(一般教育、数ヶ月、数億円)
ファインチューニング = 入社後OJT 1週間(特定業務教育、数時間、ノートPC)
OJTで大学の教科書は開かない。すでに卒業生の頭の中にある。ファインチューニングも同じ — Wikipediaはすでに重みに「溶け込んでいる」。
数学で見ると
新しい重み = 古い重み - 学習率 × 勾配
= 0.4891 - 0.00001 × 0.23
= 0.4890977
これがファインチューニング。0.4891が0.4890977になる。66M個の重み × 25Kレビュー × 3エポック。
一行要約
ファインチューニング = 0.4891を0.4890977に変えること × 66,000,000回。
キーコンセプト
ベースモデルダウンロード — すでに英語を理解する66M個の数字(重み)を取得
IMDBレビューをモデルに入れ予測させる — 「肯定60%」→正解は「否定」→間違い
間違った分だけ66M個の数字を微調整 — 0.4891→0.4890977(gradient descent)
25,000回繰り返す — 感情分類が上手いモデルになる
調整された数字を保存 — ./my-model/model.safetensors = 自分のモデル