- Published on
π STUDY λ§λ€λ©΄μ λ°°μ°λ μμ±ν AI | μμ±μ μ λ μ κ²½λ§
Generative Adversarial Network
μ΄ν GANμ μμ±μμ νλ³μ κ°μ trade offλ‘ λ°μ΄ν°λ₯Ό μμ±νλ€. μ΄ λ μμ±μλ λ Έμ΄μ¦μμ μλ³Έμ μνλ§ν κ²κ³Ό κ°μ΄ μνμ λ³ννλ©°, νλ³μλ μμ±μμ μμ‘°νμΈμ§λ₯Ό μμΈ‘νλ€. μ 체μ μΌλ‘ μμ±μλ μνμ μμ±ν΄λ΄κ³ , νλ³μλ μ§μμ¬λΆλ₯Ό νλ³νκ² λλλ°, νλ ¨μ΄ κ±°λν μλ‘ μμ±μλ νλ³μλ₯Ό μμΌ μλ‘μ΄ λ°©λ²μ μ°Ύκ² λλ€.
μ± μμ λμ¨ GANμ μ νμ μλμ κ°λ€.
- Deep Convolutional GAN
- WGAN
- CGAN
DCGAN
μμ±λ μ΄λ―Έμ§λ μ΄λ―Έμ§ μ¬μ΄ 거리(L1 norm)λ‘ μ μ¬ν μνμ 보μ¬μ€λ€.
GAN νλ ¨ νκ³Ό νΈλ¦
νλ³μκ° μμ±μλ³΄λ€ λ°μ΄λ κ²½μ°
νλ³μκ° κ°νλ©΄ μμ€ν¨μ μ νΈκ° μ½ν΄μ Έ μ§μ§μ κ°μ§λ₯Ό μλ²½νκ² κ΅¬λΆνκ³ κ·ΈλλμΈνΈκ° μ¬λΌμ Έ νμ΅μ΄ μ΄λ£¨μ΄μ§μ§ μμ μ μλ€. μμ±μκ° ν₯μλμ§ μκΈ° λλ¬Έμ νλ³μλ₯Ό μ½νμν΄
- νλ³μ DropoutμΈ΅μ rate λ§€κ°λ³μ μ¦κ° β‘οΈ λ€νΈμν¬λ₯Ό ν΅ν΄ νλ₯΄λ μ 보μ μ€μ
- νλ³μμ νμ΅λ₯ μ μ€μ
- νλ³μμ ν©μ±κ³± νν° μλ₯Ό μ€μ
- νλ³μλ₯Ό νλ ¨ν λ λ μ΄λΈμ μ‘μ μΆκ°
- νλ³μ νλ ¨ μ μΌλΆ μ΄λ―Έμ§ λ μ΄λΈμ 무μμλ‘ λ€μ§μ
μμ±μκ° νλ³μλ³΄λ€ λ°μ΄λ κ²½μ°: mode collapse
mode = νλ³μλ₯Ό νμ μμ΄λ νλμ μν modeλ§μΌλ‘ νλ³μλ₯Ό μ½κ² μμ΄λ―λ‘ μμ±μ μ μ₯μμλ λ€μν μΆλ ₯μ νμμ±μ΄ μλ€.
μ μ©νμ§ μμ μμ€
μμ±μμ μμ€κ³Ό μ΄λ―Έμ§ νμ§λ‘ μ΄λ£¨μ΄μ§μ§ μμ μ μλ€. μμ±μμ κ²°κ³Όλ νλ³μμ μν΄μλ§ νκ°λκ³ , νλ³μλ μ§μμ μΌλ‘ ν₯μλκΈ° λλ¬Έμ νλ ¨ κ³Όμ μ λ€λ₯Έ μ§μ μμ νκ°λ μμ€μ λΉκ΅ν μ μλ€.
νμ΄νΌνλΌλ―Έν°
- batch normalization
- dropout
- learning rate
- activation layer
- convolutional filter
- kernel size
- batch size
- latent dimension
π νμμ΄ DCGAN, μ²λ‘μμ WGAN
Discriminator | Generator |
---|---|
![]() | ![]() |
![]() | ![]() |
κ²°κ³Ό μ΄λ―Έμ§λ μλμ κ°λ€.

WGAN-GP
κΈ°μ‘΄ GANμ μμ€ν¨μλ μλμ κ°μ΄ κ³μ°λλ€.
d_real_loss = criterion(real_predictions, real_noisy_labels)
g_loss = criterion(fake_predictions, real_labels)
μμμ€ν μΈ μμ€ν¨μλ [0,1] λ§μ§λ§ μΈ΅μ μκ·Έλͺ¨μ΄λ ν¨μλ₯Ό μ κ±°νμ¬ μμΈ‘ λ²μκ° [0,1]μ΄ μλ μ΄λ€ μ«μκ° λ μ μλλ‘ νλ€. νμ§λ§ λΉνκ°(=νλ³μ)μ μΆκ°μ μΈ μ μ½μ κ°ν΄μΌ νλ€.
μμμ λ μ λ ₯ μ΄λ―Έμ§μ λν΄ λ€μ μμΈ‘μ κ΄ν΄μ λΉμ¨μ μ ννλ€. κ°μ€μΉλ₯Ό ν΄λ¦½ν νλ€λ³΄λ©΄ νμ΅ μλκ° ν¬κ² κ°μνκ² λλ€. μ¬κΈ°μ μΆκ°ν λ°©λ²μΌλ‘λ gradientκ° norm 1μ λ²μ΄λ κ²½μ° gradient penaltyλ₯Ό μ£Όμ΄ λΉνκ°μ μΆκ° μμΌ λ¦½μμΈ μ μ½ μ‘°κ±΄μ μ§μ κ°μ νλ€.
c_wass_loss = torch.mean(fake_pred) - torch.mean(real_pred)
c_gp = self.gradient_penalty(batch_size, real_images, fake_images)
c_loss = c_wass_loss + self.gp_weight * c_gp
# Gradient Penalty
norm = torch.sqrt(torch.sum(gradients**2, dim=1))
gp = torch.mean((norm - 1.0) ** 2)
νλ ¨ κ³Όμ λμ κ·ΈλλμΈνΈλ μΌλΆ 무μμ μ§μ μμ 보κ°ν μ΄λ―Έμ§λ€μ μ΄μ©νλ€. μνκΉκ²λ WGANμ νΉμ±μ νλ ¨μκ°μ΄ κΈ΄ κ΄κ³λ‘ epoch 40μμ λμλ€. μλλΌλ©΄μ μΌλ° λͺ¨λΈμ λΉν΄ μμ μ μΌλ‘ νλ ¨μ΄ λλ€.
Critic loss | Generator loss |
---|---|
![]() | ![]() |
![]() | ![]() |
λ―Έμμ±μ΄μ§λ§.. κ²°κ³Ό μ΄λ―Έμ§λ μλμ κ°λ€.

CGAN
μμ±μ 쑰건μΌλ‘ λΆμ¬νλ GAN λͺ¨λΈ νν. λ μ΄λΈκ³Ό κ΄λ ¨λ μ 보λ₯Ό μμ±μμ λΉνμμκ² μ λ¬νλ μ°¨μ΄μ μ΄ μλ€. 쑰건μ λΆμ¬ν¨μΌλ‘μ¨, μΆλ ₯μ μ μ΄ν μ μλ€. λν κ°λ³ νΉμ±μ΄ λΆλ¦¬λλλ‘ μ μ¬κ³΅κ°μ ꡬμ±ν μ μλ€.
λ§μ°¬κ°μ§λ‘ λ―Έμμ±μ΄μ§λ§.. κ²°κ³Ό μ΄λ―Έμ§λ μλμ κ°λ€.

ν΄λΉ μ½λμ torch migrationμ μλ repositoryμ 첨λΆνμλ€.
- Authors
- Name
- Amelia Young
- GitHub
- @ameliacode