機械学習の勉強① ソフトマックス関数でなぜネイピア数を使うのか

ソフトウェアエンジニアとして今後、少なくともリテラシーとして機械学習を知っておく必要があるだろうと思うこと数年。

で概要把握できたので、具体的な勉強を始めるにあたり良さそうな本を調べたところ、
基本を手を動かしながら理解できるこの本の評判が良かったのでこれを読むことにした。
電子書籍版がなかったので実体で購入。

実際読みはじめてみて、非常にわかりやすい。
以前本屋で立ち読みしたことがあり、そのときはピンと来なかったのだが、パラパラと眺めても良さはわからないものである。

ソフトマックス関数

活性化関数で出てくるソフトマックス関数について。

\displaystyle y_k = \frac{e^{a_k}}{\sum^n_{i=1}e^{a_i}}

ソフトマックス関数の出力は

  • 0-1.0の間の実数になる
  • 総和は1になる
  • 確率として解釈することができる

また、重要なのは

  • ソフトマックス関数を適用しても各要素の大小関係は変わらない(=単調増加である)

ということ。
しかし、なぜネイピア数を使う必要があるのかがわからなかった。
上記を満たすなら、ネイピア数を使わずに単純に全体に対する割合を求めることでもよいのではないか?(要素は正数を勝手に前提にしていた)
という疑問が浮かび

\displaystyle y_k = \frac{a_k}{\sum^n_{i=1}a_i}

でも良いのではないかと考えたため、調べてみた。
そこでわかったのは、

  • e^x は正の値を返す単調増加関数である
  • つまり、負の値でも大小関係が変わらない
  • さらに、微分しても同じである
  • e^x は微分しても同じ e^xとなるため、後から出てくる学習において、微分して勾配を求めて損失を逆伝搬させるときに便利である

という点でメリットがあるため、このようにネイピア数を使っているよう。

納得。

自然対数の底e、ネイピア数について

ところで、この自然対数の底e、ネイピア数と言うことを知らなかった。
(高校の数学で出てきた当時は「自然対数の底e」としか聞いていなかった気がする)

確か、習った当時は唐突に定義が出てきて

\displaystyle \log_{x} 0 = 1

を満たすxをeと定義する。

のような定義だけで、なぜそのような定義をする必要があったのか、定義することによりどういうメリットがあるのか、
一切語られることはなく(と思う)、以後数学にも度々登場するものの私にとって謎の存在だった。
特に確かめることもせず、ずっとぼんやりとしたまま20年以上過ごしていた・・・。

というわけでここで改めて調べてみた。

  • もともとは福利の計算をしたことがきっかけで発見されたもの
  • 上記のように微分しても変わらないという性質が便利である

ということがわかった。
なるほど、微分しても変わらないと知って、学生当時計算が楽でいいなくらいにしか思っていなかったのだが、そういう便利な性質があるからこそ、様々な数式で活用されていたのか。

また、久々にこういう勉強をしていて、わからないことをYouTubeで調べてみたのだが、とても便利。
近頃は大学受験の勉強に予備校はあまり必要ないといった話も見かけたのだが、たしかに今の時代は予備校に行かなくても十分勉強できそうだと実感。

コメント

タイトルとURLをコピーしました