機械学習アルゴリズムの学習法


TL;DR

  • 機械学習のアルゴリズムには詳しくなりたいけど実装はしない、という立場の人向けの学習資料まとめ
  • 知人向けで、具体的には同僚医師がターゲット読者(めちゃ狭い!)だが、一定度他の人にも役に立つかも
  • 改めて色々眺めてみてやっぱり大学の講義は質の高いものが多いと思った

知人が機械学習のアルゴリズムを学びたいと言っているので、オススメの資料などを見繕ってみるブログエントリ。

機械学習への関わり方を雑にアルゴリズムと実装で分けた場合に、アルゴリズムには詳しくなりたいけど実装をするわけではない、という立場の人向けである。 このようなタイプの人はそんなにいないと思うけど、具体的にはドメインエキスパートとして機械学習エンジニアと一緒にアルゴリズム・データ改善に取り組んでいて、アルゴリズムでどんなことをやっているかをちゃんと理解したい、みたいなのが一例となる。

なんとなくのイメージ的な理解だけだと、データの解釈や示唆出しがどうしても薄くなってしまうし、何よりやってても面白くない(個人の感想です)。 ということで割としっかりとした、具体的には学部レベルの理解度くらいには到達できるくらいの、内容を学べるくらいの情報を集めてみた。

ちなみに自分の同僚の例であれば、医師が該当する。 なので最後の方に少しドメインに特化した内容も出てくるが、基本的には典型的な機械学習を学びたいという人にも使えると思う。

前提知識としては、微積や行列の具体的な計算は問題なく実行できて必要があれば自分で調べられる、という程度を想定している(一応それらを学ぶための資料も紹介する)。

学習資料

基本的には無料でアクセスできてかつ日本語の資料を探すようにしたが、なかなかいいのが見つからなかった場合は諦めて書籍とか英語の資料も含めた。

数学的準備(飛ばしてもよい)

行列演算や微積が殆ど分からない、という人には以降で紹介する資料は難易度が高くて厳しいと思われるで、なにか別の資料等で勉強することをオススメします。

分かってるってどれくらいのレベルを指しているのか?自分の知識が機械学習のアルゴリズムを学んでいくのに十分なのか?と疑問に思う場合は以下の資料で確かめてみるとよい。 目次をざっと眺めて知っている内容ばかりだったら飛ばしていいし、分からないものがある場合は必要に応じてその部分の勉強をすればよい。 数学の話を最初にやると目的に達する前にやる気が消失して学習が進まなくなる可能性もあるので、困ったら戻ってくるというのでもよいと思う。

  • Mathematics for Machine Learning
    http://gwthomas.github.io/docs/math4ml.pdf
    Berkeley の機械学習講義のページで紹介されている機械学習に必要な数学の short summary 資料。 行列と解析と確率に関して最低限が網羅されているので便利。 日本語で同程度の内容がよくまとまっている資料を知らないので、もしあったら教えてください…

数学とか全然分からんけど 0 からでもやるんや!という場合には事始めには以下の本が良いと思う。

  • 機械学習のエッセンス 第03章 機械学習に必要な数学
    https://www.sbcr.jp/product/4797393965/
    かなり基礎的な部分から解説してくれている。 ラグランジュ未定乗法とかも幾何学的説明と共に平易に解説されていていいなと思った。

機械学習の概観

具体的なアルゴリズムの学習に入る前に、そもそも機械学習とはどんなものでどういう特徴があるかを見ておくのがよい。 色々な単語が出てくるが、それらをちょっと勉強して一気に理解しようというのは難しいので、この段階では深く掘り下げずにどういう登場人物がいるかを眺めるくらいにしておくのがよい。

  • 機械学習・データマイニング分野の概要
    http://www.kamishima.net/archive/mldm-overview.pdf
    産総研の 神嶌敏弘 氏の資料。 やや高度な概念も出てくるが、機械学習に取り組む上で押さえておくべき原理が比較的平易な言葉で説明されている。 個人的にはノーフリーランチ定理や醜いアヒルの子定理などにも言及しているのが好き。 情報量が多いので時間をおいて何度か読み返すのがおすすめで、第Ⅳ部の国際学会は興味がある人のみ読めばよいと思う。
  • 社会人向け講座「データ分析者養成コース」機械学習の概要
    http://ibis.t.u-tokyo.ac.jp/suzuki/lecture/2018/ML_Gairon/ML_Gairon_Aut2018_online.pdf
    東大の 鈴木大慈 氏の資料。 機械学習の具体的な手法に関して、線形回帰から深層学習の生成モデルまでどのように活用できるかを解説している。 数式が出てくる部分はこの資料だけでは理解が難しいのでそれは後々やっていくとして、具体的にどんな手法があるかを眺めてみるのに適している。 教師あり学習と教師なし学習がバランスよく紹介されてると思う。

機械学習の学習

いよいよ本題である。

確率・統計に関してどうすべきかちょっと迷ったのだが、やはり少しは頭に入れておかないと困難が発生しそうだと思って以下を選んだ。

  • 確率・統計の基礎
    http://web.econ.keio.ac.jp/staff/bessho/lecture/seminar/120406probstat_all.pdf
    東大の 別所俊一郎 氏の資料(資料は慶應在籍時の講義資料)。 i.i.d. や不偏性など機械学習でもよく登場する用語や概念とその解説がいい感じにまとまっていて、検定や信頼区間などについても解説されている。 この辺は深入りし過ぎると大変なので、一旦は細かい証明などは置いておいて登場する概念がどんなものかを把握しておいて、もっとちゃんと理解しないと先には進めないという壁にぶつかったら頑張るのがよさそう。

地に足をつけて機械学習のアルゴリズムを学び始めるのによさそうかなと思うのは以下の資料である。

  • 筑波大学オープンコースウェア 機械学習
    https://ocw.tsukuba.ac.jp/course/systeminformation/machine_learning/
    筑波大 佐久間淳 氏の資料。 動画と講義資料が整理された形で公開されており、質も高い。 パワポ資料だとそれだけでは理解が難しいものも少なくないが、かなりしっかりと作られている上に動画もあるので自分で学習するのにもってこいである(ただ自分は動画はあまり見てません)。 全体観把握のためにロードマップを提示してくれたり、理解のために問題もちょこちょこ差し込まれていたり、よく練られている。 Colaboratory の使い方も紹介してくれているが、そこで使うプログラムは外部からは使えなそう?なのでプログラム系の演習などは飛ばして読めばよい。 モデルとして (gradient) boosting 系を入れてくれれば自分的にはもっと嬉しかったな〜。

めちゃくちゃ有名なものとしては Andrew Ng 氏の https://ja.coursera.org/learn/machine-learning も挙げられる。 encouraging な雰囲気は素晴らしいが、内容が限定的だったり Cousera のアカウントを作るとか Octave で課題解くとかがちと煩わしい面もあるので、個人的にはめちゃくちゃオススメというまではいかないかな。certificate がモチベーションになったりする場合には Coursera や edx や Udacity を中心にやっていくのもいいかもしれない(自分はオススメの course を列挙できるほど詳しくないのでその場合は他の情報源を探してください)。

ある程度地力をつけ、ここから発展して様々なアルゴリズムを学んでいくことになるが、様々なアルゴリズムがよくまとまっているのは以下の資料だと思う。

  • Concise Machine Learning
    https://people.eecs.berkeley.edu/~jrs/papers/machlearn.pdf
    Berkeley の Jonathan Richard Shewchuk 氏の資料。 文章の書き方が箇条書き風でちと独特だが、多くのアルゴリズムに関して豊富な絵と共にアイデアと数式を解説している。 一つ一つがコンパクトに纏まっているが説明が丁寧でとても分かりやすいというわけではないので、読んでみて理解ができないものは他の情報も参考にして深掘りしていく必要はある。 一気に全部読むのは大変かもしれないので、少しずつ守備範囲を広げていって、ある程度時間が経って振り返ってみたらだいたいここに書いてあるものは理解してるな!みたいになれるといいかもしれない。 こういう感じによくまとまっていてもう少し読みやすい資料があればいいなと思ったけど、見つけられなかった。

最後に gradient boosted decison tree の資料も出しておく。 自分が見た範囲では以下がよいと思う。

  • Introduction to Boosted Trees
    https://homes.cs.washington.edu/~tqchen/pdf/BoostedTree.pdf
    Washington 大の Tianqi Chen 氏の資料。 boosting の形式的な話に行きすぎずにかといって抽象的になりすぎずに上手いバランスでまとめられている。 ちょっと難しいかもしれないが、ここまで来れてるならきっと大丈夫だと思う。

これくらいの内容が理解できてれば十二分に機械学習のアルゴリズムは理解できていると言っていいと思う。 これより先の発展的な内容や専門的な内容に関しては、興味の赴くままにやっていけばいいだろう。

医療への応用

最後に医療への応用(とこれまででカバーできてなかった範囲のカバー)についても少しだけ書いておく。

ベイズ的な枠組みと意思決定とを医療に適用している本としては以下が挙げられる。

  • 入門ベイズ統計 意思決定の理論と発展
    http://www.tokyo-tosho.co.jp/books/ISBN978-4-489-02036-0.html
    序盤の式変形はちょっと玄人感があるので注意だけど、具体例が豊富でイメージが湧きやすい。 これまで紹介した資料にはあまりベイズが登場しないので、そこをカバーするという意味でもちょうどよいかもしれない。

コーディングは対象外とする今回のブログエントリにはそぐわないが、ディープラーニングの医療系への適用では以下の資料が良かった。

  • メディカルAI専門コース オンライン講義資料
    https://japan-medical-ai.github.io/medical-ai-course-materials/index.html#
    これまで紹介した資料にはディープラーニング成分が薄かったので、それをカバーしつつかつ医療への適用例が豊富に解説されている。 コードと共に進んでいくスタイルなのでブログエントリの趣旨からは外れてしまうが、Python や Colaboratory の基礎から丁寧に説明されてるので、やっぱアルゴリズムの理解だけじゃなくて実装もやってみたいな!という場合にオススメである。 メンテナンスフェーズに入ってメジャーアップデートがなくなった Chainer で書かれているというのはちと残念ではあるが、説明もコードも懇切丁寧で質が高いので、やる価値は十分にあると思う。

まとめ

知人向けに機械学習アルゴリズムを学習していくためのステップをまとめてみた。 トピックモデル系がカバーできてないが、内容盛り込みすぎになってしまうので一旦除外した。 もっといいものがあるとか、やってみてどうだったとか、そういったご意見ご感想があればどしどし教えてください。