fast.aiが提供する ディープラーニングのオンライン無料講座、Cutting Edge Deep Learning for Coders を受けたのだが、難しくて後半から挫折。。
とてもいい講座なので、布教のためにも講座の紹介と、各レクチャーの内容を書いておくことにする。
これは、fast.aiが提供するDeep Learning コースの Part2に当たる。Part1の感想は以下。
講座の紹介
紹介記事: Cutting Edge Deep Learning for Coders—Launching Deep Learning Part 2 · fast.ai
Cutting Edge(最先端)の意味〜論文を読め!
Part1のPracticalのテーマは、Kagglerになれ、ということだった。
Part2では、Cutting Edge = 最先端の手法が紹介される。Cutting Edgeとはなにか?それは、
論文を読め!! ということだ。
そのため、最先端を追いかけるために、arXivの論文を読むことが課題として課せられる。論文を読み、その内容を実装できるスキルをみにつけることが求められる。
論文というものに今まで触れたことがないので、かなりびっくりだ。
Kerasのバックエンドが theanoからTensorFlowに変更、PyTouchも使おう
Part1と同様に、Part2も丁寧に書かれたJupyter Notebookが提供されて、それにそってレクチャーが進む。
このJupyter Notebook, Keras と PyTouch の両方で実装されている。
なので、PyTouchを使いたいひとは、そっちを使うことができる。
Part1より難しい・・・
Part1には、充実したwikiがあったのだが、Part2にはWikiがない。
さらには、英語字幕もない。自分は、英語があまり聞き取れないので、Part1での勉強スタイルは、動画で雰囲気を掴んだあと、wikiを熟読してなんとか理解するものだった。今回、それができない。
また、内容的にも難しさが上がっている。Part1でやったことはすべてわかっている前提ではじまるので、Part1を飛ばしてPart2からやるのは厳しいと思う。
目安は100時間以上
正直、Lesson12くらいからよくわからなくなったのと、急いで終わらせる必要が出てきたので、、後半はあまり時間をかけなかった。
それでも、100時間はかかった。真面目にやったら150時間?はかかると思う。
ちなみに、Part1は真面目にやって100時間かかった。
レクチャーメモ
Lesson 8: Artistic Style
まずは、Part1でやったことの紹介と、これからやるPart2の紹介から始まる。
Part2では、最先端を追いかけるために論文を読め!と言われる。Mendeleyという論文管理ソフトが紹介される。
そしてStyle Transferの論文が紹介されてこれを理解するように、という課題が出される。
はじめから意味不明なコードとハイレベルな難易度で戸惑う。
やってけるかな??もうダメだ!と思ったら、丁寧な日本語解説記事を見つけて救われる\(^o^)/
これらも参考になる。
- 画風を変換するアルゴリズム | Preferred Research
- FADL2 L8: ‘Neural’ Artistic Style Transfer – Towards Data Science – Medium
Style Transfer できた。京都の渡月橋にゴッホの星月夜をとらんすふぁー。 pic.twitter.com/nFjtZQ3HJ4
— tsu-nera@勉強垢 (@tsu_nera_s) 2017年8月1日
なんとか実装した。
Lesson9: GENERATIVE MODELS
Perceptual Losses for Real-Time Style Transferという論文の内容が説明される。この技術は、Super-Resolutionという画質を良くする技術と、Real-Time Style Transfer という Neural Style Transferを高速化した技術の、両方に応用できる。
講義では、Super-Resolutionが取り上げられる。課題は、論文を読んで理解し、Fast Style Transferを実装せよとのこと。またもやもうダメだと思ったら、解説記事を発見。
なんとか実装した。
ノートPCの webcamから動画を取り込んで、fast style transfer で変換して、再度出力するということをやったが、ノートPCの非力なCPUでは、リアルタイムでは行かなかった。
RealTime Style Transferできた。ノートPCのCPUで計算してるので、全くリアルタイムではないという(笑) pic.twitter.com/twQ5HUXnEa
— tsu-nera@勉強垢 (@tsu_nera_s) 2017年8月4日
Lesson10: MULTI-MODAL & GANS
DeViSEという論文の紹介と実装。
- DeViSE: A Deep Visual-Semantic Embedding Model
- courses/imagenet_process.ipynb at master · fastai/courses
画像から関連する単語を抽出する試み。ResNetとword2vecを組み合わせる。
あまり理解していない。
Pythonで大規模データ(996433個の画像!)を扱うTipsとかも紹介される。ImageNetの大量画像データをスレッドやbcolzを使ってリサイズしたりする。あまりやりたくなかったので、これはJupyter Notebookを読むだけにした。
後半は、GANの説明。オリジナルのGAN, DCGANが説明される。あまりよい結果が出ない。そこで、WGANが紹介される。WGANはPyTorchで実装も公開されているとのことで、ここでPyTorch登場。
課題は、与えられたPyTouchのWGANを修正して、改善を加えること。
PyTorchとWGANという大きな課題を前に、途方にくれる。
まずは、GAN, DCGAN として、WGANというステップを踏んで学習することにした。
WGANに進んで論文読み始めたけど、この論文難しい。。数式とその証明が難しい。レクチャーでも、この論文は難しいと言っていた。先を急ぐので、WGANは後回しにすることにした。
Lecture11: MEMORY NETWORKS
前半は、最新の研究成果を追うためには論文を読むことを改めて強調される。そして、最近の研究成果を元にCNNを改良するためのたくさんのTipsとpaperが紹介される。
そのあと、k-means、Mean shiftというクラスタリング手法について説明がある。なんでここでクラスタリングなのかなと思ったら、PyTorchを使ってGPUの恩恵を受け、計算を高速化する方法が紹介される。
PyTorchはNumpyのようにデータを扱えるがブロードキャスト機能がないとのこと。そうなんだと思っていたら、v0.2.0で昨日追加された模様!link
最後に、Memory Network。これは、Facebook発のシンプルな自動応答のアルゴリズム。詳しい日本語の解説記事があった。
Lecture11から先は、明確なassignmentsがなくなり、課題としてなにをすればいいか悩む。正直、後半は完璧な理解は求めず、流しつつ進めた。とりあえず、与えられたJupyter Notebookと論文を読んで理解することにした。
Lecture12: ATTENTIONAL MODELS
k-meansの説明から始まる。Tensorflowでk-meansを実装する説明。k-meansについてよく理解していないので、ここの動画は飛ばしてしまった。(40分)
Attentional Modelsの説明とkeras実装が紹介される。はじめにencoder-decoderモデルを紹介して、これでは長文になるにつれて精度がでないねといって、Attentionモデルが出てくる。RNNや Embeddingsを忘れてしまったので、よくわからなかった。そういう人は、Lesson4,5,6を復習してねとのこと。まいったな。いよいよ 詳解 ディープラーニングを読んでみようかな。評判いいし。
(話は脇道にそれて、このDLコースのPart3はないよ、強化学習はやらない。代わりに、Part0を作って Practical machine learningをやるかも、とのこと。期待)
次は、いよいよCutting-Edgeな技術、ニューラル翻訳。予告編として、以下の論文が紹介される。
Lecture13: NEURAL TRANSLATION
ニューラル翻訳、英語からフランス語への翻訳、実はUdacityのDLNDで同じ課題をやったことがあるのだった。このときは、TensorFlowをつかった。TensorFlowは Seq2Seqのライブラリが充実していて、なんかよくわからないまま、講義のコピペで実装できてしまった。
fast.aiでは、KerasとPyTorch両方の実装が提供されている。よし学び直そうと思ったけど、やっぱり理解できなかったorz。とばし。
後半は、 Densenetの紹介。
DenseNetの略をディズニーコネクテッドCNNと勘違いして、なんだかワクワクした。https://t.co/XVDyu5NamD
— tsu-nera@勉強垢 (@tsu_nera_s) 2017年8月9日
Lecture14: TIME SERIES & SEGMENTATION
Final Lecture!
Kaggleのコンペを使って時系列データの扱いを学ぶ。Part1は主に画像データの扱いがメインだった。カグルマスターのKaggle攻略法講座が久しぶりに帰ってきた!!・・・が、真似できる気がしなかった。こうやって、カグルマスターは前処理をするのかと思った。
カテゴリカルデータをembeddingを使ってニューラルネットにぶち込む手法が参考になった。これを参考にして、自分は入門コンペのTitanicとか、House Prediction とかからはじめよう。Taxiコンペは Bengioさんが論文かいて手法を解説しているとか。
次に、segmentation(画像データをセグメントでわける処理)を学ぶ。これは、DenseNetを改良した、Transfer Learningに似たネットワークが使われる。
最後に、さらなる高みを目指して
- コードを書こう!
- Paperを読もう!
- ブログを書こう!
と言われる。
ここまで、長い長い旅だった。英語力がもう少しあればと思うときが何度もあった。このPart2で得られた最も多きな、恩恵は、PyTorchと論文に触れたことだった。未消化な部分や飛ばした部分がPart2は多いので、復習しよう。
Part2で読んだPapers
論文はMendeleyで管理するのがすごく便利。
- [1508.06576] A Neural Algorithm of Artistic Style
- [1603.08155] Perceptual Losses for Real-Time Style Transfer and Super-Resolution
- DeViSE: A Deep Visual-Semantic Embedding Model
- [1406.2661] Generative Adversarial Networks
- [1511.06434] Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks
- [1701.07875] Wasserstein GAN
- [1503.08895] End-To-End Memory Networks
- [1412.7449] Grammar as a Foreign Language
- [1608.06993] Densely Connected Convolutional Networks
- and more
他にも、たくさん論文が紹介されたのだけれども、後半紹介された論文は、あまり読んでない。。。