ソフトマックス関数

提供: testwiki
ナビゲーションに移動 検索に移動

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

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

定義

ソフトマックス関数は、テンプレート:Mvar 個の実数からなるベクトル 𝒛 を入力として受け取り、入力の指数に比例する テンプレート:Mvar 個の確率で構成される確率分布に正規化する。つまり、ソフトマックス関数を適用することで、各成分は区間 テンプレート:Math2 に収まり、全ての成分の和が 1 になるため、「確率」として解釈できるようになる。入力値が大きいほど「確率」も大きい。

K1 に対し、標準(単位)ソフトマックス関数 σ:K(0,1)K は次のように定義される。

σ(𝒛)i=ezij=1Kezj for i=1,,K and 𝐳=(z1,,zK)K

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

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

K = 2 の二値分類問題において、z=z1z2 と置くと、標準シグモイド関数になる[5]。z の正負で二値分類できる。

σ(𝒛)1=ez1ez1+ez2=ez1ez1+ez1z=11+ez=ς1(z)

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

テンプレート:Mvarネイピア数)の代わりに別の基底 テンプレート:Math2 を用いることもできる。 テンプレート:Math2 であれば、入力値が小さいほど出力される確率が高くなり、テンプレート:Mvar の値を小さくすると、入力値が小さいところに集中する確率分布となる。テンプレート:Math2 の場合、入力値が大きいほど出力される確率が大きくなり、テンプレート:Mvar の値を大きくすると、最大の入力値が大きい位置に集中する確率分布が作成される。

実数 テンプレート:Mvar を用いて b=eβ ないし b=eβ と記載すると、次の表現を得る。

σ(𝒛)i=eβzij=1Keβzj or σ(𝒛)i=eβzij=1Keβzj for i=1,,K.

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

偏微分

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

σ(𝒛)jzi=ziezjk=1Kezk=δijezj(k=1Kezk)ezjezi(k=1Kezk)2=σ(𝒛)j(δijσ(𝒛)i)

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

教師データ pi が0または1の多クラス分類問題で、qi=σ(𝒛)i で、損失関数交差エントロピーを使用した場合、

H(𝒑,𝒒)=ipilogqi

に対して、正解がj、つまり pi=δij とすると、

H(𝒑,𝒒)=logqj

となり、これを zi で偏微分すると qipi になる。つまり、ソフトマックス関数適用後の確率分布に正解の所だけ1を引いたものになる。

Hzi=1qjqjzi=1σ(𝒛)jσ(𝒛)jzi=1σ(𝒛)jσ(𝒛)j(δijσ(𝒛)i)=σ(𝒛)iδij=qipi

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

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

オーバーフロー対策

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

解釈

Arg max の滑らかな近似

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

関連項目

脚注

出典

テンプレート:Reflist

外部リンク