機械学習・深層学習を学ぶ

機械学習や深層学習関連について初心者が学びます。画像処理系のシステムを作ってみます。

CourseraのMachine Learning コースを終えました

Courseraの機械学習コースを完了しました。ほぼ毎日1コマ〜2コマ進めてました。

www.coursera.org

終わると↓のような文字がコースのページに表示されるみたい。あとメールが来る。それ以外については特に無しですw

f:id:mict:20160223101208p:plain

小テストを各回でやる必要があり、4/5以上とらないと先に進めない仕組みとなっています。自分の場合いくつか4/5のまま放置していたのもあって最終的な成績は97.3%でした。

このコースは本当に秀逸で、知る必要があるトピックをほぼ一通り学ぶことができます。なので初心者の方にぜひおすすめしたいです。

 

このコースで身につくこと

"機械学習"のエッセンスの理解。なんとなくscikit-learnで分析できます!ではなくて、ライブラリが裏でどんな処理をしているのか勘が働くようになる。紹介されたアルゴリズムについては本質的な理解が進む。

 

その結果、以下のことができるように。

・どの課題にはどんなアルゴリズムが良さそうかわかる。

・紹介されたアルゴリズムについてはパラメーターの最適化ができるようになる。

・調べて自分でアルゴリズムを実装できる(気がするようになった)

 

一方で身につかないこと

・データの前処理の方法。データの事前分析の方法など。

・特徴量を自分で設計する方法。

・得られた結果の解釈の部分。

・学んだアルゴリズムを応用できるか、という部分。

 

正直、この講座を終えた所で"初心者"にようやくなれたというレベルなので、今後の精進が必要ですね。。。

 

下記のリンクではこの講座を終えた後にどんな学習をすべきか議論されてます。

I have completed Andrew Ng's Coursera class on Machine Learning. What should I do next? What *can* I do next? - Quora

いくつかピックアップします。

 

1.Andrew Ng氏のStanford学部生向けの講義を聞いてみる

www.youtube.com

 

2.大学提供の講義を取る

cs231n.github.io

画像解析系に興味があるならばこちら。Stanford大。動画はまだ公開されていないみたいですがレクチャーノートやチュートリアルがとても充実していてとても良さそうです。

また、下は2015年度のHarvard大の講義。こちらもすごく良さそう。

CS109 Data Science

I feel that Harvard's CS109 Data Science covers (at least to a greater extent) the "street knowledge" of data science. This "street knowledge" is essential in real world because problems don't come in structures nor do they have a specific objective for an analyst to be able to just apply a machine learning algorithm to it (more often than not).

 

3. テキスト読解の道へすすむ

www.metacademy.org

MetacademyというサイトがNg氏を終えた後にどんな本をやるべきかまとめてます。

このサイト、Learning planをまとめてるサイトで、すごい好きなコンセプトです。このブログも門外漢が機械学習をどう学ぶべきかまとめられば嬉しいです。日本でもあればいいのに。時間があれば作ってみたいサイトの一つ。

 

3. 他のMOOCの講座を取る

Introduction to Data Scienceという講座

https://www.coursera.org/course/datasci

This is definitely a good course to go through if you're thinking "big data" and thinking about computation / scaling in the future. I like this course because it doesn't confine learning data science to R/python/octave (although there're assignments in R, python and SQL). The philosophy behind the course, I feel, is that technology will change but it's important to know the underlying principles.

だそうです。

またおすすめされてるのが、UdacityのDeep Learningコースですね。

 

4. Kaggleの道(多分無理だ)

 

5. 自分のプロジェクトをすすめる

Ng氏曰く、

1. Many people are applying ML to projects by themselves at home, or in their companies. This helps both with your learning, as well as helps build up a portfolio of ML projects in your resume (if that is your goal). If you're not sure what projects to work on, Kaggle competitions can be a great way to start. Though if you have your own ideas I'd encourage you to pursue those as well. If you're looking for ideas, check out also the machine learning projects my Stanford class did last year: http://cs229.stanford.edu I'm always blown away by the creativity and diversity of the students' ideas. I hope this also helps inspire ideas in others!

だそうです。

Redditで色々質問答えているので見たらいいかも。

www.reddit.com

自分はこの中で言うなら画像解析系のほうに興味があるので、Stanfordの講座やりつつ、CourseraのIntroduction to Data Scienceを取ろうかなと思ってます。前者はいろいろ試行錯誤できそうなので。また、後者はデータ処理の基礎を学べるみたいなので。

試してみて違ったら別の講座取ります。

分類問題を取り扱うときの基本的な流れ

分類問題を取り扱うときには大体以下のような流れになるらしい、というような見取り図が自分の中で得られたのでメモ。

Step1.データを集める

 - 既存のオープンデータ活用

 - スクレイピングしてくる

Step2.優れた特徴量を抽出する

 - 前処理をする

 - その道の専門家に見せた時にYes/Noの判別が出来る程度の特徴量を探す

  (Andrew Ng先生がCoursera Week6で述べていた重要なアドバイス)

   - どんな情報があれば役立ちそうかブレスト

   - 既存研究を参照して、分野ごとの有力な特徴量を調べてリスト化

    →実装。

 - ニューラルネットワークならいらないステップかも

Step3.チューニングしつつ複数モデルを走らせる

 - ロジスティック回帰

 - SVM

 - ランダムフォレスト

 - ニューラルネットワーク

それぞれ少しチューニングしてモデルの比較を行なう。ロジスティック回帰ならλだったり、SVMならσやらCの値。

Step4.最良のモデルについて改善案の検討を行なう

→学習曲線を見てみる必要がある!

 - もしバイアスが強い場合は表現力の高いモデルへの変更をする。

 - もしバリアンスが高く過学習気味ならデータ量を増やす

  →手作業する, クラウドソーシング, スクラッチで生成, 既存データを水増し等

 - また、もしイテレーションが進んでもトレーニングデータでのエラーが下がらないならばデータの情報量不足なので特徴量の改善。 

みたいな感じ。以上のステップは兎に角、荒くスピーディーにやるべきだそうですよ。

CourseraのMachine Learning Week6の講義で大体のことが学べます。

Coursera - Machine Learning コース(Week 3 / 4)

Week 3, Week 4完了しました!これからWeek5に取りかかります

 

Week3ではロジスティック回帰を学んで、いつもどおり実装

・コスト関数JのRegularizationの方法

最急降下法だけでない最適化もできること(自分で実装せずライブラリ使おう)

・多クラス分類への応用

 

その後Week4ではニューラルネットワークの実装をついに行なうことができました

作ったのは数字の手書き文字認識器。

f:id:mict:20160216171726p:plain

右側がXなのですが、きちんと"5"だと識別できています。精度は97.5%くらい。

まだまだ始まったばかりですがこういうの出来るとやる気が満ちてきます。

 

Week5ではNNの改良があるみたいなので楽しみです。

元論文がありそうな勉強方法記事をまとめてみた

勉強って疲れるんで、効率的に覚えたいな、と思い、

教育学の論文をベースとしてるっぽいTips記事とその要点をメモ。

実証研究ありっぽい

gigazine.net

Tips:
・短期間に集中して勉強してもあまり意味は無い
・効果があるのは以下。
  ・時間を空けて継続させる(間隔型)
  ・交互的学習(複数のことを同時に学ぶといい)
  ・多様的学習(条件にばらつきを持たせるといい)
 

www.lifehacker.jp

要点:

・1万時間の訓練をすれば上達するというのは嘘。元論文では1万時間は平均値でありもっと少ない時間で上達した人はいる。

Tips:

フィードバックループを作ろう。

・計画的訓練の実践。スキルを身につける為に必要なサブスキルを特定せよ。

・先生になって学んだことを教えよう。

・学んだことを行動に移し、実践せよ。

 

論文には基づいていないけど有益(?)

Learning Pyramids 

f:id:mict:20160215042522j:plain

学習の形態によって記憶率が変わるという図です。

※ただしこの図の元論文は存在していないみたいです。一応、このアクティビティの順番については納得感がありますよね、示唆的なので載っけときました。

批判については以下

Tales of the Undead…Learning Theories: The Learning Pyramid | ACRLog

→死ぬほど痛烈に批判しています

Cone of learning or cone of shame? - Daniel Willingham

 

で、どうするの?

複数教材をばらばらにやろうかな。。(交互学習)

・コードレビューを受ける方法を考える(フィードバック)

→UdacityのNano degreeが良さそう?

・ブログの発信、プロダクトづくりを頑張ります(Learning Pyramid)

・勉強会にも参加したい。LTとかもしたい。(Learning Pyramid)

→誰かいい場所、ないですかね。どなたかコメントくれると泣いて喜びます。

 

機械学習の勉強頑張ります。

Coursera - Machine Learning コース(Week 1 / 2)

いきなりディープラーニングは無理なので機械学習の基礎から学習中です。

 

昨日今日はCourseraの機械学習コースをやっています。

Andrew Ng氏(Courseraの創立者)の授業なのですが相当に判りやすく、また理解度を問われるのでタメになります。

www.coursera.org

 

この講座の基本方針はOctova(Matlabの親戚)を用いて、自力で機械学習アルゴリズムを実装することです。UdacityのIntroduction to Machine Learningという講座は、sklearnというPythonライブラリをフル活用し使いこなすことが主眼だったので、かなり方向性が違います。

Ng氏いわくOctovaはPythonC++などと比較してアルゴリズムの実装にかかる労力が段違いに軽く、プロトタイピングにもってこいだそうです。製品版のアルゴリズムをその他言語で書くにせよ、Octovaでアイデアが上手くいくか試した後でないと最終的な開発期間が延びるとのこと。

 

今週は海外旅行をしていて学習が滞っていたのですが、Week1とWeek2を終えることができました。Week1 ~ 2で学んだことは以下の通り。

 

□Regressionについて

・単回帰/重回帰のアルゴリズム(仮説関数)

・回帰分析のコスト関数

・解法1:Gradient Discent(最急降下法

  ・Feature Scaling

  ・Learning Rate

・解法2:Normal Equation(正規方程式)

上記の実装(Octova優秀。思ったより簡単だった。)

 

□概論

線形代数の基礎の復讐

・Octovaの使い方

  ・ベクトル計算の仕方

  ・Vectorizationの重要性

 

このコースの良いところは理論的な理解をしたら、すぐ実装させられる所です。PRMLも読み始めたのですが実装できないと意味ないので、まずこっちで理論的な理解を固めつつ、副読本としてPRMLを読むのもアリかもしれません。

 

当面の方針として理論的な理解と実践力を平行して身に付けるつもりです。

理論については

・Coursera(Machine Learning)→ PRML

実践については

実践機械学習システム → Udacity(Introduction なんとか)

という形で進めようかと思います

numpy + scipy + matplotlibについて

実践機械学習システムをやろうとした時に殆ど解説なくてよくわからなかったので。

numpy

基本的なことをわかりやすく。

cs231n.github.io

 

より専門的な内容。

本家:

Tentative_NumPy_Tutorial - SciPy wiki dump

日本語訳:

naoyat.hatenablog.jp

日本語訳なさったnaoya_tさんありがとうございます

 

scipy

SciPy は、配列オブジェクトとその他の基本的な機能を備えた NumPy を基礎にしている。SciPy は統計、最適化、積分線形代数フーリエ変換、信号・イメージ処理、遺伝的アルゴリズム、ODE (常微分方程式) ソルバ、特殊関数、その他のモジュールを提供する。 (from Wikipedia)

このサイトが神

Scipy Lecture Notes — Scipy lecture notes

日本語版

Scipy Lecture Notes — Scipy lecture notes

翻訳された方、本当に有難うございます。pdfをiPadで読みます。

numpyについてもまとまってる!

matplotlib

Pyplot tutorial — Matplotlib 1.5.1 documentation

とりあえずpyplotだけは使えるようにならないとアカン。

初心者で非英語話者がディープラーニングを実装できるようになるまで

深層学習について学ぶには大学に入るのが一番いいらしい。

相談したら友達に薦められました。理由としてあるのが、

1.特に深層学習は学術コミュニティでの進歩が著しく速いから専念しないとキツイ。

2.秘伝のタレ的なノウハウがまたオープンじゃない(形式知としてアクセス出来ない)

というものらしいです。ですけどそんな時間もお金もないので自習で使える情報源をまとめました。

 

機械学習全般を一通り学んでからディープラーニングに入る方が効果的だと思ったので、分けて記載しています。学習ステップとしては以下の順に進んでいくのが良いのではないでしょうか。

1. MOOCか実践的な本で機械学習を触ってみる

2.機械学習の理論を学ぶ

3.ディープラーニングの理論を理解する(MLP本)

4.ディープラーニングの各種フレームワークを使ってみる

5.典型的な課題でフレームワークを使いこなす

6.研究論文読みつつ、やりたいタスクを自力実装してこなす 

 

1.機械学習に触ってみる

www.amazon.co.jp

この本が広く浅く、各種タスクとそこで用いられているアルゴリズムについて取り扱っていたので良かったです。

 

それとUdacityの機械学習コースがおすすめです。こちらはPythonとsklearnというライブラリを用いて、兎に角自力でデータ分析を出来るようになるようトレーニングされます。実践力重視です。

www.udacity.com

 

それと下のCourseraの機械学習コースもかなり素晴らしいです。ただしこちらは更に理論よりで、OctovaというMatlab互換のオープンソース言語を使ってアルゴリズムを自力実装していきます。過程で各パラメーターの最適化手法を学べるので、深い理解が得られます。

www.coursera.org

  

2.機械学習の理論を学ぶ

正直、下二つは難しすぎるんだと思いました。

1.みどり本

www.amazon.co.jp

2.PRMLパターン認識機械学習

www.amazon.co.jp

3.Machine Learning: A Probabilistic Perspective

www.amazon.co.jp

 

3.ディープラーニングの理論を理解する

MLP本が結構わかりやすい

www.amazon.co.jp

 

発展形がこちら

www.amazon.co.jp

 

最近話題になりましたUdacityでGoogleの研究者がTensorFlowを用いたDeep learningコースを公開しています。それ以外のコースについては自分は知りません。

www.udacity.com

 

4.フレームワークを触ってみる

ここまで出来てないけど、多分TensorFlowが今後主流になるんだと思います。

Googleの↑の講座をやるとTensorFlowに触れるはず!

 

5.フレームワークを使って慣れる

Kaggleというデータ解析のコンテストサイトがあって、他の人の解法やチュートリアルが充実している模様。

www.kaggle.com

ここに上がっているサイトで、1で学んだ手法や4のディープラーニング手法を使って試してみるのがいいんじゃないかと。データセットも公開しているし。

 

6.論文読みつつ実装

多分最新の課題については本になってないので、研究論文を読んで自力実装する必要があるかと思います。Google Scholarで検索するとよさげ。

ポイントとしては類似タスクの論文にはどのデータセットを使ったか書いてるので、そのデータセットを取りにいけるはずです。大学や企業が無償公開している場合が多いので。

で、データセットをダウンロードして、自分でモデリングして実行すればいい感じみたい。

正直自分はまだ1&2のレベルなので6まで行けたら再度更新します。