26 Jul 2017, 03:34

UdacityでArtificial Intelligence for Roboticsを受けた

UdacityでArtificial Intelligence for Robotics(CS373)を受けた。

[https://www.youtube.com/embed/g-fk3RQiw5Q]

しかしながら、この講座はとても難しく、挫折した。

なので、簡単に内容の紹介と感想を書く。

動機

Udacityの Deep Learning Nanodegree を受講し終わったので、

次の講座として Robotics Nanodegreeの受講を考えている。

その間のつなぎの講座として、タイトル惹かれてこの講座を受けてみることにした。

また、最近 LEGO mindstormsを購入したので、学んだことを応用できればいいなと思っている。

内容

Googleの自動運転車の要素技術について学ぶ講座。この要素技術は、自動運転車に限らずあらゆるロボティクスについて応用できるとのこと。講座のタイトルが昔は Self Driving Car だったが今の AI for Roboticsに変わったようだ。

講師は、Udacityの創立者にしてGoogleカーのエンジニア、セバスチャン・スラン氏。すごい。

シラバスは以下のとおり。

Lesson1-3は自己位置推定(Localization)について、4,5は探索と制御について、6は地図生成だ。

  • Lesson 1: The Problem of Localization ・・・ヒストグラムフィルタについて学ぶ
  • Lesson 2: Kalman Filters ・・・ カルマンフィルタについて学ぶ
  • Lesson 3: Particle Filters ・・・粒子フィルタについて学ぶ
  • Lesson 4: Motion Planning ・・・経路探索について、幅優先探索、A*, 動的計画法について。
  • Lesson 5: PID Control ・・・経路の平滑化、PID制御について学ぶ。
  • Lesson 6: GraphSLAM ・・・ Lesson1-5まで学んだまとめ、おまけとしてGraphSLAMについて。

途中、よくわからなくなったので、参考書を買った。確率ロボティクス。スラン先生の本だ。

講座の進め方は、ミニクイズとPythonによるプログラミング課題が、説明のあとに出される。少しずつ難易度が上がっていくので、理解しやすい。そして、週の終わりにミニテストとプログラミング課題が出される。一応リポジトリを起こして、コードを書いた。

この講座、一番うれしいところは、すべての動画に日本語字幕がついているところだ。

その他、Forumが充実しているところもうれしい。が、講座が開講された2012年のころの投稿が多い。

感想

難しく、挫折した。一応、動画は最後まで目を通した。これが完全に理解できれば、君はスタンフォードの優等生だと講義でいっていた。むりだー。

少し飛ばしぎみで講義を進めていったので、深くは理解を深めようとしていないからかもしれない。

大体ひとLesson 5時間くらいかければ終わる。

無料の講座だとついつい気が緩んで真剣にとりくまないのかもしれない。

この講座は、今の Self-Driving Car NanoDegreeに内容が引き継がれているようだ。

DeepLearning Nanodegreeのあとの進路は、Self-Driving Car, Artificial Intelligence, Roboticsの3つに分かれるのだが、自分は 組込み屋なので、Roboticsに決めている。ただ、自動運転車の講座もおもしろそうだと思った、と同時に難しそうだと思った。自分には、Roboticsを挫折しないでやり遂げる能力があるのだろうか・・・。

挫折したことが悔しいし、確率ロボティクスの本も買ったことなので、いつかこの講座をやり直そう。ロボティクスでも、自己位置推定が扱われるようなので、そのときに振り返ることにする。

Path Planningや PID制御は LEGO Mindstormsで実際に試せそうだ。時間があればやってみよう。

27 Apr 2017, 14:14

Udacity で Deep Learning Nanodegree Foundation を受講してる

Udacity で Deep Learning Nanodegree Foundation を受講してます。 -> 追記: 受講が終わりました

MOOC を受けるのは、31 回目だけれども、 Udacity Nanodegree は今回が始めて。なにしろ、学費が 599 ドル(= 6.5 万)というお値段。

13 が終わったので、少しずつまとめていこうと思う。 未完成だけれども、続きは、毎週更新する予定です。

概要

Youtube Star の Siraj Raval

日本では知られていない、Deep Learning 界の Youtube Star, Siraj Raval が Deep Learning の手法を教えてくれる。

動画がとにかくおもしろい。まずは動画紹介。

授業の流れ

授業は、Siraj さんと mat さんの動画を元に進められる。

  • Siraj’s introductory video & One hour coding session
  • Additional lesson(s) from Mat & other Udacity experts

毎週 mat 先生の動画が公開されて、それを見てミニクイズやミニプロジェクトを解いていく。 それとは別に、siraj さんのライブコーディングセッションが youtube で放送される。

Projects

毎月一回、Project が assignment として課される。

  • Project 1 Your First Neural Network
  • Project 2 Image Classification
  • Project 3 Generate TV Scripts
  • Project 4 Translate a Language
  • Project 5 Generate Faces

どんな課題か見てみたい人は、github の問題用リポジトリを参照するのがよい。

project の解答 を提出すると、Udacity のレビューアーにレビューされる (ここが驚いた。高い学費を払っているだけあって、手厚いサポート) 解答内容が不十分だったり、間違っている場合は、リジェクトされて再提出が求められる。

わからない場合は、フォーラムを見たり、slack で議論したりする。 slack には、なんと#Japan のチャンネルがあり、日本語 OK.

受講者人数

1 月に初めのコースが始まり、3 月に 2 回目のコースが始まった。自分は 3 月 から参加。

登録者数は 1 月が 5000 人くらい?3 月が 1500 人くらい(slack の人数より)

日本人は、50 人くらい。

Syllabus

1 月と 3 月では、シラバスの内容が少し違う。今後も feedback を元に変わる可能性あり。

Week 1: Introduction to Deep Learning
Week 2: Model Evaluation and Validation
Week 3: Graph computations
Week 4: Intro to TensorFlow
Week 5: Deep Neural Networks
Week 6: Convolutional Networks
Week 7: Recurrent Neural Networks
Week 8: Word Embeddings
Week 9: Using TensorBoard
Week 10: Text Generation
Week 11: Sequence to Sequence Generation
Week 12: Transfer Learning
Week 13: Reinforcement Learning
Week 14: Autoencoders
Week 15: Generative Adversarial Networks (GAN)
Week 16: Image Generation

扱う手法は、NN, CNN, RNN, GAN と,Deep Learning の主要な手法をカバーしている。

扱うトピックは、 感情判定、画像識別、株価の予測、テキスト生成、 Word2Vec, 自然言語処理、音楽生成、チャットボット、 ゲームプレイ、画像生成 …

難易度と学習時間

シラバスによると、8-12 時間の勉強時間の確保が必要とのこと。 自分の場合は、だいたい 10 時間くらい勉強すれば消化できた。

難易度なのだけれども、今のところは難しくなく、ついていくことが出来る。 複雑な数式もでてこないので、高校生だって受けることが出来ると思う。

CNN は、難しい部分は tensorflow に任せてしまい、 tensorflow の使い方を学ぶ印象を受けた。

Siraj’s Live Coding Session

Siraj さんのライブコーディングでは以下のトピックがあつかわれる。

  • Week 1 (329): Linear Regression
  • Week 2 (45): Tensorboard
  • Week 3 (412): Reinforcement Learning with Games
  • Week 4 (419): Image Compression
  • Week 5 (426): Visualizing Networks (GAN)
  • Week 6 (53): Generative Models (GAN)
  • Week 7 (510): Classification
  • Week 8 (517): Dimensionality Reduction
  • Week 9 (524): Data Visualization
  • Week 10 (531): Math terminology
  • Week 11 (67): Cloud Computing overview (AWS, google cloud, etc.)
  • Week 12 (614): Anomaly Detection
  • Week 13 (621): Stock Prediction
  • Week 14 (628): Video Generation
  • Week 15 (75): GANs for audio generation
  • Week 16 (712): GANs for video generation
  • Week 17 (719) : Probabilistic Programming

学習メモ

以下は、各回の概要をメモしたもの。参考までに。。。

  1. Neural Network =================

week1: Introduction to Deep Learning

はじめに anaconda や 線形代数の基礎と numpy、 Jupyter Notebook の使い方などが紹介される。

そのあと、ニューラルネットワーク。 パーセプトロンからはじまり、Gradient Descent, Backpropagation が説明される。

input と output レイヤだけの初歩から説明されて、 次に hidden レイヤが説明されるので、とてもわかりやすい。

Project1: Your First Neural Network

ニューラルネットワークを組んで、自転車の貸し出し台数を予測する。 numpy だけでニューラルネットを組む。

自分はゼロから作る Deep Learning を途中まで読んだのだけれども、 このプロジェクトのやろうとしていることは、この本と同じ。 よい復習にもなったし、逆にこの本を読んでいたから理解が助かった。

Project1 ができなかったら、refund してこの講座を諦めようと思っていた。 なんとか提出できて、リジェクトもされなかったので、このまま受けることにした。

(Machine Learning Nanodegree を受けている Studyplus の友達は、 Project の出来が悪いとリジェクトされて再提出を求められるといっていた)

  1. Convolutional Neural Network ===============================

week2: Graph Computations

TensorFlow の基礎となる Graph Computations を学び、 MiniFlow という Tensorflow のミニバージョンを自作する。 といっても、これは week1 の復習 Quiz のようなもの。 また、手取り足取りの説明なので、すごく簡単。

またこの週では、データの前処理, モデルの評価や Validation にも触れられる。

モデルの評価は、coursera ML でやったものと同じ。

week3: Sentiment Analysis

センチメント分析がテーマ。

Andrew Trask さんが登場し、ニューラルネットワークを利用して、センチメント分析を実施する。 この講義の目的は、いかにしてニューラルネットワークの精度を向上させるかと学習を高速化させるか。

はじめは、精度が 65%くらいしかないのだが、 あの手この手の工夫をすることで 95%以上にまでもっていく。 さらには学習の速度もはじめにくらべると爆速にもっていく。

チューニングでこれほど差がでるものかと驚いた。

また、この週では、TFLearn というライブラリが紹介される。 これをつかうと、ニューラルネットがシンプルに数行で構築できる。 バックプロパゲーションとか頑張ったのはなんだったんだよ!と思うほど、驚く。

week4: Intro to TensorFlow

TensorFlow の登場。やっと 4 週目にしてでてきた感がある。

TensorFlow の基礎文法をまなび、基本的な 2 層のニューラルネットを組む。 また、ロジスティック回帰について学ぶ。

この週は、今までで一番楽な週だった。

week5: Deep Neural Networks

Google AWS で GPU をつかう方法が示される。 この DLND をとっている生徒は、100 ドルの無料クーボンがもらえるのだ。 これで AWS で GPU を使って計算を高速化できる。また、FloydHub も紹介される。

といっても自分は別の用途で AWS をガンガン使ってしまったのでピンチ。

TenosorFlow で前回は、2 層のニューラルネットワークだったが、 それを 3 層のニューラルネットワークにする。

と同時に、オーバーフィッティングを防ぐ方法として、 正則化と Dropout の手法が紹介される。

week6: Convolutional Networks

Convolution Networks の説明。 畳み込みとプーリングの説明があったあと、 tensorflow でどう実装していくかが解説される

重みやバイアスの初期化方法についても言及される。

Project2 Image Classification

CIFAR10 の画像データを CNN で分類するというプロジェクト。

ネットワークは、week6 で与えられたコードを少し工夫すれば構築できるけれども、 ネットワークのパラメータを調整して精度をだすことに苦戦した。

最終的には、67% の精度がでた。合格ラインは 50% と低めなので、いい感じ。

  1. Recurrent Neural Network ===========================

week7: Recurrent Neural Network

Recurrent Neural Network の説明。 といっても、簡素な説明なので、ほとんどわからなかった! 参考リンクを示されてここ読んでおいてね、ということだった。

実践的な演習として、アンナ・カレーニナの小説を元に、文章を生成するものが 与えられる。TensorFlow を使って、LSTM を実装するのだが、 これが答えも一緒に示されるので、結構簡単に実装出来てしまう。

理論はまったくわからないが、実装出来てしまうので、これでいいのか??

別枠として、LSTM で株の予想をしようという Siraj さんのビデオがある。

week8: Word Embeddings

Word Embeddings がテーマということで、Skip-gram モデルの word2vec を自前で実装するというもの。

例のごとく、サンプルコードが与えられて、穴埋めしていく形で進められる。

論文やブログのリンクがはられて、読んでおいてねとのこと。外部リンクを読むことが前提みたい。

この日本語記事がイラスト付きでとてもわかりやすかった。大感謝!!

text8 という英語のテキストデータを学習する。 ニューラルネットの仕組みは簡単だったが、前処理が難しくて理解度がうすい。

  • SubSampling
  • Negative sampling

この Word2Vec を利用して、自分の Twitter アカウントを分析してみた。

Siraj さんのビデオは Style Transfer について。

これは、CADL で以前勉強していたので、深くは調べなかった。

FloydHub 創立者たちとのインタビュー動画もボーナスとしてあった。なんか、Udacity は FloydHub 推奨しているみたい。

week9: Using TensorBoard

TensorBorad を使う方法について。

TensorBoard は精度や Loss を可視化するのに便利だと思っていた。 今まで、闇雲にハイパーパラメータを探していたのだけれども、TensorBoard を使って探す方法を学んだ。

Keras でも TensorBoard は使えるみたい。

Siraj さんの動画は、Music Generation(音楽生成)。とても興味があるトピック。待ってました\^-\^

LSTM で音楽を学習させてみようということなのだけれども、 動画はよくわからなかった。しかし、ここで諦めてはいけない。 Siraj さんの動画は大抵数行のコードと大量の参照リンクなので自学自習が必要なのだ。

いろいろディープラーニングと音楽生成の関係を調べていくうちに、 char-rnn で音楽生成をしている事例がたくさん見つかった。なので、私もやってみた!

week10: Text Generation

テキスト生成。week8 では、文字ベースの文章生成をあつかったけれども、 ここでは単語ベースの文章生成。

この週では、Project3 が課せられたので、まずは準備として、 RNN による センチメント分析をおこなった。 複数の input に対して一つの output を出力する RNN.

センチメント分析は week3 で扱ったのだが、それを RNN という別の角度から再実施する。

Project3 Generate TV Scripts

有名テレビアニメ、ザ・シンプソンズのテレビスクリプトを学習し、 word ベースの RNN を使ってテレビスクリプトを生成しようという Project.

いつもながら、プロジェクトは演習のコピペでできてしまうので、簡単。

week11: Sequence to Sequence/Chatbot QA System with voice

複数の Input に対して、複数の Output を返す RNN のアーキテクチャの紹介。

この週は、わけがわからなかったな。はじめての挫折。

week12: Transfer Learning

転移学習。このトピックは大事。Kaggle などのデータ分析コンペで有用な手法。

この週の課題は、外部のリポジトリを使って tensorflow で vgg16 を使って、花の分類をする。

私は、fast.ai でこの転移学習についてたくさん学んでいたので、この週では学ぶことは少なかった。 逆に言えば、fast.ai の lesson1 をみることをつよくオススメしたい。lesson1 には日本語字幕もある!

week13: Reinforcement Learning

強化学習。ここでは、Deep Q-Network が紹介される。 強化学習はそれ自体大きな一つの分野なので、一週間で紹介するには無理があるのではと思った。

このあたりから、自分の興味は、Deep Learning から強化学習に移りはじめる。 なので、GAN はあまり理解できていない。

演習問題では、OpenAI Gym の CartPole 問題を Tensorflow を使って DQN でとく。 かなりいい結果がでて驚く。

これを参考に、Keras や Numpy で再実装を実施してみたのだが、思うように結果が出なかった。

Project4 Translate a Language

機械翻訳。英語からフランス語への翻訳を実施する。

難しそうだけれども、いつも通りスケルトンのコードが与えられて、week11 を参考にして穴埋めしていく。

フランス語がわからないので、翻訳結果が正しいのかはわからないけれども、一応できた。

この課題を参考に、チャットボットをつくってみたのだけれども、

<PAD><PAD><PAD><PAD><PAD><PAD>…

しか応答してくれない。 なにが悪いのかもあまり理解していないので、追いきれない。 チャットボットは後味が悪いけれども、ここまでにする。

  1. Generative Adversarial Network =================================

week14: Autoencoders

自己符号化器。

week15: Generative Adversarial Networks

ここから GAN が始まる。

Deep Learning Book の著者, GAN の提唱者、 Ian GoodFellow さんが登場し、GAN について解説してくれる。若い!

MNIST を GAN で生成することをする。すごいけど、仕組みが複雑で難しい。。。

week16: Image Generation

前回に引き続いて、GAN. Deep Convolution GAN(DCGAN) が説明される。

CNN でつかった Convolution の関数が出てくるところ意外は、MNIST の GAN と同じ。 ただし、プーリング層はでてこない。

また、Batch Normalization が登場する。これが GAN の性能をよくする。

看板の数字??を題材にして、DCGAN をする演習がある。

Project5 Generate Faces

最終課題は、DCGAN で MNIST と CelebA のデータセットを使って、画像生成をすること。

GAN をあまり理解していないのだが、DCGAN の回の Jupyter Notebook のコピペでなんとか乗り切った。

まとめ

この NanoDegree は超初心者向け、簡単

広範囲をカバーして難しそうなイメージを持っていたけれども、実際やってみると、難しい数式はでてこない。

講義は Jupyter Notebook で手取り足取りな丁寧さでかかれている。

Project は Lecture の Jupyter Notebook のコピペでクリアできたり、簡単。

ひとによっては、この難易度では物足りないのではないかとすら思う。自分にはちょうど良いレベル。

こんな自分でもできました

はじめ自分は DeepLearning はとても難しいものだと思っていた。

なので、こういうステップを踏んで入門しようと思っていた。

  1. 大学 1,2 年の数学を復習
  2. 機械学習を勉強する
  3. Deep Learning を勉強する

しかし、いざ Deep Learning の世界に踏み込んでみると、 数学すら怪しい自分でも、なんとかついていくことができた。

普通に CNN をバリバリ実装して kaggle にチャレンジとかできている。

fast.ai の理念

現在、Udacity DLND の裏で fast.ai が提供する MOOC, Practical Deep Learning for Coders というものを受けているのだけれども、 この MOOC の理念が素晴らしいので引用したい。

The purpose of this course is to make deep learning accessible to those individuals who may or may not possess a strong background in machine learning or mathematics.

We strongly believe that deep learning will be transformative in any application; as such, this course is designed for individuals who possess a background in computer programming and would like to apply these techniques to their domain of expertise.

つまり、Deep Learning は 数学者や物理学者のためのものでなくて、 CS のバックグラウンドを持つ全ての人に開かれるべきだという主張だ。

なんか、fast.ai の宣伝になってしまったが、Udacity の DLND はそういう部分がある。 理論は抑えるものの、より実践的に tensorflow を利用して現実につかっていくかにフォーカスしているように思える。

Deep Learning で世界をハック

恐れずに、Deep Learning に飛び込んでみよう。きっと面白いハッキングができるようになるはずだ。

Udacity のコースは、面白いハッキングの材料を提供してくれるはずだ。

以上、Happy Hacking!!

25 Dec 2015, 08:20

Udacity で Machine Learning for Trading の講義をきいた

Udacity で Machine Learning for Trading のビデオを見てみた.

これは、coursera にある以下のコンテンツの Part2 になる.

講義内容

3つのパートに分かれている.

  1. Python の numpy, pandas, scipy の使い方
  2. ヘッジファンドについて
  3. 機械学習

1 つめは、python の numpy, pandas ライブラリを用いて 金融データをどうやって扱うかが説明される.

2 つめは、ヘッジファンドの仕組みについて. ここのパートは、coursera の講義内容と内容がかぶってていたので、 飛ばした.

3 つめは、機械学習をシステムトレードに適用する方法について 説明される. 具体的に説明されていたのは、以下のような内容.

  • 線形回帰
  • KKN 法
  • Q 学習(強化学習)

他にも、KKN 法を改良した bagging algorithms や、 Q 学習を改良しした、Dyna-Q 学習 algorithms について解説されていた. 一度ビデオをみただけでは理解できなかった.

それから、この MOOC には提出課題はない. 課題の内容は公開されているのだが、提出が求められていない. Disscussion Board とかもないので、自力で解くのは断念して、課題はやらなかった.

感想

機械学習について、学べると思ったが、正直理解できなかった.

また、Computational Investing Part I に触発されて去年 FX のシステムトレードを したのて、これに機械学習のアイデアを取り入れて改良できればいいなと考えていた のだが、理解できていないので改良できない..

今後について

この講義だけで、機械学習をまなべると思っていたのは舐めていた.

本当に機械学習をシステムトレードに当てはめるためには、 本腰を入れて機械学習を学ばないといけないな. しかも、日本語のリソースで!(英語は理解できない)

機械学習を勉強するには、覚悟を決めて取り組まないと理解できない気がする. お試しで身につくようなものではない. 時間をかけるべきか、悩む.

とりあえず、深追いはせずにここで学習はやめようと思う.