連載
» 2021年05月13日 05時00分 公開

[AI・機械学習の数学]番外編2 指数と対数(指数編)AI・機械学習の数学入門

連載の通常の流れとは別の番外編。AIや機械学習でよく使う「指数」を解説。指数関数の性質や指数関数の微分法についても簡単に紹介する。

[羽山博,著]

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

「AI・機械学習の数学入門」のインデックス

連載目次

 この連載の本編では、微分やベクトル、行列などのいわば数学の「縦糸」に当たるテーマを取り上げていますが、番外編では、さまざまなテーマにまたがる、いわば「横糸」に当たるテーマを取り上げます。今回は、AIや機械学習に登場する数式の中でよく使われる「指数」に焦点を当てることにします。なお、指数と切っても切り離せない「対数」については、番外編3で取り扱うことにします。

 指数は、同じ数を何回か掛けることを簡単に表すのに使います。その「何回か」は自然数(1以上の整数)でなくても構いません。ここでは、有理数(負の数を含めて、分数で表せる範囲の値)について、指数の取り扱いを見ていきます。また、指数関数の性質や指数関数の微分法についても簡単に紹介します。

ポイント1 指数関数の基本公式

 指数の計算方法については、本編の第1回番外編1でも取り扱ったので、具体的な計算の例はそちらに譲ることとして、まずは基本公式をまとめておきましょう。ただ、公式だけだと実感が湧かないでしょうから、簡単な例も併せて示すこととします。

掛け算と割り算の公式

 これらの式で、xに当たる値のことを「(てい)」と呼びます。mnは「指数」ですね。以下の例では、いずれも底は2です。

(例1)

(例2)

 指数の部分が掛け算になっている場合は、以下のようになります。

 指数の部分がさらに指数になっている場合は、以下のように右から左へと計算します。

 番外編1でも説明しましたが、Excelでべき乗を表す演算子「^」を使って「=2^3^2」と入力すると、[A]のような計算方法になり、結果は、

となります。一方、Pythonでべき乗を表す演算子「**」を使って「=2**3**2」と入力すると[B]のような計算方法になり、結果は、

となります。

何を0乗しても1になる

 これは、割り算の公式でm=nである場合に当たります。なお、00は定義されません(このような計算は許されません)が、0n0です。

マイナス乗の場合

 これは、割り算の公式でm=0である場合に当たります。

(例3)

コラム n進数のしくみと指数

 私たちが普段使っている十進数は、各桁の値と10を底とした指数の積を全て足した値と考えられます。例えば、

となります。右端が1の位(100の位)です。この例だと、1の位が4個あるということですね。10の位(101の位)が3個、100の位(102の位)が2個、1000の位(103の位)が1個あるというわけです。指数に注目すると、左の桁に行けば指数が1増えることが分かります。逆に言うと、右の桁に行けば指数が1減るわけですね。そして、1の位の指数は0となります。

 ここで、小数点以下を考えてみましょう。右に行けば指数が1減るので、1の位の右、つまり小数第一位の指数は−1になり、さらにその右の小数第二位の指数は−2になると考えられます。例えば、

と表せます。10−1=1/10=0.1となり、10−2=1/100=0.01となるので、3.14は、1の位(100の位)が3個、0.1の位(10−1の位)が1個、0.01の位(10−2の位)が4個集まった数であることが分かります。ちゃんと計算が合っていますね。

 なお、Pythonのround関数やExcelのROUND関数で四捨五入の桁位置を指定する場合には、上記のように表現したときの「-指数」の値を指定します。例えば、Pythonで小数点以下第2位まで求めるときには10の-2乗の位まで求めるので、-(-2)つまり、2を桁位置として指定し、round(1.234,2)と書きます。結果は1.23ですね。round(4649,-1)なら10の1乗の位まで求めるので、結果は4650となります。

 上のような表し方は何進数でも同じです。例えば二進数であれば、底が2になるだけのことです。例えば、110.101という二進数であれば、

と表せます。整数部は6ですね。小数部は2−1=1/21=0.52−3=1/23=0.125なので、0.625になります。つまり、二進数の110.101は十進数の6.625であることが分かります。


ポイント2 指数が分数の場合

 指数が1/nである場合は、n乗根主要根になります*1。まず、公式を記しておきます。

 上の式の

とは、n乗するとxになるような値のことです。例えば、

は、3乗すると8になる値です。23=8なので、この値は2となります。なお、

と書きます。

 下の式は、指数の部分がm1/nの掛け算になっているものと考えられます。すでに見た[A]式、つまり、

で、nのところに1/nを書けば、

となりますね。


*1

*1 n乗根は冪根(べきこん)や累乗根(るいじょうこん)とも呼ばれ、n=2の場合を平方根n=3の場合を立方根と呼びます。n乗根は1つとは限りません。例えば、16の4乗根は「4乗すれば16になる値」のことなので、実数の範囲であれば、2-2の2つになります。このうち、正の値の方を主要根と呼びます。

 つまり、16の4乗根は、

の2つですが、

です。

 なお、複素数にまで範囲を広げると、16の4乗根は、ほかにも2i−2iiは虚数単位)があります。


 指数が分数の場合の例はこれまで出てこなかったので、少し見ておきましょう。

(例4)

(例5)

 実際の計算はPythonなどのプログラミング言語やExcelなどにまかせてしまえばいいのですが、

なので、根号()の中を素因数分解し、素因数のn乗の形にして根号の外に出すと、式を簡単にできます。

(例6)

コラム Pythonで底が負の場合は√と1/2乗の結果が異なる

 nの正の平方根は√nですが、これは、

と表すこともできます。ただし、nが負の場合は虚数(複素数)となります。Pythonでは、リスト1のようにべき乗で表した場合は複素数が返されます。

>>> (-4)**(1/2)
(1.2246467991473532e-16+2j)

リスト1 Pythonの基本機能で負の数の1/2乗を計算した結果

 -4の1/2乗は2jjは虚数単位)となります。前の1.2246467991473532e-16は本来は0ですが、わずかな誤差が表示されています。

 一方、リスト2のようにmathモジュールのsqrt関数を使って、引数に負の値を指定するとエラーになります。

>>> from math import sqrt
>>> sqrt(-4)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: math domain error

リスト2 Pythonのmathモジュールで負の数の平方根を計算した結果


ポイント3 指数関数の値とグラフ

 指数関数は、f(x)=axのように、変数xが指数になっているものです。f(x)=2xであれば、以下のような値になります。二次関数f(x)=x2との違いも見比べておきましょう。

     x 0 1 2 3 4 5 6 7 8 9 10
二次関数 x2 0 1 4 9 16 25 36 49 64 81 100
指数関数 2x 1 2 4 8 16 32 64 128 256 512 1024
表1 二次関数と指数関数の値の変化

 これだけの値を見ても分かるように、指数関数ではxの値が大きくなると急激にf(x)の値が大きくなります。グラフも描いておきましょう。

図1 二次関数と指数関数のグラフ 図1 二次関数と指数関数のグラフ
x=4を超えたあたりから二次関数と指数関数の差が急激に大きくなる。例えば、x=20のとき、202=400だが、220=1048576となり、図をはみ出してしまう。

ポイント4 指数関数の微分法

 指数関数の微分法については、公式と簡単な例を記すにとどめます。

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。