はじめに
新年始まって、機械学習始めよう!と意気込んでる方もいらっしゃると思います。
そしていきなり
・専門用語
・プログラミング
・数式
などの壁にぶつかり諦める方も多いと思います。
しかし、ちょっと待ってください。方針が(というか最初の一歩)がたまたま間違っていただけで、まだまだいくらでも手立てはあるはずです。
今回は機械学習始めてみようと思ったけど、全く何すればいいかわからない人たちに向けた勉強方針をまとめたいと思います。
最初の一歩を間違える
まず最初の一歩を間違えるパターンがいくつかあると思います。
それを思いつく限りあげてみます。
・巷で有名な教科書を読んでみた
・最近流行りのフレームワークを入れてみた
・インターネットでてんでんばらばらに知識を詰め込んだ
・目的と合っていない手法に出くわしたがそれに気づいていない
などが挙げられると思います。
まず機械学習を学ぼうという動機によって、方針は変わるはずです。
理論が知りたいという人がフレームワークをいきなり使っても、おそらく得られるものは違うでしょうし、ともかく実データを解析しなければという状況で難解な教科書を見てもダメでしょう。
ですので、まず、勉強の動機と取り組もうと思っているが上手く行っていないことの2つを把握してください。
勉強の方針まとめ
巷で有名な教科書を読む
この方針が合うのは、理論を知りたい人です。しかも、大学生の数学を知っている前提です。
私が想定している巷で有名な教科書とは以下のようなものです。
- 作者: C.M.ビショップ,元田浩,栗田多喜夫,樋口知之,松本裕治,村田昇
- 出版社/メーカー: 丸善出版
- 発売日: 2012/04/05
- メディア: 単行本(ソフトカバー)
- 購入: 6人 クリック: 33回
- この商品を含むブログ (18件) を見る
そもそも教科書というのは大抵、その学問の内容をできる限り網羅的に扱うものです。
ですから専門用語もどんどん身に付いていくことだと思われます。
しかし、もしも今特定の問題を解決しなければならないという状況ならば、機械学習を網羅するよりも、ある程度その問題に使えそうなことに焦点を絞って学んだほうがいいでしょう。
これらの教科書を使うことは、機械学習の全体像を把握することにも繋がるため、もちろん追々問題を解決する手段を素早く判断できるようにはなるでしょうけども、そうなるまでには時間がかかってしまうので、やはり理論を知りたいという人向けです。また、現在はやりのディープラーニングを学びたいというのであれば、やはり網羅的教科書ではなく、その手の教科書を手に取ったほうがいいでしょう。
結論としてこの方針は、数式の壁をある程度乗り越えられる数学力を持っている人が、理論を知りたい場合に有効です。
参考記事
流行りのフレームワークを入れる
ChainerやTensorFlowのことです。
プログラミングをゼロベースでやるよりも、遥かに早くニューラルネットワークを実装できます。ただしある程度理屈を知っていないと、作ったニューラルネットワークが計算資源を無駄遣いするだけです。
またフレームワークそのものの使い方を学ぶ必要もありますが、結局ニューラルネットをある程度知っていなければ、ドキュメントが何を言っているのかもわからないでしょう。
ともかく、パラメータを色々調整して、動かしながら勉強していくという形であれば、ニューラルネットワークの専門用語(例えば活性化とかパディングとか)をとりあえず抑えてしまえば、ドキュメントを読み操作することは可能でしょう。そのような場合は最もオススメのフレームワークはKerasです。
この方針を選択するのは、とにかくニューラルネットを動かしてみて、雰囲気を掴みたいという方です。専門用語を抑えながら色々いじってみましょう。
ただし、初心者がここから飛びついても、知識として実りのあるものは少ないかもしれません。まず雰囲気を掴んで、どこかのタイミングで理解を掘り下げていくということは必要です。もしも理論が知りたいんだという場合は、ほとんど何も得られないでしょう。
参考記事
インターネットで知識を詰め込む
最近は有用な情報が多いですし、とくにフレームワークの利用方法についてはインターネットで手に貼る情報は膨大です。
しかし、私はインターネットでの知識は最初の半歩には使えても、それだけでは何も完結しないものだと思います。それはアウトプットの場が無いからだと思います。
プログラムを動かすなどのアウトプットができるのであれば良いのですが、理屈を知りたい場合は頭に押し込まれる一方で、理解の確認ができません。
フレームワークの使い方とか、プログラミングに関することを学ぶのはインターネットが丁度いいでしょう。実際にプログラムを動かしながらすぐに検証できますしね。
一方、理屈を知ろうと思った時には、理屈の理解は頭の中での作業がほとんどのため、結局理解できたのかを確認する術がありません。インターネットの情報を半歩に、残りを何かで補う必要があると思います。
ともかくインターネットでの情報収集は手軽ですから、是非使っていけば良いと思うのですが、それはあくまで半歩で、もう少しどこかで踏み込む必要があるでしょう。
多分、いろんな記事を読んでいるだけでは一生理解できません。
プログラミングを始める、簡単な教科書を見つける(そして手を動かす)ということをどこかでしてください。
参考記事
ゼロベースでの実装は、理論を完全に把握せずとも、実際の動作を完全に把握することができます。
正直、実用的なものを作るのは無理ですし、理論を理解した事にもなりませんが、そのどちらにも行けるベース作りになります。なにやるかずっと迷ってるくらいなら下記の記事がオススメです。
目的と合っていない手法に着手
そしてそのことに気づいていないのは一番つらいです。多分プログラミングがある程度既にできており、機械学習を応用してみたいという場合にありうるパターンでしょう。
1.時系列データを扱っているのにサポートベクターマシン。
2.データの統計的解析が目的なのに多層ニューラルネットワーク。
3.分類問題なのに二乗誤差関数。
そして成果が出ない。この場合は、やはり全体的に包括した教科書を読むほうがいいでしょう。
各種法そのものもそうですが、線形回帰や線形分類、時系列解析などの基本概念を知るだけで大きなミスマッチングは防ぐことができるような気がします。さらに最適な手法を考えるためには、個々の手法を理解する必要がありますが、問題に適していない手法の理解に全力で着手しても(知識としては残っても)成果が出てきません。
例えば上記の問題ならば、機械学習ならばせめて
1.サポートベクターマシンはデータ点は独立。隠れマルコフモデルなら依存関係を扱える。
2.深層学習は基本中身はブラックボックス。生成モデルでデータの生成を確率的にモデル化。
3.分類は分けることさえできればいい。ヒンジ損失、交差エントロピー
くらいにザッと対応が分かると良いでしょう。
以下の教科書はザッと機械学習を把握する上では有用です。