【そふとまっくすかんすう】

ソフトマックス関数 とは?

最終更新:
💡 候補のスコアを、合計100%の割合へ

複数のスコアを、合計1となる確率分布に変換する関数。各スコアの指数関数を、全候補の指数関数の合計で割る。分類モデルの出力や、Transformerの注意機構の重みづけなどに使われる。

📌 このページのポイント
Softmax — スコアを割合に変える入力スコア出力の割合A:2A:66.5%B:1B:24.5%C:0C:9.0%Softmaxexpで変換し、全候補の合計で割る
入力2・1・0をSoftmaxで変換し、小数第1位までの百分率に丸めた計算例。割合の合計は100%。モデルの正解率ではない。
ひよこ ひよこ
ソフトマックス関数で、何が変わるの?
ペンギン先生 ペンギン先生
たとえば候補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なの?
ペンギン先生 ペンギン先生
2択にもSoftmaxは使えるよ。大事なのは、出力をどう表すかだね。1つの候補を選ぶ分類では、Softmaxで候補全体を合計1にできる。一方、1つのスコアから2択を表す場合などにはシグモイドを使う。複数のラベルが同時に当てはまる分類では、各ラベルにシグモイドを使う方法があり、その合計は1に限らないんだ。
ひよこ ひよこ
Transformerでも、候補を選んでいるの?
ペンギン先生 ペンギン先生
注意機構では、ほかの位置との関係を表すスコアをSoftmaxで重みにするよ。その重みで情報を混ぜ合わせるんだ。次のトークンを予測する出力でも使われるけれど、注意の重みと次のトークンの確率は役割が違う。温度を使う形では、正の温度Tでスコアを割ってから変換し、小さいTでは高いスコアに集中しやすく、大きいTでは均等に近づくよ。
ひよこ ひよこ
大きなスコアを入れると、計算できなくなる?
ペンギン先生 ペンギン先生
expの結果がコンピューターで表せる範囲を超えることがあるよ。全スコアから同じ最大値を引いてから計算すると、数学的には分布を変えずにオーバーフローを避けられる。SciPyの実装もこのようなシフトを使うんだ。実際の浮動小数点計算では、丸めやとても小さい値の扱いにも注意しよう。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「ソフトマックス関数」って出てきたら「候補のスコアを合計100%の割合にする関数」と思えばだいたいOK!
📖 おまけ:英語の意味
「Softmax」 = 最大の候補を滑らかに重くする関数
💬 最大の候補だけを1にする代わりに、ほかの候補にも割合を残すイメージだよ。

参考資料

← 用語集にもどる