본문 바로가기
AI

GAN(Generative Adversarial Network)에 대해서 알아보자

by 은구잇 2022. 1. 17.
728x90

1. GAN 이란?

생성자, 판별자 2가지 종류의 신경망을 가지고 진짜 같은 가짜를 만들어내는 딥러닝 알고리즘

 

아래의 그림을 보고 이해해보자.

GAN은 위조지폐범에 해당하는 생성자와 경찰에 해당하는 구분자를 경쟁적으로 학습시킨다.

생성자의 목적은 그럴듯한 가짜 데이터를 만들어 구분자를 속이는 것.

구분자의 목적은 생상자가 만든 가짜 데이터와 진짜 데이터를 구분하는것.

https://dreamgonfly.github.io/blog/gan-explained/

GAN의 특징

1)  Discriminator 로 학습

이미지를 fake/real 로 구분

Input : 이미지의 고정된 벡터

output : fake/ real (sigmoid를 통해 0.5를 기준으로 classfication)

 

2) generator

랜덤한 코드를 받아서 이미지 생성

 

2.  DCGAN( Deep Convolutional GAN)

학습이 어려운 GAN모델에서 수많은 실험 끝에 안정적인 학습이 가능한 구조를 찾아낸 것이 DCGAN이다.

 

- 선형 레이어와 풀링 레이어를 최대한 배제하고 합성곱과 Transposed Convolutioin으로 네트워크 구조를 만들었다.

풀링 레이어는 불필요한 매개변수 수를 줄이고, 중요한 특징을 골라내는 역할을 하지만 이미지의 위치정보를 잃어버린다는 단점이 있다.

이미지를 생성하기 위해서는 위치 정보가 중요하기 때문에 DCGAN이 풀링 레이어를 배제했음.

 

- 배치 정규화(Batch Normalization)을 사용했다는 점

배치 정규화는 레이어의 입력 데이터 분포가 치우쳐져 있을 때 평균과 분산을 조정해주는 역할을 함.

이렇게 되면 역전파가 각 레이어에 쉽게 전달되기때문에 학습이 안정적으로 이루어질 수 있따.

 

또한, GAN을 학습시키는 가장 좋은 조건들을 찾아냈는데 마지막 레이어를 제외한 모든 레이어에 ReLU를 사용함.

구분자의 모든 레이어에 LeakyReLu 를 사용함.

 

 

생성자와 구분자를 코드로 살펴보자.

 

생성자는 레이어 구성이 ConvTranspose2d, BatchNorm2d, Relu로 구성이 되어있다.

 

구분자도 마찬가지

 

3. GAN의 한계점

실제로 GAN을 사용할수있을때까지 학습 시키는 것은 굉장히 어려운 일이라고 한다.

학습이 잘되기 위해서는 서로 비슷한 수준의 생성자와 구분자가 함께 발전을 해야하는데

한쪽이 너무 급격하게 강력해지면 이 관계가 깨져버려서 GAN의 학습이 이루어지지않는다고 한다.

 

이를 모드붕괴(Mode Collapse)라는 현상이라고 부르는데 

생성자가 다양한 이미지를 만들어내지 못하고 비슷한 이미지만 계속해서 생성하는 경우를 뜻한다.

 

또한 아직 텍스트를 생성하는데는 적용하기가 어렵다는 한계점이 있다.

음성분야예서는 성공 사례가 있지만 영어나 한국어 같은 텍스트는 불연속적인 특성을 가지고있어

GAN에 적용하기에는 어려움이 있다고 한다.

 

 

 

참고자료:https://dreamgonfly.github.io/blog/gan-explained/