ベスパリブ

プログラミングを主とした日記・備忘録です。ベスパ持ってないです。

ソフトマックス関数の式変形

ゼロから作るDeepLearningという本を読んでいるのですが、ソフトマックス関数でオーバーフローしないように式変形するときは次のように変形するとあります。

\displaystyle y_k = \frac{exp(a_k)} {\sum_{i=1}^n exp(a_i)}

\displaystyle = \frac{C exp(a_k)} {C \sum_{i=1}^n exp(a_i)}

\displaystyle = \frac{exp(a_k + log{C})} {\sum_{i=1}^n exp(a_i + log{C})}

\displaystyle = \frac{exp(a_k + C')} {\sum_{i=1}^n exp(a_i + C')}

のですが、2行目から3行目の変形で分子のところをC exp(a_k) = exp(a_k + log{C}) とやっているのですが、こんな公式あったっけ?と手が止まりました。 普通にありました(高校数学!)。

指数と対数の関係式

底をa(a>0)という条件で、\displaystyle x = a^{log_a{x}} が成り立つので、\displaystyle C = e^{log_e{C}}と変形できます。

よって、上記の2行目から3行目の分子の変形は、

 C exp(a_k) = exp(log_e{C}) exp(a_k)

 = exp(a_k + log{C})

ということですね。