1. 機械学習に必要な数学の基礎

本章では,ディープラーニングを含めた機械学習に必要な数学の基礎である「微分」「線形代数」「確率・統計」の3つについて,簡潔に紹介していきます.

1.1. 機械学習とは

機械学習は,コンピュータがデータから学習することで,そのデータに含まれる規則や判断基準などのパターンを抽出する関数を獲得し,その関数を用いて新たなデータについて予測を行う手法です.機械学習技術は現在では,画像認識,音声認識,文書分類,医療診断,迷惑メール検知,商品推薦など,幅広い分野に応用されています.

ここで,学習によって獲得される関数( モデルともよばれます )は多くの場合 パラメータ によって特徴づけられており,パラメータを決めればその関数の挙動が決まります.最も単純な例として直線の関数を考えると,これは傾きaaと切点bbの2つのパラメータで特徴づけられ,f(x;a,b)=ax+bf(x;a,b)=ax+bのように表記します.(ここでxx は関数の 入力変数 とよびます.また の後ろにパラメータを表記します).機械学習の目標は,学習データを使ってこれらのパラメータを決定することです.

機械学習は,目的関数を最小化(または最大化)することで学習,つまり望ましい挙動をするようなパラメータを決定します.そのため,目的関数はモデルの出力値が望ましい場合には小さな(または大きな)値をとり,そうでない場合は大きな(または小さな)値をとるように設計します.

例えば,学習データとして入力と出力のペアからなるデータセットD=((x1,y1),(x2,y2),,(xn,yn))D=((x1,y1),(x2,y2),,(xn,yn))が与えられたとします.ここで,xixiii番目のサンプルの入力,yiyiii番目のサンプルの出力を表します.これらの点の近くをできる限り通るような直線f(x;a,b)=ax+bf(x;a,b)=ax+bを学習したいとします.出力が実数値の場合,パラメータθ=(a,b)θ=(a,b)とおいて,次のような目的関数がよく利用されます.

L(θ)=ni=1(yif(xi;θ))2L(θ)=ni=1(yif(xi;θ))2

この関数を最小化することを考えます.上式では,モデルの予測値f(xi;θ)f(xi;θ)と正解yiyiとの二乗誤差を求め,その合計値を計算しています.全てのデータで予測と正解が一致する時だけ00,それ以外は,大きく間違えるほど大きな正の値をとります.間違えた度合いを測る関数を,特に 損失関数 とよぶこともあります.また,与えられたデータセット全体に対するペナルティの合計値を求めるような目的関数は コスト関数ともよばれることもあります.目的関数の引数はθθとなっており,目的関数を最小化する最適なθθを求めることで,データセットDDを精度良く予測する関数f(x;θ)f(x;θ)が得られることになります

目的関数の最小化問題を解くためには微分と線形代数の知識が必要になります.ただし,全ての微分と線形代数の知識は必要ありません.以降,機械学習の理解に必要な最低限の知識を説明します.

1.2. 微分

関数の入力値における微分は,その点におけるグラフの 接線の傾きに相当し,下図のように関数に接する直線として表すことができます.

image0

例えば上図の関数においては,aa の点における接線は赤い直線であり,その傾きは+3+3となっています.右肩上がりな直線の傾きは正の値になります.

image1

それに対し,次の図の bb の点においては,傾きは-1であり,接線は右肩下がりの直線となっています.

もし目的関数の値が全てのパラメータについて計算できているならば,その中から目的関数の最小値を選び出すのは可能ですが,そのようなことは通常不可能です.しかし,ある点でのパラメータに関する微分を計算できれば,接線の傾きを求めることができ,パラメータ全域のグラフ形状がわからなくても,パラメータを変化させた時に目的関数がどう変化するのかが分かります.この情報に基づいて,目的関数を小さくするようにパラメータを更新することができます.

再度,微分の説明に戻り,その定義や多変数入力,多変数出力の場合について詳しくみていきます.

1.2.1. 2点間を通る直線の傾き

はじめに,微分の原理を理解していくために,下図に示す2点間を通る直線の傾き aa を求めてみましょう.

image2

この時,傾きaa は,

a=f(x2)f(x1)x2x1
a=f(x2)f(x1)x2x1

と求まります.

1.2.2. 1点での接線の傾き

次に,与えられた関数の接線の傾きを求めていきます.そのためには,極限の考えが必要になります.極限では,変数がある値に限りなく近づくとき,その変数によって記述される関数がどのような振る舞いをするか考えます.極限を表すために,limlim という記号が一般的に用いられます.例えば,

limx03x=3×0=0
limx03x=3×0=0

は,xxという変数を00に近づけていったときに式の値がどのような値になるかを与えます.

それでは,下図のある点 xx における接線の傾きaaを求めていきましょう.

image3

さきほど考えた2点を通る直線と極限を組み合わせて,接線を求めることができます.

image4

はじめに,xx から hh だけ離れた点 x+hx+h を考え,2点を通る直線の傾きを求めてみます.次にhhh0h0 のように小さくしていけば,直線の開始点と終了点の2点が1点に収束し,1点での接線として考えることができます.これを式でみると

a=limh0f(x+h)f(x)(x+h)x=limh0f(x+h)f(x)h=limh0f(x+h)f(x)h
a=limh0f(x+h)f(x)(x+h)x=limh0f(x+h)f(x)h=limh0f(x+h)f(x)h

となります.上の式は導関数とよび,f(x)f(x) で表されます.また導関数を求めることを微分するといいます.また,記号の使い方として,

()=ddx()
()=ddx()

のように表しても構いません.このddという記号は微分(differentiation)を表しており,d()d()が対象の値の変化量,dxdxxxの変化量を表し,それらを小さくしていった時の極限を表します.この記法は煩雑ですが,変数がxxyyなど複数ある場合に,xxを微分しているか,yyを微分しているかが明確になるため,正確な表現をすることができます.

1.2.3. 微分の公式

覚えておくと便利な微分の公式がありますので,以下に幾つか紹介していきます(ccは定数,xxは変数を表します).

(c)=0(x)=1(cf(x))=cf(x)(xn)=nxn1(f(x)+g(x))=f(x)+g(x)(f(x)g(x))=f(x)g(x)+f(x)g(x)(f(g(x)))=df(u)dududx,u=g(x)
(c)(x)(cf(x))(xn)(f(x)+g(x))(f(x)g(x))(f(g(x)))=0=1=cf(x)=nxn1=f(x)+g(x)=f(x)g(x)+f(x)g(x)=df(u)dududx,u=g(x)

例えば,以下の微分を考えてみましょう.

(3x2+4x+5)=(3x2)+(4x)+(5)=3×(x2)+4×(x)+5×(1)=3×2x+4×1+5×0=6x+4
(3x2+4x+5)=(3x2)+(4x)+(5)=3×(x2)+4×(x)+5×(1)=3×2x+4×1+5×0=6x+4

このように,各項の和に対する微分の計算は,各項に対して微分した後に和をとるようにしても等式の関係が成立します.また,各項の微分を行う際に,定数の係数(変数にかかる数)は微分演算の外側に出すことができます.これらは微分の 線形性 とよばれる性質であり,この性質を使うことで,微分を簡単に計算できるようになります.

1.2.4. 合成関数の微分

後の章で詳しく述べますが,一般的に機械学習においては複雑な 合成関数の微分 を考える必要が出てきます.簡単な例として,

{(3x+4)2}
{(3x+4)2}

を計算することを考えます.この式は,3x+43x+4 という内側の部分と ()2()2 という外側の部分で構成されています.この式を(9x2+24x+16)(9x2+24x+16)のように展開してから微分を計算してもよいのですが,3乗や4乗となってくると展開するのも大変になります.ここで役に立つ考え方が合成関数の微分です.先程紹介した微分の公式の最後に登場していた式です.合成関数の微分は,内側の微分と外側の微分をそれぞれ行い,その結果をかけ合わせることで求めることができます.外側の微分の際には関数の引数を入力とみなし,その入力について微分をとります.

それでは先程の(3x+4)2(3x+4)2という関数の微分を考えてみます.

まず内側の関数を u=(3x+4)u=(3x+4) とおいて,

{(3x+4)2}=(u2)
{(3x+4)2}=(u2)

とします.ここで,()() をもう少し厳密に考える必要が出てきます.今は,xxuu の2つの変数が登場しており,()() では,xx で微分しているのか uu で微分しているのかの区別がつきません.そこで,多少複雑に見えますが,先程紹介したddを使った記法で微分する変数を厳密に記述すると,

{(3x+4)2}=ddx{(3x+4)2}=dudxddu(u2)=ddu(u2)ddx(3x+4)=2u3=6u=6(3x+4)=18x+24
{(3x+4)2}=ddx{(3x+4)2}=dudxddu(u2)=ddu(u2)ddx(3x+4)=2u3=6u=6(3x+4)=18x+24

となります.

ニューラルネットワークの学習では合成関数の微分を使用する場面が何度も登場するため,この計算方法をしっかりと覚えておきましょう.

1.2.5. 偏微分

機械学習では,1つの入力変数 xx から出力変数 yy を予測するケースは稀であり,基本的には,複数の入力変数 x1x1, x2x2, , xMxM を用いて出力変数 yy を予測する多変数関数を扱います.例えば,家賃を予測する場合,部屋の広さだけではなく,駅からの距離や犯罪発生率なども考慮した方がより正確に予測できると期待されます.複数の入力x1,x2,,xMx1,x2,,xMを考慮した関数f(x1,x2,,xM)f(x1,x2,,xM)を多変数関数とよびます.この多変数関数において,ある入力xmxmにのみ注目して微分することを 偏微分 とよび,

xmf(x1,x2,,xM)
xmf(x1,x2,,xM)

のように表します.微分を表す記号が,dd から に変わり,計算としては xmxm の場合は xmxm 以外は定数と考え,xmxm にのみ着目して微分を行います.(ただし,入力変数が他の入力変数と独立ではない場合は定数と考えることはできません.本講義ではそのようなケースは出てきません).

例題で具体的な計算の流れを確認していきましょう.

x1(3x1+4x2)=x1(3x1)+x1(4x2)=3×x1(x1)+4x2×x1(1)=3×1+4x2×0=3
x1(3x1+4x2)=x1(3x1)+x1(4x2)=3×x1(x1)+4x2×x1(1)=3×1+4x2×0=3

偏微分でも微分と同じ公式を適用できます.今回のケースでは,x1x1 にだけ着目するため,x2x2 は定数として扱うことを把握しておけば上記の計算の流れが理解できるはずです.

1.3. 線形代数

1.3.1. 線形代数とは

次に,線形代数 について解説します.ベクトル,行列,逆行列などが登場します.

線形代数を導入することで,複数の変数間の関係をシンプルに記述可能となるため,機械学習の中でも度々登場してきます.大変重要な概念ですので,ぜひ身に着けていきましょう.

1.3.2. スカラー,ベクトル,行列,テンソル

最初に線形代数で使われるスカラー,ベクトル,行列,テンソルの4つを解説します.

スカラーは,1つの値もしくは変数のことです.例えば,

x, y, M, N
x, y, M, N

のように表します.スカラーは例えば温度や身長といった単一の量を表すことに使われます.

ベクトルは,複数のスカラーを縦方向(もしくは横方向)に集めて並べたものであり,

x=[x1x2x3], y=[y1y2yN]

のように表します.ベクトルの表記は太文字とする場合が多く,スカラーかベクトルかを区別できるようにしています.ベクトルを表現する際,縦方向に並べたものを列ベクトル,横方向に並べたものを行ベクトルとよびます.数学や機械学習では列ベクトルを利用する論文や参考書が多いため,特に明示しない限り,単にベクトルと表現した場合には列ベクトルを指すこととします.

行列は複数の同じサイズのベクトルを並べたものであり,

X=[x11x12x21x22x31x32]

のように表します.行列のサイズは行と列で表現します.例えば,この X は3行2列であり,サイズが(3, 2)の行列と言います.多くの場合,行列は大文字,または大文字の太文字で表記されます.

テンソルはベクトルや行列を一般化した概念であり,ベクトルは1階のテンソル,行列は2階のテンソルと表現することができます.また,図のように行列を奥行き方向にさらに並べたものは3階のテンソルとなります.例えば,カラー画像をデジタル表現する場合,画像を構成する各ピクセルはRGB (Red Green Blue) などの色空間を用いるのが一般的であり,(行番号,列番号,色)の3つの軸で1つの値を指定するため,3階のテンソルで表現されます.本講座を含めて,単にテンソルと表現されている場合には,3階以上のテンソルを指すことが多いので,注意してください.

image5

線形代数では yX といった文字だけで式変形をしていくため,どのような形の数値が取り扱われているかわかりくいのですが,これはベクトルなどと常に意識しておくことでその形を見失わないように注意しましょう.

  小文字 大文字
細文字 スカラーの変数 スカラーの定数
太文字 ベクトル 行列,テンソル

1.3.3. 足し算・引き算

行列やベクトルの演算について覚えていきましょう.足し算は同じサイズの行列,ベクトル間だけで成立し,次のように定義されます.

[123]+[456]=[1+42+53+6]=[789][123456]+[789101112]=[1+72+83+94+105+116+12]=[81012141618]

このように行列やベクトルの中の要素で対応する場所を足し合わせます.引き算も同様です.同じサイズでないと計算が成立しないということを覚えておきましょう.

1.3.4. 内積

同じサイズのベクトル間では内積が定義できます.内積は同じ位置の対応する値同士を掛けていき,それらを足し合わせたものです.

[123][456]=1×4+2×5+3×6=36

1.3.5. かけ算(行列積)

行列の掛け算には,行列積,外積,要素積(アダマール積)など複数種あります.ここではそのうち最もよく使われる行列積について説明します.以降では明示しない限り行列の掛け算は行列積を指すこととします.

行列Aと行列Bの行列積はAの各行とBの各列の内積を並べたものとして定義されます.例えば行列Aの2行目の行ベクトルと行列Bの3列目の列ベクトルの内積は結果の行列Cの2行3列目に対応します.

image6

そして,内積が定義される条件はベクトルのサイズが等しいということでしたが,ここでもそれが成り立つために,Aの行のサイズ(=Aの列数)とBの列のサイズ(=Bの行数)が一致する必要があります.また,結果はAの行数とBの列数からなる行列となります.

image7

また,行列積がスカラー積と大きく異なる性質のひとつとして,ABBAが等しいとは限らないということが挙げられます.

行列積は線形代数や機械学習の多くの問題で使われます.また,行列では割り算に相当する演算はありませんが,後述する逆行列を使って4/2=4×12 のように割り算を逆数(逆行列)の掛け算として記述します.

それでは,計算条件の確認も踏まえて,下記の3つを練習問題として解いてください.

(1)[12][34](2)[1234][56](3)[12][3456][31]

こちらが解答です.

(1)[12][34]=1×3+2×4=11(2)[1234][56]=[1×5+2×63×5+4×6]=[1739](3)[12][3456][31]=[12][3×3+4×15×3+6×1]=[12][1321]=1×13+2×21=55

この形の計算は,機械学習においてよく登場してきます.行列積は,演算後に形が変わることを覚えておきましょう.

1.3.6. 転置

ベクトルは縦向きの列ベクトルを基本としていましたが,横向きのベクトルを使いたい場合もあります.そこで縦向きのベクトルを横向きのベクトルに,横向きのベクトルを縦向きのベクトルに入れ替える演算を転置Transpose) とよび,Tで表記します.例えば,

x=[123], xT=[123]X=[142536], XT=[123456]

のようになります.行列に対する転置では,サイズが(N,M)から(M,N)になり,ij列目の値が転置後にはji列目の値になります.転置の公式として次を覚えておくとよいでしょう.

(1) (AT)T=A(2) (AB)T=BTAT(3) (ABC)T=CTBTAT

1.3.7. ベクトル,行列のサイズ

行列積を行った後は行列サイズが変わります.サイズが(L,M)の行列と(M,N)の行列の行列積の結果は(L,N)となります.例えば先ほどの3つの練習問題のサイズがどのように変化したかをまとめると,

image8

となります.(3)は最初のベクトルと行列の結果が横方向のベクトルであり(1)に帰着することに注意してください.また,ある次元のサイズが1となった場合,その次元を削除しベクトルがスカラーに,行列がベクトルになる場合があります.

1.3.8. 単位行列

スカラー値の1は,10×1=10 といったように,その数を任意の数に乗じても変わらないという性質を持ちます.行列の演算において,これと同様の働きをする行列が単位行列です.

I=[100010001]

上記のような形をしており,記号 I で表されるのが一般的です.行列の斜めの要素を 対角要素 とよび,それ以外の要素を非対角要素とよびます.単位行列は,対角要素が1で,非対角要素が0であるような 正方行列 (行要素の数と列要素の数が一致する行列)です.例えば, 2x2行列の場合は,

I=[1001]

であり,3x3行列の場合は,

I=[100010001]

となります.行列のサイズを明示したい場合は,In (n×n行列の場合)と添字を付けて区別します.

単位行列は任意の行列Aに対し,以下が成立します.

AI=AIA=A

先程説明したように,行列の掛け算が成立するためには,IのサイズはAと同じである必要があります.

実際に計算して,元の行列と値が変わらないかを確認してみると,

[1234][1001]=[1×1+2×01×0+2×13×1+4×03×0+4×1]=[1234]

のように,元の値と一致することが確認できます.

1.3.9. 逆行列

逆行列とは,元の行列にかけると単位行列になるような行列であり,スカラーにおける逆数(2×21=1)に対応するような行列です.行列Aに対し,その逆行列はA1のように表記します.

逆行列の定義を数式で表すと,

AA1=IA1A=I

となります.ここで,I は先程の単位行列です.サイズが2×23×3 といった小さな行列の場合には,逆行列計算に公式がありますが,機械学習ではより大きなサイズの行列( 1000×1000 など)を扱う必要が出てくるため,逆行列を効率的に求める計算手法が提案されています.

逆行列は常に存在するとは限りません.逆行列が存在するような行列のことを 正則行列 とよびます(行列が正則であるための条件については今回は説明しません).

1.3.10. 線形結合と二次形式

機械学習の式によく出てくる形式として, bTxxTAx の2つの形式があります.前者は線形結合もしくは一次結合,後者は二次形式とよばれています.スカラーの場合,一次式(ax+b)や二次式(ax2+bx+c)がありますが,それをベクトルに拡張したものです.

線形結合の計算の中身を見てみると,

b=[12], x=[x1x2]bTx=[12][x1x2]=x1+2x2

のように x の要素である x1 もしくは x2 に関して,一次式となっていることがわかります.

また,二次形式も同様に計算の中身を確認してみると,

A=[1234], x=[x1x2]xTAx=[x1x2][1234][x1x2]=[x1x2][x1+2x23x1+4x2]=x1(x1+2x2)+x2(3x1+4x2)=x21+5x1x2+4x22

となり,各要素において二次式となっていることがわかります.

従って,任意の二次関数を

xTAx+bTx+c

の形で表現できます.ここで,c はスカラーの定数項です.

1.3.11. ベクトルによる微分と勾配

微分は入力を変えた場合の関数値の変化量と説明しました.同様に関数の入力がベクトルである場合,ベクトルによる微分を考えることができます.関数のそれぞれのベクトルの成分毎に偏微分を計算し,それらを並べてベクトルにしたものを勾配とよびます.

勾配の計算を紹介する前に,下記の例題を計算しましょう.

b=[34], x=[x1x2]bTx=[34][x1x2]=3x1+4x2

この bTx を ベクトル x で微分したものを,

x(bTx)

と表し.これをベクトルで微分すると言います.今回の例では,

x(bTx)=x(3x1+4x2)=[x1(3x1+4x2)x2(3x1+4x2)]

のようになり,計算を進めると

x1(3x1+4x2)=x1(3x1)+x1(4x2)=3×x1(x1)+4x2×x1(1)=3×1+4x2×0=3
x2(3x1+4x2)=x2(3x1)+x2(4x2)=3x1×x2(1)+4×ax2(x2)=3x1×0+4×1=4

となり,下記の計算結果が得られます.

x(bTx)=[x1(3x1+4x2)x2(3x1+4x2)]=[34]=b

もう一問,以下の例題を考えましょう.

b=[34], x=[x1x2]x(b)=[x1(3)x2(4)]=[00]=0

偏微分を行う対象の変数が含まれていない場合,その偏微分は 0 となります.要素が 0 のみで構成されたベクトルを 零(ゼロ)ベクトル と言います.

これらを踏まえて,公式としてまとめておきましょう.

(1) x(c)=0(2) x(bTx)=b(3) x(xTAx)=(A+AT)x

(1)と(2) はすでに導出済みです.(3) は導出が少し複雑なので省略しますが,数値を代入して確認してみてください.この3つの公式は機械学習を学んでいく上で非常に重要な公式となりますので,必ず覚えておきましょう.

こういった行列などにおける公式は他にもたくさんあり,論文などを読む際にはどういった公式があるのかを知っておくことも重要です.例えば,The Matrix Cookbookなどを参考にしてみてください.

また,今回は多入力単出力関数の微分として勾配まで紹介しましたが,多入力多出力関数の微分であるヤコビ行列(ヤコビアン)もニューラルネットワークの誤差逆伝播法を理解するために必要となります(ただし殆どの場合,行列を掛けた場合のヤコビ行列は,その転置行列だと覚えるだけで十分です).さらに詳しく知りたい方は,例えばThe Matrix Calculus You Need For Deep Learningなどを参考にしてみてください.

1.4. 確率・統計

1.4.1. 確率や統計は何に使えるのか

機械学習といえば確率や統計といったイメージで勉強する人も多いと思いますが,簡単なアルゴリズムであれば,微分と線形代数を理解しておくだけで説明することができ,確率や統計が出てくることはありません.それでは,確率,統計はなぜ必要なのでしょうか?

機械学習はデータを扱う手法です.データは個別の事象の集まりですが,学習の目的はそのデータの背後にある普遍性,法則を捉えることです.確率はデータの分布や不確実性といった概念を数式化することができます.また統計によって,ある集団に対する様々な統計量を得ることができ,それらを使ってデータを学習しやすいように正規化したり,モデルが妥当なのか,各データが外れ値ではないのかといった判断をすることができます.

1.4.2. 確率

確率は様々な可能性がある事象に対し,その事象が起こることが期待される度合いを表します.パラメータ推定の文脈では確率はどれくらい起きそうだという信念を表す場合もあります.確率はp(x)のような関数の形で表し,x確率変数とよびます.確率変数は起きうる事象のいずれかの値をとるような変数です.さらにp(x=u)を確率変数xの値uだった時の確率を表すものとします.これを省略したp(u)の形で表します.確率は,「全ての事象の確率の和が1になる」,「全ての事象の確率は0以上である」という2つの制約を満たします.これを式で書くと,

xp(x)=1p(x)0

となります.

2つの事象が同時に起きる確率を同時確率とよびp(x,y)のように表します.例えばサイコロを2回振り,1回目の目が0,2回目の目が5となる確率は同時確率で表すことができます.

同時確率のうち,特定の確率変数のみに注目し,それ以外の確率変数について和を取って消去する操作を周辺化とよびます(周辺化という言葉は,行を1つ目の確率変数,列を二つ目の確率変数に対応させて同時確率を表で書いた場合,その行の合計,列の合計を表の周辺に書いたことからそうよばれています).周辺化の結果は,注目した確率変数の確率に一致します.

p(x)=yp(x,y)p(y)=xp(x,y)

片方の確率変数がある値で固定されている条件下で,もう片方の確率がどうなるのかを表した確率分布を条件付き確率とよび,p(y|x)のように表します.例えばyを外で雨が降っているかを表す確率変数,xを部屋に入ってきた人が傘を持っていたかを表す確率変数とします(y=1を雨が振っている,y=0を雨が振っていない,のように割り当てます).この時p(y|x)は,部屋に入ってきた人が傘をもっていた場合に外で雨が振っている条件付き確率を表します.

条件付き確率は,同時確率を条件の確率で割った値と一致します.

p(y|x)=p(x,y)p(x)

ここで,条件付確率の式を変形させたp(y|x)p(x)=p(x,y)に注意すると,

p(x|y)=p(x,y)p(y)=p(y|x)p(x)p(y)

が得られます.これをベイズの定理とよびます.重要な定理なので,ぜひ覚えておきましょう.

例えば,ベイズの定理の応用事例として,スパム(迷惑)メールフィルターがあります.メールに単語iが含むか否かを表す確率変数を xi ,メールがスパムであるか否かを表す確率変数を y とおくと, p(xi=1) は「メールが単語iを含む確率」, p(y=1) は「メールがスパムである確率」, p(xi=1|y=1) は「メールがスパムであった場合に,その中に単語iが含まれる確率」となります.受信済みの大量のメールからそれぞれの割合を集計して求め,ベイズの定理を適用することで, p(y=1|xi=1) として,「メールに単語iが出現した場合に,そのメールがスパムである確率」を求めることができます.

1.4.3. 尤度と最尤推定

(パラメトリックな)確率モデルp(x;θ)はパラメータθで特徴付けられたような関数です.確率モデルp(x)上で事象uが観測される確率p(x=u;θ)を事象u尤度 とよびます.尤度の尤は「尤(もっと)もらしい」という意味であり,その事象の起きやすさを表します.

ここで,N個のデータX=(x(1),x(2),,x(N))が与えられ,そのデータXを生成するような確率分布を推定する問題を考えます.この場合,最尤(さいゆう)推定とよばれる手法がよく使われます.最尤推定は観測データXを最も生成しそうなパラメータθを推定する手法です.観測するデータがそれぞれ独立に生成されている場合,その尤度は

L(θ)=p(X;θ)=Ni=1p(x(i);θ)

のように表されます.このという記号はの掛け算版で全ての値を掛け合わせるという意味です.複数データに対する尤度は,1より小さな値の積となるため非常に小さな数になりコンピュータ上で扱うことが困難になります.また尤度を最大化したい場合,積の形の式の最大化は難しいことが知られています.そこで尤度の代わりにその対数をとった対数尤度を考えます.

logL(θ)=logp(X;θ)=Ni=1logp(x(i);θ)

この対数尤度を最大化するパラメータθを求めることができれば,その値がデータXを最も生成しそうな確率モデルのパラメータとなります.

ここで,わかりやすい具体例として,コインの表・裏が出る確率を推定する問題を考えてみます.コインの表・裏を表す確率変数をxとおき,x=1であれば表,x=0であれば裏とします.また,表(x=1)となる確率を表すパラメータをθとおきます.コインを10回投げた結果,以下の観測結果Xが得られたとします.

X=(1,0,1,1,1,0,0,1,0,0)

すると,その尤度は,

L(θ)=θ(1θ)(1θ)(1θ)=θ5(1θ)5

と計算され,その対数尤度は,

logL(θ)=5logθ+5log(1θ)

となります.これをθで微分して0になる条件を求めると,

5θ+5(1θ)=0

より,θ=0.5が最尤推定により得られます.

回帰モデルの目的関数として真値と予測値の二乗誤差の和を使う場合(最小二乗法とよばれています),モデルの出力値に正規分布(後述)の誤差を仮定した最尤推定を行っているのと等価であることが知られています.

1.4.4. 事後確率最大化推定(MAP推定)

最尤推定は多くの場合有効ですが,求めるパラメータに何らかの事前情報がある場合,最尤推定ではその事前情報を扱うことができません.そのため,試行回数が少ない中でパラメータを推定しようとすると,最尤推定ではうまくいかない場合があります.

先程と同様に,コインの表・裏が出る確率を推定する例を考えてみましょう.コインを5回投げたところ,たまたま5回とも表(x=1)が出たとします.この場合,最尤推定では,表が出る確率が100%(裏が出る確率が0%)であると推定してしまいます.しかし,明らかに裏が出る確率は0よりも大きいはずという事前情報があれば,より良い推定ができそうです.

このような場合に,事前情報も考慮しながら,観測データに基づいてパラメータを推定する方法が 事後確率最大化(Maximum A Posteriori, MAP)推定 です.MAP推定においては,パラメータθも確率変数であり,その分布( 事前確率 ともよばれます)p(θ)が存在すると考えます.その上で,観測データXが与えられた条件での,パラメータθの条件付き確率( 事後確率 ともよばれます) p(θ|X) を最大化するようなθを求めることになります.

ここでベイズの定理を思い出しましょう.ベイズの定理を用いると事後確率は,

p(θ|X)=p(X|θ)p(θ)p(X)

となります.これをパラメータについて最大化することを考えると,P(X)はパラメータとは関係が無いので無視することができ,

p(X|θ)p(θ)

を最大化するようなパラメータを求めることになります.p(X|θ)の部分は最尤推定と同じですが,MAP推定ではさらにパラメータの事前確率p(θ)を掛けた確率を最大化することになります.(ここではMAP推定の解を求める過程については説明しません.)

機械学習においてパラメータを最適化する際,正則化とよばれる,パラメータの値が大きいことに対する罰則項を設けたりしますが,これはパラメータの事前確率(の対数)とみなすことができ,パラメータをMAP推定していると解釈できます.

1.4.5. 統計量

ここでは,代表的な統計量である平均,分散,標準偏差について紹介していきます.

最初は,平均を紹介します.たとえば,300円, 400円, 500円の平均は,

300+400+5003=400

となり,すべてを足し合わせて対象の数で割ります.これを定式化すると,

¯x=x1+x2++xNN=1NNn=1xn

のようになります.Nサンプルの数を表します.平均は, ˉxμ といった記号で表わされるのが一般的です.データ分布において,平均はその重心に相当する値です.

次に,分散を紹介します.分散の定義は

σ2=1NNn=1(xn¯x)2

となります.各サンプルの平均 ˉx からの差分 xˉx を計算し,それらの二乗誤差の平均の値を計算します.分散にはもう一つ定義があり,

σ2=1N1Nn=1(xn¯x)2

と表す場合もありあります.前者は標本分散といい,後者は不偏分散といいます.これらの式の導出は他書に譲るとして,ここではその使い分けについて説明します.

image9

データ解析を行う際に,母集団に対する解析か標本集団に対する解析かを意識することが重要です.母集団とは解析を行いたい想定の範囲に対して,すべてのデータが揃っている場合であり,標本集団はそのうちの一部を抽出する場合です.例えば,全国の小学生の身長と体重を集計する際,全国の小学生を一人の抜け漏れもなく集められれば母集団ですが,各都道府県で100人ずつ抜き出して集計すると,標本集団となります.母集団のデータを集めることは現実的に難しいことが多く,標本集団のデータから母集団の分布を推定することが一般的です.そうなると,基本的には標本集団向けである不偏分散を使用することになります.サンプル数Nが多い場合には,母分散と不偏分散の違いは殆どありませんが,サンプル数が小さい場合は大きな差となるので注意しましょう.

分散を利用すると,データのばらつきを定量評価することができるようになります.例えば,実験を行った際に,結果にばらつきが多ければ,各実験で再現性が確保できていない可能性が考えられます.このように,多数の試行の結果がある値に集まっていることが望ましいような状況において,ばらつきの度合いを定量し評価することが重要となってきます.他に,データのばらつき具合にもよりますが,分散を使えばスケールの違いも評価することができます.

最後に標準偏差を紹介します.分散では各サンプルの平均からの差の二乗の合計のため,単位は元の単位の二乗となっています.例えば元の単位がkgであれば,分散はkgの二乗という単位になります.そこで分散の平方根をとったσを用いることで,元の単位と等しくなり,解釈が容易になります.これを標準偏差とよびます.

練習問題で具体的な計算手順の確認を行いましょう.以下の①と②のデータに対して,平均,分散,標準偏差を求めてください.ただし,今回は母分散を使用することとします.

image10

①の解答は以下の通りです.

ˉx=15(21+0+1+2)=0σ2=15{(20)2+(10)2+(00)2+(10)2+(20)2}=15×10=2σ=2

また,②の解答は以下の通りです.

¯x=15(42+0+2+4)=0σ2=15{(40)2+(20)2+(00)2+(20)2+(40)2}=15×40=8σ=8=22

これより,②のケースの方が分散が大きく,データのばらつきが大きいことがわかります.

1.4.6. 正規分布と正規化

ここでは,確率で度々登場する正規分布について紹介します.ガウス分布ともよばれています.平均μ,標準偏差σを持つ正規分布は以下のような形をしています.

image11

なぜこの正規分布がよく登場するのでしょうか.その理由として,以下のような物理的・数学的背景があります.

  • 独立で多数の因子の和で表される確率変数は正規分布に近似的に従う
  • 数式が扱いやすい

世の中でみられる多くのデータが正規分布に従うことが知られています(例えば,性年代別の身長,試験の点数,物理実験の測定誤差など).一方で必ずしもデータは正規分布に従うとは限りません.正規分布ではないような分布に対し正規分布にあてはめて考えてしまい誤った結論を導く場合も多々あります.データの分布は図示化するなどして正規分布として扱ってよいかは常に考えましょう.

正規分布では平均 μ と標準偏差 σ に対して,何%がその分布に入っているかといった議論を良く行います.例えば,μ±3σ の範囲内に,データの全体の99.7%が入るため,この μ±3σ に入らない領域を外れ値(他の値から大きく外れた値)として定義するといった使い方ができます.

1.4.7. 標準偏差を利用したスケーリング

スケーリングは,大抵の機械学習アルゴリズムにおける前処理として重要です,

なぜスケーリングが重要かを説明するために,2点間の距離を計算する例題を取りあげます.スケールが異なる変数 x1x2 があった場合に,下記の図のような状況になります.ここで,縦軸と横軸のスケールが大きく異なっていることに注意してください.

image12

この2点間の距離 d を求めると,

d=(1001000)2+(0.11)2=9002+0.92=810000+0.81=810000.81

のようになります.距離 d の中でx1の影響量が大きくx2 に関しては,スケールが小さいが故にほとんど影響を与えていません.これでは x2 がデータの意味として重要な場合においても考慮できません.こうした問題を解決する方法の一つが,ここで紹介するスケーリングです.代表的なスケーリングの方法としては2つあります.

1つ目が,サンプル集合を最小値0最大値1にスケーリングする方法です.これをMin-Max スケーリングとよびます.この方法では,各変数ごとに最小値 xmin と最大値 xmax を求めておき,すべてのデータに対して,

˜x=xxminxmaxxmin

の計算を行います.Min-Maxスケーリングには計算が単純というメリットがある反面,下図の例ようにx1で外れ値を持つデータ点が存在するような場合,xmax が外れ値に大きく引っ張られてしまうという弱点があります.

image13

もう1つのスケーリングの方法として,平均0標準偏差1 にスケーリングする方法があります.これは一般的に 標準化(正規化) とよばれています.全てのデータから平均を引くと平均0になり,標準偏差で割ると標準偏差は1になります.

˜x=xˉxσ

分散を計算した例題の①に対して,このスケーリングを適用してみると,

x1=202=22x2=102=12x3=002=0x4=102=12x5=202=22

のように,データが変換されます.この時の平均と標準偏差を求めてみると,

¯x=15(2212+0+12+22)=0σ2=15{(220)2+(120)2+(00)2+(120)2+(220)2}=1σ=σ2=1

のように,平均0,標準偏差1にスケーリングできていることがわかります.この方法であれば,Min-Maxスケーリングと比較して,少数の外れ値には強いスケーリングが実現できます.

1.4.8. 外れ値除去

以下のように時間によって変動するようなデータを扱うとしましょう.例えば,横軸が時刻,縦軸が温度だとします.また,平均的な温度は一定であり,温度はランダムに変動しているものと仮定します.

image14

このデータに対して,温度計の異常や不具合による温度の異常(外れ値)を検出したい場合,どのようにこの外れ値を定義して検出すれば良いでしょうか.一つの方法として,値の頻度に着目する方法があります.

image15

上図のように,平均に対して線を引き,それぞれの値において頻度を算出してヒストグラムを描いてみると正規分布が現れます.ここでは,データが従う分布に正規性を仮定できるとします(データが正規分布に従うかどうかを統計的に確認したい場合は,正規性検定などの方法があります),外れ値を定義するために,データの平均 μ と標準偏差 σ を計算し,μ±3σの値に線を引けば,外れ値除去を行うことができます.これを3σ法とよびます.ただし,外れ値の回数が多かったり,外れ値が極端な値を持つ場合には平均や標準偏差がその外れ値に引っ張られ,3σ法ではうまく対処できないことがあります.

その場合には,データを大きい順に並べて上位5%,下位5%を取り除くといった処理をすることもできます.