STEP 6・訓練+推論

損失関数・クロスエントロピー ― 何を最小化しているのか

記事で詰まったところ

「損失」「クロスエントロピー」「-log(p)」が、学習で何を最小化しているのか分からない。

機械学習ではこう言う

予測確率と正解のズレを -log(正解への予測確率) で測る。学習はこの損失を最小化している当の対象。正解に低い確率を与えるほど損失が急増する。

予実差異ペナルティ

予実差異にペナルティを付けたものに近い。予測が当たれば差異はほぼ0、外すほど差異(損失)が膨らむ。

-log なので、ペナルティは非対称。「正解をほぼ0%と読む大外し」をすると損失が跳ね上がる。重大な誤りには重い罰、という設計。

これがこの教材の要。GPT の学習ループは、結局この損失(予実差異ペナルティ)を毎周ちょっとずつ小さくしているだけ。何を最小化しているのかが分かれば、訓練の全体像が腑に落ちる。

言葉の対応表

microGPT(機械学習)
会計・簿記の言葉
損失 -log(p)
予測が外れるほど膨らむ差異ペナルティ
p→1 で損失0
予測が当たれば差異ほぼ0
p→0 で損失急騰
大外しに重いペナルティ

触って確かめる

p=0(大外し)p=1(的中)
損失 −log(p)0.51まずまず

当たれば(p→100%)損失はほぼ0、外すほど膨らむ。−log だから「正解をほぼ0%と読む大外し」は 損失が跳ね上がる=重大な誤りに重いペナルティ。GPT の訓練は、この予実差異ペナルティを毎周ちょっとずつ小さくしているだけです。

⚠️ 実際は全クラスの確率分布に対する期待値。ここは正解クラス1点に絞った -log(p) の例示。

実際のコード(microgpt.py L166-169)

この簿記アナロジーが、Karpathy のオリジナル200行のどの行に当たるか。

probs = softmax(logits)
loss_t = -probs[target_id].log()   # 正解 target_id の確率の -log
losses.append(loss_t)
loss = (1 / n) * sum(losses)       # 名前全体の平均損失

-log(正解 target_id の確率)=クロスエントロピー。当たれば0、外すほど急騰。名前全体で平均し、これを最小化する。

出典: karpathy / microgpt.py (本体は原文ママ、コメントのみ日本語に補足)