
2026/01/12 5:01
負温度でのサンプリング
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
作者はMetaのLLaMAモデルを使用し、温度 T = −0.001(OpenAI のモデルでは 0.0–2.0 の範囲に制限されているためサポートされない)という負の温度を設定して実験します。式
(p_i = \exp(z_i/T)/\sum_j \exp(z_j/T)) を用いると、T が負の場合指数部の符号が反転し、通常は最も確率の低いトークンが最も高くなります。|T| が 0 に近づくにつれて、この逆転により出力は決定的になり、ランキングが逆転します。
この設定を許可するために作者は llama.cpp を修正し、temp ≤ 0 のときに強制的に貪欲サンプリングになるチェックを temp == 0 のみで発動するよう変更しました。使用したサンプルコマンドは次の通りです:
./main -m models/7B/ggml-model-q4_0.bin --temp -0.001 --repeat-penalty 1.0 --top-k 0 --top-p 1.0 -p "Temperature is a concept"
結果として得られたテキストは意味不明で、例えば「Хронологија」「entferне」「antferne」といった異常なトークンが繰り返されます。これらのトークンは埋め込みセンチロイドに最も近いものですが、通常の出力ではほとんど現れません。また、温度を極端に高く設定(1 000 000)すると、モデルは非常にランダムなテキストを生成し、多数の非英語記号が含まれることも示されました。これはエントロピーの増大を示しています。
負の温度は有限状態空間(例えばニューラルネットの最終層)でのみ意味を持ち、無限状態を有する物理系には対応しません。Derik Kauffman の 2023 年ブログ記事に基づき、本研究では極端な温度設定が決定的だが理解不能な出力を生成できることを探求し、新しいサンプリング戦略や安全対策の可能性を示唆するとともに、意味不明な生成によってユーザー信頼が損なわれたりポリシー違反につながるリスクも強調しています。企業は温度範囲を制限したり、トークンフィルタリングを調整して、本番環境でのこうしたアーティファクトを防止する必要があります。
本文
概要
統計力学における温度定義(ゼロ以下になる可能性も含めて)に触発され、LLaMAを (T=-0.001) でサンプリングしました。結果は想像以上に奇妙でした。
背景
温度とは何か
温度は統計力学から来ています。熱平衡下の状態集合 ({E_i}) を持つ系では、各状態への確率分布は
[ p_i=\frac{\exp(-E_i/k_BT)}{\sum_j \exp(-E_j/k_BT)} ]
で表されます。ここで (T) は温度です。
- 低い (T):低エネルギー状態が支配的になります。
- 高い (T):状態がより均等に混ざります。
ニューラルネットワークにおける温度
ネットワークの最終層でロジット ({z_i}) にソフトマックスを適用すると
[ p_i=\frac{\exp(z_i/T)}{\sum_j \exp(z_j/T)} ]
となります。これは符号が反転したボルツマン分布で、より大きなロジットほど確率が高くなるようになっています。
言語モデルでは温度は「創造性」を制御します:
- (T=0):最も確率の高いトークンを決定的に生成。
- (T=\infty):全てのトークンが等しく出現(純粋ノイズ)。
負の温度
ゼロ以下の温度は「寒い日」ではなく、絶対スケールで (T<0) を意味します。(T<0) のとき指数部の符号が逆転し、以前は低確率だった状態が最も確率高くなります。(T \to 0^{-}) に近づくと再び決定的に生成されますが、この場合は「最も確率が低い」トークンを選択します。
負の温度は有限な状態空間(例:ニューラルネットワークのロジット数)があるシステムでのみ意味があります。
方法論
OpenAI のモデルではサンプリング温度を (0.0 \le T \le 2.0) に限定しています。負温度を試すため、Meta の LLaMA モデルを llama.cpp を使って実験しました。
main.cpp の主要関数:
void llama_sample_temperature(llama_token_data_array *candidates_p, float temp) { for (size_t i = 0; i < candidates_p->size; ++i) candidates_p->data[i].logit /= temp; }
元のコードは (T \le 0) のときにグリーディサンプリングを行っていました。ここでは
if (temp == 0) のチェックを変更し、負温度でも温度スケーリングで処理されるようにしました。
実行コマンド
./main -m models/7B/ggml-model-q4_0.bin \ --temp -0.001 \ --repeat-penalty 1.0 \ --top-k 0 \ --top-p 1.0 \ -p "Temperature is a concept"
結果
| 温度 | 出力(抜粋) |
|---|---|
| (T=+0.001) | “Temperature is a concept that is used to describe the degree of hotness or coldness of a substance…” |
| (T=-0.001) | “Temperature is a concept Хронологија”(その後停止) |
| (T=+1,000,000)(ほぼランダム) | “Temperature is a concept fixesля conven Beng aer situation ton …” |
| (T=-0.001)(同じ大規模モデル) | Хронологија, entferne などの奇妙なトークンが繰り返し出現し、生成は無限に続く。 |
負温度では、正温度で最も低い確率を持つトークンが選ばれ、非常に異常な反復が発生します。
観察
- Хронологија や entferne といったトークンは LLaMA の埋め込み空間でセンター付近に位置し、意味的にはほとんど情報を持ちません。
- 負温度ではこれらの異常トークンが最も確率高くなるため、正温度では抑制されるものが出現します。
引用
この記事を引用したい場合は次の BibTeX をご利用ください:
@misc{Kauffman2023negative-temperature, author = "Derik Kauffman", title = "Sampling at negative temperature", year = 2023, howpublished = "Blog post", url = "https://cavendishlabs.org/blog/negative-temperature/" }