【そふとまっくすかんすう】
ソフトマックス関数 とは?
最終更新:
💡 候補のスコアを、合計100%の割合へ
複数のスコアを、合計1となる確率分布に変換する関数。各スコアの指数関数を、全候補の指数関数の合計で割る。分類モデルの出力や、Transformerの注意機構の重みづけなどに使われる。
📌 このページのポイント
- 複数のスコアをまとめて、合計1の確率分布にする
- 大きいスコアほど大きい割合になる
- 2候補にも使え、候補数だけでシグモイドと区別しない
- 計算では大きな入力によるオーバーフローに注意する
ソフトマックス関数で、何が変わるの?
たとえば候補A・B・Cのスコアが2・1・0なら、そのままでは確率として読めないよ。Softmaxで変換すると約66.5%・24.5%・9.0%になり、合計100%の分布になる。どの候補に大きい割合が割り当てられたかを比較できるんだ。これは計算例で、モデルが現実にその確率で正解することを保証する数字ではないよ。
単にスコアを合計で割るの?
その前に、各スコアxをeのx乗、つまりexp(x)に変えるんだ。その値を全候補のexpの合計で割るよ。元のスコアが負でも扱え、スコアの大小の順番は保たれる。有限の実数を数学的に計算した場合、各結果は0より大きく1より小さくなり、合計が1になるんだ。
2択なら必ずシグモイド、3択以上ならSoftmaxなの?
Transformerでも、候補を選んでいるの?
大きなスコアを入れると、計算できなくなる?
expの結果がコンピューターで表せる範囲を超えることがあるよ。全スコアから同じ最大値を引いてから計算すると、数学的には分布を変えずにオーバーフローを避けられる。SciPyの実装もこのようなシフトを使うんだ。実際の浮動小数点計算では、丸めやとても小さい値の扱いにも注意しよう。
まとめ:ざっくりこれだけ覚えればOK!
「ソフトマックス関数」って出てきたら「候補のスコアを合計100%の割合にする関数」と思えばだいたいOK!
📖 おまけ:英語の意味
「Softmax」 = 最大の候補を滑らかに重くする関数
💬 最大の候補だけを1にする代わりに、ほかの候補にも割合を残すイメージだよ。