アドベントカレンダー2019冬

 2019アドベントカレンダー12/19担当の こ「@k1o2g1a9」です。最近は高校1年性の終わりまで頑張ってた「太鼓の達人」をしています。キミドリバージョンで十段に受かってこれからっていう時期にボルテにはまってそれからほとんどしなくなったため、また十段に復帰(ソライロ、モモイロ)できるように、また「でたらめ」をとてつもなく頑張っていたのでそちらも頑張りたいですね(今ではそうでもないかもしれないけど当時キミドリまではそこそこの記録だったんじゃないかって自分で勝手に思っています)。

 秋のアドベントカレンダーではカービィのゲームに関する記事を書きましたがそろそろ違うネタでブログを書こうかなと思ったり思わなかったりしています。

 

 今回は数学のお話をしようと思います。と言ってもまだ数学にわかなので厳密でないかもしれません。日本語的におかしい部分があったら教えてください。ガラスのメンタルなので優しくこっそり教えてください。

 

 数学のことで何を話そうかな、って考えたのですが3年後期から研究室配属されて専門的な内容を勉強し始めたのでそのことについて話そうと思います。

 

 なので(?)、今回のテーマは「機械学習」です。新しい定義を理解したり定理を証明したりなどではなく、今まで勉強した数学的内容を使って新しいことを勉強します。と言ってもまだ研究室配属されて2ヶ月ちょっとなのでまだ具体的な数値を用いた計算は一切してませんしプログラミングをしてなければPython機械学習といえばPython)のPの字も理解していないので、機械学習の基礎部分というか、統計分野の基礎も含めて適当に掻い摘んで話したいと思います(統計の知識をいっぱい使います)。まだ理解してない部分もあるのでセミナーで担当した部分を引っ張ってきました。

(yでもベクトルで表されているのか実数で表されているのかをはじめに書いておきます。

 ベクトル→\mbox{y}、実数→y

 

目次

1 多変量正規分布

2 最小二乗推定法

3 リッジ回帰

4 ラッソ回帰

5 正規分布の積の積分計算について

 

1、確率分布について

 確率分布って何?って思った人はそこから説明していると文量がとんでもないことになるのでGoogleなりで調べてください。(すいません)

 

 機械学習の本を読んでいてよく目にするのは多変量正規分布だと思います。どんな式かというと(k次元正規分布)、

f(x_1,...,x_k;\mbox{μ},\mbox{Σ})=\frac{1}{(2\pi)^{\frac{k}{2}}\sqrt{|\mbox{Σ}|}}exp(-\frac{1}{2}(\mbox{x}-\mbox{μ})^T\mbox{Σ}^{-1}(\mbox{x}-\mbox{μ}))

\mbox{μ}=(μ1,...,μk)^Tは-∞<μj<∞ ,i=1,...,kを満たし、\mbox{Σ}=(\sigma_{ij})は正値定符号の対象行列

こういう式です。他学部は知らないけど数学科では3年前期の統計科学・演習の講義で出てきます。当然計算量は増えるので泣きそうです。

 

2、最小二乗推定量

 多分メインはここです。

 \mbox{y}=\mbox{X}\mbox{β}+\mbox{ε}と表されるものを考えます。ここで、

\mathbb{E}(εj)=0,cov(εi,εj)=\sigma^2\delta_{ij}

を満たします。この式の意味は1次元でイメージを掴むのがいいと思います。f:id:k1o2g1a9:20191212221139j:plain

 一次元の場合、y=f(x)+ε、またはy=α+βx+εの形で、直線部分がf(x)

緑の点がyの値で赤線の長さがεに対応しています。

 

 \mbox{ε}は誤差を表しているので、やっぱり誤差は小さい方がいいよね

 

これからは\mbox{ε}の2乗を最小にすることを考えます。最小といえば微分して0になるところを探しましょう。

 

\mbox{ε}^2=\|\mbox{y}-\mbox{X}\mbox{β}\|^2を考えます。これを最小にするベータを最小二乗推定量というらしいです

右辺をQ(\mbox{β})と置いて、展開すると、

 

Q(\mbox{β})=\mbox{y}^T\mbox{y}-2\mbox{β}^T\mbox{X}^T\mbox{y}+\mbox{β}^T\mbox{X}^T\mbox{X}\mbox{β}

となります。\mbox{β}に関して微分すると、

 

\mbox{0}=\frac{\partial Q}{\partial \mbox{β}}=-2\mbox{X}^T\mbox{y}+2\mbox{X}^T\mbox{X}\mbox{β}

 

よって、次の式を得ます。

\mbox{X}^T\mbox{X}\mbox{β}=\mbox{X}^T\mbox{y}

これは正規方程式と呼ばれるらしいです。

\mbox{X}^T\mbox{X}逆行列を持つならば、

\mbox{β}=(\mbox{X}^T\mbox{X})^{-1}\mbox{X}^T\mbox{y}

 

f:id:k1o2g1a9:20191212221239j:plain

 

  最小二乗推定法の欠点は上図のように値が大きく外れる点がある場合(これを外れ値と言います)、誤差の二乗を用いるため、外れ値の影響を受けてしまいます。そういうときはロバスト回帰といった方法で対処することができます。

3、リッジ回帰(ridge regression)

 f(\mbox{β})=\|\mbox{y}-\mbox{X}\mbox{β}\|^2+\lambda\|\mbox{β}\|^2

の形で表されるものを考えていきます。過学習(overfitting)が起こることを防ぐために

ラムダの値をいい感じにします。(モデルの係数の2乗和の絶対値または2乗和が大きくなってしまうと訓練データのモデルに適合しすぎてテストデータのモデルの当てはまりが悪くなるoverfittingという現象が起こるため)

訓練データとは言葉の通りコンピュータを訓練させるためのデータで、テストデータとは訓練データだけでなく未知のデータにも適合するのかを確認するためのデータのことです。過学習とは、例えば下の図だと点が6つあってその点を正確に通るようなもの(つまり訓練データのモデルに適合しすぎているもの)があったとして、未知のデータはこのモデルにぴったり当てはまるとは限らず、テストデータのモデルの当てはまりが悪くなります。

 

 

f:id:k1o2g1a9:20191212221311j:plain

 

 ラムダの値を調節することで緑→赤のようにします。 

ここで、この関数を最小にするベータを求めます。最小二乗推定量を求めたときと同じように微分して=0をします。計算をいろいろすっ飛ばすと、

\mbox{β}=(\lambda\mbox{I}+\mbox{X}^T\mbox{X})^{-1}\mbox{X}^T\mbox{y}

の形になります。さっきの最小二乗推定量と形が似ています。

4、ラッソ回帰(lasso regression)

f(\mbox{β})=\|\mbox{y}-\mbox{X}\mbox{β}\|^2+\lambda\|\mbox{β}\|^1

の形で表されるものを考えます。ラムダはリッジ回帰と同様の役割を果たします。

 形はリッジ回帰をめちゃめちゃ似ていますが、ラッソの場合は解がsparseになるといった利点があります。sparse性とは簡単に言ったらベクトルとかで0がたくさんあるやつで、一部分のみ(非ゼロ要素)を考えたらいいことになります。

 詳しい部分は自分もわかってない部分が多いので次回のアドベントカレンダーあたりで書けたらいいなって思ってます。

 

5、正規分布の積について

    機械学習では正規分布の積を積分する時がよくあるそうです。具体的には

\int N(y|\mbox{x}^T\mbox{w},\sigma^2)N(\mbox{w}|\mbox{wN}.\mbox{VN})d\mbox{w}

こういうやつです。これは

N(y|\mbox{x}^T\mbox{wN},\sigma^2+\mbox{x}^T\mbox{VN}\mbox{x})

こうなります。ここでは多変量正規分布を扱います。

 次の定理を使って解きます。

p(\mbox{x})=N(\mbox{x}|\mbox{μ}_x,\mbox{Σ}_x)

p(\mbox{y}|\mbox{x})=N(\mbox{y}|\mbox{A}\mbox{x}+\mbox{b},\mbox{Σ}_y)

この時、

p(\mbox{y})=N(\mbox{y}|\mbox{A}\mbox{μ}_x+\mbox{b},\mbox{Σ}_y+\mbox{A}\mbox{Σ}_x\mbox{A}^T)

が成立。

 今回この定理を認めて解いていきます(時間があれば今度証明をします)。

 あとは次の等式

p(\mbox{x},\mbox{y})=p(\mbox{x})p(\mbox{y}|\mbox{x})

の両辺を\mbox{x}に関して積分をすることによって計算をすることができます。

 これだけ準備をすれば、あとはパズルのように組み立てるだけです。

N(y|\mbox{x}^T\mbox{w},\sigma^2)N(\mbox{y}|\mbox{A}\mbox{x}+\mbox{b},\mbox{Σ}_y)

N(\mbox{w}|\mbox{wN}.\mbox{VN})N(\mbox{x}|\mbox{μ}_x,\mbox{Σ}_x)

これらを比較すること

\mbox{x}→\mbox{w}

\mbox{μ}_x→\mbox{wN}

\mbox{Σ}_x→VN

\mbox{y}→y

\mbox{A}\mbox{x}→\mbox{x}^T\mbox{w}(\mbox{A}→\mbox{x}^T)

\mbox{b}→\mbox{0}

\mbox{Σ}_y→\sigma^2

このようにしてやれば、

p(\mbox{w})=N(\mbox{w}|\mbox{wN},\mbox{VN}

p(y|\mbox{w})=N(y|\mbox{x}^T\mbox{w},\sigma^2)

となるので、

\int N(y|\mbox{x}^T\mbox{w},\sigma^2)N(\mbox{w}|\mbox{wN},\mbox{VN})d\mbox{w}

=\int p(y|\mbox{w})p(\mbox{w})d\mbox{w}

=N(y|\mbox{x}^T\mbox{wN},\sigma^2+\mbox{x}^T\mbox{VN}\mbox{x})

となることがわかります。

 

今回はここで終わりです。

もっと機械学習の知識がついたらもっと機械学習らしいことをテーマにしたいと考えています。統計の勉強をしているときに1年生の頃学んだ微積線形代数(特に線形代数)がかなり大事だなって感じます。基礎はとても大事なのでサボらず気合いを入れて勉強した方が後々楽になると思います(復習に追われてしまうので)。行列に関して例えば行列の微分などはあまり扱ってないかもしれません。僕の場合は今は使わないといけない場面が多いので困っています。そういう時は次のmatrix cookbookで調べるのがいいでしょう(僕もたくさん利用しています)

https://www.math.uwaterloo.ca/~hwolkowi/matrixcookbook.pdf

 

 

 

 

このブログを書くにあたって参考にした本たち

1、数理統計学 ー基礎から学ぶデータ解析ー 内田老鶴圃 ←おすすめ

2、数学シリーズ 数理統計学 改訂版 裳華房

3、Machine Learning -A Probablistic Perspective-   ←全部英語