対数の公式まとめ 研修講師のための解説と教え方

こんにちは。ゆうせいです。

機械学習の研修をしていると、対数で手が止まる受講者が必ず出てきます。交差エントロピーの式を見た瞬間に、表情が変わるのです。

原因は、高校数学で対数を「公式を覚えて計算する道具」として習ったことにあります。何のためにあるのかを理解しないまま、変形規則だけを暗記した。だから、実務で出てきたときに意味が読み取れません。

この記事では、公式ごとに解説と練習問題を交互に配置しました。読んだ直後に手を動かせるようになっています。研修教材の下敷きとしてもお使いください。

結論

対数を教えるときの要点は、三つです。

要点内容
定義から入る対数は指数の言い換えである。ここを飛ばすと全部が暗記になる
一行で言い切る掛け算を足し算に変える道具。これが対数の存在理由
用途を先に見せるなぜ機械学習で対数が出るのかを最初に示す

特に二番目です。

対数の公式は数多くありますが、根っこは一つしかありません。真数の掛け算が、対数の足し算になる。この一点です。

商も累乗も底の変換も、すべてここから派生します。バラバラの公式として教えるから覚えられないのです。

以下、順に説明します。

コラム 記号の読み方を最初に決める

数学が苦手な受講者は、読めない記号でつまずきます。頭の中で音にできない記号は、記憶に残りません。

先に読み方を共有してください。

記号読み方意味
\log ログlogarithm(対数)の略
\log_a M ログ エー ベース エム底が a 、真数が M
\ln エルエヌ、または自然対数logarithmus naturalis の略
\log_a a 底(てい)base
M 真数(しんすう)argument
e イー、またはネイピア数約2.71828

底と真数という日本語も、初めて聞く人が多い言葉です。

底は土台のことです。何を何回掛けるか、その「何を」にあたります。

真数は、その結果できあがった数です。

1 対数とは何か

定義

a^p = M \iff \log_a M = p

記号 \iff は「同値」を表します。左と右は、まったく同じことを言い換えているという意味です。

言葉で言うと

\log_a M とは、「a を何乗すれば M になるか」という問いの答えです。

具体例で確認します。

2^3 = 8 ですから、次のようになります。

\log_2 8 = 3

「2を何乗すれば8になるか」の答えが3である、ということです。

逆算の記号だと考える

初学者に伝えるとき、次の説明が効きます。

足し算の逆算が引き算です。掛け算の逆算が割り算です。では、累乗の逆算は何でしょうか。

累乗には、逆算が二種類あります。

元の式底を知りたい指数を知りたい
x^3 = 8 累乗根 x = \sqrt[3]{8} = 2 該当しない
2^x = 8 該当しない対数 x = \log_2 8 = 3

指数のほうを知りたいときに使うのが、対数です。

新しい概念だと構えられると身構えられますが、逆算の一種だと言えば抵抗が減ります。

なぜ対数が生まれたのか

対数は17世紀初頭、ジョン・ネイピアによって考案されました。目的は、天文学の計算を楽にすることでした。

当時、天文学者は膨大な桁数の掛け算を手計算していました。何日もかかる作業です。

そこでネイピアは考えました。掛け算を足し算に変換できれば、劇的に楽になる。

\log(M \times N) = \log M + \log N

掛け算が足し算に変わりました。対数表を引いて、足して、また表を逆に引く。これだけで掛け算ができます。

これが計算尺の原理でもあります。対数は、コンピュータのない時代の計算高速化技術だったのです。

練習問題1 定義の確認

次の値を求めてください。電卓は使いません。

(1) \log_3 81 (2) \log_5 25 (3) \log_2 \frac{1}{8} (4) \log_9 3

解答を示します。

(1) 3を何乗すれば81になるかを考えます。

3^4 = 81 ですから、答えは4です。

(2) 5を何乗すれば25になるかを考えます。

5^2 = 25 ですから、答えは2です。

(3) 2を何乗すれば \frac{1}{8} になるかを考えます。

2^{-3} = \frac{1}{8} ですから、答えは -3 です。

(4) 9を何乗すれば3になるかを考えます。

9^{1/2} = 3 ですから、答えは \frac{1}{2} です。

補足します。(3)と(4)は、答えが整数でない場合の例です。マイナスや分数が出ても、真数が正であれば問題ありません。

練習問題2 定義の書き換え

次の指数の式を対数の式に、対数の式を指数の式に書き換えてください。

(1) 7^2 = 49 (2) 10^{-2} = 0.01 (3) \log_6 216 = 3 (4) \ln 1 = 0

解答を示します。

(1) \log_7 49 = 2

(2) \log_{10} 0.01 = -2

(3) 6^3 = 216

(4) e^0 = 1

補足します。この書き換えを繰り返す練習が、定義の定着に最も効きます。

対数が分からないという受講者の多くは、この往復ができていません。演習として、10問程度をテンポよく解かせてください。

2 前提条件

公式の前に、条件を確認します。ここを飛ばす講師が多いのですが、後で必ず問題になります。

底の条件

a > 0, \quad a \neq 1

なぜこの条件が必要なのでしょうか。

まず a > 0 です。

底が負だと困ります。たとえば a = -2 とすると、(-2)^{0.5} が実数として定義できません。指数が分数のとき、破綻します。

次に a \neq 1 です。

1 は何乗しても 1 です。

1^2 = 1, \quad 1^{100} = 1, \quad 1^{-3} = 1

したがって \log_1 8 は答えがありません。1を何乗しても8にならないためです。

そして \log_1 1 は答えが無数にあります。何乗でも1になるからです。

答えが存在しないか、一つに定まらない。どちらも困るので、底から1を除きます。

真数条件

M > 0

理由は単純です。a > 0 のとき、a^p は何乗しても正だからです。

2^3 = 8, \quad 2^{-3} = 0.125, \quad 2^0 = 1

どれも正です。負になることも、0になることもありません。

したがって \log_2 (-8) \log_2 0 は、実数の範囲では定義されません。

実務でも効いてくる

真数条件は、実装でも問題になります。

交差エントロピーの計算で \log 0 が発生し、マイナス無限大になってエラーになる。よくある不具合です。

対策として、微小な値を足す実装が使われます。

\log(p + \epsilon)

\epsilon (イプシロン)には 10^{-7} 程度の小さな値を使います。

練習問題3 条件の理解

次の記述のうち、誤っているものをすべて選び、理由を説明してください。

\log_1 5 は定義できる イ \log_2 (-4) は実数の範囲で定義できない ウ \log_3 0 は0である エ \log_{0.5} 4 は定義できる

解答 誤りはアとウ

解説します。

アが誤りです。底が1のとき、1を何乗しても1にしかならないため、5になる指数が存在しません。底の条件で a \neq 1 とされている理由です。

ウが誤りです。\log_3 0 は定義できません。3^p = 0 となる実数 p は存在しないためです。値が0になるのは真数が1のときであり、真数が0のときではありません。

イは正しい記述です。真数が負のため、実数の範囲では定義できません。

エも正しい記述です。底は正で1以外であればよく、1より小さくても構いません。実際に計算すると次のようになります。

(0.5)^{-2} = 4 ですから、\log_{0.5} 4 = -2 です。

練習問題4 真数条件の応用

\log_2 (x - 3) が定義できる x の範囲を求めてください。

解答を示します。

真数が正である必要があります。

x - 3 > 0

したがって、次の通りです。

x > 3

補足します。定義域を問う問題は、真数条件を意識させるのに有効です。

受講者は、対数の計算に集中するあまり、定義できるかどうかの確認を忘れがちです。計算の前にまず条件を確認する習慣をつけてください。

3 基本的な値

真数が1のとき

\log_a 1 = 0

どんな数も0乗すると1になります。

a^0 = 1

したがって「a を何乗すれば1になるか」の答えは0です。底が何であっても成り立ちます。

\log_2 1 = 0, \quad \log_{10} 1 = 0, \quad \ln 1 = 0

底と真数が等しいとき

\log_a a = 1

a^1 = a ですから、答えは1です。

一般化

\log_a a^k = k

これは非常によく使います。

\log_2 2^{10} = 10, \quad \log_{10} 10^{-3} = -3

覚えておく値

研修でよく使う値を、暗記事項として示しておくと便利です。

\log_2 1 0
\log_2 2 1
\log_2 4 2
\log_2 8 3
\log_2 16 4
\log_2 1024 10
\log_{10} 1000 3
\ln e 1

\log_2 1024 = 10 は、情報技術の現場で頻出します。1キロバイトが1024バイトである理由と直結しているためです。

練習問題5 基本値

次の値を求めてください。

(1) \log_7 1 (2) \log_{12} 12 (3) \log_3 3^5 (4) \log_2 2^{-4} (5) \ln e^3

解答を示します。

(1) 真数が1なので、0です。

(2) 底と真数が等しいので、1です。

(3) \log_a a^k = k より、5です。

(4) 同じ公式より、-4 です。

(5) 自然対数の底は e ですから、3です。

補足します。(4)で指数が負であることに戸惑う受講者がいます。

2^{-4} = \frac{1}{16} であり、これは正の数です。真数条件は満たしています。指数が負であることと、真数が負であることは別の話です。

4 演算公式

ここが本体です。三つありますが、実質は一つです。

公式1 積は和になる

\log_a (MN) = \log_a M + \log_a N

証明を示します。丸暗記させないために、講師は導出を示せるようにしておいてください。

\log_a M = p \log_a N = q とおきます。定義から、次が成り立ちます。

M = a^p, \quad N = a^q

掛けます。

MN = a^p \times a^q = a^{p+q}

指数法則を使いました。ここで対数の定義に戻ります。

\log_a (MN) = p + q = \log_a M + \log_a N

証明終わりです。

中身は、指数法則 a^p a^q = a^{p+q} を言い換えただけです。対数の公式は、指数法則の裏返しに過ぎません。

数値で確認します。

\log_2 8 = 3, \quad \log_2 32 = 5

8 \times 32 = 256 = 2^8

\log_2 256 = 8 = 3 + 5

一致しました。

公式2 商は差になる

\log_a \left( \frac{M}{N} \right) = \log_a M - \log_a N

同じ方法で導けます。

\frac{M}{N} = \frac{a^p}{a^q} = a^{p-q}

数値で確認します。

\frac{32}{8} = 4 = 2^2

\log_2 4 = 2 = 5 - 3

公式3 累乗は係数として前に出る

\log_a (M^k) = k \log_a M

導出します。

M^k = (a^p)^k = a^{pk}

したがって次の通りです。

\log_a (M^k) = pk = k \log_a M

数値で確認します。

8^2 = 64 = 2^6

\log_2 64 = 6 = 2 \times 3

三つの公式の関係

実は、公式1から他が導けます。

商の公式は、\frac{M}{N} = M \times N^{-1} と見て、公式1と公式3を組み合わせたものです。

累乗の公式は、M^3 = M \times M \times M と見れば、公式1を繰り返し使った結果です。

\log_a (M \times M \times M) = \log_a M + \log_a M + \log_a M = 3 \log_a M

三つ覚えるのではなく、一つの帰結として教えると定着します。

一言でまとめる

対数は、次の変換装置です。

真数の世界対数の世界
掛け算足し算
割り算引き算
累乗掛け算

一段階、演算が簡単になります。これが対数の存在理由です。

練習問題6 演算公式の基本

次を計算してください。

(1) \log_2 6 + \log_2 \frac{16}{3} (2) \log_{10} 500 - \log_{10} 5 (3) 3 \log_2 2 + \log_2 \frac{1}{4} (4) \log_3 \sqrt{27}

解答を示します。

(1) 和は積にまとめられます。

6 \times \frac{16}{3} = \frac{96}{3} = 32

\log_2 32 = 5

(2) 差は商にまとめられます。

\log_{10} \frac{500}{5} = \log_{10} 100 = 2

(3) 係数を処理してから計算します。

3 \log_2 2 = 3 \times 1 = 3

\log_2 \frac{1}{4} = -2

3 + (-2) = 1

(4) 平方根を指数に直します。

\sqrt{27} = 27^{1/2}

\log_3 27^{1/2} = \frac{1}{2} \log_3 27 = \frac{1}{2} \times 3 = \frac{3}{2}

補足します。(4)のように、根号は指数に直してから公式を使います。

\sqrt[k]{M} = M^{1/k} という書き換えを、あらかじめ確認しておいてください。ここでつまずく受講者が一定数います。

練習問題7 誤りの発見

ある受講者が、次のように計算しました。誤りを指摘し、正しい値を求めてください。

\log_2 (4 + 12) = \log_2 4 + \log_2 12

解答を示します。

誤りは、真数の和を対数の和に変換した点です。

公式が使えるのは、真数が積のときだけです。真数が和の場合、この変形はできません。

正しい計算を示します。

\log_2 (4 + 12) = \log_2 16 = 4

補足します。誤った変形の値も計算して比べると、違いが明確になります。

\log_2 4 = 2

\log_2 12 = \log_2 (4 \times 3) = 2 + \log_2 3 \approx 2 + 1.585 = 3.585

2 + 3.585 = 5.585

正しい値の4とは一致しません。

この誤りは、研修で最も頻発します。反例を数値で見せるのが、最も効果的な矯正方法です。

練習問題8 式の整理

\log_{10} 2 = 0.3010 \log_{10} 3 = 0.4771 とするとき、次の値を求めてください。

(1) \log_{10} 6 (2) \log_{10} 5 (3) \log_{10} 12 (4) \log_{10} 1.5

解答を示します。

(1) 6 = 2 \times 3 と分解します。

\log_{10} 6 = \log_{10} 2 + \log_{10} 3 = 0.3010 + 0.4771 = 0.7781

(2) 5 = \frac{10}{2} と分解します。

\log_{10} 5 = \log_{10} 10 - \log_{10} 2 = 1 - 0.3010 = 0.6990

(3) 12 = 2^2 \times 3 と分解します。

\log_{10} 12 = 2 \log_{10} 2 + \log_{10} 3 = 0.6020 + 0.4771 = 1.0791

(4) 1.5 = \frac{3}{2} と分解します。

\log_{10} 1.5 = \log_{10} 3 - \log_{10} 2 = 0.4771 - 0.3010 = 0.1761

補足します。この形式の問題は、対数表を使っていた時代の実務そのものです。

素因数分解して、既知の値の組み合わせに直す。この手順を体験すると、対数がなぜ計算道具だったのかが実感できます。

5 底の変換公式

公式

\log_a b = \frac{\log_c b}{\log_c a}

ただし c > 0, , c \neq 1 です。

導出

\log_a b = p とおきます。定義から次が成り立ちます。

a^p = b

両辺の c を底とする対数を取ります。

\log_c (a^p) = \log_c b

左辺に累乗の公式を使います。

p \log_c a = \log_c b

\log_c a \neq 0 ですから、割ることができます。

p = \frac{\log_c b}{\log_c a}

なぜ必要なのか

電卓や関数ライブラリには、たいてい常用対数と自然対数しかありません。

\log_2 3 を求めたいとき、直接計算できないことがあります。そこで変換します。

\log_2 3 = \frac{\log_{10} 3}{\log_{10} 2} = \frac{0.4771}{0.3010} \approx 1.585

確かめます。2^{1.585} \approx 3 です。

覚え方

分母と分子のどちらに何が来るか、混乱しやすい部分です。

元の式 \log_a b は「分数のような並び」だと考えます。上が真数、下が底です。

\frac{b}{a} という並びが、変換後もそのまま保たれます。

\log_a b = \frac{\log_c b}{\log_c a}

真数が上、底が下。これで間違えません。

派生1 底と真数を入れ替えると逆数

\log_a b = \frac{1}{\log_b a}

導出は簡単です。変換公式で c = b とします。

\log_a b = \frac{\log_b b}{\log_b a} = \frac{1}{\log_b a}

分子が \log_b b = 1 になるためです。

数値で確認します。

\log_2 8 = 3, \quad \log_8 2 = \frac{1}{3}

確かめます。8^{1/3} = 2 です。

派生2 底の指数は分母に出る

\log_{a^k} b = \frac{1}{k} \log_a b

導出します。

\log_{a^k} b = \frac{\log_a b}{\log_a a^k} = \frac{\log_a b}{k}

数値で確認します。

\log_4 8 = \frac{1}{2} \log_2 8 = \frac{3}{2} = 1.5

確かめます。4^{1.5} = 4 \times \sqrt{4} = 4 \times 2 = 8 です。

対比して覚える

真数の指数と底の指数で、扱いが逆になります。

位置公式動き
真数の指数\log_a (b^k) = k \log_a b そのまま前に出る
底の指数\log_{a^k} b = \frac{1}{k} \log_a b 逆数になって前に出る

底は分母にあると考えれば、逆数になるのは自然です。この対比は、必ず表で示してください。混同が最も多い箇所です。

練習問題9 底の変換

次を計算してください。必要に応じて \log_{10} 2 = 0.3010 \log_{10} 3 = 0.4771 を使ってください。

(1) \log_9 27 (2) \log_4 2 (3) \log_3 2 の近似値 (4) \log_8 32

解答を示します。

(1) 底を3に揃えます。

\log_9 27 = \frac{\log_3 27}{\log_3 9} = \frac{3}{2} = 1.5

検算します。9^{1.5} = 9 \times 3 = 27 です。

(2) 底と真数を入れ替える公式を使います。

\log_4 2 = \frac{1}{\log_2 4} = \frac{1}{2}

検算します。4^{0.5} = 2 です。

(3) 底を10に変換します。

\log_3 2 = \frac{\log_{10} 2}{\log_{10} 3} = \frac{0.3010}{0.4771} \approx 0.6309

(4) 底を2に揃えます。

\log_8 32 = \frac{\log_2 32}{\log_2 8} = \frac{5}{3} \approx 1.667

検算します。8^{5/3} = (2^3)^{5/3} = 2^5 = 32 です。

補足します。(1)と(4)は、底と真数を同じ数の累乗で表せる場合です。

底を揃えるという発想が身に付くと、この種の問題は暗算できるようになります。

練習問題10 底の指数と真数の指数

次の二つを計算し、結果が異なる理由を説明してください。

(1) \log_2 (16^2) (2) \log_{2^2} 16

解答を示します。

(1) 真数の指数は、そのまま前に出ます。

\log_2 (16^2) = 2 \log_2 16 = 2 \times 4 = 8

検算します。16^2 = 256 = 2^8 です。

(2) 底の指数は、逆数になって前に出ます。

\log_{2^2} 16 = \frac{1}{2} \log_2 16 = \frac{1}{2} \times 4 = 2

検算します。4^2 = 16 です。

理由を説明します。

対数の値は、底を何乗すれば真数になるかを表します。

底が大きくなれば、必要な指数は小さくなります。したがって、底に指数が付くと値は小さくなります。

真数が大きくなれば、必要な指数は大きくなります。したがって、真数に指数が付くと値は大きくなります。

補足します。底は分母、真数は分子にあると考えると、動きの向きが逆になることが納得できます。

練習問題11 逆数の関係

\log_5 3 = 0.6826 とするとき、\log_3 5 の値を求めてください。

解答を示します。

底と真数を入れ替えると逆数になります。

\log_3 5 = \frac{1}{\log_5 3} = \frac{1}{0.6826} \approx 1.465

補足します。検算の考え方も示しておきます。

\log_5 3 は「5を何乗すれば3になるか」です。3は5より小さいので、答えは1未満になるはずです。実際に0.68です。

\log_3 5 は「3を何乗すれば5になるか」です。5は3より大きいので、答えは1より大きくなるはずです。実際に1.47です。

このように、値の大小をあらかじめ予想する習慣をつけると、計算ミスに気づけます。

6 指数と対数の打ち消し合い

公式

a^{\log_a M} = M

\log_a (a^x) = x

自然対数の場合は、次のようになります。

e^{\ln x} = x, \quad \ln (e^x) = x

意味

指数関数と対数関数は、互いに逆関数です。

逆関数とは、操作を打ち消し合う関係のことです。

3を足してから3を引けば元に戻ります。5を掛けてから5で割れば元に戻ります。同じように、指数を取ってから対数を取れば元に戻ります。

直感的な説明

a^{\log_a M} = M を、言葉で読んでみます。

\log_a M は「a を何乗すれば M になるか」でした。

その答えを、実際に a の指数に入れています。当然、M になります。

同語反復のような式です。しかし、実務では非常によく使います。

実務での使いどころ

対数を取って計算し、最後に元のスケールに戻す。この流れが頻出します。

場面使い方
尤度計算対数尤度で計算し、必要なら指数で戻す
パープレキシティ交差エントロピーを指数で戻す
対数変換した回帰予測値を指数で元のスケールに戻す
Softmax指数を取ってから正規化する

パープレキシティの例を示します。言語モデルの評価指標です。

\text{PPL} = e^{H}

H は交差エントロピーです。対数の世界で計算した値を、指数で元の世界に戻しています。

意味としては「実質的に何択で迷っているか」を表します。交差エントロピーが \ln 4 なら、パープレキシティは4です。4択で迷っている状態に相当します。

練習問題12 打ち消し合い

次を計算してください。

(1) 5^{\log_5 12} (2) \ln (e^7) (3) e^{2 \ln 3} (4) 10^{\log_{10} 4 + \log_{10} 25}

解答を示します。

(1) 指数と対数が打ち消し合います。

5^{\log_5 12} = 12

(2) 同様です。

\ln (e^7) = 7

(3) まず指数部分を整理します。

2 \ln 3 = \ln 3^2 = \ln 9

したがって次のようになります。

e^{\ln 9} = 9

(4) 指数部分をまとめます。

\log_{10} 4 + \log_{10} 25 = \log_{10} (4 \times 25) = \log_{10} 100 = 2

したがって次の通りです。

10^2 = 100

補足します。(3)は e^{2 \ln 3} = (e^{\ln 3})^2 = 3^2 = 9 と計算することもできます。どちらでも構いません。

(4)は、指数の中で対数の公式を使う複合問題です。実装のコードでも、この形の式が現れます。

練習問題13 パープレキシティ

ある言語モデルの交差エントロピーが \ln 8 でした。パープレキシティを求め、その意味を説明してください。

解答を示します。

\text{PPL} = e^{\ln 8} = 8

打ち消し合いにより、8になります。

意味を説明します。

このモデルは、次に来る単語を予測する際、実質的に8択で迷っている状態にあると解釈できます。

補足します。パープレキシティは小さいほど良い指標です。1に近ければ、ほぼ確実に正解を当てていることになります。

交差エントロピーは対数の世界の値なので、直感的に大きさが把握しにくい欠点があります。指数を取って元のスケールに戻すことで、「何択相当か」という分かりやすい解釈が得られます。

7 位置の交換

公式

a^{\log_c b} = b^{\log_c a}

底と真数の位置を交換しても、値が変わりません。

導出

両辺の c を底とする対数を取ります。

左辺です。

\log_c \left( a^{\log_c b} \right) = \log_c b \times \log_c a

右辺です。

\log_c \left( b^{\log_c a} \right) = \log_c a \times \log_c b

掛け算の順序が違うだけで、同じ値です。

対数を取った結果が等しく、対数関数は単調増加ですから、元の値も等しくなります。

どこで使うか

やや専門的です。計算量の議論で、指数の肩に対数が乗った式を整理するときに使います。

初学者向け研修では省略しても構いません。中級者向けの補足として位置づけてください。

練習問題14 位置の交換

2^{\log_{10} 100} 100^{\log_{10} 2} をそれぞれ計算し、一致することを確認してください。\log_{10} 2 = 0.3010 を使ってください。

解答を示します。

左辺を計算します。

\log_{10} 100 = 2

2^2 = 4

右辺を計算します。

100^{0.3010}

100 = 10^2 ですから、次のようになります。

(10^2)^{0.3010} = 10^{0.6020}

ここで \log_{10} 4 = 2 \log_{10} 2 = 0.6020 ですから、次の通りです。

10^{0.6020} = 4

一致しました。

補足します。左辺のほうが圧倒的に計算が楽です。

位置の交換公式の実用的な意味は、計算しやすいほうを選べるという点にあります。式変形の選択肢が一つ増えると考えてください。

8 機械学習で対数が使われる理由

研修講師として最も重要なのは、この章です。

「なぜ対数を学ぶのか」に答えられないと、受講者の集中は続きません。

理由1 掛け算を足し算にする

確率の計算では、独立な事象の確率を掛け合わせます。

P = p_1 \times p_2 \times \cdots \times p_n

データが1000件あれば、1000個の掛け算です。

ここで問題が起きます。確率は1以下ですから、掛け続けると急速に0に近づきます。

具体例を示します。各確率が0.001で、1000件のデータがあるとします。

0.001^{1000} = 10^{-3000}

倍精度浮動小数点数が表せる最小値は、おおむね 10^{-308} 程度です。10^{-3000} は表現できず、0になってしまいます。

これをアンダーフローといいます。

対数を取れば解決します。

\log P = \log p_1 + \log p_2 + \cdots + \log p_n

計算します。

1000 \times \log_{10} 0.001 = 1000 \times (-3) = -3000

-3000 という数は、問題なく表現できます。

これが、対数尤度を使う最大の理由です。理論的な理由より先に、実装上の必然性があります。

理由2 微分が簡単になる

積の微分は面倒です。項が増えるほど式が複雑になります。

和の微分は簡単です。項ごとに微分して足せばよいだけです。

\frac{d}{dx}(f + g) = f' + g'

最尤推定では、尤度を最大化するために微分します。積のままでは扱いにくいので、対数を取って和に変えます。

対数関数は単調増加ですから、対数尤度が最大になる点と、尤度が最大になる点は一致します。変換しても答えが変わらない点が重要です。

理由3 情報量の定義そのもの

情報理論では、事象の情報量を次のように定義します。

I(x) = -\log P(x)

なぜ対数なのでしょうか。

情報量に求めたい性質は二つあります。

一つ目は、珍しい事象ほど情報量が大きいことです。「明日太陽が昇る」より「明日雪が降る」のほうが情報量が大きい。確率が小さいほど大きくなる関数が必要です。

二つ目は、独立な事象の情報量が足し算になることです。

I(x, y) = I(x) + I(y)

確率は掛け算になります。

P(x, y) = P(x) P(y)

掛け算を足し算に変える関数。これが対数です。

つまり、情報量の定義に対数が現れるのは、必然です。

理由4 交差エントロピーの中身

分類問題の損失関数として使われる式です。

L = -\sum_{i} t_i \log p_i

正解ラベル t_i は、正解のクラスだけが1で、他は0です。したがって実質的には、次の一項だけが残ります。

L = -\log p_{\text{correct}}

正解クラスに割り当てた確率の、対数を取って符号を反転したものです。

数値で見てみます。

正解クラスの予測確率損失 -\ln p
1.00
0.9約0.105
0.5約0.693
0.1約2.303
0.01約4.605

自信を持って正解した場合は損失がほぼ0、自信を持って間違えた場合は損失が急激に大きくなります。

対数の性質が、そのまま「自信を持った間違いを強く罰する」という設計になっています。

理由5 単位の話

情報量の単位は、対数の底で決まります。

単位使われる場面
2ビット(bit)情報理論、符号化
e ナット(nat)機械学習の実装
10ディット、ハートレーまれ

なぜ機械学習では自然対数を使うのでしょうか。微分が簡単だからです。

\frac{d}{dx} \ln x = \frac{1}{x}

底が2の場合は、余計な係数が付きます。

\frac{d}{dx} \log_2 x = \frac{1}{x \ln 2}

単位を変換したいときは、底の変換公式を使います。

\log_2 x = \frac{\ln x}{\ln 2}

係数を計算しておきます。

\frac{1}{\ln 2} = \frac{1}{0.6931} \approx 1.4427

したがって、1ナットは約1.4427ビットです。

理由6 計算量の表記

対数は、アルゴリズムの計算量にも現れます。

O(\log n)

二分探索が代表例です。データを半分ずつ絞り込むため、必要な回数は次のようになります。

\log_2 n

データが100万件でも、次の程度です。

\log_2 1000000 \approx 20

半分にする操作を何回繰り返せば1になるか。これが \log_2 の意味です。

IT研修の受講者には、この説明が最も直感的に伝わります。

練習問題15 アンダーフロー

各データの確率が0.01であるとき、200件分の同時確率を求め、倍精度浮動小数点数で表現できるかどうか判断してください。また、対数を取った場合の値も求めてください。

解答を示します。

同時確率を計算します。

0.01^{200} = (10^{-2})^{200} = 10^{-400}

倍精度浮動小数点数が表せる正の最小値は、おおむね 10^{-308} 程度です。10^{-400} はこれより小さいため、0として扱われます。

対数を取った場合を計算します。

\log_{10} (10^{-400}) = -400

-400 は、問題なく表現できる値です。

補足します。0になってしまうと、その後の比較も微分も意味を失います。

対数尤度を使う理由が、理論ではなく計算機の制約にあることを示す好例です。実装を経験している受講者には、この説明が最も響きます。

練習問題16 交差エントロピー

正解クラスに対する予測確率が0.2だったとき、自然対数を用いた交差エントロピー損失を求めてください。また、予測確率が0.8だった場合と比較し、何が言えるか説明してください。

\ln 2 = 0.6931 \ln 5 = 1.6094 を使ってください。

解答を示します。

予測確率0.2の場合を計算します。

L = -\ln 0.2 = -\ln \frac{1}{5} = \ln 5 \approx 1.6094

予測確率0.8の場合を計算します。

L = -\ln 0.8 = -\ln \frac{4}{5} = \ln 5 - \ln 4

\ln 4 = 2 \ln 2 = 2 \times 0.6931 = 1.3862

L \approx 1.6094 - 1.3862 = 0.2232

比較して説明します。

確率が4倍になったにもかかわらず、損失は約7分の1に減りました。

対数関数は、真数が小さい領域で急激に変化します。そのため、予測が外れているときほど損失が大きくなり、学習の際に強く修正されます。

補足します。予測確率が0.01ならどうなるか計算してみてください。

-\ln 0.01 = \ln 100 = 2 \ln 10 \approx 4.605

自信を持って間違えるほど、損失が跳ね上がります。これが交差エントロピーの設計思想です。

練習問題17 情報量の単位

情報量が3ナットであるとき、ビットに換算してください。\ln 2 = 0.6931 を使ってください。

解答を示します。

底の変換公式を使います。

\log_2 x = \frac{\ln x}{\ln 2}

したがって、ナットからビットへの換算係数は次の通りです。

\frac{1}{\ln 2} = \frac{1}{0.6931} \approx 1.4427

計算します。

3 \times 1.4427 \approx 4.328

約4.33ビットです。

補足します。逆にビットからナットへ換算するには、\ln 2 \approx 0.6931 を掛けます。

底が違っても、定数倍の関係にあるだけです。論文の数値を比較するとき、底が明記されていない場合は要注意です。

練習問題18 計算量

100万件のソート済みデータから、二分探索で目的の値を見つけるまでに必要な比較回数の目安を求めてください。\log_{10} 2 = 0.3010 を使ってください。

解答を示します。

二分探索では、探索範囲が毎回半分になります。したがって、必要な回数の目安は次の通りです。

\log_2 1000000 = \frac{\log_{10} 1000000}{\log_{10} 2} = \frac{6}{0.3010} \approx 19.9

約20回です。

補足します。データが2倍の200万件になったら、何回増えるでしょうか。

\log_2 2000000 = \log_2 (2 \times 1000000) = 1 + \log_2 1000000 \approx 20.9

わずか1回増えるだけです。

真数の掛け算が対数の足し算になるという性質が、そのまま「データが倍になっても手間は1回分しか増えない」という結論を導いています。

演算公式の意味を、実務の言葉で説明できる好例です。

公式一覧

教材の参照用にまとめます。

前提条件

条件内容
a > 0, , a \neq 1
真数M > 0, , N > 0
定義a^p = M \iff \log_a M = p

基本値

\log_a 1 0
\log_a a 1
\log_a a^k k

演算

変換
\log_a (MN) \log_a M + \log_a N
\log_a \frac{M}{N} \log_a M - \log_a N
\log_a (M^k) k \log_a M
\log_a \frac{1}{M} -\log_a M
\log_a \sqrt[k]{M} \frac{1}{k} \log_a M

底の変換

変換
\log_a b \frac{\log_c b}{\log_c a}
\log_a b \frac{1}{\log_b a}
\log_{a^k} b \frac{1}{k} \log_a b

打ち消しと交換

a^{\log_a M} M
\log_a (a^x) x
e^{\ln x} x
\ln (e^x) x
a^{\log_c b} b^{\log_c a}

教える順序と時間配分

90分で構成する場合

時間内容形式
5分なぜ対数を学ぶのか。交差エントロピーの式を見せる講義
10分定義。指数の言い換えであること講義
5分練習問題1と2個人
10分底の条件と真数条件。理由も含めて講義
5分練習問題3と4個人
15分演算公式。証明と数値確認講義
10分練習問題6から8個人
10分底の変換公式講義
10分練習問題9から11個人
10分機械学習での使われ方講義

順序の考え方

三つ、意識してください。

一つ目は、用途を最初に見せることです。交差エントロピーの式を最初に提示し、「この記号の意味が分かるようになります」と宣言します。ゴールが見えると集中が続きます。

二つ目は、定義を丁寧に扱うことです。ここが崩れると、後がすべて暗記になります。

三つ目は、解説の直後に必ず演習を入れることです。この記事の構成がそのまま研修の流れになります。15分以上、講義を続けないでください。

補足の位置づけ

位置の交換公式は、初学者向けでは省略して構いません。

必要になる場面が限られており、覚える負荷に対して見返りが小さいためです。中級者向けの補足として扱ってください。

つまずきやすい点

つまずき1 定義の向きが分からなくなる

\log_2 8 を見て、「2と8のどちらが答えに関係するのか」で混乱します。

対策として、毎回言葉で読ませます。

「2を何乗すれば8になるか」

この読み方を口に出す習慣をつけると、混乱が減ります。

つまずき2 底の指数と真数の指数を混同する

最も多いつまずきです。練習問題10で扱った内容にあたります。

対策として、必ず表で対比させてください。そして、数値で検算させます。

\log_8 8 = 1 ですから、\log_{2^3} 8 = 1 になるのは自明です。この確認をさせると腑に落ちます。

つまずき3 和と積を取り違える

\log(M + N) \log M + \log N と変形してしまう誤りです。練習問題7で扱いました。

反例を数値で示すのが、最も効果的です。理屈で説明するより、計算が合わないことを見せてください。

つまずき4 マイナスが出て不安になる

\log_2 0.5 = -1

対数がマイナスになると、間違えたと思う受講者がいます。

真数が1より小さければ、対数は負になります。真数が正でありさえすれば、対数の値は負でも構いません。

真数条件と、対数の値の符号は別の話です。この区別を明示してください。

つまずき5 記号の省略に戸惑う

文献によって、底の省略の仕方が違います。

表記分野による意味
\log x 数学では自然対数、工学では常用対数、情報理論では底2のことが多い
\ln x 自然対数
\lg x 底2、または常用対数(文献による)

研修では「この資料では \log は自然対数とします」と最初に宣言してください。曖昧なまま進めると、後で混乱します。

想定される質問と回答

質問1 なぜ底に e を使うのか

回答します。

微分したときに形が最も簡単になるためです。

\frac{d}{dx} \ln x = \frac{1}{x}

他の底では、余計な係数 \frac{1}{\ln a} が付きます。a = e のとき \ln e = 1 となり、係数が消えます。

微分を大量に行う機械学習では、この差が効いてきます。

質問2 底が2と e で結果は変わらないのか

回答します。

値は変わりますが、定数倍の違いだけです。

\log_2 x = \frac{\ln x}{\ln 2} \approx 1.4427 \ln x

損失関数の最小化においては、定数倍しても最小になる点は変わりません。したがって、学習の結果は実質的に同じになります。

ただし、損失の値そのものは変わります。論文の数値を比較するときは、底を確認してください。

質問3 対数を取ると情報が失われないのか

回答します。

失われません。

対数関数は単調増加の一対一対応です。M が決まれば \log M が一つ決まり、逆も成り立ちます。

したがって、指数を取れば完全に元に戻せます。

e^{\ln x} = x

情報を保ったまま、扱いやすい形に変換しているだけです。

質問4 実装で \log 0 が出たらどうするか

回答します。

数学的にはマイナス無限大であり、定義されません。実装では、次の対策が使われます。

一つ目は、微小値を加える方法です。

\log(p + \epsilon)

二つ目は、値を範囲内に制限する方法です。確率を [\epsilon, 1-\epsilon] に丸めます。

三つ目は、数値的に安定した専用関数を使う方法です。ライブラリには、対数と組み合わせた安定な実装が用意されていることが多くあります。

質問5 なぜ真数が負だと定義できないのか

回答します。

底が正のとき、何乗しても結果は正になるためです。

2^p は、p がどんな実数でも正です。したがって、2^p = -8 となる実数 p は存在しません。

なお、複素数の範囲では定義できます。ただし値が一意に定まらず、扱いが複雑になります。実務では実数の範囲で考えてください。

質問6 対数表や計算尺は今も使うのか

回答します。

実務では使いません。しかし、対数を学ぶ動機を理解するには有効な題材です。

計算尺は、対数の目盛りが刻まれた定規です。二本の定規をずらして重ねると、長さの足し算ができます。対数目盛りでの足し算は、真数での掛け算にあたります。

練習問題8で行った素因数分解の作業が、まさに当時の実務でした。

総合演習

最後に、複数の公式を組み合わせる問題です。

総合問題1

次を計算してください。

\log_2 3 \times \log_3 4 \times \log_4 8

解答を示します。

底を2に揃えます。

\log_3 4 = \frac{\log_2 4}{\log_2 3} = \frac{2}{\log_2 3}

\log_4 8 = \frac{\log_2 8}{\log_2 4} = \frac{3}{2}

掛け合わせます。

\log_2 3 \times \frac{2}{\log_2 3} \times \frac{3}{2}

\log_2 3 が約分され、2も約分されます。

3

補足します。この形の連鎖は、次の関係を使うと見通しがよくなります。

\log_a b \times \log_b c = \log_a c

これを使えば、次のように一気に計算できます。

\log_2 3 \times \log_3 4 = \log_2 4 = 2

2 \times \log_4 8 = 2 \times \frac{3}{2} = 3

総合問題2

x = \log_2 5 とするとき、次を x を使って表してください。

(1) \log_2 20 (2) \log_2 0.4 (3) \log_5 2

解答を示します。

(1) 20 = 4 \times 5 と分解します。

\log_2 20 = \log_2 4 + \log_2 5 = 2 + x

(2) 0.4 = \frac{2}{5} と分解します。

\log_2 0.4 = \log_2 2 - \log_2 5 = 1 - x

(3) 底と真数を入れ替えると逆数になります。

\log_5 2 = \frac{1}{x}

補足します。この形式は、対数を含む方程式を解く前段階として重要です。

未知の値を文字で置き、既知の値との関係で表す。この操作ができると、対数方程式に進めます。

総合問題3

ある分類モデルが、3クラス分類で次の確率を出力しました。

p = (0.7, ; 0.2, ; 0.1)

正解が1番目のクラスである場合と、3番目のクラスである場合について、それぞれ交差エントロピー損失を求めてください。\ln 7 = 1.9459 \ln 10 = 2.3026 を使ってください。

解答を示します。

正解が1番目の場合を計算します。

L = -\ln 0.7 = -\ln \frac{7}{10} = \ln 10 - \ln 7

L = 2.3026 - 1.9459 = 0.3567

正解が3番目の場合を計算します。

L = -\ln 0.1 = \ln 10 = 2.3026

補足します。同じ予測結果でも、正解がどれかによって損失が約6.5倍違います。

そして、この損失が逆伝播で使われます。損失が大きいほど、パラメータの修正量も大きくなります。

対数の性質が、学習の挙動を直接決めていることが分かる例です。

振り返り

次の問いに答えられるか確認してください。

  • \log_a M は、言葉で言うとどういう意味ですか
  • 底の条件に a \neq 1 がある理由は何ですか
  • 真数が負のとき定義できないのはなぜですか
  • 対数の公式の根っこにある性質は何ですか
  • \log_a (M^k) \log_{a^k} M で、k の扱いはどう違いますか
  • 底の変換公式で、分母に来るのは底と真数のどちらですか
  • 機械学習で対数尤度を使う実装上の理由は何ですか
  • 情報量の定義に対数が現れる必然性は何ですか

すべて答えられれば、研修で教えられる水準にあります。

まとめと次の学習ステップ

対数の公式は数多くありますが、根っこは一つです。真数の掛け算が、対数の足し算になる。

商も、累乗も、底の変換も、すべてここから導けます。バラバラの公式として教えるのではなく、一つの性質の帰結として示してください。定着がまったく違います。

そして、解説のたびに手を動かさせることです。

対数は、読んで分かった気になりやすい単元です。しかし、実際に計算させると途端に止まります。この記事のように、解説と演習を交互に配置する構成が有効です。

用途を先に見せることも忘れないでください。

対数は、コンピュータのない時代に掛け算を楽にするために生まれました。そして現在は、確率の掛け算をアンダーフローさせずに扱うために使われています。四百年経っても、役割は変わっていません。

次の学習ステップとして、三つを提案します。

一つ目は、対数関数のグラフを描いてみることです。真数が0に近づくとマイナス無限大へ落ちる形を目で見ると、交差エントロピーの挙動が納得できます。

二つ目は、指数関数との対称性を確認することです。y = a^x y = \log_a x は、直線 y = x に関して対称になります。逆関数の意味が視覚的に理解できます。

三つ目は、情報理論に進むことです。自己情報量、エントロピー、交差エントロピー、KLダイバージェンス。いずれも対数が中心にあります。対数の意味が分かっていれば、これらの式は暗記の対象ではなくなります。

土台は、すでにできています。

セイ・コンサルティング・グループでは新人エンジニア研修のアシスタント講師を募集しています。

投稿者プロフィール

山崎講師
山崎講師代表取締役
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
海外放浪の末、2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。

学生時代は趣味と実益を兼ねてリゾートバイトにいそしむ。長野県白馬村に始まり、志賀高原でのスキーインストラクター、沖縄石垣島、北海道トマム。高じてオーストラリアのゴールドコーストでツアーガイドなど。現在は野菜作りにはまっている。