DCGAN
Deeplearningを使って画像を生成するDCGANを紹介します.
論文と合わせて, chainerで実装した例を読むと理解しやすいです.
Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks
(Alec Radfold, Luke Mets, Soumith Chintala, http://arxiv.org/pdf/1511.06434v2.pdf)
Chainerを使ってコンピュータにイラストを描かせる - Qiita
Chainerで顔イラストの自動生成 - Qiita
はじめに
こんにちは。大したことを書いていないのに, 毎日アクセスされていてびっくりです. アクセスされている間は, ちゃんと記事を書こうと思い, 年末に読んでいたDCGANを紹介します.
これはニューラルネットワークを使って画像生成するアルゴリズムで, デモを見る限り, うまく生成しているし, Word2vecのように画像の意味をベクトル化できているようです.
そもそもGANすら読んでいないので「'Adversarial'ってなんだ?」というところから始まり, Qiita上の実装コードやデモ, いろんな人の説明を読むまでを通して理解しました.
※注意
去年の4月からDeepLearningの勉強をし始めたので, わからないところ, 間違っている可能性があります.(もしよければ指摘してください)
その上, 英語も堪能ではないので, 誤解している可能性があります.
(もしよければ指摘してください)
Generative Adverasarial Networks
DCGANの説明に入る前に, 元となる手法であるGANを紹介します.GANは下図のように生成モデルと識別モデルが交互に学習をします. 例えて言うなら, 偽造犯と鑑定士のイタチごっこです. 変数や式を説明は以下のとおり.
- :生成モデル. から の画像を生成.
- :識別モデル. をとして判定.がから生成されたと判定した時, .
- : n次元の一様分布に従う変数.
- 鑑定士は本物の絵画を見て, (正解)になるように学習.
- 鑑定士は偽物の絵画を見て, (正解)になるように学習.
- 偽造犯は材料から偽物の絵画を描き, (不正解)になるように学習.
以上を繰り返すことで, 偽造犯の腕がどんどん磨かれて, より本物っぽい絵画をかけるようになります.
(画像はこちらから拝借: Chainerで顔イラストの自動生成 - Qiita)
(GANの論文はこちら: http://arxiv.org/pdf/1406.2661v1.pdf)
DCGANができたこと
それっぽい画像の生成
これはベッドルームの画像を生成した例です.
ぱっと見ると, 本当のベッドルームみたい.
(論文中,図3)
Word2vecのようなベクトル演算
'メガネベクトル'や'笑顔ベクトル'など意味演算ができていました.
これがどこまでいけるのかを今度試します.
なんでこのようなベクトル演算ができたのかというと, 生成される画像はn次元空間のzのパラメータで決まるところに注目するとわかります. このn次元空間上で異なる2つの画像を作る点, またはそれらの画像の平均z1, z2の差がベクトルになるわけです.