GAN - 적대적 생성 신경망

Lia·2021년 10월 24일
0

AI

목록 보기
9/11

먼저 이 글은 "미술관에 GAN 딥러닝 실전 프로젝트" 책을 정리한
내용을 알립니다. 이점 참고해 주시면 감사하겠습니다.


GAN의 생성자와 판별자

GAN은 Generative Adversarial Networks의 약자로 단어 그대로
적대적 생성 신경망 입니다.

모델의 이름 답게 GAN은 생성자와 판별자가 마치 경쟁하듯 학습하게 됩니다.
생성자는 판별자의 눈을 피해서 더욱 진짜같은 이미지를 생성하게 되고
판별자는 생성자가 생성한 이미지를 더욱 진짜같은지 가짜같은지 판단하려고 합니다.


GAN 판별자의 구조

책에서 설명하는 GAN은 일반적인 GAN 모델에 합성곱 층을 적용한
DCGAN 모델입니다. 책에서 사용한 판별자의 구조는 다음과 같습니다.

인풋데이터를 받아 합성곱 층과 활성화 함수(여기서는 ReLU함수)를 적용한 이후
과대적합 방지를 위한 드롭아웃 층까지 적용을 하고 이러한 과정을 총 4번을 진행합니다.

4번의 과정 이후 flatten 레이어를 통과하여 마지막으로 dense 레이어
즉 시그모이드 함수를 통과하게 됩니다.

판별자가 하는 일을 떠올려 보면 판별자의 구조를 더욱 쉽게 이해할 수 있습니다.
판별자는 생성자가 생성한 이미지를 가짜인지 혹은 진짜인지 구분하는 작업을 합니다.
이 작업을 우리는 이미지 이진분류 문제로 생각해 볼 수 있습니다.

따라서 위 판별자 모델같은 경우 네 번의 합성곱 층을 통과한 이후에
마지막으로 시그모이드 층을 통과하게 됩니다.


GAN 생성자의 구조

판별자의 구조를 알아보았으니 이제는 생성자의 구조를 알아볼 차례입니다.
책에서 사용한 생성자의 구조는 다음과 같습니다.

먼저 이 GAN 모델의 생성자는 길이가 100인 벡터를 입력층에 받게 됩니다.
생성자의 입력은 랜덤한 노이즈(현재 모델에서는 길이 100) 입니다.

다음 FC(Fully Connected)층을 지나 배치 정규화, 활성화 함수(ReLU)를 적용후
7 x 7 x 64 텐서로 바꿉니다.

이후 네 개의 합성곱 층(Conv2D)을 통과시킵니다. 이때 처음 두 개의 층은
업샘플링 이후 적용됩니다.

마지막 합성곱 층을 통과하고 활성화 함수인 tanh 함수를 적용하여
출력을 원본 이미지와 같은 범위로 변환합니다.


업샘플링 (UpSampling)

GAN 모델에서의 업샘플링 방식은 업샘플링 이후 스트라이드가 1인
합성곱 층을 사용해 합성곱 연산을 수행하는 방식입니다.

위 방식을 수행해 주는 층이 바로 UpSampling2D 입니다.
UpSampling2D를 사용하여 전치 합성곱과는 다르게 기존 픽셀값을 이용하여
업샘플링을 할 수 있습니다.

UpSampling2D 클래스의 interpolation 매개변수를 이용하여
늘어난 픽셀을 채우는 방식을 지정 할 수 있습니다. (기본값 : nearest)


GAN 모델의 훈련 방법

GAN 모델은 두가지 모델을 같이 훈련해야 하기 때문에 일반적인 훈련방법과
조금 다릅니다.

다음은 GAN 모델의 판별자 훈련 방법 입니다.

source : developers.google.com/machine-learning/gan/discriminator

먼저 판별자를 실제 이미지로 훈련을 한 다음 생성자가 생성한 이미지로
판별자를 훈련합니다.

이때 판별자는 실제 이미지라면 출력을 1, 가짜 이미지라고 판단하면 0을 출력할 때에
생성자는 판별자의 출력을 1로 만들기 위해 학습합니다.

다음은 GAN 모델의 생성자 훈련 방법 입니다.

source : developers.google.com/machine-learning/gan/generator

GAN 모델의 생성자는 랜덤한 노이즈를 입력받아 이미지를 생성 한 후
생성한 이미지를 판별자에 통과시키며 손실을 최소화 하게 됩니다.

profile
하고싶은게 많아요

0개의 댓글