この記事ではソフトマックス関数について、レベルを分けてできる限り分かりやすく説明していきます。
Wikipediaによると(https://en.wikipedia.org/wiki/Softmax_function)
「ソフトマックス関数は、非正規化されたベクターを取って、それを確率分布に正規化するもの」らしいです。
え? これではよくわかりませんね。順を追って説明しましょう。
##とりあえず、何が言いたいの##
ざっくり言えば、ソフトマックス関数とは、出力されたごちゃごちゃした数字を和が綺麗に100%(1.0)になる数字に変えてくれる関数です。
画像を見て猫と犬かを当てるプログラムがあるとしましょう。
隠れ層を通過して無事、画像が猫か犬かの確率を表す数字が出力されたとします。
そこでソフトマックス関数が無いと、犬が2.0、猫が1.5などとプログラムは出力してしまいます。2.0と1.5では和が3.5です。これは全体の350%中、犬である確率が200%、猫である確率が150%と言っているのと同じことです。これでは分かりにくいですよね。
ソフトマックス関数があると、犬が0.62、猫が0.38などとプログラムは出力してくれます。これはソフトマックス関数が値を調整してくれるからです。どのように調整するかというと、犬と猫の和が1.0(100%)になるようにしてくれます。この例で言えば、犬は0.62、猫は0.38で、和が1.0になるようにソフトマックス関数は調整してくれます。これだと全体の100%中、犬である確率が62%、猫である確率が38%となり、とても分かりやすいですね。
まとめるとソフトマックス関数は、出力されたごちゃごちゃした数字を綺麗に、全体の確率が100%(1.0)になるように調整してくれる関数です。
出力されたごちゃごちゃした数字(犬:2.0 猫:1.5) → 和が1になる見やすい数字に(犬:0.62 猫:0.38)
言い換えて説明すると、
出力されたごちゃごちゃした確率(犬:200% 猫:150%) → 和が100%になる見やすい確率に(犬:62% 猫:38%)
##少し深く##
では具体的にどのように調整しているのでしょうか。
ソフトマックス関数は、式にするとこうなります。
では先ほどの例で計算してみましょう。
ソフト関数前の出力数は、犬が2.0、猫が1.5でした。これをソフトマックス関数に通すと
犬: S(2.0) = e^2 / (e^2+e^1.5) = 0.622459
猫: S(1.5) = e^1.5/ (e^2+e^1.5) = 0.377541
0.622459+0.377541=1.0(100%)となりました。これで犬である確率が約62%、猫である確率が38%に無事変換されました。
この式ではSをソフトマックス関数、yを出力された数字としています。また分母にあるΣ(シグマ)は全ての出力された数字の和を表しています。
なぜ62%+38%=100%は、200%+150%=350%と同じことを述べていると断定できるのでしょうか。それは2.0と1.5に同じ数を掛けたり割ったりしているからです。この例ではe^xで掛けて、(e^2+e^1.5)で割っています。よって式を通す前と通した後は同じ割合なのです。