先日始まった Apple Machine Learning Journal から
https://machinelearning.apple.com/2017/07/07/GAN.html
を読んだメモです。
自分なりなまとめ
教師あり学習は上手くいくが、大量で多様な精度良いラベルがついたデータを用意する必要がある。
データを人工的に合成できれば、大量に精度良いラベル付きデータが得られるが、実際のデータとの乖離が大きくあまり良い結果にならない。そこで、合成画像を実際の画像にrefineする教師なし学習モデルを開発し、多くの機械学習タスクの結果を著しく向上させた。
概要
- GANの仕組みを用いる
- Discriminator: 「realな画像」 or 「refineされた画像」 を識別
- Generator(Refiner): 「合成された画像」から「refineされた画像」を生成する
手法
-
Generator は 2つの目的を持って学習する
- Discriminator が 間違えるように
- 「合成画像」と「refineした合成画像」の差分が小さくなるように(L1を使う)
Discriminatorは識別性能を上げていくように学習する
メモ
アノテーションを保持する工夫
例えば、視線推定用のデータを生成したい場合は、refineした画像の視線方向が変わると困る。
ので、合成画像とrefine画像の差にL1ペナルティを用いた。
artifactsを防ぐ
※ artifactsは人工物とか変なもの、という意味か?
Generatorが入力画像とは似ても似つかない画像を生成することを防ぐ必要がある。
Discriminatorを騙そうと必死になるうちに、そういうことが起こることがある。
そこで、Discriminatorは、画像の一部分を切り出して、本物かニセモノかを判断して、総合的に全てを合計することで、
その画像の真贋を判断させている。
(そうすると、全体的な改竄より部分的な改竄に努力の方向を向ける、ということかな?)
Generatorの生成履歴を使うことでDiscriminatorが向上する
Generator(G) が Discriminator(D) を騙す簡単な方法は、Dが知らない画像を見せること。
普通に学習させると、下図の左のようにおにごっこみたいになる。
(Dはつまり忘れっぽいのかな)
そこで、DのMiniBatchの半分くらいを過去の生成履歴を使い、残り半分を新規にGが作成したサンプルを使うと、
Dの訓練効率が良くなった(下図の右)。
学習の進め方
最初は、L1 LossだけでGを学習させる。
Gが Bluerな(ぼやっとした)画像を生成し始めたら、DのLossも含めるようにする。
Is the self-regularization L1 loss limiting?
この部分の意味がわからず。。。
ぐぬぬ。
感想
つまり、計算ドリルをGANに作らせる、ということですね。
なるほどなぁ。