ソフトマックス関数のソースを表示
←
ソフトマックス関数
ナビゲーションに移動
検索に移動
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループに属する利用者のみが実行できます:
登録利用者
。
このページのソースの閲覧やコピーができます。
'''ソフトマックス関数'''(ソフトマックスかんすう、{{lang-en-short|softmax function}})や'''正規化指数関数'''(せいきかしすうかんすう、{{lang-en-short|normalized exponential function}})<ref>{{Cite book |和書 |title=パターン認識と機械学習 上 |publisher=丸善出版 |year=2012 |page=196 |ISBN=4621061224}}</ref>は、[[シグモイド関数]]を多次元に拡張した関数。多クラス分類問題において、[[ニューラルネットワーク]]の出力を[[確率分布]]に変換することができるので、最後の[[活性化関数]]としてよく用いられる。 ソフトマックス関数という呼び名は人工知能の分野での呼び方であり、関数自体は1868年に[[ルートヴィッヒ・ボルツマン]]が発表した<ref>{{cite journal |last=Boltzmann |first=Ludwig |authorlink=ルートヴィッヒ・ボルツマン |year=1868 |title=Studien über das Gleichgewicht der lebendigen Kraft zwischen bewegten materiellen Punkten |trans-title=Studies on the balance of living force between moving material points |journal=Wiener Berichte |volume=58 |pages=517–560 }}</ref>[[統計力学]]の[[ボルツマン分布]]に由来する。[[交差エントロピー]]との組合せでよく用いられるが、ボルツマン分布と[[エントロピー]]の組合せの考え方も統計力学由来である。[[ボルツマンマシン]]でも用いられているが、1989年にJohn S. Bridleがsoftmaxと命名した<ref>{{cite conference |first=John S. |last=Bridle |year=1990 |title=Probabilistic Interpretation of Feedforward Classification Network Outputs, with Relationships to Statistical Pattern Recognition |pages=227–236 |conference=Neurocomputing: Algorithms, Architectures and Applications (1989) |editor1=Soulié F.F. |editor2=Hérault J. |series=NATO ASI Series (Series F: Computer and Systems Sciences) |volume=68 |publisher=Springer |location=Berlin, Heidelberg |doi=10.1007/978-3-642-76153-9_28 }}</ref><ref>{{Cite web |title=Training Stochastic Model Recognition Algorithms as Networks can Lead to Maximum Mutual Information Estimation of Parameters |author= |work=proceedings.neurips.cc |date= |access-date=4 June 2024 |url= https://proceedings.neurips.cc/paper/1989/hash/0336dcbab05b9d5ad24f4333c7658a0e-Abstract.html}}</ref>。 == 定義 == ソフトマックス関数は、{{mvar|K}} 個の実数からなるベクトル <math>\boldsymbol{z}</math> を入力として受け取り、入力の指数に比例する {{mvar|K}} 個の確率で構成される[[確率分布]]に正規化する。つまり、ソフトマックス関数を適用することで、各成分は区間 {{math2|(0, 1)}} に収まり、全ての成分の和が 1 になるため、「[[確率]]」として解釈できるようになる。入力値が大きいほど「確率」も大きい。 <math>K \ge 1</math> に対し、標準(単位)ソフトマックス関数 <math>\sigma : \R^K\to (0,1)^K</math> は次のように定義される。 : <math>\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 \R^K</math> 簡単に言えば、入力ベクトルの <math>\boldsymbol{z}</math> の各成分 <math>z_i</math> に自然[[底に関する指数函数|指数関数]]を適用し、これらすべての指数の合計で割ることによって、値を正規化する。この正規化により、出力ベクトル <math>\sigma(\boldsymbol{z})</math> の成分の和が 1 になることが保障される。 === シグモイド関数との関係性 === K = 2 の[[二値分類]]問題において、<math>z = z_1 - z_2</math> と置くと、標準[[シグモイド関数]]になる<ref name="manabitimes"/>。z の正負で二値分類できる。 : <math>\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)</math> === 基底がネイピア数以外の場合 === {{mvar|e}}([[ネイピア数]])の代わりに別の基底 {{math2|''b'' > 0}} を用いることもできる。 {{math2|0 < ''b'' < 1}} であれば、入力値が小さいほど出力される確率が高くなり、{{mvar|b}} の値を小さくすると、入力値が小さいところに集中する確率分布となる。{{math2|''b'' > 1}} の場合、入力値が大きいほど出力される確率が大きくなり、{{mvar|b}} の値を大きくすると、最大の入力値が大きい位置に集中する確率分布が作成される。 実数 {{mvar|β}} を用いて <math>b = e^\beta</math> ないし <math>b = e^{-\beta}</math> と記載すると、次の表現を得る。 : <math>\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 .</math> 基底が固定されている分野もあれば、基底を変化させる分野もある。ニューラルネットワークの場合は、ソフトマックス関数を適用する前に線形変換することが多く、その場合はこの {{mvar|β}} 倍は無意味である。 == 偏微分 == [[偏微分]]は、[[クロネッカーのデルタ]]を使用し、[[商の微分法則]]より下記となる。<ref name="manabitimes">{{Cite web |title=ソフトマックス関数 {{!}} 高校数学の美しい物語 |trans-title= |author= |work=高校数学の美しい物語 |date= |access-date=2 June 2024 |url= https://manabitimes.jp/math/1371 |language=ja}}</ref> : <math>\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)</math> === 交差エントロピーと組み合わせた場合 === 教師データ <math>p_i</math> が0または1の多クラス分類問題で、<math>q_i = \sigma(\boldsymbol{z})_i</math> で、[[損失関数]]に[[交差エントロピー]]を使用した場合、 : <math>H(\boldsymbol{p},\boldsymbol{q}) = -\sum_{i} p_i \log q_i</math> に対して、正解がj、つまり <math>p_i = \delta_{ij}</math> とすると、 : <math>H(\boldsymbol{p},\boldsymbol{q}) = -\log q_j</math> となり、これを <math>z_i</math> で偏微分すると <math>q_i - p_i</math> になる。つまり、ソフトマックス関数適用後の確率分布に正解の所だけ1を引いたものになる。 : <math>\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</math> トップダウン型[[自動微分]]を使用する際は、この値をソースノードに降ろしていけば良い。 ちなみに、回帰問題で二乗和誤差 <math>\sum_i(q_i - p_i)^2</math> を <math>q_i</math> で偏微分すると <math>2(q_i - p_i)</math> と、上記と似たような式になる。つまり、[[バックプロパゲーション]]としては、回帰問題で二乗和誤差の場合は出力の誤差を使用し、分類問題でソフトマックス関数で交差エントロピーの場合は確率の誤差を使用する。 == オーバーフロー対策 == <math>z_i</math> の値が大きい場合、[[単精度浮動小数点数]]の場合は <math>z_i = 89</math> であっても、exp() の計算後の結果が[[算術オーバーフロー|オーバーフロー]]して無限大になる。そして、無限大÷無限大は [[NaN]] になる。その対策として、<math>z_i</math> は一律同じ値を引いてもソフトマックス関数を適用後の結果は変わらないことを利用して、<math>z_i - \max\limits_k z_k</math> として計算すると良い。<ref>{{Cite book |和書 |title=深層学習 |publisher=KADOKAWA |year=2018 |page=59 |ISBN=4048930621 |author1=Ian Goodfellow |author2=Yoshua Bengio |author3=Aaron Courville}}</ref> == 解釈 == === Arg max の滑らかな近似 === 「ソフトマックス softmax」という名前は誤解を招く恐れがある。この関数は[[極値|最大値]]関数の[[滑らかな関数|滑らかな近似]]ではなく、[[Arg max]]関数(どのインデックスが最大値を持つかを表す関数)の滑らかな近似値である。実際、「softmax」という用語は、最大値の滑らかな近似である LogSumExp関数にも用いられる。これを明確にするために「softargmax」を好む人もいるが、機械学習では「softmax」という用語が一般的である。<ref>{{Cite book |和書 |title=深層学習 |publisher=KADOKAWA |year=2018 |page=134 |ISBN=4048930621 |author1=Ian Goodfellow |author2=Yoshua Bengio |author3=Aaron Courville}}</ref> == 関連項目 == * [[多項ロジット回帰]] * [[ディリクレ分布]] – カテゴリ分布をサンプリングする別の方法 * [[分配関数]] == 脚注 == === 出典 === {{Reflist}} == 外部リンク == * {{高校数学の美しい物語|1371|ソフトマックス関数}} {{DEFAULTSORT:そふとまつくすかんすう}} [[Category:指数関数]] [[Category:関数]] [[Category:人工ニューラルネットワーク]] [[Category:ロジスティック回帰]] [[Category:計算論的神経科学]] [[Category:数学に関する記事]]
このページで使用されているテンプレート:
テンプレート:Cite book
(
ソースを閲覧
)
テンプレート:Cite conference
(
ソースを閲覧
)
テンプレート:Cite journal
(
ソースを閲覧
)
テンプレート:Cite web
(
ソースを閲覧
)
テンプレート:Lang-en-short
(
ソースを閲覧
)
テンプレート:Math2
(
ソースを閲覧
)
テンプレート:Mvar
(
ソースを閲覧
)
テンプレート:Reflist
(
ソースを閲覧
)
テンプレート:高校数学の美しい物語
(
ソースを閲覧
)
ソフトマックス関数
に戻る。
ナビゲーション メニュー
個人用ツール
ログイン
名前空間
ページ
議論
日本語
表示
閲覧
ソースを閲覧
履歴表示
その他
検索
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
特別ページ
ツール
リンク元
関連ページの更新状況
ページ情報