コースレビュー: CS 7641 Machine Learning (機械学習) @Georgia Tech

CS 7641: Machine Learningのコースを修了した。 ジョージア工科大学のOMSCS(コンピュータサイエンス修士課程)プログラムで4番目のクラスであり、幸いなことにグレードAを取得できた。

課題をクリアして良い点数を取り、試験の勉強をするのになかなかの労力が必要だった。具体的に何をしたのか、そしてこのコースについてどう感じたかを書き残しておこうと思う。

1. トピック

このMLクラスは、機械学習分野全般にわたる幅広いトピックをカバーしている。

  • Supervised Learning(教師あり学習)
    • Decision Trees (ID3) 決定木
    • Neural Networks
    • Regression and Classification
    • Ensemble Learning (Boosting)
    • Instance-Based Learning (kNN)
    • Kernel Methods and SVMs (Kernel Trick)
    • Computational Learning Theory (PAC Learnable)
    • VC Dimensions
    • Bayesian Learning, Bayesian Inference
  • Unsupervised Learning(教師なし学習)
    • Randomized Optimization (Hill Climbing, Simulated Annealing, Genetic Algorithms, MIMIC)
    • Clustering (K-Means, EM, etc)
    • Feature Transformation (PCA, ICA, RCA, LDA, etc)
    • Information Theory
  • Reinforcement Learning(強化学習)
    • Markov Decision Process (Bellman Equation, Value Iteration, Policy Iteration)
    • Reinforcement Learning (Q-Learning)
    • Game Theory (Nash Equilibrium, Mixed Strategy, IPD, Minimax Q, Nash Q)

2. 課題と試験

課題は合計4つあり、試験は中間と期末の2つがあった。 課題はどれも結構大変だった。コードを書いたあとデータを学習させて、その結果をグラフにし、考察したものをレポートにまとめる。4つの課題のプロジェクトは主要なトピックをカバーしていたように思う。

これらの課題で成功する鍵は分析だ。 何が起こっているのかを可視化するために多くのグラフとプロットを追加する必要がある。 うまくいった理由、うまくいかなかった理由、なぜこの基準を選んだのか、収束をどのように定義したのかなどを説明する必要があった。

また、期待どおりに動作するコードを実装することが非常に重要である。 scikit-learn、ABAGAIL、OpenAI Gymなどのライブラリを使用しましたが、コアのロジックは自分で実装する必要がある。 これは実際に動くコードを実装するための良いトレーニングだった。

各プロジェクトにおそらく60時間以上費やしたと思う。 大げさに聞こえるかも知れないが、なかなか思う結果にならなかったり、何が期待と違うのか、何度もやり直したりした結果 ずいぶん時間がかかった。 4つの課題とはいえ、試験期間を除くと2〜3週間ごとに締め切りが訪れるため、意外と余裕がない。 振り返ると、これらのプロジェクトを通じて非常に理解を深めることができた。

3. Pros / Cons

良かった点

  • 機械学習に関する幅広いトピックを学び、課題と試験を通じて理解できる
  • 良く構成された講義
  • TAだけでなく教授もresponsiveで、Piazza / Slackなどで質問できて適切な回答がもらえる(簡潔ではあるが、多忙な教授がよく返事してくれる!)
  • 毎週オフィスアワーがある(出なくてもいいが、Piazzaなどではカバーされてない点などを詳しく聞くことができる)

あまり良くなかった点・改善されるべき点

  • 課題を完成させるための労力がちょっと重い(少々気合が必要だ)
  • プロジェクトの評価が不明確な評価基準の下で不安定だった。自信のある提出物の点数が低かったり、その逆もあった。(TAによる採点のブレがあるが、これはある程度許容する必要があると思う)

4. さらなる学習

このクラスで機械学習の全体的な基礎を学ぶことができた。 しかし、このクラスの次のステップとしては、どういうことをするのが良いだろう。 このクラスで学んだ学術的な基礎と実際のアプリケーションの間にあるギャップを埋める必要があるのではないだろうか。 MLアルゴリズムを実際のデータセットに適用するために、Kaggleなどの競技に挑戦するのは良いアイデアかも知れない。

また、講義ではディープラーニング(DL)や最新の論文をカバーしていない。 DLは専用のクラスが開講されているので、そちらから学ぶのが良さそうだ。

個人的には、強化学習の問題に挑戦するのが楽しかった。 例えば、タクシーの問題や凍った湖の問題など、現実的な問題を簡略化したものに対してのアプローチが興味深い。 問題を確率と報酬でどのようにモデル化するかが面白いのだが、まるでゲームのようだった。 モデルが与えられると、エージェントは行動を決定する方法を学び、報酬を最大化しようとする。 トレーニングを行い、エージェントが正しいポリシーを学んだのを確認できたときはexcitingだった。

このクラスを修了した人はMLについての理解が固まったはずだ。 いくつか欠点を指摘したものの、間違いなくこのコースはおすすめできると思う。

by @takp