FPGA開発日記

FPGAというより、コンピュータアーキテクチャかもね! カテゴリ別記事インデックス https://sites.google.com/site/fpgadevelopindex/

機械学習理論入門を(何とか)読了

機械学習理論入門を何とか読み終えた。最後の章のベイズ推定については、とりあえず読んでみたものの、ちゃんと理解できているかは相当あやしい。 結構大変そうなのでTensorFlowへの移植も今回はパス。とりあえずサンプルプログラムだけ実行してみた。 相変わらず、Windowsで実行すると何故か応答なしになってしまう。

f:id:msyksphinz:20151217003854p:plain

結局、機械学習とは何なのか

まあ当然と言えば当然だが、機械学習の背景にあるものは、その優れた学習成果を出すための優れたアルゴリズムにあると感じだ。 「誤差を最小にするために」「それもなるべく速く」にはどうすれば良いのか?そのためには、人間の考え出した高速かつ効率的な学習アルゴリズムが存在する。 コンピュータは人間の考えたアルゴリズムに従って「超高速」に「学習」という名のデータ収集をしているに過ぎない。 やはり、コンピュータは学習しているのではなく、人間の言われる通りに計算し、誤差を最小にし、大量のデータの中から特定のパラメータを抽出している。 そう考えると、「機械学習」とか「ディープラーニング」とか流行りの単語を聞いても、その背景にある計算理論とアルゴリズムをしっかり理解しておけば、恐るるに足りない(と胸をはってみるが、あまり自信はない)。

まずは「誤差を最小にする」ことを学習と捉えてみる

まずはここからだった。「教師あり学習」というところから始まる。本書では多項式のフィッティングを考え、いくつかのデータを利用してそのデータと「最も誤差の小さい」多項式を計算する。 これが教師あり学習の基礎だ。 次に、あらかじめ分類の分かっているデータセットの中から、その境界線について推定を行い、「最も誤差の小さい」データセットの境界線を導く。これも教師あり学習だ。

最小二乗法や最尤推定法は、これらの目的を達成するために、どのようにすれば効率的に、正確に、高速に答えを推定できるかの手段に過ぎないということが分かった。

教師がいない場合にどうするか

教師がいない場合、やはり大量のデータを処理していき、「どのように推定すると現在のデータ、未来のデータの処理が最もリーズナブルな結論に落ち着くか」を推定する。 答えが無い分やっかいだが、大量のデータにものを言わせ、「こう考えると辻褄があうね→つまり誤差が最小だね」ということを考えているように感じた。 k推定法では、教師の無い状態から、データを二分割するための方法に挑戦したが、「現在はこのように分割しているけど、この状態で理想の分割点を再度計算し、もう一度データ処理を実行してみると、こちらの方がよりリーズナブルな結論だね」という処理を繰替えしている。

基本は、やはりこれなのだ。誤差を最小化する。これがすべてだ。確率が入っても、複雑な計算式が入ってきても、これがすべてだ。そう思うと、機械学習、恐るるに足りない。

とかなんとかいいつつ

初学者が一冊本を読み終えただけで良い気になるなと自分でも思う。先端技術に追いて行かれないようにするためには、日々勉強しなきゃな。