機械学習には昔から興味がありSVMとかちょくちょく調べてはいたのだけど、体系的理解がなく、全体としてはもやもやした感想を持っていた。
先日、特にきっかけがあったわけでもないのだけれど、急に思いたち機械学習で用いられる手法を整理すれば何かわかるのではないかと、いろいろ調べてみた。
まず、機械学習がどのような目的に用いられているかを調べるのがいいのでは思い機械学習チートシートをひとつひとつ紐解いていくと、概ね次のようなものに集約されることが見えてきた。
- 予測(回帰)
- クラス分類
- クラスタリング
- 異常検出
- 頻出パターン抽出
最初は、この目的と教師あり/教師なし/強化学習を組み合わせればパターン分けできるのではないか、と思ったのだけれどもどうにもしっくりこない。クラス分類で用いられる手法は概ね回帰でも利用できたりするし、異常検出に至っては他の目的の応用例ともいえるくらい多様な手法が導入されている。
いろいろ考えてみた結果、見方を変える必要があるという気になり、最終的に落ち着いたのが次の説明となる。
2クラス分類であれば一本の線を引けばよいし、複数クラス分類についても、複数本の線を引くだけのことだ。線を引くということは関数のパラメータを推定する、ということに他ならないわけだから最終的には機械学習とは、
- 入力データをうまく分割する関数のパラメータを推定する
ということを意味することになる。この説明のよいところは、教師あり/教師なし/強化学習の意味合いも教師データの違いとして説明可能なところだ。
- 入力データと出力データの組から関数のパラメータを推定するのが教師あり学習
- 入力データと分割終了条件から関数のパラメータを推定するのが教師なし学習
- 入力データと出力データの評価の組から関数のパラメータを推定するのが強化学習
学習というとフィードバックがあるかのような前提を想定してしまうが、フィードバックのありなしはオンライン学習(あるいはミニバッチ学習)が可能か、という手法の問題であって本質的な話ではない。
だから何だ、という話に感じる人もいるかもしれない(し、実は全然間違っている説明なのかもしれない)けれども、私の中ではうまく整理できたような感覚を持った。人工知能と言うと何かすごいもののような気もするけれど、その内実は関数近似の延長線上の話なんだ、と考えるとちょっとはわかった気になれるというものだ。