少し前にGoogleが社内教育用のコンテンツとして使用しているというMachine Learning Crash Courseが公開されていました。PredictionIOのコミッタをやっていながら機械学習はほぼ素人というのもどうかと思っていたこともあり、社内で毎日1時間ずつこの講座を進めてみることにしました。
15時間で終わるということになっていますが、英語の動画やテキストの理解に時間がかかってしまい、最終的には40時間くらいかかってしまったものの、なんとか完走することができました。機械学習やディープラーニングの基礎について25のレッスンがあり、それぞれのレッスンは以下のコンテンツから構成されています。
- 動画による概要の解説
- より詳細な内容を説明したテキスト
- ブラウザ上でビジュアルな実験が可能なプレイグラウンド
- ノートブックを使用したプログラミングエクササイズ
- 理解度チェック
動画を見たりテキストを読んだりするだけでなく、プレイグラウンドやエクササイズで手を動かすコンテンツがあり、特にプレイグラウンドでの実験はモデルの収束や過学習の様子などをビジュアルに確認することができるので直感的に理解ができます。
エクササイズではTensorFlowを使うのですが、丁寧なガイドやコードサンプルがありますし、コピペしてパラメータを変えるくらいの課題が多いので予備知識なしでも問題ないです。わからなければ解答にコード例がありますし、きちんと説明もあるので時間がなければすぐに解答を読んでしまってもよいと思います。
動画はメイン講師の方の英語が自分には結構聞き取りづらかったのですが、字幕もありますし、内容的にはテキストのサマリなので、テキストだけ読んでおけば問題ないです。自分たちはレッスン毎にテキストを読んでから復習を兼ねて動画を見るという流れで進めました。
レッスンの内容は機械学習の基本的な用語やアルゴリズム、学習やモデル精度の検証のプロセス、ニューラルネットワークについて基礎的な理解を得ることができるものになっています。内容そのものは初歩的なものだと思うのですが、各所に実践的なアドバイスが散りばめられています。記憶に残っているものをいくつかあげておきます。
- まずはできるだけ簡単な方法から始めよう
- 適切な学習データを用意するためにデータの内容を把握しよう
- 精度が出ない場合、後付けの対応ではなく根本的な原因を見つけよう
- 精度改善とモデルの複雑化とのトレードオフを意識しよう
- モデルの設定はコードで管理し、必ずレビューをしよう
- 実験結果やドキュメントをきちんと書こう
「機械学習ではコードやロジックではなくデータにフォーカスする」という違いはあるものの、上記のアドバイスは一般的なソフトウェアエンジニアリングでも重要なことばかりですね。機械学習の知識だけでなく、こういったエンジニアリングに対する基本的な姿勢がきちんと押さえられているのは素晴らしいと思いました。
コースの冒頭でディレクターのPeter Norvingさんは、プログラマが機械学習を学ぶことのメリットを述べていますが、その中でも「ロジックに落とせない未知の事象に対処する方法を得ることができる」という点が印象的でした。初歩的な内容とはいえ非エンジニアだとちょっと厳しいかなという気はしますが、ソフトウェアエンジニアであれば機械学習に携わる予定のない方でも受講してみる価値のあるコースだと思います。