機械学習 はじめよう

第12回 ベイズ線形回帰[前編]

この記事を読むのに必要な時間:およそ 3 分

確率版の線形回帰を解く

それでは導入したp(t|w,x)を使って線形回帰が解けるかどうか見ていきましょう。

まずはデータ点が1個(x1,t1)だけの場合で考えてみます。このデータをp(t|w,x)に代入すると,⁠この点を取り得る確率」が求められます。

ただし

式と値があったので代入してみましたが,このp(t1|w,x1)とは一体何者でしょう?

p(t1|w,x1)という形を見ると,ついt1が動くような気がしてしまいますが,(x1,t1)は観測済みのデータ点なので,どちらも勝手に動かすわけにはいきません。

一方wは「まだわかっていない,これから最適な値を定めたいパラメータ」なので,動かしてみることができます。するとこのp(t1|w,x1)はwの関数とみなすことができます。

機械学習ではその「wの関数p(t1|w,x1)」「尤度関数」と呼びます。

この連載に「尤度(ゆうど⁠⁠」という言葉が出てくるのは初めてですね。⁠尤度」とは,一言で言えば「観測データがとりうる確率」です。

「それってただの『確率』だよね? なんかわざわざ変に小難しい名前だし……はっ。これは理解がおぼつかない人間を煙に巻いて,振り落とす作戦!?」とか思われるかもしれません(笑⁠⁠。まあ不必要に小難しい用語であることは認めますが,決して嫌がらせのためにあるわけではなく,むしろ「尤度」というのは,確率を使って問題を解くためのとてもおもしろい考え方なのです。

もう少し具体的に説明しましょう。

「確率」というと普通は「あるサイコロをもし振ったら,1が出る確率」のように,これから起きる可能性のあること(事象)それぞれがどれくらいの割合で起きるのかを表します。

一方「尤度」というときは,⁠すでに観測されている,起きてしまったデータ」の確率を考えています。

つまり,候補となるサイコロがいくつかあるような状態で,⁠サイコロのどれかを振ったら1が出た。さて,どのサイコロを振ったのか?」という問題を,それぞれの1の出る確率を比べることで決める。それが「最尤推定」という考え方になります。

これが線形回帰だとどういうことになるのか考えてみましょう。

わかりやすくするために,今候補となるパラメータはwAとwBの2通りに限られているとします。そしてパラメータそれぞれごとに「尤度」は求められますが,それらの間にp(t1|wA,x1)>p(t1|wB,x1)という大小関係があったとしましょう。

このとき「尤度」の大きいwAの方が,今実際に起きているデータが発生しやすいわけですから,パラメータとしてより適していると見なすのです。

こうして確率版の線形回帰では,尤度関数(wの関数でしたね!)を最大にするwが最適なパラメータとして選ばれます。

p(t1|w,x1)がデータ(x1,t1)を説明する尤度関数であることには納得できましたが,しかし実際にはデータはもっとたくさんあります。N個のデータ点X=(x1,……,xN),T=(t1,……,tN)に対しても,その起きる確率を考えてみます。

実は簡単に求めることができます。各データ点についての尤度を全て掛け算すればいいのです。サイコロを続けて振ったときの出た目の確率は,それぞれの目の確率の掛け算になっていたことを思い出してもらえばわかりやすいでしょう。

掛け算より足し算の方がやさしいので,この両辺の対数をとったものを扱うことが多いです。これを対数尤度関数と呼びます。

対数はlogと書く方が馴染みある人の方が多いでしょうが,ここでは機械学習の作法にならってlnと書くことにします。自然対数の底を用いる場合はlnを,2や10を底とする場合はlogを使うことが多いようです。

対数関数は単調増加(右肩上がり)なので,対数をとる前に最大となるwと,対数をとった後に最大となるwは一致します。ですから,より簡単な対数尤度関数を最大化するwを求めればよいことになります。

対数が出て来て余計難しいと思うかもしれませんが,今回は本当に簡単な式になることをこれからちゃんと確認しましょう。

それぞれのp(t|w,x)は次のような形をした正規分布でした。

ただし

この対数をとると,expの中身はそのまま出てきて,これはwに注目するとただの二次関数です。

expの前についている1/Zにはlnが付きますが,よく見るとそもそもwが含まれていないため,対数尤度関数(wの関数!)の中ではただの定数扱いになります。

さらに目的が「関数を最大化するwを見つける」だったことを考えると,その定数項は求める必要すらないことがわかります。

そこで定数項をCという記号でまとめてしまえば,対数尤度関数は次のような形に整理できます。

元の尤度関数が「ややこしい正規分布の式をさらに掛け算しまくったもの」だったことを考えると,ずいぶん簡単になってくれましたよね? まあこの式が簡単かどうかはおいといて(!⁠⁠,どこかで見たことのあるような式だなあ,と気づけたならなかなか鋭いです。

実は第9回に出てきた,線形回帰を最小二乗法で解く場合の二乗誤差の式にそっくりなのです。二乗誤差の式を引用しますので,見比べてみましょう。

すると,二乗誤差に負符号とβと定数項Cを付ければ対数尤度関数になることがわかります。括弧の中身の引き算が逆ですが,二乗しているから同じですね。

符号が逆なのは,二乗誤差は「最小化⁠⁠,対数尤度関数は「最大化」しようとしていることに対応します。そしてβ(>0)やCは最小だの最大だのを与えるwには何の影響もありません。

したがって,確率化した線形回帰では,最小二乗法による線形回帰と全く同じ答えが得られます。

そこで,最後に第11回で紹介した最適なwを求める式を引用しておきましょう。

ただし

まとめ

同じ結果になるということは,なんだか複雑なことをしてわざわざ確率化しても無駄だったってこと?と感じてしまったかもしれませんね。でもご心配なく。

そもそも最小二乗法にしても,確率的な線形回帰にしても,何を最適さの基準とするかは「仮定」でしかありません第8回でその話をうるさいくらいしましたね⁠⁠。

しかし今回「全く異なる仮定を入れたのに同じ結果が導かれた」ことには,それらの仮定の選び方にある種の妥当性を与えてくれるという意味があります。また,確率化はベイズ化のためにどうしても必要なステップでもあります。

そこで次回は,この確率化した線形回帰をさらにベイズ化していきます。

著者プロフィール

中谷秀洋(なかたにしゅうよう)

サイボウズ・ラボ(株)にてWebアプリ連携や自然言語処理を中心に研究開発を行いながら,英単語タイピングゲーム iVocaをサービス提供している。

URLhttp://d.hatena.ne.jp/n_shuyo/
Twitterhttp://twitter.com/shuyo