Udacity Machine Learning Engineer Nano-degreeを受講した感想

2016年12月から2017年5月まで、UdaicityのMachine Learning Engineer Nanodegreeを受講しました。Udacity自体の記事はいくつか見つけられましたが、受講前に、Nanodegreeについてはあまり日本語での記事を見かけませんでした。受講後の感想も込めて、どのようなサービスなのか、どのようなことが学べてどういう人に向いているのか、メモしておきたいと思います。
[http://www.udacity.com/course/machine-learning-engineer-nanodegree--nd009]

# 具体的なサービス内容
一月１９９ドルのオンライン有料コース。一部のコンテンツはUdacityの無料のコースと被っていますが、MLの基本が学びやすいように、コンテンツが整理されています。また、課題が設定されていて、supervised learning, unsupervised learning, reinforcement learningを課題を解きながら学ぶという構成になっています。課題は時々変わるようで、最近はCNNを使ったimage classificationの課題が追加されたようです。
あるトピックについてのビデオ講義があり、それを復習するための課題が設定されていて、Python Notebookで配布される課題を解いて、Githubにコードをアップし課題を提出し（もしくはZipファイルを送付）、レビューをもらってパスすれば次の講義に進む、というのが基本的な流れです。
まず最初に課題を解くために必要なPythonの環境構築の説明がかなり丁寧に描いてあります。その環境をテストするためと、簡単なMLモデルを作るため、Titanicデータを使ったオプションの課題があります。
# 無料サービスとの違い
大きな違いは、課題についてフィードバックがもらえることです。自習をしているとできているのか、理解があっているのかどうか確かめるすべがないですが、フィードバックをもらうことでまだ十分に理解できていない点などを確認することができます。フィードバックは各課題ごとに設定された評価基準に照らし合わせて、できているかどうかをチェックされます。また、コードについてもフィードバックをもらえるので、より効率的なコーディング方法なども、教えてもらうことができます。課題を提出する際に、ここがよく分からなかった、などとコメントを追記することができて、そうするとレビューの際に詳しく見てくれて、参考資料などを教えてくれます。
もう一つ無料版との違いは、チューターがついて、行き詰まった時などに1 on 1のビデオ会議を設定して質問ができることです。無料版の場合はOnline Forumで質問をすることで回答を得ることもできますが、自分が理解できていないところに特化したもっと細かな質問をすることができます。
# Nanodegree Plusとは
コース終了後に企業への就職を保証するというサービスです。コースワークの他に、履歴書、LinkedInのプロフィール、Githubのプロフィールをサポートをもらいながら、より採用に結びつきやすいように修正するのを手伝ってくれます。Nanodegree Plusでない場合は、就職保証がない代わりに、これらのプロフィールの修正がOptional Projectとして必須ではなくなります。Nanodegree Plusの場合は必須項目になります。日本で仕事をしている場合は、あまり使うことがないサービスではないかと思います。
外資系の会社に転職を考えている人などは、Nanodegreeにしておいてオプションで履歴書のレビューなどをやってみると、履歴書を見栄え良く書き換えることができるので便利です。
# よかった点
個人的に良かったと思うのは、分析のための環境構築がかなり簡単にできるということです。ML nanodegreeの場合はPythonが必須言語になっています。Anacondaをインストールして、必要なパッケージをインストールするというスタイルになっているので、授業で配布されるコードが実行できない、などということがないです。Courseraのコースを取ったことがあるのですが、その時は環境構築がとにかく大変で、それをやるだけで２、3日かかってしまい、しかも配布されたコードが実行できずに、肝心のことが学べない、ということがありとてもストレスでした。UdacityのNanodegreeの場合はそのようなことはなかったです。
また、課題に取り組むに当たって、必要な事だけをやればいい、という点も良かったです。各講義で、ML Engineerとして最低限できないといけないことは何か、ということを考えた上で、そのために必要な箇所だけを課題で学べるような仕組みになっている、という印象を受けました。ML nanodegreeの場合課題は全てPython Notebookで行うのですが、あらかじめグラフ化などのhelper functionなどが定義されていて、ある程度のコードが準備してあり、例えばデータの整形部分だけコードが穴埋め式になっていたり、ClusteringなどのMLモデル部分だけを自分でコードを書く、というような形式になっています。おかげで、最小の時間で効率的に学ぶことができると思いました。
# 改善してほしいと思うところ
残念なのは、講義も課題も全て英語だという点です。英語でのコミュニケーションが取れない人の場合は、利点をフルに活用することが難しいと思います。講義ビデオには英語字幕がついているものがほとんどなので、困ることはないかと思います。困るのは行き詰まった時に、1 on 1のテレカンは英語での会話になるので、活用しきれないのではないかと思います。逆にいうと、英語も勉強したい、というような人には一石二鳥だと思います。
また、課題が少ないので割と初歩的なことしか学べず、中級レベルの人には少し物足りないと感じるかもしれません。例えば一つの課題ではSVMとRandom Forestをやりますが、XGBoostやkNNなどは使われません。基礎をまず学びたいという人には良いかもしれませんが、もっと発展的な内容を学びたいという人にはあまり向いていないかもしれません。
課題がGithubで配布されるので、ある程度Gitコマンドなどを知らないと、課題の提出などが難しいという点はあります。ただ、Gitの運用は覚えておいても損はない知識だと思うので、実際に使うことのできる良い機会でもあります。なお、Gitについての無料のコースもあるので、そちらで基本操作は学べます。
もう一つ改善して欲しいと思うところは、費用です。毎月１９９ドルが自動的に引き落とされるのですが、最後の課題は自由課題のため、かなり時間がかかります。自習のような感じになるので、講義を見ることもないですし、特に1 on 1を受けることもありません。なんのサービスも受けないのですが、お金だけは引き落とされていきます。これは少しもったいないと思いました。
# どんな人に向いているか
まだ機械学習について学び始め、もしくはこれから学びたいというような人に向いているのではないかと思います。特に、お金を払ってでもいいから最小の時間で効率的に早く学びたい、という人には良いと思います。課題はSupervised Learning、Unsupervised Learning, Reinforcement Learning、そして自由課題という構成になっています。それぞれ前提知識がゼロの状態から代表的な手法を学べるようになっているので、入門には良いと思います。
現在はRなど他の言語を使っているけれども、これからPythonも使えるようにしたい、という人にもお勧めです。理論的な背景などを知っていれば講義はさらっと見るぐらいで、課題だけを解いてPythonでのコーディングを学ぶのに専念する、というような学び方もできると思いました。