# 温度パラメータ

温度パラメータ(temperature, `tau`)は、確率分布を鋭くしたり平らにしたりするためのパラメータである。[AlphaZero](/shogi/shogiwiki/alphazero/) 型の [自己対局](/shogi/shogiwiki/self-play/)では、[モンテカルロ木探索(MCTS)](/shogi/shogiwiki/search/monte-carlo-tree-search/)後の訪問回数分布から実際の着手や方策教師を作るときに使われる。

高い温度は探索的で、多くの手に確率を残しやすい。低い温度は貪欲で、最も訪問回数が多い手に確率を集中させやすい。

## 基本形

AlphaZero 型では、MCTS のルート訪問回数 `N(s, a)` から、次のような方策分布を作ることが多い。

```text
pi(a | s) = N(s, a)^(1 / tau) / sum_b N(s, b)^(1 / tau)
```

`tau = 1` のときは、訪問回数に比例した分布になる。`tau` が 0 に近づくと、最大訪問回数の手をほぼ決定的に選ぶ。`tau` が大きいほど、分布は平らになり、訪問回数が少ない手にも確率が残りやすい。

## AlphaZero 型での使われ方

自己対局では、常に最善と思われる手だけを選ぶと、似た棋譜が増え、学習データが偏りやすい。そのため、序盤では温度を高めにして多様な局面を作り、終盤や評価対局では温度を低くして強い手を選びやすくする運用がよく使われる。

AlphaGo Zero では、自己対局の最初の 30 手は温度を 1 にし、その後は 0 に近い温度で最大訪問回数の手を選ぶ設定が説明されている。AlphaZero 系の実装でも、ゲームや目的に応じて、序盤だけ温度を高くする、全体を低温にする、評価時は常に最大訪問手を選ぶ、といった調整が行われる。

## Dirichlet noise との違い

[Dirichlet noise](/shogi/shogiwiki/search/dirichlet-noise/) は、MCTS を始める前にルートノードの方策 prior を揺らす。温度パラメータは、MCTS が終わった後の訪問回数分布から、実際に指す手や方策教師を作る。

どちらも自己対局の多様性を増やすために使われるが、作用する段階が違う。Dirichlet noise は探索の入口を広げ、温度は探索結果からの着手選択を滑らかにする。

## 将棋での注意点

将棋では序盤の戦型選択、中盤の分岐、終盤の詰みや寄せで、望ましい温度が変わる。序盤で温度を高くすると多様な戦型を生成しやすい一方、悪い序盤も混ざりやすい。終盤で温度を高くしすぎると、明確な勝ち筋や詰みを逃す危険がある。

学習用自己対局、レーティング測定、探索パラメータ調整、定跡検証では目的が異なるため、同じ温度設定が常に良いとは限らない。比較実験では、温度、ノイズ、開始局面、持ち時間、投了閾値などをそろえる必要がある。

## dlshogi での位置づけ

DeepLearningShogi には、複数の文脈で temperature が現れる。`selfplay/self_play.cpp` では、ルートの訪問回数からランダムに着手を選ぶための `random_temperature` や、方策 prior の softmax に関係する `temperature` がある。USI エンジン側にも `Random_Temperature`、`Random_Temperature_Drop`、`Softmax_Temperature` などの設定がある。

また、学習・再評価系の Python コードにも `temperature` が現れる。これは、訪問回数分布、方策 logits、定跡候補、教師データの再評価など、文脈によって意味が少しずつ異なる。dlshogi のコードを読むときは、どの段階の分布を温度で変形しているのかを確認することが重要である。

## 関連項目

- [自己対局](/shogi/shogiwiki/self-play/)
- [AlphaZero](/shogi/shogiwiki/alphazero/)
- [モンテカルロ木探索(MCTS)](/shogi/shogiwiki/search/monte-carlo-tree-search/)
- [PUCT](/shogi/shogiwiki/search/puct/)
- [Dirichlet noise](/shogi/shogiwiki/search/dirichlet-noise/)
- [方策・価値ネットワーク](/shogi/shogiwiki/evaluation-function/policy-value-network/)
- [dlshogi](/shogi/shogiwiki/softs/dlshogi/)
- [探索パラメータの確率的最適化](/shogi/shogiwiki/search/search-parameter-optimization/)

## 参考にしたホームページ

- [David Silver, et al. "Mastering Chess and Shogi by Self-Play with a General Reinforcement Learning Algorithm"](https://arxiv.org/abs/1712.01815)
- [arXiv PDF: Mastering Chess and Shogi by Self-Play with a General Reinforcement Learning Algorithm](https://arxiv.org/pdf/1712.01815)
- [Nature: Mastering the game of Go without human knowledge](https://www.nature.com/articles/nature24270)
- [TadaoYamaoka/DeepLearningShogi](https://github.com/TadaoYamaoka/DeepLearningShogi)