ざっくりML

機械学習に興味ある大学院生によるブログです.

ベータ分布

ベルヌーイ分布と二項分布のパラメータ\mu最尤推定で求めた結果は\mu_{ML} = \frac{m}{N}で、データ集合中でx = 1となる観測値の割合になる. しかし、例えば3回の試行中3回とも表が出た場合に\mu_{ML} = 1となってしまい今後もずっと表が出るように予測することになる.これは過学習してしまっている. そこで、この問題をベイズ主義的に扱うことを考える. ベイズの定理は、

{\displaystyle p(x|y) = \frac{p(y|x)p(x)}{p(y)}}

であり、p(x)を事前分布、p(x|y)を事後分布と呼んだ. したがって、ベイズ主義的立場でパラメータを推定するときには、パラメータの事前分布p(\mu)を考え、事後分布p(\mu|x)を最大にしたり(MAP推定)利用したりすることをする. 今回はベルヌーイ分布や二項分布のパラメータの事前分布についてまとめる. まず尤度は\mu^{x}(1-\mu)^{1-x}の形をしている. したがって、事前分布に \mu 1-\muのべき乗に比例するように選べば、事後分布は事前分布と同じ形になる. なぜなら事後分布は尤度と事前分布に比例するからである. この性質は共役性と呼ばれている. なので、事前分布には事後分布と共役なものを選ぶと良い. このことから、ベルヌーイ分布や二項分布のパラメータの事前分布には次のベータ分布を選ぶ.

{\displaystyle Beta(\mu|a,b) = \frac{\Gamma(a+b)}{\Gamma(a)\Gamma(b)}\mu^{a-1}(1-\mu)^{b-1}}

ただし、\Gamma(x)はガンマ関数と呼ばれ、\Gamma(x) \equiv \int_{0}^{\infty}u^{x-1}e^{-u}duで定義されている. aとbはパラメータの分布p(\mu)を決めるためのパラメータで超パラメータ(hyperparameter)と呼ばれる. ここで、ベータ分布を私が実装したコードを以下に示す.

gist163dce714aebb6093bc8e65586caf82b

また、超パラメータを色々な値に設定した時のベータ分布の図をいかに載せる. f:id:linearml:20170822212717p:plain

\muに依存する部分だけを取り出すと事後分布は、 p(\mu|m,l,a,b) \propto \mu^{m+a-1}(1-\mu)^{l+b-1}になるのは容易に確かめられる. ただし、l = N -mには注意. この式は事前分布の共役性によって事前分布と同じ形になっていることがわかる.

ベルヌーイ分布

第2章の確率分布の一番最初に紹介されているベルヌーイ分布について

二値確率変数 (binary random variable, 以下二値r.v.) {x \in \{0,1\}}が1つの場合について考える. 例えば、 x = 1で「表」、x = 0で「裏」を表現するとする. これを使えばコイン投げの結果が二値r.v.で表現できる. 一般の話を扱うので「表」が出る確率は0.5ではなくパラメータ\muで表すことにする. つまり、

{\displaystyle  p(x = 1 | \mu) = \mu }

となる. 確率なので  0 \leq \mu \leq 1 を満たし、 p(x = 0 | \mu) = 1 - \muとなる. これより xが従う分布は

{\displaystyle Bern(x | \mu) = \mu ^{x} (1 - \mu)^{1-x}}

となり、これがベルヌーイ分布である. 平均、分散はそれぞれ、E[x] = \mu, V[x] = \mu (1-\mu)である.

ベルヌーイ分布をpythonとmatplotlibを使って可視化してみようと思う. 私が書いたソースは以下の通りである.

パラメータをそれぞれ0.1,0.5,0.8に設定したものを載せておく.

f:id:linearml:20170818103828p:plain f:id:linearml:20170818103833p:plain f:id:linearml:20170818103839p:plain

次に、観測データ集合 \{x_{1},\cdots,x_{N}\}がベルヌーイ分布から独立に与えられたとする. その時の尤度は

{\displaystyle \prod_{n=1}^{N}\mu^{x_{n}}(1-\mu)^{1-x_{n}}}

となり、この尤度を最大にするようにしてパラメータを推定するのが最尤推定である. 積の形では扱いにくいので尤度の対数をとって和の形にしてしまう. この対数尤度をパラメータ \mu微分して0とおき、方程式を解けば最尤推定量が求まり以下のように得られる.

{\displaystyle \mu_{ML} = \frac{1}{N} \sum_{n=1}^{N} x_{n}}

ここで表が出た回数、つまりx = 1となった回数をmとすると

{\displaystyle \mu_{ML} = \frac{m}{N}}

となる. 例えば試行3回中3回とも表が出た場合に、最尤推定量は1となるので、今後もずっと表が出続けると予測してしまっている. これは過学習の極端な例であるが、これではまずい. 今後はパラメータが従う事前分布を導入して、もっと常識的な結果を得る方法について考える.

パターン認識と機械学習の備忘録

  

 大学院に進学して気付けば前期が終わってしまいました.

夏休みの間は3週間のインターンに行くので思ったように自分の勉強、研究ができないと思いますが、少ない時間の中で勉強していきたいと思います.

 

前期の間に、線形代数統計学機械学習の基礎っぽい所、最適化問題について復習できたのでビショップ本に挑戦してみようと思い、そのための備忘録をこのブログで残していこうと思っています. 重要な内容をまとめたり、実装できそうなところがあればそのソースコードや可視化した画像なども公開していこうと思っています.(いつまで続くか分かりませんが...)

ビショップ本は難しいで有名ですが、一通り学習し終えた後にはそれなりに成長していると信じて勉強しようと思います.

 

パターン認識と機械学習 上

パターン認識と機械学習 上

 

 

 

パターン認識と機械学習 下 (ベイズ理論による統計的予測)

パターン認識と機械学習 下 (ベイズ理論による統計的予測)

 

 

 

まず前期に行った復習に使った本の紹介をしようと思います.

 

線形代数は数多くのサイトで紹介されている「プログラミングのための線形代数」を使いました.

 機械学習を勉強していく上で線形代数は必要となってきます.

私自身、行列やベクトルの演算は不自由なく行えたのですが、逆行列の存在や固有値固有ベクトルについての知識が曖昧だったのでそこらへんを中心に埋めなおしました.

この本は線形代数を実際どのように使っているのかが分かりやすく書かれているので、学部の時に使った教科書のようによくわからずに式を追っかけていた頃より理解が深まったと思います.

プログラミングのための線形代数

プログラミングのための線形代数

 

 

統計学は「統計学入門」を使いました.

これまた有名な本なので今更紹介することもないのですが...

統計学検定の2級ぐらいは受けようかなと思い勉強中です. 

統計学入門 (基礎統計学?)

統計学入門 (基礎統計学?)

 

 

機械学習はB4の頃も卒業研究の題材にしていて、ゼミでも輪講をしていたのですが、再度基礎を固めようと思い「言語処理のための機械学習入門」を読み直しました.

また演習問題も全部解きなおしました.

機械学習が流行っている現在、本屋に行けば数多くの機械学習に関する本が並んでいます.

その中でも機械学習を勉強するための1冊目に最も適していると思っています.

基本的な数学的知識(微分、行列、ベクトル演算ぐらい)があれば数式が追いかけられます.

また具体例や図が多く理解を深めやすいと思います. 言語処理のためのと書いてありますので、言語処理に特化したトピックもありますが、それ以外はコンピュータビジョンやら音声解析やらにも共通する話題ですので、これで入門するのが良いと思います. 

言語処理のための機械学習入門 (自然言語処理シリーズ)

言語処理のための機械学習入門 (自然言語処理シリーズ)

 

 

最適化問題の復習は「数理計画入門」を使いました.

機械学習とは最適化問題である」 と言われるぐらい外せない分野です. 上で紹介した「言語処理のための機械学習」にも最適化問題について扱われているセクションがありますがより深く学ぶ必要があると思い、1冊手に取って勉強しました. 

この本は数学的説明を端折ることが多々あるので、厳密に証明をしていきたいという人には不向きかもしれません. しかし、量的にもそんなに多くなく一通りの手法について学習できるので短期間で網羅したいという人にはオススメかもしれません.

最適化問題で有名なのは「これなら分かる最適化数学」だと思います. 私自身読んだことがないのでここではレビューはしませんが、後期に入ったら読もうと思っているのでその時にまたブログに書こうかなと思っています.

 

新版 数理計画入門

新版 数理計画入門

 
これなら分かる最適化数学―基礎原理から計算手法まで

これなら分かる最適化数学―基礎原理から計算手法まで

 

 

以上が私がビショップ本に入る前に復習した内容です.

年内には一通り目を通したいなあ

論文サーベイ part2

今回は「Face Recognition Face2vec Based on Deep Learning : Small Database Case

出展 : Automatic Control and Computer Sciences 2017

  • 概要:異なった状態の画像に対して訓練され、その各々のデータ数は少ない、認識率をあげるには約100万の画像が必要

  • 新規性、差分:少ない訓練データ数で特徴ベクトル抽出が可能に

  • 手法、アルゴリズムのキモ:出力層の線形分類層を取り除いて、特徴ベクトルを抽出し、ベクトルを正規化してから類似度を測る(多分。。。)

  • 結果:精度良く学習できた(特に前を向いた画像のみを用いた場合に97.98%)

  • 結論、議論;様々な物体、状態の画像に対して適用できる.小さいデータセットで訓練可能.データセットにない画像に対しても適用したい

  • コメント、感想:word2vecみたいな演算はできないのかなあ、「〇〇と××を足して2で割った人」をベクトル演算で出すとか

論文サーベイ part1

 

サーベイした論文の内容が後からみてわかるように自分なりにまとめていこうと思います.

 

 

Abstract, Introduction, Conclusionはどの論文に対しても簡潔にまとめたものを公開し、興味があるものだけ中身を精読していこうと思います. 

今回は「Recurrent Neural Networks With Missing Information Imputation For Medical Examination Data Prediction」です.

2017年のBigCompで発表されたものです.

 

  • Abstract : Recurrent Neural Network(RNN) を用いて欠落データを含む健康診断データを用いて未来の健康診断の結果を推定する
    (ここで言う欠落データとは、一年に一回の健康診断を受けられなかったりして、データがないことを言う)

  • Introduction : 病気の早期発見をすることで治療が難しいものも治療可能になることがある
    特定の疾病を機械学習を用いて推定する研究は多くされているが広い領域に適用できていない
    RNN、LSTMを用いる
    欠落しているデータをRNNで推定し、それを新たな入力とする
    比較手法には線形回帰を用いる

  • Simple Recurrent Network (SRN) : 健康診断データを推定するためにRNNを用いる

    f:id:linearml:20170503185631p:plain

  • Long Short-Term Memory : LSTMを使う

    f:id:linearml:20170503185616p:plain

  • Missing Data Compensation Using RNNs : 提案手法にあたる部分

    f:id:linearml:20170503184551p:plain

    グレーのノードが欠落している時t-1までのデータを使って推定したy(t)を次の入力につかってやろうっていう単純な話

  • Experiment Result : 2002年から2012年の韓国人の健康診断データをで訓練し、2013年のデータを推定する(訓練は完全データで行い、推定の時に欠落データを含んでいるものも推定できるか実験する)
    線形回帰に比べてRNN,LSTMのどちらをつかった場合でも精度良く推定できた
    RNN,LSTMの間に差はあまり見られない
  • Conclusion : 欠落データを含む健康診断データに対して既存研究に比べ高い精度で推定できた

感想:2017年とかなり新しいわりに発想はかなり単純

 たかが10年のデータを使っていたからRNN、LSTMに差は見られなかったのだろう

実験のとこで、欠落データに対して提案手法と線形回帰以外に入力を置き換えない普通のRNNを用いてものでも比較したほうがよかったのでは?(ただRNNが強かっただけかもしれない)