PRML輪読4, 5日目
ディープラーニングとのギャップを感じて深層学習に浮気しつつも予定通り輪読も進めています。
また更新忘れていたので二日分のまとめ
進捗
4日目の範囲
- 2 : 確率分布
- 2-1 : 二値変数
- 2-2 : 多値変数
5日目の範囲
- 2-3 : ガウス分布
- 2-3-1 : 条件付きガウス分布
- 2-3-2 : 周辺ガウス分布
- 2-3-3 : ガウス変数に対するベイズの定理
- 2-3-4 : ガウス分布の最尤推定
- 2-3-5 : 逐次推定
- 2-3-6 : ガウス分布に対するベイズ推定
さすがに1回1時間の輪読では全然計算をカバーできなくなってきて、大事だとおもったところの式展開を追いかけつつ流れを追うような感じで進めています。2章が終わったくらいで一通り計算して答え合わせ回みたいな回を作るかも....
PRML輪読2, 3日目
更新をサボっている間に3日目が終了しました。
一章を読んで
1章通して、回帰問題やクラス分類問題に確率を導入する方法を学びました。たとえば、多項式のフィッティングなどに確率論を導入しました。
確率を導入する場合は、
- サンプルされたデータをもとに、ある値に対する出力の確率分布を求める
- 確率分布より値を決定する
という2ステップで値が決まります。
例
たとえば、多項式フィッティングをした場合近似関数f(x)が求まるので、
f(x=10) = 5
のように関数にxを代入してやれば答えが得られます。
確率を導入した場合は、まず確率分布p(t|x)が得られるので、
.
.
p(4|x=10) = 0.1
p(5|x=10) = 0.8
p(6|x=10) = 0.08
.
.
のように、x=10の点での値の確率分布がまず得られて、この確率をもとに
x=10のときは5
と値を決めます。
確率を導入するメリット
確率を導入する目的として、そもそも過学習などの問題を解決するという目的はあったのですが、他にも
- 外部要求であまり間違えて欲しくない間違え方がある場合、確率に補正を加えるという簡単な方法で対応できる(リスク最小化)
- 値決定の妥当性が確率で出ているため、決定が難しい値を決めずに判断を人力に委ねることができる(棄却オプション)
- 識別したいデータが母集団の中で十分に少ない時、そのまま学習データとして用いると精度が全く出ない可能性があるが、確率で出すなら識別したいデータを抽出し、学習した後確率を補正する方法で精度を得ることができ、また容易に補正できる。
など、いろいろと確率という情報があることによってできることがあることを知りました。
情報理論については、各種エントロピーがどのように取り扱われているのかがわからないので理解は甘いのですが、話としては定性的な情報量の議論からそれを支えるロジックとしてミクロカノニカル分布を導入しての説明があったのでしっかりしているなという印象を受けました。情報量についても確率が小さいほど大きく、また独立な事象は足し合わせることができる、という要求のもとに一番シンプルな関数を定義しているのかな、という筋道がしっかり立っていたのでよくわかった感じがします。
内容に関しては、情報理論におけるエントロピーは統計力学と異なり、1要素あたりのエントロピーをエントロピーとして扱うのだということを確認しました。あとボルツマン定数も付いてない。
式展開をしっかり追うために、演習を解きたいと思いつつ、ひとまず全体の展望を見るために先に進むことにしました。
ChainerのサンプルのMNIST学習が動かなかった(修正済み)
Twitterで@unnonounoさんからレスポンスをいただき、すぐに修正していただきました!以後は普通に
python chainer/examples/mnist/train_mnist.py
を実行すれば実行可能です!
また、このtrain_mnist.pyですが、デフォルトでCPUのみで計算をします。--gpu=0等のオプションをつけるとGPUで計算してくれます。
参考
DIGITSでぶんまわして遊んだので、そろそろ手入れて遊びたいとChainerをインストールしました。
mnist = fetch_mldata('MNIST original')
上のブログによると、どうやらこれがダウンロードに関係しているらしい。
ところが、手元のコードでこの記述を探すとそもそもfetch_mldataという記述がない。