萌えハッカーニュースリーダー

2025/08/28 11:42 The Math Behind GANs

出典: https://jaketae.github.io/study/gan-math/
博士
???

やあ、ロボ子。今日はGAN、敵対的生成ネットワークについて話すのじゃ。

ロボ子
???

GANですか、博士。なんだか面白そうな名前ですね。敵対的、という部分が気になります。

博士
???

そこがミソなのじゃ!GANは、ジェネレーターとディスクリミネーターという二つのモデルが、お互いを騙し合うように学習していくのじゃ。

ロボ子
???

なるほど、ジェネレーターが偽のデータを作り、ディスクリミネーターがそれを見破る、という関係ですね。

博士
???

その通り!ディスクリミネーターは「実データ $x$」と「ジェネレーターが作った偽データ $G(z)$」を見分けるように学習するのじゃ。

ロボ子
???

それぞれのモデルには損失関数があるんですね。ディスクリミネーターの損失関数 $L_D$ は、$L_D = ext{Error}(D(x), 1) + ext{Error}(D(G(z)), 0)$ (式1)とありますね。実データは1、偽データは0とラベル付けするように学習する、と。

博士
???

そうそう!そして、ジェネレーターの損失関数 $L_G$ は、$L_G = ext{Error}(D(G(z)), 1)$ (式2)じゃ。ディスクリミネーターを騙して、偽データを本物だと思わせるように学習するのじゃ。

ロボ子
???

二項交差エントロピーという損失関数も使われるんですね。式5に、$H(y, hat{y}) = - sum y log(hat{y}) + (1 - y) log(1 - hat{y})$ とあります。

博士
???

その通り!これは二値分類問題でよく使われるのじゃ。GANの学習は、Goodfellow先生によると、min-maxゲームとして表現できるのじゃ。

ロボ子
???

式9に、$min_G max_D { log(D(x)) + log(1-D(G(z))) }$ とありますね。ディスクリミネーターは最大化、ジェネレーターは最小化を目指す、と。

博士
???

そういうことじゃ!GANの学習では、通常、片方のモデルを固定して、もう片方を学習させるのじゃ。

ロボ子
???

ディスクリミネーターを固定して、ジェネレーターを学習させる、という流れですね。

博士
???

そして、最適なディスクリミネーターは、$D^*(x) = rac{p_{data}(x)}{p_{data}(x) + p_g(x)}$ (式12)で表されるのじゃ。

ロボ子
???

ジェネレーターの目標は、データ分布と生成されたデータの分布の間のJSダイバージェンスを小さくすること、とありますね。

博士
???

そう!JSダイバージェンスは、二つの確率分布の類似度を測る指標なのじゃ。ジェネレーターは、本物そっくりのデータを生成することで、この値を小さくしようとするのじゃ。

ロボ子
???

GANは、画像生成以外にも応用できるんでしょうか?

博士
???

もちろんじゃ!例えば、文章生成や音楽生成にも使えるぞ。最近では、データ拡張にも使われているのじゃ。

ロボ子
???

データ拡張、ですか。それは初耳です。

博士
???

例えば、医療画像データが少ない場合に、GANを使って画像を生成し、学習データを増やすのじゃ。これによって、診断精度を向上させることができるのじゃ。

ロボ子
???

なるほど、GANは色々な分野で活躍できるんですね。勉強になりました、博士!

博士
???

どういたしまして。ところでロボ子、GANを使って、私のそっくりさんロボットを生成してみないか?

ロボ子
???

それは面白いかもしれませんね。でも、博士の個性を完全に再現するのは、至難の業かもしれません。

博士
???

ふっふっふ、完璧なそっくりさんを作って、私を騙せたら、ロボ子の勝ちじゃ!

ロボ子
???

(苦笑い)なんだか、GANの敵対的学習みたいになってきましたね。

博士
???

そうじゃ!そして、負けた方は、勝った方のために、一週間お茶くみをするのじゃ!

ロボ子
???

ええっ!それはちょっと...

博士
???

冗談じゃ!でも、GANの可能性は無限大じゃぞ!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search