인공지능/머신러닝

[머신러닝 - 이론] GAN (Generative Adversarial Network) (생성적 적대 신경망)

바보1 2022. 5. 29. 17:25

GAN은 2개의 신경망이 적대적인 관계에서 학습하는 생성 모델입니다.

앞의 글에서 소개했던 웹사이트 주소 역시 GAN을 이용해서 생성한 사람의 얼굴입니다.

 

1. GAN

 

1.1 GAN의 원리

 

생성망 G와 분별망 D라는 두 개의 대립 관계의 신경망을 사용합니다.

이때 G는 D를 속일 수 있을 정도로 품질이 높은 가짜 샘플을 생성해야 하고,

D는 G가 만든 가짜 샘플을 높은 정확률로 맞춰야 합니다.

 

이때 생성망과 분별망을 나눠서 설명하자면,

  • 생성망의 가짜 샘플 생성
    • 분별망이 속지 않음 - 생성망의 생성 방식을 바꿈
    • 분별망이 속음 - 생성망은 그 방향으로 학습함
  • 분별망의 가짜 샘플 분별
    • 분별에 실패함 - 분별망의 분별 방식을 바꿈
    • 분별에 성공함 - 학습을 강화함

이러한 상호작용을 통해 G와 D 둘 다 뛰어나지는 학습을 GAN이라고 합니다.

 

입력 데이터가 28 * 28의 이미지라고 가정하겠습니다.

분별망 D의 입력은 28 * 28의 영상이고 출력 노드는 1개입니다. (1은 진짜, 0은 가짜, Activation Function은 Sigmoid 사용)생성망 G의 입력은 zdim-차원의 잠복 공간의 한 점의 좌표 (일반적으로 가우시안 분포), 출력은 28 * 28의 영상입니다.

 

 

1.2 GAN의 학습

 

GAN은 다른 목표를 가진 두 개의 Network로 구성되기 때문에 일반적인 신경망처럼 학습할 수 없습니다.

따라서 훈련은 두 단계로 이루어집니다.

 

첫 번째 단계에서는 분별망을 먼저 학습합니다. 

훈련 세트에서 실제 이미지를 샘플링하고, 생성망에서 생성한 동일한 수의 가짜 이미지를 합칩니다.

이때 생성망의 가중치는 고정해야 합니다. 그렇게 해야만 일관된 가짜 샘플을 생성하기 때문입니다.

가짜 이미지의 레이블은 0으로, 진짜 이미지는 1로 세팅합니다.

이 단계에서는 분별망의 가중치만 최적화, 학습합니다.

 

두 번째 단계에서는 생성망을 학습합니다.

이때는 분별망의 가중치를 고정해야 합니다. 그렇게 해야만 일관적인 분별을 하기 때문입니다.

생성망이 만드는 가짜 이미지에 레이블은 1로 두고 해야 합니다.

먼저 생성망이 만드는 가짜 이미지를 분별망에게 제공합니다.

그러면 분별망이 속았다면, 분별망은 1을 출력하고, 분별망이 속지 않는다면 0을 출력하게 됩니다.

이때 우리는 가짜 이미지에 레이블 1을 세팅했으므로, 분별망이 속았다면 학습을 강화하고, 

분별망이 0을 출력한다면, 학습 방법을 바꿔야 합니다.

이때도 마찬가지로 생성망의 가중치만 학습합니다.

 

오토인코더와는 다르게 D와 G의 Output의 모양/목적이 다를 수밖에 없고, 학습 과정이 독특합니다.

따라서 오토인코더는 하나의 Network라 통째로 학습하는 반면, GAN은 따로 학습을 해야 하고, Customizing이 필요합니다.

 

 

1.3 GAN의 품질 평가

 

첫 번째 방법은 유사한 진짜 샘플과 비교하는 방법입니다.

GAN으로 생성한 가짜 이미지와 가장 유사한 진짜 샘플을 출력하는 겁니다.

이를 통해서 GAN이 얼마나 좋은 품질을 가지고 있는지 평가할 수 있습니다.

 

두 번째 방법은 사람을 대상으로 모델을 평가하는 방법입니다.

진짜와 가짜를 반씩 섞은 후 사람에게 진위 구별을 하게 하는 실험입니다.

50%의 정확률이라면 사람을 완벽하게 속인 셈입니다.

 

http://whichfaceisreal.com 

 

Which Face Is Real?

 

www.whichfaceisreal.com

에서 자신이 평가자가 되어 실험해볼 수 있습니다.

 

 

1.4 GAN의 창작과 활용

 

 

GAN을 통해 새로운 디자인을 생성할 수 있고, 아이디어가 고갈되었을 때 생성 모델이 도움이 될 것입니다.

영상, 문학, 음악에서 큰 발전이 생길 것입니다.

실제로 AI가 이제는 기사를 쓰고 있죠.

 

 

1.5 ProGAN의 전략

 

 

ProGAN의 전략은 초기에는 작은 이미지를 생성하고, 점진적으로 생성망과 분별망에 Comvolution Layer을 추가해 갈수록 큰 이미지를 만드는 방법입니다.

ProGAN의 시작은 4*4 이미지를 생성합니다.

이후 8*8 이미지를 생성하기 위해 UpSampling Layer을 추가해 8*8 크기의 특성 맵을 출력 합니다.

이 특성 맵이 새로운 Convolution Layer에 주입되고, 다시 새로운 출력 Convolution Layer으로 주입됩니다.

 

즉 UpSampling된 8*8 이미지 하나는 출력 합성곱 층1으로 가게 되고, 

또 다른 하나는 합성곱 층2를 거쳐 출력 합성곱 층2으로 가게 됩니다.

이때 출력 합성곱 층 1과 2를 합쳐서 출력합니다.

 

즉 기존의 이미지를 잃지 않으면서도, 새로운 이미지를 만듭니다.

이렇게 하면서 새로운 합성곱 층은 점진적으로 fade in하게 되고, 원래의 출력층을 fade out합니다.

 

위 전략을 통해 고화질의 사진도 쉽게 만들 수 있습니다.

 

 

1.6 GAN 훈련의 문제점

 

 

생성망이 분별망의 약점을 파악한다면, 제대로 된 가짜를 생성하지 않을 가능성이 큽니다.

또는 생성망에 비해 분별망이 너무나 분별을 잘한다면 생성망은 학습을 하지 않고, 방법만 계속해서 바꿀 가능성이 큽니다.

 

따라서 생성망이 분별망의 약점을 파악하지 않게, 분별망은 너무 분별을 잘하지 않게 하는 것이 중요합니다.

 

 

 

감사합니다.

 

 

지적 환영합니다.