-
Notifications
You must be signed in to change notification settings - Fork 2
第1回 機械学習の基礎
機械学習には様々な種類・アルゴリズムが存在するが、それらにほとんど100%共通して言えるのは、機械学習とは 「データの分類を計算機で自動化する」 技術である。 現代社会では至る所に機械学習が応用されているが、スパムフィルタも言語判定も文字認識も含め普く機械学習は 「計算機で自動的に受け取ったデータをいずれかのクラスに分類する」ことになる。
機械学習には学習の仕方によっていくつかの種類がある。
学習時に学習データとラベル(つまり答え)を一緒に学習させる。手書き数字認識なら
- 学習データ: 手書き数字の画素
- ラベル: 手書き数字が0〜9のどれなのか
学習時にラベルを与えず、学習アルゴリズムに勝手に「いい感じの」境界を作ってデータを分類させる。例えば自然言語で書かれたテキストの分類など。
発言を自動生成する類いのbotも、教師なし学習の一種である(Hidden Markov Modelで連鎖して発言を連続的に生成する等)。
このビジュアライズデモがわかりやすいと思う(k-means法)。
K-means 法を D3.js でビジュアライズしてみた - てっく煮ブログ
(まだ勉強していないのでわからないです…教師なし学習の派生っぽい)
この分科会で主に扱うのは教師あり学習の方である。
手書き文字認識を例にとる。「れ」という文字が入ってきたとき、人間(日本人)ならパッと見で「この文字は『れ』だ」と認識できるが、計算機に認識させるためには数学的特徴に落とし込まなければならない(なぜなら計算機は本質的には四則演算しか扱えないから)。 文字認識なら話は簡単で、文字を適当なグリッドで分割して各グリッドごとに濃淡平均をとり、この濃淡グリッドをmatrixとして見れば特徴ベクトルとして計算機も扱うことができる。
教師あり学習はこのようにして、認識対象を特徴ベクトルとしてパターン化して学習させる。特徴抽出の方法は認識対象によって様々であり、このプロセス自体は機械学習の本質とは関係ない。
(例1)音声認識→波形データの振幅を微小時間単位で平均をとり、特徴ベクトルとする
(例2)テキスト分類→特定の単語の出現頻度を特徴ベクトルとする(「物理」に関するテキストなら「積分」とか「エネルギー」等の単語はよく出現するが、「カレー」とか「ティッシュ」は出現しにくい)
同じ認識対象であっても特徴抽出の方法によって学習の精度が上下するかもしれないが、計算機はあくまでベクトル間の距離等を地道に計算しているだけである。
(それぞれの学習アルゴリズムによって詳細は異なるが)学習データをベクトルで複数読み込み、学習データがきちんと識別できるような識別関数を作る過程。 学習データが「よい」データであればあるほど、「よい」識別関数が得られる。
http://scikit-learn.org/stable/auto_examples/datasets/plot_iris_dataset.htmlより引用
こんな感じのベクトル群が与えられたときにどのように識別面を引けばよいか、を機械に計算させるのが学習である。 人間ならパッと見の"感覚"でわかってしまうが、それを数学的に厳密に計算する。
実際の機械学習の応用プロセス。未知のデータがどのクラスに属するか分類する。 学習によって得られた識別関数に未知のデータをベクトルとして入力すると、分類結果のクラスがわかる。
- Naive Bayes
- k Nearest Neighbors
- Neural Network
- Perceptron
- Deep Learning
- Support Vector Machine
- Decision Tree
- Random Forest
これらについて以後解説していくことになるので、ここではひとまず詳細は割愛する。興味があれば、少しググれば山のように情報は見つかる。