STEP 5・モデル本体(Transformer)

ソフトマックス ― 構成比100%への正規化

記事で詰まったところ

「ソフトマックスで確率に変換」「指数を取って合計で割る」「temperature」が分からない。

機械学習ではこう言う

スコア群を指数で強調してから合計で割り、合計1の確率分布にする。temperature で尖り具合を調整する。

構成比100%への正規化(予算配分)

セグメント別のスコア(利益見込み等)を、合計100%の構成比へ正規化するのに似ている。各セグメントの取り分(確率)を出す予算配分そのもの。

まず指数を取るのは「大きいものをより際立たせる」ため。差が開いている項目ほど取り分が大きくなる。そのうえで合計で割って100%にそろえる。

temperature は配分のメリハリ。低temp(堅実)なら勝ち筋に大きく寄せ、高temp(強気)ならどのセグメントにも満遍なく配る。推論時の「保守度」を決めるつまみ。

言葉の対応表

microGPT(機械学習)
会計・簿記の言葉
ソフトマックス
スコア→構成比100%の予算配分
指数で強調
差が開くほど取り分を大きく
temperature
配分のメリハリ(保守度)

触って確かめる

主力事業スコア 6
新規事業スコア 4
周辺事業スコア 2
その他スコア 1
86.2%
11.7%
主力事業86.2%
新規事業11.7%
周辺事業1.6%
その他0.6%
合計100.0%

指数を取ってから合計で割るので、スコア差が開くほど取り分が大きくなる。 temperature を下げると勝ち筋に寄せ(堅実)、上げるとどこへも満遍なく配る(強気)。推論時の「保守度」のつまみです。

⚠️ スコアの大小関係と確率は厳密には指数で非線形に結びつく。ここは構成比の直感に寄せた例示。

実際のコード(microgpt.py L97-101)

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

def softmax(logits):
    max_val = max(val.data for val in logits)
    exps = [(val - max_val).exp() for val in logits]
    total = sum(exps)
    return [e / total for e in exps]

指数 exp を取り合計 total で割って構成比(合計1)に。- max_val はオーバーフロー防止の計算上の工夫。

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