【図解】softmax関数とは?わかりやすく、深く解説

Last updated:

すえつぐ

こんにちは!自然言語処理(NLP)・大規模言語モデル(LLM)の解説記事や書籍を書いている、 すえつぐです!
(著書、 『誰でもわかる大規模言語モデル入門』 が11月23日に出版予定。Amazonにて予約受付中)

ディープラーニングのモデルで広く使われている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ステップで出力値に変換しています。

  1. 指数関数(e)を適用し、全て正の数に変換します。(例では−1が0.4と、正の値に変換されていることがわかります。)
  2. 合計で割る。①で出した数値を①の数値の合計で割ります。これによって、「合計が1の値」になる。

このように簡単な二つのステップを踏むことで、「合計が1になる0-1の値に入力値を変換する」ことができました。これがsoftmaxの処理全体の流れです。

数式で詳しく解説

流れがわかったところで数式も見て見ましょう。冒頭で見た時には難しく感じたかもしれませんが、処理の流れがわかればシンプルな数式に感じるはずです。

 

xの指数をとってexにして、全体の合計で割るだけ、という非常にシンプルな数式なことがわかります。

ポイントまとめ

  •  softmaxは①指数をとる、②合計で割る、というシンプルな仕組み。
  •  数式も処理の流れがわかれば非常にシンプル。

まとめ

1章

  • softmax関数は合計が1になる0-1の値に入力値を変換する関数
  • 「〜の結果をsoftmaxする」と言われたら、「〜の結果を、わかりやすい確率に変換する」と理解すれば良い。

2章

  •  softmaxは①指数をとる、②合計で割る、というシンプルな仕組み。
  •  数式も処理の流れがわかれば非常にシンプル。

おすすめの参考書

すえつぐ

ここまでの学習、お疲れさまでした。そして本記事を最後まで読んでいただきありがとうございました!
ここからは、おすすめの書籍を紹介します。この記事で興味を持った方は、本を読めばさらに実践的な力が手に入るはずです。

すえつぐ
まず私の著書、『誰でもわかる大規模言語モデル入門』が11月23日に日経BPから出版予定です。LLMの基礎から実装まで網羅的に解説した入門書です。

特徴
・LLMの仕組みを、数式を使わず図で解説
・LLMを使った自動化をPythonコードで実装

LLMを体系的に学びたい、LLMを使った自動化や新機能を実装してみたいという方におすすめです。
以下のAmazon概要欄にてページが一部公開されていますので、ぜひ覗いてみてください。
(Amazonにて著者をフォローすると発売日に通知が届きます)

すえつぐ
他にも、本記事に関する書籍では、以下の書籍がおすすめです。(*以下は私の著書ではありません)

softmax関数を含む、ディープラーニングをより詳しく学びたい方は、以下の書籍で詳細を学び、実装してみるのがおすすめです。

おすすめオンラインコース

動画・オンラインコースで学びたい、機械学習からディープラーニングまでを網羅的に学びたい、復習したいという方には以下のUdemyがおすすめです。

【世界で55万人が受講】データサイエンティストを目指すあなたへ〜データサイエンス25時間ブートキャンプ〜 icon

すえつぐ

このUdemyのコースは統計学・数学から機械学習・ディープラーニングまでの広い範囲を、非常にわかりやすくまとめた入門コースです。
勉強・復習に便利なのはもちろん、私はチームで共通認識を作るためにチーム全員でこのコースを購入しました。

おすすめの勉強ステップ

1. 概要・大枠を知る。
Webサイトなどで概要を理解する(本サイトはこのステップの支援を目指しています。)
詳細を学ぶ際に、より効率良くインプットできる。
2. 詳細を知る、理解を深める。
書籍、論文でより詳しく学ぶ。
3. 実践・アウトプット
SignateやKaggleに参加してモデルを作ってみる、勉強したことをブログにまとめる。

関連記事|【完全マニュアル】技術ブログを始めるべき理由と始め方。メリット・収益・書き方を徹底解説

すえつぐ

個人的には、データサイエンス、特にNLP関係の本は難しく、いきなり本を読むと挫折してしまう人が多いと感じています。
このサイトで概要・全体像を理解してから本を読むことで、より理解しやすく挫折も少なくなるはずです。(その役に立てるよう記事を執筆していきます!)