ディープラーニングのモデルで広く使われているsoftmax関数。しかし、論文やまとめサイトでは「〜の結果をsoftmaxする」のように「softmaxする」と書かれているだけで、softmaxについては説明がない場合が多いですよね。
(softmaxは自然言語以外でも広く使われている重要な関数です。)
「softmaxって何、、?何をしている関数、、?」という皆さんの疑問を解決すべく、softmax関数をわかりやすく深く解説していきます!
イラストでSOFTMAX関数をわかりやすく解説
ここから、「Softmax関数とは?仕組みと使われる理由」、「自然言語の実際のモデルで使われる場面」についてイラストを使ってわかりやすく解説していきます!
softmax関数の仕組み
softmax関数を一文で説明すると、「合計が1になる0-1の値に入力値を変換する関数」です。これだけだとわかりづらいと思うので、実際に数値がどう変換されるかを見てみましょう。

イラストのように、[5, 4, -1]が入力値の場合を考えてみます。受け取った入力値を、「0−1の値、合計が1」の出力値に変換するのがSOFTMAX関数です。今回は入力値の[5, 4, -1]が、[0.730, 0.268, 0.002]に変換されていることがわかります。合計が1、0-1の確率値に変換されたことがわかります。
softmax関数が使われる理由
次にsoftmaxを使う理由について解説していきます。なぜ「合計が1になるような0-1の値に変換する」必要があるのでしょうか?
この理由は簡単に言えば、「そのままだと人間が理解しづらいから」です。AIの出力値のままでは人間には理解しづらく、その後の処理もしづらいのです。
例えば「cat」を和訳する、というタスクで考えてみましょう。catの和訳の候補は「猫」、「ネコ」、「陰口を聞く女」などがあり得ます。
この答えの候補それぞれに対して、AIは確率値を出します。しかし、ここで問題になるのが「出力値がわかりづらい」という問題です。イラストで見てみましょう。

イラストのように、AIは出力値に[猫:5, ネコ:4, 陰口を聞く女:-1]のような数値を出します。
softmaxを使わない場合、人間には「どのくらいの確率なのか」ということがわかりづらいです。「和訳の答えは、猫の確率が5で、陰口を聞く女の確率は-1です!」と言われたら混乱しますよね。
一方で、softmaxを使えば「合計が1になるような0-1の値」に変換されるため、直感的に非常にわかりやすくなります。イラストのように、「猫の確率が73%で、陰口を聞く女の確率は0.2%です」と言われれば非常にわかりやすいですよね。
言うなればsoftmaxは「AIと人の間の通訳」のようなイメージです。実際に、Softmax関数はAIが出した出力値を最後に変換する「最終層」で使われることがほとんどです。
もし論文やまとめサイトで「〜の結果をsoftmaxする」と言われたら、「〜の結果を、わかりやすい確率値に変換してるんだな」と理解すれば大丈夫です。
自然言語の実際のモデルでSOFTMAXが使われる場面
softmaxが使われる場面としては、「分類問題の最終層」として多くの場面で使われます。実際に、RNNLM、Attentionでも最終層として使われています。具体的には、RNNLMでは「次の単語を予想」、Attentionでは「翻訳タスク」、といったそれぞれのタスクの最終的な確率値を出すために使われています。
RNNLM、Attentionについては以下のページで、わかりやすく深く解説しています。両方とも自然言語の歴史で重要なモデルですので、興味がある方はぜひ読んでみてください。
【超図解】Attentionとは?わかりやすく、そして深く解説|自然言語処理(NLP)
【超図解】RNNLMとは?わかりやすく、そして深く解説|自然言語処理(NLP)
ポイントまとめ
- softmax関数は合計が1になる0-1の値に入力値を変換する関数
- 「〜の結果をsoftmaxする」と言われたら、「〜の結果を、わかりやすい確率に変換する」と理解すれば良い
第2章 数式でSOFTMAXを深く解説
ここまでで、softmax関数の概要は理解できたと思います。ここからは、softmax関数を数式を使って解説していきます。 もちろん、本章は少し難しい内容になりますが、できるだけ噛み砕いて説明しますので特別な数学の知識は必要ありません。

本章をしっかり読み理解することができれば、このsoftmax関数の数式を理解・説明することができるようになるはずです。
処理全体の流れ
まず処理全体の流れを解説します。冒頭で使った図をより詳しくしたもので解説していきます。

図のように、入力値を受け取り、それを2ステップで出力値に変換しています。
- 指数関数(e)を適用し、全て正の数に変換します。(例では−1が0.4と、正の値に変換されていることがわかります。)
- 合計で割る。①で出した数値を①の数値の合計で割ります。これによって、「合計が1の値」になる。
このように簡単な二つのステップを踏むことで、「合計が1になる0-1の値に入力値を変換する」ことができました。これがsoftmaxの処理全体の流れです。
数式で詳しく解説
流れがわかったところで数式も見て見ましょう。冒頭で見た時には難しく感じたかもしれませんが、処理の流れがわかればシンプルな数式に感じるはずです。

xの指数をとってexにして、全体の合計で割るだけ、という非常にシンプルな数式なことがわかります。
ポイントまとめ
- softmaxは①指数をとる、②合計で割る、というシンプルな仕組み。
- 数式も処理の流れがわかれば非常にシンプル。
まとめ
1章
- softmax関数は合計が1になる0-1の値に入力値を変換する関数
- 「〜の結果をsoftmaxする」と言われたら、「〜の結果を、わかりやすい確率に変換する」と理解すれば良い。
2章
- softmaxは①指数をとる、②合計で割る、というシンプルな仕組み。
- 数式も処理の流れがわかれば非常にシンプル。