0Pricing
Learn AI with Python · レッスン

GAN:生成器と識別器

ミニマックスゲーム理論、GAN学習の不安定性、モード崩壊、DCGANの実装について学習します。

「GAN:生成器と識別器」はCoddyKit上の無料Learn AI with Pythonレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLearn AI with Python学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Learn AI with Pythonコースには全4レッスンが含まれています。

GANとは何か

敵対的生成ネットワークは、2つのネットワークを競わせます。生成器は偽データを作り、識別器は本物か偽物かを判定します。両者が競い合うことで、生成器は説得力のあるサンプルを生成できるようになります。

敵対的なゲーム

生成器を偽造者、識別器を探偵だと考えてみましょう。偽造者は探偵をだますために偽物を改善し、探偵は見分ける目を鍛えます。この競争によって両者が向上し、最終的には偽物が本物のように見えるようになります。

生成器

生成器はランダムなノイズベクトルを偽の画像に写像します。意味のないランダムな数値を、構造を持つ現実的に見えるデータへ変換することを学習します。

class Generator(nn.Module):
    def __init__(self):
        super().__init__()
        self.net = nn.Sequential(
            nn.Linear(100, 256), nn.ReLU(),
            nn.Linear(256, 784), nn.Tanh()
        )
    def forward(self, z):
        return self.net(z)

ノイズベクトル

入力zは標準正規分布からサンプリングされます。異なるノイズベクトルからは異なる画像が生成されるため、ノイズは生成の「種」になります。その次元(ここでは100)が潜在サイズです。

z = torch.randn(batch_size, 100)
fake_images = generator(z)

識別器

識別器は画像を受け取り、それが本物である可能性を表す単一の確率を出力します。Sigmoidによって値は[0,1]になり、1は本物、0は偽物を意味します。

class Discriminator(nn.Module):
    def __init__(self):
        super().__init__()
        self.net = nn.Sequential(
            nn.Linear(784, 256), nn.LeakyReLU(0.2),
            nn.Linear(256, 1), nn.Sigmoid()
        )

識別器の学習

本物の画像に1、偽物の画像に0というラベルを付けたバッチでDを学習します。バイナリクロスエントロピーを使い、本物のスコアを上げ、偽物のスコアを下げることを学習します。

d_real = criterion(D(real), ones)
d_fake = criterion(D(fake.detach()), zeros)
d_loss = d_real + d_fake
d_loss.backward()

偽物をdetach()する理由

Dの学習時にはfake.detach()を使い、勾配が生成器へ流れないようにします。このステップで更新するのは識別器だけであり、生成器は別のステップで学習します。

生成器の学習

ここではGを学習してDをだまします。偽物をDに通し、Dが本物(ラベル1)と出力したときに生成器が報われるようにします。生成器は、Dに自分の偽物を本物だと思わせることで改善します。

g_loss = criterion(D(fake), ones)  # want D to say "real"
g_loss.backward()
g_optimizer.step()

交互学習

各イテレーションでは、まずDを更新し、次にGを更新するという順番で交互に学習します。両者のバランスをおおむね保つことが重要です。Dが強すぎるとGは有用な勾配を受け取れず、弱すぎるとGに十分な課題がなくなります。

# per step
# 1) update Discriminator
# 2) update Generator

モード崩壊

典型的な失敗の1つがモード崩壊です。生成器がDをだませる1つまたは少数の出力を見つけ、それだけを生成してデータの多様性を無視します。症状として、生成されたサンプルがすべてほぼ同じ見た目になります。

学習の不安定性

GANは不安定なことでよく知られています。損失が振動し、一方のネットワークが他方を圧倒し、収束も不確かです。LeakyReLU、慎重な学習率の設定、ラベルスムージングなどの工夫が学習の安定化に役立ちます。

理解度チェック

GANについての理解度を確認しましょう。

まとめ:GAN

敵対的な構成について学びました。生成器はノイズベクトルを偽物に変換し、識別器は本物か偽物かの確率を出力します。両者はD、次にGという順番で交互に学習します。また、モード崩壊と、GANを学習しにくくする一般的な不安定性についても学びました。

よくある質問

「GAN:生成器と識別器」レッスンは無料ですか?

はい。「GAN:生成器と識別器」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Learn AI with Pythonコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Learn AI with Pythonコースには全4レッスンが含まれています。

「GAN:生成器と識別器」で何を学びますか?

ミニマックスゲーム理論、GAN学習の不安定性、モード崩壊、DCGANの実装について学習します。 ブラウザで直接実行するハンズオンコードでLearn AI with Pythonを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Learn AI with Pythonを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのLearn AI with Pythonは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。

「GAN:生成器と識別器」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このLearn AI with Pythonレッスンでコードを書いて実行できますか?

はい。すべてのLearn AI with Pythonレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 表現学習のためのオートエンコーダー
  2. 変分オートエンコーダー(VAE)
  3. GAN:生成器と識別器
  4. 条件付きGANとスタイル変換
← Learn AI with Pythonに戻る