「生成 Deep Learning」を読んだので感想を書く。

生成 Deep Learning ―絵を描き、物語や音楽を作り、ゲームをプレイする
- 作者:David Foster
- 発売日: 2020/10/05
- メディア: 単行本(ソフトカバー)
書籍の概要と感想
これの翻訳版。若干冗長で、洋書にありがちな例え話が若干意味わからん所もあって、そこら辺は読み飛ばしてもいいかと思った。(例えばGANの章だとGeneさんとDiさんのお話しが始まる。)こういう例え話が好きな人はいいのだろうが、むしろわかりづらい・・・。章の始めは基本例え話。その後、実装の細かい話や数学的な背景なども書かれていて、オートエンコーダとと VAEの違いとか生成モデルをあまり扱ってこなかった初学者には非常にわかりやすいのではと思う。
また、GitHubに上がっている参考コードや書籍のコードはKeras実装になっていてコードも結構整頓されているのでそのまま実行すればいい(自分はPytorch実装に書き換えて適宜行った)。しかし、結構学習量も多いのでGPUがないとめちゃくそ時間がかかると思う(GPUでも学習に12時間かかるようなものがあった)なのでGPUマシーンないよっていう場合は少なくとも学習はColabでやるのがいいと思う。推論はCPUで十分。
あと、どこからデータを取得すればいいかがよくわからないことがあったのでそこのフォローを各章の概要でメモっておく。
いずれにしても、オートエンコーダとVAEから始まって、お決まりのCelebAでお顔の写真合成して、っていうところから始まって、お絵かき・QA・音楽生成・ゲームシミュレーションといった流れで、Generative Deep Learningの醍醐味を体感できるいい書籍だった。各所に書かれている説明もアーキテクチャー図がたくさん書かれていて非常にわかりやすい印象。
難易度的に初めて生成モデルを使う人から、CelebA以外のサンプル試したことないけど、言語・音楽・ゲームシミュレーションみたいな別のものでも試したい初心者~中級者向けと思う。
各章の概要
ざっと各章の概要を書く。
1章 生成モデリング
生成モデリングとは何か?から始まって、識別モデリングとの違いを説明。特に生成モデリングの課題・表現学習の項目は図も多くわかりやすい。
2章 ディープラーニング
まぁここは、CNNとかやったことあれば特にいうことないけど、CNNを扱ったことないと読んだほうがいい。
3章 変分オートエンコーダ
まずはオートエンコーダの説明・コーディングから始まって、写像の制約に連続であることが保証されていないことから、変分オートエンコーダ(VAE)の説明に入る。ここら辺の説明はわかりやすく、オートエンコーダは潜在空間のある1点に直接写像されるが、VAEは潜在空間のある1点の多変量正規分布に写像されるというあたりは図とともにわかりやすい。また、損失関数としてKullback–Leibler divergenceを用いるので、その説明もよかった。(ちょっと謎の例え話もあるが。。。)
あとは、MNISTとCelebAでごにょごにょやってる。ここで、潜在空間での計算っていう項目の説明はこんな顔にしたいときにどう考えればいいのか、どうコーディングすればいいのかというところはわかりよかった。
時間があまりなかったので大したepochを回さない時の例として、
そんで肝心のデータはCelebAはサンプルコードから直接ダウンロードするとできない場合があるので、そのときは直接Google Driveからダウンロードするといい。 img_align_celeba.zip - Google ドライブ
4章 敵対的生成ネットワーク
GAN。生成器と識別器の関係がきちんと図解がされていて、わかりやすい。さらに課題として、
- 損失の振動
- モード崩壊
などをあげ、その解決として、 - Wasserstein損失
- Lipschitz制約
- 勾配ペナルティ損失
を用いて、Wasserstein GANやWGAN-GPを取り扱っている。これらも課題から「なぜこれらを取り入れる必要があるのか」という説明があるため理解を促してくれる。
肝心のデータセットは、データセットとして初めて扱ったがCamelというラクダのような絵がかかれたデータセットがある。認証が入るが、適当に済ませて、ダウンロードすると、full_numpy_bitmap_camel.npyがダウンロードされるのでこれを使う。これらはGoogleのQuick, Drawっていうプロジェクトで集めたデータセットじゃないかなと思っている。そのほかのデータセットでやりたい場合は適当に選ぶといい。
最終的にこんな感じなものができる。Camelを使ってGANで学習(epoch多め)の方はなんとなくラクダっぽいのができてる。
5章 描く
この書籍で一番面白いところ。描くではよくあるゴッホのスタイル変換ってやつから始まる。Pix2Pixはペアの画像セット(セグメンテーションされたものとのセット)が必要なのに対し、CycleGANはペアの画像セットが不要であるという違いを説明してみかんとりんごのデータを使ってコーディングが進む。このデータセットはサンプルコードからそのまま行けるが、ここのapple2orange.zipにある。そのほかのデータセットでやりたい場合は適当に選ぶといい。
この例ではUnetによるCycleGANを実装。
妥当性・復元性・同一性を示すために、以下のような実験を行った。 要するに、りんごとみかんを入れ替えようっていう話で、1行目の画像は、それぞれ元画像、2行目はCycleGANで入れ替えた画像、3行目の画像は2行目の画像を復元した画像(みかん→りんご生成器で生成したみかんを、りんご→みかんの生成器で戻すっていうこと。(ここら辺の説明は書籍にわかりやすく書いてある))
ただ、学習もうまーく進めないと、やりすぎると闇の色をしたりんごが生成されたりする。(epoch多いの画像)
ちなみにColabで12時間以上かかる。
そのほかにも、
- コンテンツ損失
- スタイル損失
- 全変動損失
について詳細に書かれている。図が多く説明がわかりやすい。
6章 書く
これは文章生成、QAの話。LSTMとRNNをつかって、特定のスタイルをまねたテキスト生成に挑戦できる。時系列データを単一のベクトルに凝縮し、別の時系列データにエンコーディングするという流れを学べる。
データは、
イソップ物語と
Maluuba/newsqaのGitHubからDocker使ってtrain, test, devを生成する。ちょっとめんどい。
github.com
7章 作曲する
個人的には一番興味があったところ。 データセットは著作権の問題からクラシックとなっているっぽい。以下から、好きなものを使う。また、楽譜の可視化は以下を使う。 musescore.org
有名どころとして、Suite No. 1 in G major - BWV 1007 Allemandeである、cs1-2allを選ぶ。それでmusic21のconverterでいい感じにやれば以下のように楽譜の可視化ができる。
Colabでやる際は、以下の設定を先に先に済ませておかないとセルに楽譜を表示できない。
!apt-get install musescore # 仮想フレームバッファの設定(Google Colaboratoryで必要な設定) !apt-get install xvfb !sh -e /etc/init.d/x11-common start import os os.putenv('DISPLAY', ':99.0') !start-stop-daemon --start --pidfile /var/run/xvfb.pid --make-pidfile --background --exec /usr/bin/Xvfb -- :99 -screen 0 1024x768x24 -ac +extension GLX +render -noreset # パスの設定(Jupyterと共通) from music21 import * us = environment.UserSettings() us['musescoreDirectPNGPath'] = '/usr/bin/mscore' us['musicxmlPath'] = '/usr/bin/mscore' us['directoryScratch'] = '/tmp'
また、MuseGANを使った例もあって、これはバッハの4声コラール集のデータセットを使う。どこにあるかというと、以下のJsb16thSeparated.npzを使った。 github.com
MuseGANによって、和音・スタイル・旋律・Grooveのベクトルを調整して、音楽を生成する。
MuseGANなんか色々できた。でも実際に聞くと、いまいちではあるけど、うまく調整すればそれなりになる。(style調整が一番まとも)
— くろたんく@激しく多忙 (@black_tank_top) 2020年10月23日
Colabでmusescoreで再生できる形で調整して、やっと音聞けた。https://t.co/FxTDVck4Vy pic.twitter.com/gsek7kz3Ur
生成できた楽譜の音声をuploadしてもいいと思うが、このブログでどうやるかが分からない。Soundなんちゃらみたいなところにuploadするのかな?
終わりに
ここで紹介した内容以外にも、 以下についても簡単に触れられている。
- 世界モデル
- Transformer
- BERT
- GPT-2
- MuseNet
- 画像生成
- ProGAN
- SAGAN
- BigGAN
- StyleGAN
また、話題のGPT-3については付録で詳細解説があり、個人的には嬉しかった。
生成モデル系は、生成物がどうなるのかというのが楽しいので、サンプルコードを元に好きなフレームワークで実際に体感をできて面白いとおもった。今後の自分の仕事にも生成モデルを多用する可能性があるのでいい復習になった。これだけでは最新のペーパーには追いつかないがベースを学にはとりあえずOKという感じ。

生成 Deep Learning ―絵を描き、物語や音楽を作り、ゲームをプレイする
- 作者:David Foster
- 発売日: 2020/10/05
- メディア: 単行本(ソフトカバー)
参考になる書籍
こちらは主に顔の画像のGANが多いが、Keras実装でこちらの書籍と併せて読み込むとGANの知識が積めると思う。

実践GAN 敵対的生成ネットワークによる深層学習 (Compass Booksシリーズ)
- 作者:Jakub Langr,Vladimir Bok
- 発売日: 2020/02/28
- メディア: Kindle版
Pytorch実装を作りながら学べる。なかなかほかの書籍にはないのでPytorch実装を覚えたい場合は良い。

つくりながら学ぶ! PyTorchによる発展ディープラーニング
- 作者:小川雄太郎
- 発売日: 2019/07/29
- メディア: 単行本(ソフトカバー)
お願い(欲しい書籍リスト)
ずうずうしいのですが、ブログを続けるのも大変で、基本自分の学習メモのためですが、サポーター募集です。ポチッとしてくれると嬉しいです。
https://www.amazon.jp/hz/wishlist/ls/392RAJUYSC2ON?ref_=wl_share
もしくは、レビューなど書くので、献本していただけたらものすごく喜びます(お問い合わせ or TwitterのDMからお問い合わせ下さい。)