12 Aug 2017, 09:51

fast.aiの Cutting Edge Deep Learning For Coders, Part 2を受けた

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^)/

これらも参考になる。

なんとか実装した。

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では、リアルタイムでは行かなかった。

Lesson10: MULTI-MODAL & GANS

DeViSEという論文の紹介と実装。

画像から関連する単語を抽出する試み。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の紹介。

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で管理するのがすごく便利。

他にも、たくさん論文が紹介されたのだけれども、後半紹介された論文は、あまり読んでない。。。

07 Aug 2017, 11:58

PyTorchでDCGAN

PyTorchとMNISTをつかって、DCGANで手書き数字を生成してみた。

前回のつづき。

GANでは、あまりよい結果が得られなかったので、DCGANの論文を読んで、実装してみた。

Deep Convolutional Networkを GANに使うにあたって、以下の改良点が提案されていた。

  • すべてのプーリングレイヤを strided convolutions(discriminator)と fractional-stirided convolutions(generator)に変更する。
  • generator と discriminator に batchnormを使う。
  • 全結合隠れ層を取り除く。
  • ReLU 活性関数を generatorで使う。ただし、output層は tanhを使う。
  • LeakyReLU活性関数をdiscriminatorのすべての層で使う。

もとい!

PyTorchのチュートリアルに DCGANの実装コードが公開されているので、それを参考に実装する。

結果

GANよりも、数字がくっきり浮き出た!

結果その2

ぺけぺけ女優10000人の顔写真をDMMからスクレイピングして収集し、それを題材にDCGANで顔写真の生成をしてみた。

スクレイピングは、この記事を参考にしました。

やっぱりぺけぺけ女優なので、モザイクがかかっています。

06 Aug 2017, 07:36

PyTorchを初めて使ってみた!GANを実装

fast.ai Lesson10のテーマはGAN.

課題は、PyTorchで書かれたWGANを改善せよとのこと。さすがは、Cutting Edgeだ。GANもDCGANも通り越して、WGANに行ってしまう。

PyTorchもGANもよくわからない自分にはツライ。まずは、WGANの前にPyTorchとGANからはじめることにした。

まずは、GANの開祖である以下の論文に目を通した。

PyTorch first inpression

軽くPyTorchのチュートリアルと fast.aiの Jupyter Notebookを眺めたあと、PyTorchに挑戦!numpyを扱うみたいで書きやすい。

PyTouchの特徴は以下のようだ。

Kerasだと、簡単に書くために細かい部分はライブラリに覆い隠されているけれども、PyTorchは多少なりともむき出しになっているので、細かいカスタマイズがしやすそうない印象を受けた。Kerasと PyTorch、両方使えるようになりたい。

GANを実装してみる

GANの実装は、Kerasバージョンがfast.aiから提供されている。

これをPyTorchに置き換える。パラメータを参考にしつつ、また 公式の DCGANチュートリアルの実装も参考にしつつ、実装してみた。

ぜんぜんダメじゃん、ジェレミー先生!

これを mode collapse というらしい。

なんど試してみても、損失関数の D値が0に収束、G値が大きくなっている。

Dは Discriminaterを表し、GのGeneratorが生成したものが本物か偽物かを判定する役割があるのだが、今起こっている状況は、Generator が生成した画像がほとんどの確率で偽物と判定されている。

GANを改善してみる

How to Train a GANというNIPS2016での発表があって、ここにGANの改善方法がまとまっている。

[https://www.youtube.com/embed/X1mUN6dD8uE]

以下を試してみた。

  • ReLU の 代わりにLeakyReLUを使う。
  • BatchNormalizationを使う。
  • Adam の 学習率を小さくする。
  • ノイズは正規分布からサンプリングする。
  • ネットワークのニューロン数を変更する。

結果。

おっ、それらしく古代文字っぽいものが浮き出てきたぞ。

単純なGANだと、あまり成果がでないことはわかっているので、実験は早めに切り上げて次のステップ DCGANに進むことにする。