どうも、カタミチです。
さて、今日も「最短コースでわかる ディープラーニングの数学」のひとり読書会、やっていきたいと思います。
今日から5章「指数関数・対数関数」ですね。これまでとまた毛色が違った雰囲気ですね。ということで、張り切っていってみよ〜
5-1. 指数関数
さて、まずは指数関数ですね。指数関数といえば、日常的にも「その数値って、指数関数的に増えていくよね」みたいな使い方するとちょっと知的な雰囲気を醸し出せますよね(妄想)。
そんな指数関数ですが、端的にこんな感じで定義されます。
$$f(x)=a^x$$
はい。前の章のクライマックスが難解だったので、こういう式が出てくるとホッとします。まぁこの指数関数ってやつは、これまでもちょこちょこ出てきてるので復習って感じもありますね。
個人的には以前、指数関数の\(x\)の値が負の場合や分数の場合の計算が「へー、うまくできてるなー」と関心したのですが、それが実は\(x\)が自然数の場合の定義を拡張して定義されたものだと知って納得しました。勝手に定義したものがたまたま計算が合った…ってわけじゃなかったんですねー(当たり前や)。
一応式だけ書いておくと…
0に拡張:\(a^0=1\)
負の数に拡張:\(a^{-m}=\frac{1}{a^m}\)
有理数に拡張:\(a^{\frac{q}{p}}=\sqrt[p]{a^q} \)
って感じですね。これらはすべて、累乗の法則(\( a^m \times a^n = a^{m+n},(a^m)^n=a^{m \times n} \))を満たすように挙動しています。
ちなみに指数関数\( f(x)=a^x \)\( [a>1] \)は、グラフに書くと分かりますが、\(x\)を増やせば増やすほど\( f(x)が \)…
指数関数的に増加していきますね!(説明になってない)
5-2. 対数関数
そして…はい、出ました「対数」。対数は機械学習でもよく出てくるんですよね〜。この辺りでしっかり基礎から理解しておきたいところです。
まず本書の書いてあったのが、対数関数は「イメージが持ちにくい概念」ってこと。そうなんですよねー。指数関数は結構イメージするのがカンタンなんですが、対数関数って言われると「あー、なんかあのログとかいうやつや…」みたいな、謎の敬遠したい気持ちが生まれるんですよね。
ただ定義自体はひとことで言い表すことができて…
対数関数は、指数関数の逆関数である。
これだけなんですよねー。
指数関数\(y=a^x\)があったとして、この逆関数にあたる対数関数は…
\(y = \log_a x\)
と書きます。「\(a\)を\(y\)乗すると\(x\)になるよ」って意味ですね。この式の「\(a\)」は「底」と呼ばれるようです。…やっぱり直感的ではないですね。ちなみに、逆関数の性質から\(y = \log_a x\)のグラフは「\(y=a^x\)と直線\(y=x\)に関して対称」という性質があります。指数関数と反対で\(x\)が増加すればするほど\(y\)の伸びは鈍化していきます。グラフを書いてみたかったら、まず\(y=a^x\)のグラフを書いてみるといいかも。
いつか、仕事の会話の中で「その数値は対数関数的な増加にとどまりそうですね(ドヤァ)」とか言ってみたい(友達減るやつ)。
さて、対数関数の性質は、指数関数の性質のそのまま裏返しなのですが、色々と式遊びをするとこんな式たちが出せます。
\(\log_a{1}=0\)
\(\log_a{a}=1\)
\( \log_a{(X \times Y)}=log_a{X}+log_a{Y} \)
\( \log_a{(\frac{Y}{X})}=\log_a{Y}- \log_a{X} \)
\( \log_a{X^y}=y\log_a{X} \)
ここで、式の導出過程で出てくる考え方に「両辺に対して対数をとる」というものがあります。確かに機械学習の勉強しててもよく出てくるんですよねー「対数をとる」って表現。
「両辺に同じ数を足す」とか「両辺を同じ数で割る」ってやつは方程式が崩れない変形だと直感的に分かるんですが、コレと同じような気軽なノリで「両辺の対数をとる」ってことができるってことになりますね。確かに、両辺を同じ法則で変換しているだけなので方程式が崩れないってのは分かるっちゃ分かりますが…。先に進むためには、しっかりと頭に馴染ませておきたい考え方ですね。
さて、この節の最後に出てくる公式が「底の変換公式」です。こちら。
$$ \log_a{X}= \frac{\log_b{X}}{\log_b{a}} $$
見た瞬間「ほーん。」くらいにしか思わなかったんですが、本書にあった「この式の意味」を聞いて電撃に打たれました。
対数関数を考えるとき、底の値をいくつにするかは本質的な違いではない
なるほど!
上の式で\( \log_b{a} \)はただの定数なので、対数関数の底を\(a\)→\(b\)に変換しようと思ったら、単に定数倍すればいいだけの話だよ、ってことですね。
たぶん、この後どこかで出てくると思いますが、底をネイピア数に固定した「自然対数」や、底を10に固定した「常用対数」がよく使われるのは、そういう理由だったのか…。ぶっちゃけ、底は何でもいいってことになりますから、数学的に扱いやすい底を採用した方がいいってことになりますもんね!
さて、この節は基本的にここで終わりなんですが、その後にあったコラムにも大切なことが書いてありました。
もともとこの「対数関数」、電卓が無かった時代に「簡単にかけ算をしたい」というニーズから編み出された技だったみたいです。しかし、電卓の発明とともにこの技が廃れていった…なんてことはなく、使われ続けています。
それは、この関数の特性として「大きな値も小さな値も対等に扱える特殊フィルターとしての役割を果たせる」というものがあるからです。上の方でドヤったように、対数を取ると、大きな値ほど鈍化した数値が出てくるので、全体的にまろやかになるというかなんというか…(深刻な語彙力不足)。
ということで
本節の勉強によって、だいぶ対数が身近に感じられるようになりました。今後はもっと手当り次第に「対数をとって」いきたいところです。さて、どうやらこの先の節では微分が出てくるみたいですね。また徐々に難しくなっていく感じですかねー。
次回『対数関数、微分しちゃいました。』ぜってえ見てくれよな!
ではまた。