l_n_m’s diary

よわい電気系の日記(本当にただの日記)

機械学習……の前に下調べ

機械学習のお勉強

何も分かっていませんが、研究で使うかもなぁということで勉強開始。
とりあえず、今回は

  1. 機械学習のステップ
  2. Deep Learningとの違い
  3. 各手法の代表的なもの

をメモしておきます。
あー、誰か詳しい人に手ほどきを受けたい………………。

機械学習のステップ

  1. データが入力される
  2. 特徴抽出
  3. ベクトル表現
  4. 学習器で分類
  5. 結果出力

この特徴表現、すごく大変。どういう重み付けをするかは各分野の「プロ」が「感覚で」やっていた。特徴工学(expression engineering)とかいう分野にもなっているっぽい。調べると深そう。でも深層学習のせいで未来が危うい気もする。失礼かな?
ベクトル表現は、特徴量を元に、上手く特徴を表せるようなベクトルを採用したもの。
次元圧縮は、入力から特徴を出しただけだと次元数がヤバいので、低次元に落とし込んで出来るだけ情報量を減らすこと。手書き数字の認識の例が上がっていたけど、そのままだと256次元。2次元に落とし込んでた。

Deep Learing:深層学習

いちいち英語打つのめんどいから深層学習、って書きます。
機械学習のステップのうち、
「「「特徴抽出~学習器」」」
までを勝手に機械にやってもらいます。
なんじゃそりゃ、殆ど機械任せやんけ、って思うかもしれませんが、そのとおりです。
機械学習が基本なので、そっちの流れを理解しておくだけで「今なにやってるんだろう」っていうのが分かりそうです。
機械学習ではAuto EncoderだのRBMだの、いろいろ手法があります。それがどのステップに対する手法なのか混乱していたら死にそう。
まぁ名前だけじゃなくて中身まである程度理解できれば大丈夫だと思いますけどね。

深層学習の手法

今更特徴抽出の方法について学ぶ気はさらさらありません。
機械学習でデータが正しく分類出来たか判断するデータ(教師データ)を作るのにひょっとしたら役に立つのかもしれませんが……

というわけで、以降の話の殆どは深層学習の手法についてです。

事前学習 : Pre-training

実際の判断を行う前に、深層学習用のプログラムだとかデータだとかを用意して分類器に学習させること。
それはそう、というかなんというか。
スライドに書いてあったから一応書くけど、深層学習の流れとは関係ないような……?
以下で述べる特徴抽出では、段階的に特徴を切り出していって、各段階で学習します。そこでpre-trainingと書かれているので、まだ理解しきれていない疑惑。一体何者なんだ、pre-training....
分かったら追記か何かしよう。

特徴抽出

特徴を取り出す。どんな特徴があるのか何も分からないけれど、とりあえず情報量を減らしたい。
入力の一部を切り出して(境界でトラブルが起きないように少しずつ重複させて)、抽出を行う。
抽出って言うと漠然としているけれど、実際は入力をボルツマンモデルとかに流して判定する。ボルツマンモデルはちょっと横に置いといて、ニューロンモデルは後で別の記事にまとめよう。
基本の殆どはAuto-encoderかRBMのどちらかに基づいているらしい。今日巡ったサイトではこのふたつばっかり書いてあった。

Auto-encoder

入力データを圧縮したベクトルを作成。そのベクトルから元のデータを復元してみる。ちゃんと復元出来たベクトルの勝ち。
というわけで、上手く非可逆圧縮する方法を探るのがこいつ。参考にリンクを貼っておくので、詳しく知りたければ。
できるだけよく復元する、っていうのはノイズ除去にも使えるよね、ってことでDenoising Autoencoderというものもある。おまけ知識。

RBM : Restricted Boltzmann Machine

詳しくはまた今度。
確率推定のためのボルツマンマシンの、制限を加えて計算量を抑えたもの。
本当の名前は「Contrastive Divergence Method」。日本語で呼ばれることはないっぽい。wikipediaでもカタカナでしか書かれていないし。
確率分布推定に基づく。

  • 制限って何さ?

ボルツマンモデル上にはたくさんのノードがあります。ノードはVisible UnitsとHidden Unitsの2種類があります。Visible-Hiddenの間でしか接続されないようにすることで、O(ノード数^2)の計算量を大幅に抑えます。

DBM : Deep Boltzmann Machine

RBMを階層的に並べたもの。
ボルツマンマシンは0か1かの状態を取ります。
Visible Unitsに入力されてHidden Unitsに渡されて、状態を決める関数に投げられて、Hidden Unitsが0か1かの値を取ります。
それを次の階層のVisible Unitsに入力として渡してあげれば、DBMになります。
参考文献のslideshareのやつが分かりやすい。
学習した内容は、入力側から1層ずつ確定させていくことに注意。
深層学習の先駆けとなったSuper Visionでは、15万データを1000カテゴリに分類していて、5層、65万ニューロンのDBMを採用していたそうです。

判定

判定基準がありません!!!!!!
これは深層学習に限らず、「教師なし学習」のお話。
学習段階で、何が正解だとかそういうのは判定出来ない。
「とりあえずこんな特徴量を出してみた……で?」って状態。
実際に学習したマシンを使うときに、入力を分類出来ればいい(必要なデータを、学習中に同じように分類されたデータから取ってくる)ので、分類分けします。
これを用語的にはクラスタリングといいます。

手法

クラスタリング手法で一番シンプルなのはk-means法。だいたい同じ数ずつに分類できる、という前提のもと、データを分類します。
2次元でいう円を作るようにして分類するので、円形の壁を作って内側と外側、みたいな分類は出来ません。それも可能にしためっちゃ強いkernel法というのもあります。難しいらしいので略。
クラスタリングで最強の手法というのは今のところ無いらしい。いくつも手法はあるけれど一長一短。

やっぱり判定

判定基準が無いと言ったな。あれは嘘だ。
教師あり学習を用いて判定をするようにするとか、いくらでもやりようがある。
教師あり/なし学習、両方ともあるみたいです。調べたページによって、教師ありだよ/いや、無しだよ、と分かれていました。
クラスタリングするか、ちゃんと分類されたか確認するかの違いですね。深層学習以前のお話です。
これも参考文献どうぞ。

参考

これを読み進めております。ちょっと古いけど問題ないでしょ。
Machine Learning Advent Calendar 2014 - Qiita
そこからさらに飛んだ先の、わかりやすいやつ
Deep learning
Hello Autoencoder — KiyuHub
後ろの難しいアルゴリズムとか発展とか
ゆるふわ Restricted Boltzmann Machine - Risky Dune
教師ありとなしについて
機械学習とは

ではひとまずこれで。