"機械学習","信号解析","ディープラーニング"の勉強

HELLO CYBERNETICS

深層学習、機械学習、強化学習、信号処理、制御工学などをテーマに扱っていきます

機械学習の初心者が数式に困惑したら。解決への指針

 

 

前回機械学習を学ぶなら数学が必要だという話をしました。

 

s0sem0y.hatenablog.com

 

それと同時に、数学を極めてから機械学習をやるのではなく、機械学習をやりながら必要に応じて数学を学んでいくというスタイルをオススメしました。しかし、今から機械学習を学んでいこうという人にとって、機械学習の数式がわからないとき、果たしてどの数学を学べば改善が見込めるのかを判断するのは難しい問題かと思います。

 

そこで機械学習に現れる数式を実際に取り上げ、ケースごとにどの数学分野を補強すべきかの指針をまとめてみたいと思います。また、少しの定性的な理解を深める解説も載せておきます。今後のヒントになれば嬉しいです。

 

 パーセプトロンでのケース

全て同じ意味、式変形が分からない人へ

入力ベクトル\bf x=(x_1,x_2,...,x_n)^Tに対して、

 

y(\bf x)=f\left( \sum_{i=1}^{n}w_ix_i + w_0 \right)

 

という数式が現れます。この数式を大抵の本は以下のように変形します。

 

y(\bf x)=f\left( \sum_{i=0}^{n}w_ix_i \right)

x_0=1

 

最初の式と、この式が全く同じ計算式であることがわからない場合は、高校数学でのΣの計算になれる必要があります。

おそらく大丈夫だろうと思われますが、これは\sumのインデックスiを使って式を簡略化するためのテクニックで、x_0=1というダミー変数を使っているのが肝です。この手の式変形は頻出なので必ず慣れておく必要があります。更に通常は以下の表現へと変える場合が多いです。(そうでない本もありますが)

 

\bf x=(1,x_1,x_2,...,x_n)\bf w=(w_0,w_1,w_2,...,w_n)と置き

 

y(\bf x)=f \left( \bf w^Tx \right)

 

この数式も最初の数式と全く同じです。全部同じことを表しています。

これがわからない場合は、線形代数の表記に慣れていないことになります。

ベクトルや行列を使うと、非常にスッキリ数式を表せるため、慣れてくると断然コッチのほうがわかりやすくなります。x_0=1と置くことをしなくなったのは、\sumを使うときのようにインデックスiを準備する必要もないからです。

 

当然、全く同じ式なのですから、どれで機械学習を勉強しても得られるアルゴリズムは全て同じになります。だから線形代数が苦手なら、ここを避けて勉強をすることもできるかもしれません。しかし表現は簡潔な方が楽ですし、今後微分などの操作を数式に施す際にも線形代数の表記の恩恵を強く感じるはずです。私は線形代数の表記で勉強をすることを強くオススメします。

 

更新式の意味がわからない

パーセプトロンの識別に関しては、誤りが少なくなる方へ\bf wを更新していきます。

損失関数Eとして更新のアルゴリズムは以下の通りです。

 

1.入力データx_jとそのラベルt_jをセットで選びます。

2.入力データ\bf x_jに対して現在の重み\bf wを用いて出力yを計算します。

 

y(\bf x)=f \left( \bf w^Tx_j \right)

 

3.出力yの結果に応じて\bf wを更新します。

 

if 判定が正しかった場合

 

\bf w←w (なにも変更しない)

 

else(判定が正しくない場合)

 

\bf w←w-ε\bf {∇_w}E( \bf {w})

 

4.「1.」に戻ってデータを選び直すか、終了します。

 

この際数式の理解ができない部分があるとしたら、「3.」の判定が正しくなかった場合の更新式です。通常、損失関数Eを準備して、その損失関数を小さくする方向に更新しますが、この数式はそれをそのまま直接表現しています。本によっては\bf ∇_wではなく\frac{\partial}{\partial \bf w}を使う場合もありますが同じ意味です。

この数式の意味するところがわからない場合は、微分や偏微分、あるいはベクトルでの微分などの計算を理解する必要があります。

損失関数の取り方自体は、本によって様々ですし、判別を間違えるということを表現できるものであれば本来何でも良いものでここでは気にしません。

ある関数をベクトル\bf wで微分したのならば、それは関数の最も変化の大きい勾配方向を示しており(等高線の法線ベクトル)、その方向は関数の山を登る方向を向いています。従って、符号を負に取り、適当な倍率ε(通常学習率と呼ばれる)を用いて移動すれば、損失関数を最も減少させる方向に僅かに進むことができるのです。フレーズとしては最適化数学の勾配法などを理解するといいでしょう。

 

このような更新方法は、機械学習の最適化でよく用いられている確率的勾配降下法の基礎になります(というよりこれが理解できれば、あとは殆ど作業の問題です)。

 

確率・統計にまつわる数式

条件付き確率、同時確率、周辺確率の意味

機械学習で確率の分野に入ると、突如として

 

p(x|y)

 

という形の式が出てきて、真ん中の棒は一体なんだという経験はないでしょうか。

その後、続々と

 

p(x,y)

 

p(x)=\int_{y}p(x|y)p(y)dy

 

などが出現して、頭はパニック状態ということになる人も少なくないはずです。結構な人が機械学習の確率的なアプローチにすんなりと入れない状況かと思います。大抵の機械学習の本は、ここらへんの数式の処理は知ってて当たり前くらいの調子で書いています。

全く意味がわからないという状況でしたら素直に簡単な確率の本を手に取ってください。 

 

ちなみにそれぞれの簡単な解説を書いておきます。

 

1.条件付き確率分布p(x|y)

確率変数yの値が定まったときの、確率変数xの確率分布

例:xは今日の傘が売れる本数、yは今日の夕方からの天気

この場合p(x|y)は天気が雨か晴れか曇りか決定したときの、傘が売れる本数の分布となります。どう考えてもyがどの値に定まるかでxの値がどうなるかの分布は変わりますね。雨の場合にはこの条件付き確率分布はきっとxが大きな値の方に偏っているでしょう。

 

2.同時確率分布p(x,y)

確率変数xと確率変数yが同時に定まる際の確率分布

例:相席居酒屋を訪れる男性客数xと女性客数y

この場合は確率分布の形は、xyが同じくらいの値であるところで高い数値を取っていることを願いたいですね。きっと実際にはx \geq yの領域の方に少しずれていそうですかね(女性無料な分女性が多いことの方が確率高いのかな?)。

 

3.周辺確率分布p(x)=\int_{y}p(x|y)p(y)dy

おそらく一番難解だと感じるものでしょう。これは条件付き確率を完全に理解しているのが前提でしか説明できません。今回は割愛します。

簡単に言えば、条件付き確率分布の条件yの全てのパターンを網羅して確率分布を足し合わせれば、yに無関係の式になるということです。あるいは条件付き確率分布がいろいろなyの値によって複数考えられるわけですから、その色々なyを取る確率p(y)を重みとしたp(x|y)の重み付き平均がp(x)になるとも言えます。

 

確率変数とは?

確率変数xとは事象から数値への写像(関数)です。

これのどこが関数なのかというと、例えばジャンケンに勝てたら300円もらえる。ジャンケンに負けたら300円取られる。どちらかが勝つまでやる。という場合には、事象(勝ち,負け)を獲得できるお金という確率変数(300,-300)へ変換しているのです。

 

x(勝ち)=300

x(負け)=-300

 

という関数なのです。関数の引数として実現象を取れる便利な関数が確率変数というわけです。そして、数学では数値を取り扱うのが得意ですから、今後メンドウな事象のことは置いといて、確率変数がx={300,-300}の値を確率的に取るという設定で話を進めます。当然このときの確率分布はp(x=300)=p(x=-300)=0.5という確率分布になります(グラフでは日本の棒が立っている状態です)。

 

確率変数が確率分布と事象を結びつけてくれるわけですね。

少し機械学習の話に移り、例えば身長と体重、体脂肪率などの数値データ\bf xから男か女かという事象を判定したい場合、通常、クラスを表す確率変数Cを用いて、

 

C(男)=0

C(女)=1

 

というふうに数値の写像を決めておき、データが定まったとき(要するに手に入ったとき)のそのデータが表すクラスの確率

 

p(C|\bf x)

 

を使って判定を行います。当然、判定が正しくなるようにこの条件付き確率分布を求める必要があり、これが確率的アプローチによる機械学習になります。

 

ベイズの定理は何のために?

機械学習の確率的なアプローチの中でも最も強力なのがベイズ的アプローチです。

 

p(C|x)=\frac{p(x|C)p(C)}{p(x)}

 

前提知識である事前確率分布p(C)は、そもそもクラスCってのが全体的にどれくらい存在するのかなどを直感や経験、あるいはデータから適当に決めることができます。

また、クラス毎に手持ちのデータが整理されていれば、クラスCからどのようなデータxがどのように分布するのかを表す条件付き確率分布p(x|C)は従来の伝統的方法で求められます。

ベイズの定理は、人間が持つ事前知識と、伝統的な手法で得られる尤度を両方考慮した確率分布を得ることの出来る方法です。

また、一方で条件付き分布の条件と結果が左辺と右辺で反対になっていますから、数学的に一報が求めづらい場合にこの変形を行うという場合もあります。

 

パラメータと確率変数の違い

歪んだコインをn回投げるとき、表がx回が出る確率分布関数は、1回コインを投げたときの表が出る確率をrとしておくことで、

 

p(x)=r^x(1-r)^{n-x}

 

と表せます。このとき、確率変数は表が出る回数xであって、パラメータがrになります。すぐに分かるでしょうか?通常、このパラメータを推定することを統計学では行います。例えば100回投げれば表が何回出たかを数えておけば、確率変数の値は観測できます。例えば60回表が出たとき、パラメータrは幾つであると言うのが妥当でしょうか。こういうことを考えるのが統計学です。

 

ダーツを投げて刺さる位置の、中心からの左右へのズレを(右を正として)確率変数\bf xで表しましょう。この際、複数回投げた際の平均的な位置μと、平均からのバラつき具合を分散σ^2で表現しておくと、中心からのズレの確率分布は

 

p(x)=\frac{1}{\sqrt{2πσ^2}} \exp \left(- \frac{(x-μ)^2}{2σ^2} \right)

 

となります。確率変数は中心からのズレxでパラメータは平均と分散です。これは有名なガウス分布なので、平均と分散と聞いた時点で何となく思い浮かんだかもしれません。

当然これも、1000回くらい投げてみて、平均的にどのへんであり、分散はどれくらいであると言うのが妥当かを推定するのが統計学になります。

 

 

機械学習の確率分布の表現と、ベイズ的考え方

機械学習では通常パラメータθを使って表される確率変数xの確率分布は

 

p(x|θ)

 

と表現されています。θを一度推定したら、今後データがどんなふう生じるかの推定に役立つからです。もしかしたらこのθが何のことかよくわからないと感じている人もいるかもしれませんが、簡単に説明するとパラメータθが決まったときのxの確率分布ですから、パラメータが推定し終わっているならば、何も気にすることなくp(x)と同じです。

 

p(x)=\frac{1}{\sqrt{2πσ^2}} \exp \left(- \frac{(x-μ)^2}{2σ^2} \right)

 

と書くのも

 

p(x|μ,σ^2)=\frac{1}{\sqrt{2πσ^2}} \exp \left(- \frac{(x-μ)^2}{2σ^2} \right)

 

も別に右辺の内容が変わるわけではありません。

 

しかし思想的に大きな違いがあるのです。

 

機械学習のある分野では、求めるべきパラメータは一意に真の解を持っているのではなく、手持ちのデータ(確率変数)から得られるため同様に確率変数だと見なします。当然、学習の際に使うデータが変われば推定されるパラメータも変わるわけですから、確率変数という考えも一理あるでしょう。

一方で、本来その事象を説明するためのパラメータは真の解が存在するはずである。つまり確率パラメータではないという考え方もあります。むしろこちらが伝統的な考え方で、前者はベイズ統計学の考え方です。

 

機械学習ではベイズ統計の方が多い(はず)ですから、ベイズ統計学を少し学んでみると、機械学習の式変形も見慣れたものになると思います。

 

また機械学習ではパラメータを推定した分布を使って、今度は確率変数の予測を行うということまでを一貫して行います。すなわち、どんなパラメータを具体的に使っているのかを明確にしておきたい意図があるのです。しかもそのパラメータは確率変数であるという考えに基づいて、今後変更される可能性もあるため、なおさらです。

 

ベイズの定理再び

ベイズの定理をパラメータθと確率変数xに基づいて考えると

 

p(θ|x)=\frac{p(x|θ)p(θ)}{p(x)}

 

と表せます。ここまで来ると、パラメータが確率変数であるという考えが一層明確になっています。パラメータθは、手持ちのデータxで確率分布によって表示されるのです。そして、この式を使い、更新によって逐次的に推定を行うこともできます(ベイズ更新)。

 

多次元の確率分布

多次元正規分布の式

m次元正規分布の平均ベクトルμ、分散共分散行列Σとすると、

 

f:id:s0sem0y:20161002034346p:plain

(wikipedia) (数式辛いので画像で)

 

という形になります。 さて、一次元と似た形ですが、意味は分かりますでしょうか。似た形というより、同じ形なのですが、これは線形代数と確率統計いずれも理解がないと厳しいでしょう。

 

確率統計は一次元から勉強を進めていき、基本を抑える必要があります。そして、多次元に行く際には必ず線形代数を勉強してください。特に\expの中身は二次形式と呼ばれる、線形代数でのいわゆる2次関数の表現のようなものです。

 

ここらへんを恐らく、ここらへんからはかなり苦しく感じるかと思います。

PRMLでも2章に入って早速この調子で、挫折感を味わう人は多いはずです(しかもPRMLには数学の詳しい解説はないです。)。

 

s0sem0y.hatenablog.com

 

 

おすすめ関連記事

s0sem0y.hatenablog.com

s0sem0y.hatenablog.com