「temperature」「logits を temperature で割る」「creativity を上げる」が、生成にどう効くのか分からない。
推論時、次の文字のスコア(logits)をソフトマックスにかける前に temperature で割る。低いと分布が尖って最有力の字ばかり選び(堅実)、高いと分布が平らになり多様な字を選ぶ(強気・創造的)。
決算見積りの保守度のつまみに近い。同じ材料(logits)でも、堅実に倒すなら最有力のシナリオ1本に大きく寄せ、強気に倒すならどのシナリオにも満遍なく確率を配る。temperature はその「寄せ具合」を一括で回すダイヤル。
temperature を下げる(低温)=堅実。最有力の文字の確信度がぐっと上がり、生成は無難で予測どおりになる。引当を最有力ケースに集中させる保守的な見積りに対応。
temperature を上げる(高温)=強気・多様。確率が平準化され、ふだん選ばれない文字も出てきて、生成は創造的だが当たり外れが増える。複数シナリオに薄く張る楽観的な見積りに対応。
同じスコアでも、temperature を下げると最有力の「a」に確率が集中(堅実・無難な生成)、 上げると全候補に満遍なく散って多様な字も出る(強気・創造的)。 決算見積りでいう「最有力ケースに寄せる保守」⇔「複数シナリオに薄く張る楽観」のスタンスを、生成の側で回すダイヤルです。
⚠️ ソフトマックスの temperature と同じ仕組みを、推論(文字生成)の保守度という別の切り口で見たもの。
この簿記アナロジーが、Karpathy のオリジナル200行のどの行に当たるか。
temperature = 0.5 # (0,1] 生成の「創造度」。低い=堅実、高い=多様
# ... 推論ループ内 ...
probs = softmax([l / temperature for l in logits]) # logits を T で割ってから正規化
token_id = random.choices(range(vocab_size), weights=[p.data for p in probs])[0]logits を temperature で割ってから softmax。低温なら最有力の字に尖り(堅実)、高温なら平準化して多様(強気)な生成になる。
出典: karpathy / microgpt.py (本体は原文ママ、コメントのみ日本語に補足)