質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

Q&A

解決済

1回答

691閲覧

GANのGeneratorはなぜ乱数入力に対して構造を学習できるのか?

MagMag

総合スコア80

深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

0グッド

0クリップ

投稿2022/11/22 07:53

質問

GANのGeneretorは乱数から画像を作る、と当たり前のように説明されていますが、ここが理解できません。

自分でコードを調べる前は、乱数は各学習ステップに関わらず、最初に設定した値を固定して使うと思っていたのですが、以下のコード(添付リンクから引用)では、乱数は各epochで毎回初期化しているようです。

例えば、画像が猫か犬か判定するモデルを作ろうとした時に、当然入力は学習データで固定されており、固定されているからこそ、重みを各epochで更新していくことができると思うのですが、GANでは入力に規則性がなく、各epochでも入力が変動するのにも関わらず、なぜ、規則的な画像を出力する方向で学習できるのでしょうか?

入力が乱数で毎回変わると、ネットワーク構造なんてできないのでは?という素朴な疑問です。

今さら聞けないGAN

Python

1def train(self, epochs, batch_size=128, save_interval=50): 2 3 # mnistデータの読み込み 4 (X_train, _), (_, _) = mnist.load_data() 5 6 # 値を-1 to 1に規格化 7 X_train = (X_train.astype(np.float32) - 127.5) / 127.5 8 X_train = np.expand_dims(X_train, axis=3) 9 10 half_batch = int(batch_size / 2) 11 12 for epoch in range(epochs): 13 14 # --------------------- 15 # Discriminatorの学習 16 # --------------------- 17 18 # バッチサイズの半数をGeneratorから生成 19 noise = np.random.normal(0, 1, (half_batch, self.z_dim)) 20 gen_imgs = self.generator.predict(noise) 21 22 # 以下省略

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

GANでは入力に規則性がなく、各epochでも入力が変動するのにも関わらず、なぜ、規則的な画像を出力する方向で学習できるのでしょうか?

既にご存じと思いますが、猫画像を例とすると、GANが「猫っぽい画像」を生成できるのは、

  1. どんな入力が入ったとしても(たとえノイズであっても)なるべく猫っぽい画像を生成するネットワーク
  2. 入力された画像が猫っぽいかどうかを判別するネットワーク

の2つから成ります。

特に、1.の「入力」データは例えば64次元や128次元、512次元のノイズだったりします。このノイズ空間は埋め込み空間で、空間の位置毎に何かしらの意味があるような振る舞いをします。私の理解ではありますが、実際には、本当に空間に意味があるというよりは、後段の判別するネットワークで都合があうようにしていった結果、空間に意味が割り振られた、というような感じと思っています。

一方の、判別する2の部分は、入力画像が何であれ、「っぽい」か「っぽくないか」を言うだけのタスクですので、難易度的にはずいぶん低いタスクになります。――1の部分は画像を作らないといけませんので、例えば128ピクセル四方3chのデータであれば49152次元のタスクを解くのに対し、2の方は「っぽいかどうか」だけのたったの1次元のタスクです。

文字に起こすと当たり前のようになってしまいますが、1では猫の概念を満たす画像を生成するように学習が進み、2では猫の概念を満たすかどうか判別するように学習が進みます。つまり、生成される画像はどのような形であれ猫の概念を満たせばよい画像、が生成されます。黒猫さんだろうが、ハチワレさんだろうが、転がっていようが、跳ねていようが良いわけです。

ここで問題になるのが、乱数から画像を生成する難易度 > 乱数から生成した画像の判別難易度という関係性がどうしても生じる点です。起きる現象としては、以下の2つがあります。
モード崩壊:画像が崩れてしまう現象
過学習:判別ばかり賢くなって生成がトンチンカンな状態のまま変化せず、おかしな出力ばかりするようになる状況

ですので、原理上はちゃんと

規則的な画像を出力する方向で学習できる

ができますが、実際には思うほどうまくいく例は稀、と思います。


ここまでで何となく察しておられると思いますが、こういう状況にあるため、GANの学習はセンシティブで難易度が高く、思うほどうまくいかないというのが私の直感的理解です。

投稿2022/11/22 22:43

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

MagMag

2022/11/23 07:27

ありがとうございます。 自分なりに考えたのですが「1.の「入力」データは例えば64次元や128次元、512次元のノイズだったりします。このノイズ空間は埋め込み空間で、空間の位置毎に何かしらの意味があるような振る舞いをします。私の理解ではありますが、実際には、本当に空間に意味があるというよりは、後段の判別するネットワークで都合があうようにしていった結果、空間に意味が割り振られた、というような感じと思っています。」という点と、以下のリンクに「現実世界で観測される多くのデータの分布がこのような低次元多様体として捉えられるという仮説を多様体仮説と呼ぶ。宇宙空間で星や銀河が泡の膜のように非常に薄い領域に存在しているのと同様に、多くのデータも高次元空間中に低次元の薄い膜として分布していると考えられている。」を読んで考えていました。 それらから、どんな入力があってもそれは、低次元の薄い膜に一旦埋め込まれる(写像される)、という感じでしょうか? https://xtech.nikkei.com/dm/atcl/mag/15/00144/00031/
退会済みユーザー

退会済みユーザー

2022/11/23 14:43

私もそう思います。 ……むしろ、私も別の記事で「多様体仮説」を見かけて、あぁなるほどな、と思った次第です。「どんな入力があっても」かは分かりかねますが、少なくとも画像のような数万、数百万次元オーダーのデータ(事実上「どんな入力」ですね💦)であっても、GANの傾向を見る限り、てんでバラバラなデータではなく、何かしらの偏り(――かっこいい言葉で言う埋め込みですね)があるのだろうと思います。 --- 最近だとStable diffusionが流行っていますが、拡散モデルの砂嵐画像から一定の傾向に従った意味のある画像を汲み取るところを見ると、きっと「多様体"仮説"」は「多様体"定説"」にそのうち変わるのだろうと勝手に納得しています。 https://note.com/it_navi/n/n54d94b1f77d1
MagMag

2022/11/24 00:01 編集

なるほど。自分なりに腑に落ちました。ありがとうございます! それにしても、よくこんな構造思いつくなぁ、と思ってしまいます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問