概要
前回までの続き。
- (2021-06-16)Antonio Gulli and Sujit Pal『直感 Deep Learning』 ざっくり読み1章 ニューラルネットワークの基礎
- (2021-06-17)Antonio Gulli and Sujit Pal『直感 Deep Learning』 ざっくり読み2章 Keras のインストールと API
- (2021-06-18)Antonio Gulli and Sujit Pal『直感 Deep Learning』 ざっくり読み3章 畳み込みニューラルネットワーク
1章では概念と用語をざっと回収し、2章ではそれらが Keras ではなんてクラスになるのかを回収した。3章ではニューラルネットワークが奥義・畳み込みと fine-tuning を繰り出してきて、画像分類のタスクをやっつけた。
4章はだな、ニューラルネットワークが友達を連れてきて、ふたつのニューラルネットワークが一緒に学習をやりだすみたいだ。その目的は、贋作作り。何やっとんねん。さらに、分類と贋作で画像に飽きたらしいニューラルネットワークちゃんが、今度は音声を学習するらしい。
4章をざっくり読んだ
4章のサンプルコード: https://github.com/oreilly-japan/deep-learning-with-keras-ja/tree/master/ch04
- まず表題になっている敵対的生成ネットワーク(GAN)と WaveNet について、それが何か予想してみるか。
- GAN: ひとつ前の章で、畳み込み層のあるネットワークを畳み込みネットワークって呼んでいたじゃん? だったらこれは敵対的生成層のあるネットワークだわ。(名探偵)
- WaveNet: ImageNet が画像のデータセットだったじゃん? だったらこれは音声のデータセットだわ。
- Generative adversarial network って何?
- 贋作をつくる生成モデル(Generator)と、作られたデータが本物かどうか識別する識別モデル(Discriminator)が同時に交互に学習するネットワークのことだ。ふたつのニューラルネットワークがセットになってるってことね。 G と D は逆の目的を持っているから、協力関係ではあるのだけど、敵対的学習と呼ぶ。
- G も D もそれぞれがニューラルネットワークで、それぞれ畳み込みネットワークだったりする。
- 予想ハズレ。まさかニューラルネットワーク自体が増えるとは。
- さっき(3章)まで、画像を与えて「これは何か?」って話をしていたけれど、今度は画像そのものを作るわけね。この話の流れは分かりやすいね。
- てかちょっと有名なサイト https://generated.photos/ とか、ゼッテーこの技術で画像生成してるじゃん?
- StackGAN で画像生成例とか見れる。
- https://github.com/hanzhanggit/StackGAN
- こちらの YouTube でもっとたくさんサンプルが見れる: https://www.youtube.com/watch?v=93yaf_kE0Fg
- ざっくり読みがテーマなので Python を動かしたりはしていないのだけど、これって、特徴とかを入力すると画像を生成してくれる作りなのかな?
- Deep convolutional GAN って何?
- 畳み込み層を使って実装した GAN。
- こちらで入手可能: https://github.com/jacobgil/keras-dcgan
- こちらのコードでは、 G が Conv を持っているのに Pooling を持っていない。確か3章では、 Conv と Pooling は交互にやるもの、という話になっていた。ない場合もあるんだねえ。
- Keras で実装するときは keras-adversarial ライブラリを使うと便利。
- ただし2018年の時点で Keras 2.1.2 でのみ動作可能。
- あー、最終更新がだいぶ前だもんねえ。 https://github.com/bstriner/keras-adversarial
- MNIST の贋作を作る例:
- CIFAR-10 の贋作を作る例:
- 紙面のリンクはライブラリのほうの GitHub だが、同じく紙面の掲載コードはオライリーが書き直したほうのコード。気づかず見比べていたら混乱していたな。
- WaveNet って何?
- 音声を生成できるモデル。
- 予想ハズレ。データセットではなかったかあ。
- 音声合成システムはふたつの方式に分けられる。波形接続型音声合成システムと、パラメトリック音声合成システム。 WaveNet は後者。
- はじめのころは前者のほうがつよかったんだけど WaveNet が Dilated Causal Convolution という技術を導入してから後者のほうがつよくなった。(頭わるそうな記述)
- Dilated Causal Convolution って何?
- 畳み込みを行う差異に、いくつかの入力をスキップすること。
- Dialation って(瞳孔とかの)拡張って意味だけれど、ここではスキップ幅って意味になるんだって。
- 二次元の(画像の)畳み込みでは、隣接する四方の入力を想定すべきだけれど、一次元の(音声の)畳み込みでは、未来の値は必要はない。
- 未来の値をスキップするのが dialated causal convolution なんだって。
- これのおかげで、層をそれほど重ねなくても長い入力を扱えるようになった。
- Keras で WaveNet を実装しているリポジトリがあるが、 Python3 をサポートしていないのでひと手間必要。
こんなところで4章はおしまい。画像分類に加えて、画像贋作、音声学習を習得したわけね。だけど、 GAN と WaveNet で学習したモデルたちにどうやって入力を与えればいいのかわかんないや。興味が湧いたときにそこに気を払うことにすれば、別にいいけれど。マイ「イメージの流れ」図を更新して、今回もおしまい。