← CS Lab AI & Machine Learning / GAN Lab Open standalone ↗

A GAN trains two networks by setting them against each other — and the contest itself is the only training signal. One network forges data, the other judges it, and each improves only because the other does.

Where you meet it

What it does

A GAN learns to sample from a complicated distribution — to turn cheap random noise into outputs that look like they came from the real data — without ever writing down what that distribution is. There is no formula for "a realistic face"; there are only examples, and a rival that keeps score.

The generator never sees a single real example — its only teacher is an opponent that is still learning too.

How it works

Two networks, one scoreboard read in opposite directions. The discriminator D takes a point and reports how real it thinks it is (1 = real, 0 = fake). The generator G takes random noise z and paints a fake. The whole game is one value function, averaged over real points and over noise:

min_G max_D   E[log D(x)]  +  E[log(1 − D(G(z)))]
#   D: push D(x)→1 on real,  push D(G(z))→0 on fakes
#   G: flip it — make D(G(z))→1  (fakes rated as real)

So D maximizes that line and G minimizes it — the same numbers, pulled two ways. You alternate: nudge D to catch fakes, then nudge G to fool the current D, repeat. The trick that makes it learn: G asks "which way do I move this fake so D rates it more real?", and backprop carries that question through D — the discriminator's gradient is the teacher. In theory it ends in a standstill where fakes match the real data and D is reduced to a coin flip, D(x) = ½ everywhere — the tool's "50/50". One detail already baked into the tool's g_loss: rather than minimizing log(1 − D(G(z))), which barely moves while fakes are obvious, G maximizes log D(G(z)) — the "non-saturating" form that gives a usable gradient early on.

Watch out

  • Don't read the losses like normal training. Neither should march to zero — two players chase each other, so the numbers oscillate. A falling generator loss can just mean D got worse.
  • Balance is everything. If D gets too good too fast, it rejects every fake with confidence, log(1 − D(G(z))) goes flat, and G's gradient vanishes — the generator stops learning. A GAN only trains while the two stay roughly matched.
  • It can cheat by collapsing. G may find one convincing output and emit it for every input — realistic samples, zero variety. That failure is mode collapse, and it has its own tool.

Two networks, one loss function read in opposite directions — that is the whole idea.

Go deeper

Ein GAN trainiert zwei Netze, indem es sie gegeneinander antreten lässt — und der Wettkampf selbst ist das einzige Trainingssignal. Eines fälscht Daten, das andere bewertet sie, und jedes wird nur besser, weil das andere besser wird.

Wo es vorkommt

Was es tut

Ein GAN lernt, aus einer komplizierten Verteilung zu sampeln — billiges Zufallsrauschen in Ausgaben zu verwandeln, die aussehen, als kämen sie aus den echten Daten — ohne diese Verteilung je aufzuschreiben. Es gibt keine Formel für „ein realistisches Gesicht"; es gibt nur Beispiele und einen Gegner, der mitzählt.

Der Generator sieht kein einziges echtes Beispiel — sein einziger Lehrer ist ein Gegner, der selbst noch dazulernt.

Wie es funktioniert

Zwei Netze, eine Wertung, in zwei Richtungen gelesen. Der Diskriminator D nimmt einen Punkt und meldet, wie echt er ihn hält (1 = echt, 0 = fake). Der Generator G nimmt Rauschen z und malt eine Fälschung. Das ganze Spiel steckt in einer Wertfunktion, gemittelt über echte Punkte und über Rauschen:

min_G max_D   E[log D(x)]  +  E[log(1 − D(G(z)))]
#   D: D(x)→1 bei echt,  D(G(z))→0 bei fake
#   G: dreht es um — D(G(z))→1  (fake wird für echt gehalten)

Also maximiert D diese Zeile und G minimiert sie — dieselben Zahlen, in zwei Richtungen gezogen. Man wechselt sich ab: D nachschärfen, damit es Fälschungen fängt, dann G nachschärfen, damit es das aktuelle D täuscht, und wieder von vorn. Der Kniff, der das Lernen erst möglich macht: G fragt „in welche Richtung schiebe ich diese Fälschung, damit D sie echter bewertet?", und die Backpropagation trägt diese Frage durch D — der Gradient des Diskriminators ist der Lehrer. Theoretisch endet es im Patt, in dem die Fälschungen zu den echten Daten passen und D nur noch raten kann, D(x) = ½ überall — die „50/50" im Tool. Ein Detail steckt schon im g_loss des Tools: statt log(1 − D(G(z))) zu minimieren (das bewegt sich kaum, solange die Fälschungen offensichtlich sind), maximiert G log D(G(z)) — die „non-saturating"-Form, die früh einen brauchbaren Gradienten liefert.

Worauf achten

  • Lies die Losses nicht wie normales Training. Keiner soll gegen null laufen — zwei Spieler jagen sich, die Zahlen oszillieren. Ein fallender Generator-Loss kann auch nur heißen: D ist schlechter geworden.
  • Balance ist alles. Wird D zu schnell zu gut, weist es jede Fälschung selbstsicher ab, log(1 − D(G(z))) wird flach, und Gs Gradient verschwindet — der Generator lernt nicht mehr. Ein GAN trainiert nur, solange die beiden ungefähr gleich stark bleiben.
  • Es kann durch Kollaps mogeln. G findet vielleicht eine überzeugende Ausgabe und liefert sie für jede Eingabe — realistische Samples, null Vielfalt. Dieser Fehler heißt Mode Collapse und hat ein eigenes Tool.

Zwei Netze, eine Verlustfunktion in zwei Richtungen gelesen — das ist die ganze Idee.

Mehr dazu

Next up
AI & Machine LearningRNN Memory AI & Machine LearningNMF Recommender All concepts →