ソフトマックス関数(ソフトマックスかんすう、英: softmax function)や正規化指数関数(せいきかしすうかんすう、英: normalized exponential function)は、シグモイド関数を多次元に拡張した関数。多クラス分類問題において、ニューラルネットワークの出力を確率分布に変換することができるので、最後の活性化関数としてよく用いられる。

ソフトマックス関数という呼び名は人工知能の分野での呼び方であり、関数自体は1868年にルートヴィッヒ・ボルツマンが発表した統計力学のボルツマン分布に由来する。交差エントロピーとの組合せでよく用いられるが、ボルツマン分布とエントロピーの組合せの考え方も統計力学由来である。ボルツマンマシンでも用いられているが、1989年にJohn S. Bridleがsoftmaxと命名した。

定義

ソフトマックス関数は、K 個の実数からなるベクトル z {\displaystyle {\boldsymbol {z}}} を入力として受け取り、入力の指数に比例する K 個の確率で構成される確率分布に正規化する。つまり、ソフトマックス関数を適用することで、各成分は区間 (0, 1) に収まり、全ての成分の和が 1 になるため、「確率」として解釈できるようになる。入力値が大きいほど「確率」も大きい。

K 1 {\displaystyle K\geq 1} に対し、標準(単位)ソフトマックス関数 σ : R K ( 0 , 1 ) K {\displaystyle \sigma :\mathbb {R} ^{K}\to (0,1)^{K}} は次のように定義される。

σ ( z ) i = e z i j = 1 K e z j  for  i = 1 , , K  and  z = ( z 1 , , z K ) R K {\displaystyle \sigma ({\boldsymbol {z}})_{i}={\frac {e^{z_{i}}}{\textstyle \sum \limits _{j=1}^{K}e^{z_{j}}}}\quad {\text{ for }}i=1,\dotsc ,K{\text{ and }}\mathbf {z} =(z_{1},\dotsc ,z_{K})\in \mathbb {R} ^{K}}

簡単に言えば、入力ベクトルの z {\displaystyle {\boldsymbol {z}}} の各成分 z i {\displaystyle z_{i}} に自然指数関数を適用し、これらすべての指数の合計で割ることによって、値を正規化する。この正規化により、出力ベクトル σ ( z ) {\displaystyle \sigma ({\boldsymbol {z}})} の成分の和が 1 になることが保障される。

シグモイド関数との関係性

K = 2 の二値分類問題において、 z = z 1 z 2 {\displaystyle z=z_{1}-z_{2}} と置くと、標準シグモイド関数になる。z の正負で二値分類できる。

σ ( z ) 1 = e z 1 e z 1 e z 2 = e z 1 e z 1 e z 1 z = 1 1 e z = ς 1 ( z ) {\displaystyle \sigma ({\boldsymbol {z}})_{1}={\frac {e^{z_{1}}}{e^{z_{1}} e^{z_{2}}}}={\frac {e^{z_{1}}}{e^{z_{1}} e^{z_{1}-z}}}={\frac {1}{1 e^{-z}}}=\varsigma _{1}(z)}

基底がネイピア数以外の場合

e(ネイピア数)の代わりに別の基底 b > 0 を用いることもできる。 0 < b < 1 であれば、入力値が小さいほど出力される確率が高くなり、b の値を小さくすると、入力値が小さいところに集中する確率分布となる。b > 1 の場合、入力値が大きいほど出力される確率が大きくなり、b の値を大きくすると、最大の入力値が大きい位置に集中する確率分布が作成される。

実数 β を用いて b = e β {\displaystyle b=e^{\beta }} ないし b = e β {\displaystyle b=e^{-\beta }} と記載すると、次の表現を得る。

σ ( z ) i = e β z i j = 1 K e β z j  or  σ ( z ) i = e β z i j = 1 K e β z j  for  i = 1 , , K . {\displaystyle \sigma ({\boldsymbol {z}})_{i}={\frac {e^{\beta z_{i}}}{\textstyle \sum \limits _{j=1}^{K}e^{\beta z_{j}}}}{\text{ or }}\sigma ({\boldsymbol {z}})_{i}={\frac {e^{-\beta z_{i}}}{\textstyle \sum \limits _{j=1}^{K}e^{-\beta z_{j}}}}{\text{ for }}i=1,\dotsc ,K.}

基底が固定されている分野もあれば、基底を変化させる分野もある。ニューラルネットワークの場合は、ソフトマックス関数を適用する前に線形変換することが多く、その場合はこの β 倍は無意味である。

偏微分

偏微分は、クロネッカーのデルタを使用し、商の微分法則より下記となる。

σ ( z ) j z i = z i e z j k = 1 K e z k = δ i j e z j ( k = 1 K e z k ) e z j e z i ( k = 1 K e z k ) 2 = σ ( z ) j ( δ i j σ ( z ) i ) {\displaystyle {\frac {\partial \sigma ({\boldsymbol {z}})_{j}}{\partial z_{i}}}={\frac {\partial }{\partial z_{i}}}{\frac {e^{z_{j}}}{\sum \limits _{k=1}^{K}e^{z_{k}}}}={\frac {\delta _{ij}e^{z_{j}}\left(\sum \limits _{k=1}^{K}e^{z_{k}}\right)-e^{z_{j}}e^{z_{i}}}{\left(\sum \limits _{k=1}^{K}e^{z_{k}}\right)^{2}}}=\sigma ({\boldsymbol {z}})_{j}(\delta _{ij}-\sigma ({\boldsymbol {z}})_{i})}

交差エントロピーと組み合わせた場合

教師データ p i {\displaystyle p_{i}} が0または1の多クラス分類問題で、 q i = σ ( z ) i {\displaystyle q_{i}=\sigma ({\boldsymbol {z}})_{i}} で、損失関数に交差エントロピーを使用した場合、

H ( p , q ) = i p i log q i {\displaystyle H({\boldsymbol {p}},{\boldsymbol {q}})=-\sum _{i}p_{i}\log q_{i}}

に対して、正解がj、つまり p i = δ i j {\displaystyle p_{i}=\delta _{ij}} とすると、

H ( p , q ) = log q j {\displaystyle H({\boldsymbol {p}},{\boldsymbol {q}})=-\log q_{j}}

となり、これを z i {\displaystyle z_{i}} で偏微分すると q i p i {\displaystyle q_{i}-p_{i}} になる。つまり、ソフトマックス関数適用後の確率分布に正解の所だけ1を引いたものになる。

H z i = 1 q j q j z i = 1 σ ( z ) j σ ( z ) j z i = 1 σ ( z ) j σ ( z ) j ( δ i j σ ( z ) i ) = σ ( z ) i δ i j = q i p i {\displaystyle {\frac {\partial H}{\partial z_{i}}}=-{\frac {1}{q_{j}}}{\frac {\partial q_{j}}{\partial z_{i}}}=-{\frac {1}{\sigma ({\boldsymbol {z}})_{j}}}{\frac {\partial \sigma ({\boldsymbol {z}})_{j}}{\partial z_{i}}}=-{\frac {1}{\sigma ({\boldsymbol {z}})_{j}}}\sigma ({\boldsymbol {z}})_{j}(\delta _{ij}-\sigma ({\boldsymbol {z}})_{i})=\sigma ({\boldsymbol {z}})_{i}-\delta _{ij}=q_{i}-p_{i}}

トップダウン型自動微分を使用する際は、この値をソースノードに降ろしていけば良い。

ちなみに、回帰問題で二乗和誤差 i ( q i p i ) 2 {\displaystyle \sum _{i}(q_{i}-p_{i})^{2}} q i {\displaystyle q_{i}} で偏微分すると 2 ( q i p i ) {\displaystyle 2(q_{i}-p_{i})} と、上記と似たような式になる。つまり、バックプロパゲーションとしては、回帰問題で二乗和誤差の場合は出力の誤差を使用し、分類問題でソフトマックス関数で交差エントロピーの場合は確率の誤差を使用する。

オーバーフロー対策

z i {\displaystyle z_{i}} の値が大きい場合、単精度浮動小数点数の場合は z i = 89 {\displaystyle z_{i}=89} であっても、exp() の計算後の結果がオーバーフローして無限大になる。そして、無限大÷無限大は NaN になる。その対策として、 z i {\displaystyle z_{i}} は一律同じ値を引いてもソフトマックス関数を適用後の結果は変わらないことを利用して、 z i max k z k {\displaystyle z_{i}-\max \limits _{k}z_{k}} として計算すると良い。

解釈

Arg max の滑らかな近似

「ソフトマックス softmax」という名前は誤解を招く恐れがある。この関数は最大値関数の滑らかな近似ではなく、Arg max関数(どのインデックスが最大値を持つかを表す関数)の滑らかな近似値である。実際、「softmax」という用語は、最大値の滑らかな近似である LogSumExp関数にも用いられる。これを明確にするために「softargmax」を好む人もいるが、機械学習では「softmax」という用語が一般的である。

関連項目

  • 多項ロジット回帰
  • ディリクレ分布 – カテゴリ分布をサンプリングする別の方法
  • 分配関数

脚注

出典

外部リンク

  • 『ソフトマックス関数』 - 高校数学の美しい物語

【図解】softmax関数とは?わかりやすく、深く解説 すえつぐのNLP&LLM

シグモイド関数 ソフトマックス関数 違い 備忘録のための備忘録

ソフトマックス関数

ソフトマックス(Softmax)関数とは:定義、特性、実装方法まで徹底解説 nomulog

【図解】softmax関数とは?わかりやすく、深く解説 すえつぐのNLP&LLM