1行定義
ソフトマックス関数とは、複数の数値をそれぞれ0から1の間の値に変換し、その合計がちょうど1になるようにする関数のことです。
くわしく
ソフトマックス関数は、ニューラルネットワークが出した複数の数値(スコア)を、確率の形に変換する関数です。主に多クラス分類の出力層で使われます。
計算のしかた
K個の入力z1, …, zKに対して、i番目の出力はexp(zi) / (exp(z1) + … + exp(zK))です。まず、各スコアを指数関数で正の値にします。次に、それぞれを全体の合計で割ります。
たとえば、画像が「犬」「猫」「鳥」のどれかを判定するモデルが、スコア1.0、0.0、−1.0を出したとします。ソフトマックス関数を通すと、およそ0.67、0.24、0.09になります。マイナスのスコアも0より大きい値になり、合計は1です。スコアの大小の順番もそのまま保たれます。
名前の由来と性質
最大のものだけを1、残りを0にする操作を、なめらかに(ソフトに)したものなので、この名前があります。指数関数を使うため、スコアの差が大きいほど、最大のクラスに確率が集中します。
すべての入力に同じ数を足しても、出力は変わりません。実装では、この性質を使って入力から最大値を引いてから計算し、指数関数の値が大きくなりすぎるのを防ぎます。
使いどころと注意点
出力層では、誤差関数の交差エントロピーと組み合わせるのが定番です。正解クラスの確率が大きくなるように学習が進みます。
2クラスのソフトマックス関数は、2つのスコアの差をシグモイド関数に入れたものと同じになります。一方、1枚の画像に複数のラベルを付けるマルチラベル分類には向きません。合計が1なので、あるクラスの確率が上がると、他のクラスの確率が下がるからです。この場合は、クラスごとにシグモイド関数を使います。
出力層以外でも使われます。TransformerのAttentionでは、どの単語にどれだけ注目するかの重みを、ソフトマックス関数で合計1にそろえています。
覚え方
「指数で正にして、合計で割る」と覚えます。
G検定での出題
出題のされ方
出力が合計1の確率として読める性質、多クラス分類の出力層での使用と交差エントロピーとの組み合わせ、シグモイド関数との使い分け(1つを選ぶか、複数を付けるか)が問われます。
混同しやすい用語
| 用語 | 意味 |
|---|---|
| ソフトマックス関数このページの用語 | 複数の数値をそれぞれ0から1の間の値に変換し、その合計がちょうど1になるようにする関数 |
| シグモイド関数 | どんな実数の入力も0から1の間の値に変換する、なめらかなS字形の関数 |
違いを表で比べる
◯×チェック
次の文が正しいか、誤りかを選んでください。
-
ソフトマックス関数の出力は、どの要素も0より大きく、すべてを足すと1になる。
答えを見る
答え ◯ 正しい
指数関数の値は常に正で、それを全体の合計で割るためです。そのため確率として読めます。
-
ソフトマックス関数を通すと、変換前のスコアが最も大きいクラスとは別のクラスが、最も大きい確率になることがある。
答えを見る
答え × 誤り
指数関数は単調に増加するので、スコアの大小の順番は変換後も変わりません。
-
ソフトマックス関数では、すべての入力に同じ数を足しても、出力される確率は変わらない。
答えを見る
答え ◯ 正しい
exp(z + c) = exp(c) × exp(z)なので、分子と分母のexp(c)が打ち消し合います。
この用語の練習問題
出典
- G検定 試験出題範囲(シラバス2024)第1.4版 (技術分野 項目12 活性化関数)
- John S. Bridle, Probabilistic Interpretation of Feedforward Classification Network Outputs, with Relationships to Statistical Pattern Recognition, Neurocomputing (NATO ASI Series F68), 227–236 (1990)
- Ian Goodfellow, Yoshua Bengio, Aaron Courville, Deep Learning, MIT Press (2016) (6.2 Gradient-Based Learning)