読者です 読者をやめる 読者になる 読者になる

数理的手法を使いやすくするためのソフトウェア開発

科学技術計算とデータサイエンスについて

Coursera の機械学習コースを修了

ソフトウェア開発 データサイエンス 科学・テクノロジー・工学・数学

Coursera のオンラインコース"Machine Learning^1" を完走できたので、記念に修了証を取得しました。

スタンフォード大学の Andrew Ng教授によるスライドと講義が、非常に分かりやすかったです。 世間では、機械学習を学ぶには高度な数学を理解する必要があるなどと言われることがありますが^2、Ng先生は、最小限の数学(行列・ベクトル演算と偏微分くらい)だけを使って機械学習アルゴリズムを説明してくれます。

所要時間は約70時間

ただし、このコースのボリュームは相当なもので、講義は11週間あり、毎週、試験をパスして、宿題を提出せねばなりません。 そのための所要時間は、レビューサイト^3 によれば、毎週 5〜7時間です。 この時間のなかには、宿題として、Octave(MATLAB互換のフリーウェア)で簡単なアルゴリズムを実装する時間も含まれます。 宿題の量は、日本の大学に比べると多めですが、米国の大学生はこのくらいは普通に勉強するものなのかもしれません。

機械学習アプリを作りたい

宿題のコーディングはそれなりに面白いのですが、機械学習アプリというほどのプログラムではなかったところが物足りないです。 こうなると、私もいずれは機械学習アプリ開発に参加したくなってきます。

しかし、このコースを修了しただけの私が力不足であることは否めません。 まず、実際の応用では、決定木、ランダムフォレスト、ナイーブベイズなどが使われているのを良く見かけるのですが、それらのアルゴリズムをまだ理解できていません。 また、ディープラーニングのアプリに登場する畳み込み型や再帰型のニューラブネットワークと、講義で扱われてい線型結合の多層型ネットワークの違いがよく分かりません。

そういうわけで、次に何に取り組むかを検討しています。


講義内容のまとめ

  • 基本

    • 機械学習とは
      • 予測 : 特徴ベクトル(入力) --> モデル --> 予測値(出力)
      • 学習 : モデルパラメーターをデータを使って最適化
    • 学習アルゴリズム
      • 教師あり学習 : {(特徴ベクトル1、実測値1)、 (特徴ベクトル2、実測値2)、 ... }のデータを使って最適化
      • 教師なし学習 : {特徴ベクトル1、特徴ベクトル2、 ... }のデータを使って最適化
        • K-平均法、PCA(principal component analysis 主成分解析)、異常検知(注:cross-validation のためにはラベル付きのデータを使うことがある。)
  • 実践に向けて

    • モデル作成のためのアドバイ
      • アルゴリズムやモデルが劣っていても、データ量を増やせば予測精度では優ることがある。
        • しかし、データ量を増やしても、過剰学習では精度は上がらない。
        • そこで、学習曲線、正規化、誤差解析、ceiling analysis などの技法を使って、データ量を増やすかモデルを改善するかを判断すべし。
          • データ量が少ない時には、それを倍増させるコストも小さい。
      • モデル関数形や特徴量を賢く選ぶほうが、力づくのパラメーター増加よりも効果的に予測精度を改善できる。
    • 応用事例の紹介
      • 推薦システム、OCR
      • 大規模計算、並列化

参考リンク

^1:Machine Learning - Stanford University | Coursera

^2:「文系エンジニアに「機械学習」は難しすぎる! ディープラーニングは難しい数式がいっぱい」東洋経済 2016年08月21日。

^3:CLASS CENTRAL