Softmax関数とは

Softmax関数は、ニューラルネットワークの最終出力層において、複数のクラス分類を行う際に、入力された実数値のベクトルを、各クラスに属する確率を表す確率分布(総和が1となるベクトル)に変換するために用いられる関数のことです。

Softmax関数の概要と多クラス分類における役割

Softmax関数は、機械学習、特に多クラス分類(Multi-Class Classification)問題で使用される最も一般的な活性化関数です。

例えば、「この画像は犬、猫、鳥のどれかである」といった問題で、モデルが各クラスに属する確信度(ロジット)を実数値として出力した後、それらをユーザーやシステムが解釈しやすい確率に変換する役割を果たします。

Softmax関数が重要なのは、以下の2点にあります。

  1. 確率分布への変換: 出力される各要素は 0 から 1 の間に収まり、全要素の総和が厳密に 1 になるため各クラスに属する確率として自然に解釈できます。
  2. 最大値の強調: 入力された値(ロジット)の大小関係を維持しつつ、特に大きな値を持つ要素の確率を、他の要素の確率よりも指数関数的に大きく引き伸ばす効果(最大値の強調)があります。これにより、最も確信度の高いクラスが際立つようになります。

主な目的は、ニューラルネットワークの出力を、複数のクラスの中から一つを選択するための、論理的に整合性の取れた確率的な形式に変換することです。

Softmax関数の数学的定義と計算

$K$ 個のクラスに対する分類を行う場合、ニューラルネットワークの最終層の線形出力(ロジットベクトル)を $z = (z_1, z_2, \dots, z_K)$ とします。Softmax関数はこの $z$ を入力として受け取り、確率ベクトル $\sigma(z) = (p_1, p_2, \dots, p_K)$ を出力します。

1. Softmax関数の計算式

クラス $j$ に属する確率 $p_j$ は、以下の式で計算されます。

p_j = \frac{e^{z_j}}{\sum_{k=1}^{K} e^{z_k}}

ここで、

  • $z_j$: 入力ロジットベクトル $z$ の $j$ 番目の要素(クラス $j$ のスコア)。
  • $e^{z_j}$: ロジット $z_j$ の指数関数。
  • $\sum_{k=1}^{K} e^{z_k}$: すべてのクラスの指数関数の総和(正規化項)。

2. 指数関数による「最大値の強調」

分子に指数関数($e^z$)を用いることにより、入力ロジットのわずかな差が、出力確率に大きな差として現れます。例えば、入力ロジットが $(2, 3, 1)$ であった場合、最大のロジット 3 を持つクラスの確率は、ロジット 2 や 1 を持つクラスの確率よりも相対的に非常に高くなります。これにより、モデルは最も確信度の高い選択肢を強調し、分類を明確化します。

3. 総和が 1 になる正規化

分母がすべてのクラスの指数関数の総和であるため、すべての出力確率 $p_j$ を合計すると、必ず 1 になります。

\sum_{j=1}^{K} p_j = \sum_{j=1}^{K} \frac{e^{z_j}}{\sum_{k=1}^{K} e^{z_k}} = \frac{\sum_{j=1}^{K} e^{z_j}}{\sum_{k=1}^{K} e^{z_k}} = 1

Softmax関数の実務上の注意点

1. 安定性の問題(オーバーフロー対策)

$e^{z_j}$ を計算する際、入力ロジット $z_j$ が非常に大きな値を取ると、指数関数 $e^{z_j}$ も極めて大きな値となり、コンピュータの浮動小数点数の表現可能な範囲を超えてしまうオーバーフローが発生する可能性があります。

この問題に対処するため、実際の実装では、入力ロジットベクトル $z$ から最大値 $z_{\max}$ を引いてからSoftmaxを計算する数値的に安定した方法が用いられます。この操作は数学的には結果を変えません。

p_j = \frac{e^{z_j - z_{\max}}}{\sum_{k=1}^{K} e^{z_k - z_{\max}}}

2. 勾配消失の回避

Softmax関数自体は、分類タスクの最終層で使用されるため、Sigmoid関数やtanh関数が抱える深いネットワークにおける勾配消失問題の影響は受けません。これは、Softmaxが分類の誤差を計算するためのクロスエントロピー損失関数と組み合わせて使用される際、勾配が非常に単純な形に整理されるためです。

関連用語

深層学習 | 今更聞けないIT用語集
自然言語処理 | 今更聞けないIT用語集
AIソリューション

お問い合わせ

システム開発・アプリ開発に関するご相談がございましたら、APPSWINGBYまでお気軽にご連絡ください。

APPSWINGBYの

ソリューション

APPSWINGBYのセキュリティサービスについて、詳しくは以下のメニューからお進みください。

システム開発

既存事業のDXによる新規開発、既存業務システムの引継ぎ・機能追加、表計算ソフトによる管理からの卒業等々、様々なWebシステムの開発を行っています。

iOS/Androidアプリ開発

既存事業のDXによるアプリの新規開発から既存アプリの改修・機能追加まで様々なアプリ開発における様々な課題・問題を解決しています。


リファクタリング

他のベンダーが開発したウェブサービスやアプリの不具合改修やソースコードの最適化、また、クラウド移行によってランニングコストが大幅にあがってしまったシステムのリアーキテクチャなどの行っています。