この記事は、
機械学習に必要な高校数学やり直しアドベントカレンダー Advent Calendar 2016 8日目の記事です。
誰
軽く筆者のバックグラウンドを説明します。
- 普段はGolang Webアプリケーションエンジニア。
- 機械学習周辺は線形回帰の超高次元版として用いられることが多いな、程度の理解。
- ML・DLなどスクラッチ実装や、TensorFlow, Chainer などのフレームワーク使用しての実践的な実装経験はほぼ無し。
- 物理の修士課程を修了できる程度には数学わかる。
- ただし物理屋さんの中では結構出来ない方。
ねらい
指数や対数についてどんなものであるか概念を知っておくと、Qiita やはてなブログを読む層の方々の仕事にとって損はないと思いますので、拙いながら説明させて頂きます。
とはいえ高校の教科書通りにやるとすごいボリュームになるので、所々省略します。
そんな感じなので、想定レベルは、高校の時に指数・対数・三角関数という単語を聞いた記憶はあるが、ほとんど忘れた……というレベルの方からです。
一応理解しておくと機械学習以外にも仕事の統計処理などでも役に立つのかもな、と思って頂けたら幸いです。
指数
こういった数字の表記はどこかで見たことがあるかと思います。
10^{3} \\
2^{16} \\
2.7 × 10^{10} \\
10^{-4} \\
この様な表記を、 指数表記といいます。
数字の右上に小さく乗っている数字を、指数といいます。
例えば一番上の数は、
10^{3} = 10 × 10 × 10
と同じ値であり、10を3回掛けた値、ということです。
指数が負の値の時、つまりマイナス回掛けるということは、その回数分割った値と定義します。
つまり、
10^{-4} = \frac{1}{10^{4}} = \frac{1}{10000}
となります。
指数関数
指数関数とは、前述の指数の部分が従属変数となった関数です。
以下の式で表されます。
y = a^{x}
ここで、 a は定数として、変化しないものと考えます。
以下で、a = 1.1 の時のグラフを見ることが出来ます。
https://www.wolframalpha.com/input/?i=1.1%5Ex
指数関数の特徴ですが、このaの値について1を境として、 xの増減に応じて激しく値が変化する点です。
いわゆる複利の計算はまさにこれで、利率が低くても長期間経つと激しく増えている、というものです。
対数
指数と比べると、対数は記憶がある人が少ないのではないでしょうか。
余談ですが、複素数や三角関数と並んで高校の数学のつまづきポイントだと思うので、この辺でやる気を無くしてしまった方も多いかと……
対数は端的に言うと、指数の反対の概念です。
もう少し専門的にいうと対数関数は指数関数の逆関数である、といいます。
端的に言いすぎてなんのことやらとなってしまいましたので、もう少し説明していきます。
対数の具体例を以下に挙げます。
\log_{10}{3} \\
\log_{2}{10} \\
3\log_{10}{2} \\
いきなり見覚えの無い記号が出てきました。
log というのは logarithm の略で、この記号(文字列)が対数の本体のようなものです。
log の右下の小さい数字は、底(てい)といいます。
その右側の数字は、真数といいます。
一番上の値は、 "10を底とする3の対数"といいますが、俗に"ろぐ10ていの3"などのように読まれたりします。読み方は様々です。
対数の定義は、対数関数の説明と合わせて次節にて。
対数関数
対数関数は以下の式で表されます。
y = \log_{a}{x}
この形が対数の定義のようなもので、
aをy乗したらxとなるときのyの値
として定義します。
先程の例、
\log_{2}{10}
を用いて具体的に考えます。
2を何乗かしたら10になるが、これは指数関数
y = 2^{x}
について、y = 10 のとき、x がいくつになるかを求めることと同じです。
x = 3 で y = 8, x = 4 で y = 16 なので、整数でないことはわかります。
この3から4の間の値が具体的にいくつであるかは、xの値を代入していけばわかりますが、具体的な数値での計算を行わずに表現できる必要もあります。
ここで対数関数の出番となります。このケースを問題として解くと以下の様になります。
y = 2^{x} \\
y = 10 のとき \\
⇒ 10 = 2^{x} \\
両辺の底を2とする対数をとると、 \\
\log_{2}{10} = \log_{2}{2^{x}} \\
∴ x = \log_{2}{10}
対数はある値になる指数を式として表すための道具の側面があるので、このように指数よりも抽象的で、具体的な数値に触れることと行き来しないと理解しにくい側面があります。
上記の様な例について、他の指数について考えていると、徐々に概念がしみわたってくると思います。
正直、 両辺の底を2とする対数をとると
ってなんだよ、ってなりますよね。
何が便利なのか
複利計算がしっかりと理解できる
最初に少し触れましたが、お金や投資の利率はまさに指数関数です。
例えば、年に10%の利息で確実にお金が増える金融商品があって(実際はハイリスクそう)、それを100万円買い、利息をそのまま追加購入(預金でいうと引き出さずにそのまま増やす)すると、以下の様にx年後にy円になっています。
y = 1000000 × 1.1^{x}
30年後にいくらになっているかというと、
1000000 × 1.1^{30} \\
= 1000000 × 17.4494022689 \\
= 17449402
100万円が約1745万円と、17倍以上になります。すごい儲かったケースですね。
住宅ローンを組んで家を買う方もいらっしゃると思いますが、お金を借りるときはまさにこの正負の符号が逆のケースで、結構な額になるので気をつけましょう、ということです。
指数関数を理解していないのにおいしいお金の話を持ってくる方はあまり信用してはいけないという教訓が得られます。
数字の見方の観点が増える
対数は、しばしば底が10のものが常用対数と呼ばれ、よく用いられます。
数字の桁数がどのくらいであるかを求めるのに非常に便利です。このため、昔から天文学などの学問でよく使われていました。
あるいは、数値の素性によっては、そのままの数値よりも、対数を取った方がわかりやすいものがあります。
例えば、世界の国毎の人口などを比較するときに、数百万人程度の国と数億人以上の国を比較すると、差が大きすぎて小さい方の国の値が丸められたようになってしまい、結果としてただ並べただけではよくわからなくなってしまいます。
ここで、常用対数をとった値で比較を試みると、数億の人口は8から9の値、数百万の人口は6から7の値となり、桁数が何桁違うかを小数点単位でみることが出来るようになったといえます。
我々の業界の仕事でいうと、ECの売上の分布や、自社サービスの新規獲得ユーザの流入経路なども冪乗則に従っている可能性があるので、対数の概念を分かった上で物事をみたり分析したりすると、違った知見が得られるかもしれません。
いわゆるパレートの法則も冪乗則の一つです。
単純に、統計処理を行うときにも、指数や対数を内部で駆使したものを使用していることがあるはずですので、日々の改善にも役に立つでしょう。
また、人間の知覚は、フェヒナーの法則と呼ばれる現象論的な法則が当てはまる部分があり、受けた刺激に対して、その量に比例した感覚を得るのではなく、その量の対数に比例した感覚を得ている可能性があります。
あくまで定義上の話ですが、星の明るさの等級も、対数スケールで考えられています。実際の明るさの上昇に対して、人間が明るいと感じる度合いが対数的な上昇をすると考えられるからです。
音の大きさのデシベルなども、音のエネルギーの対数スケールですので、これも聴覚が同様に働いていると考えられます。
特に専門外なので深入りは避けたいのですが、経済学における財に対して得られる効用の関係(お金を10倍出して得られる満足は倍程度)も、人間のそういった部分が関連しているのかもしれません(要出典)
まとめ
全然まとまってませんが、指数対数、特に対数は直接触れる機会が少ない概念ですが、少し理解しておくと、仕事や日常の数字の見方に幅が出たりしますので、是非学び直して頂ければなと思います。
機械学習関連のどこで使うかなどは無数に先人の記事がありますので、そちらを参考にしていただければと思います。たぶん対数って何レベルを理解していないと、いきなりつまずいてしまいます……
それではみなさま、数学と共に良き機械学習ライフを!