기존의 GAN의 한계점은 크게 2가지로 나뉜다.
1. (성능 평가)
GAN 모델의 성능을 객관적 수치로 표현할 수 있는 방안이 부재했다. GAN의 경우 결과 자체가 새롭게 만들어진 데이터이기 때문에 비교 가능한 정량적 척도가 없었다는 것이다.
2. (성능 개선)
GAN은 기존 네트워크 학습 방법과 다른 구조여서 학습이 불안정했다. GAN은 Saddle Problem 혹은 Minmax를 풀어야 하는 태생적으로 불안정한 구조이기 때문이다.
실제 2016년 NIPS에서도 GAN의 안정화가 메인화두였다고 한다.
하지만 이의 두 단점을 모두 개선하여 GAN의 후속 연구가 줄줄이 이어나올 수 있도록 한 연구가 Facebook에서 개발한 DCGAN(Deep Convolutional GAN)이다.
1. DCGAN (Deep Convolutional GAN)
1.1 DCGAN의 연구 배경
기존의 GAN으로는 성능이 잘 나오지 않았는데 그 이유는 간단하게 Fully-Connected 되어 있는 구조이기 때문이다.

[그림21] 기존 GAN의 구조
따라서 Facebook은 DCGAN이라고 하는 모델을 내놓으며 Fully-Connected 구조를 CNN으로 바꾸어 GAN의 성능 향상을 도모한 것이 핵심이라 할 수 있다.
1.2 DCGAN의 아키텍처
아래는 DCGAN의 Generator에 해당하는 아키텍처이다.

[그림 22] DCGAN의 구조 (Generator)
DCGAN은 생성자 모델에 Transposed Convolutional Network를 사용하여 Up-Sampling하는데 사용하였다. 위 그림에는 나와 있지 않지만 판별자 모델에는 단순 Convolutional Network를 사용한 것이 특징이다.
Trasnposed Convolutional Network의 경우 기존의 컨볼루션 네트워크처럼 줄어드는 것이 아닌 확대되는 것이라 할 수 있다. 아래 왼쪽은 기존의 컨볼루션 네트워크고 오른쪽의 경우 Transposed 컨볼루션 네트워크이다.


[그림 23] Convolutional Network (좌), Transposed Convolutional Network (우)
좌측 convolutional network는 5x5의 input에 3x3의 kernel을 사용하여 3x3의 output을 출력한다. 반면
우측 Transposed Convolutional Network는 4x4의 input과 3x3의 kernel을 통해 6x6의 output을 출력한다.
DCGAN은 Generator의 구조에 우측의 Transposed Convolutional Network를 사용하였다.
하지만 단순히 CNN으로 변경하는데 있어서 좋은 성능을 내지 못했다. 따라서 최적의 성능을 내기 위해 5가지 방법을 적용하였다.

[그림 24] DCGAN 아키텍처 가이드라인
1. 미분이 불가능한 Pooling Layer를 제거하고 미분 가능한 Convolution 레이어로 대체하였다. (Unpooling시 매우 이상한 사진을 생성한다 함)
2. BatchNormalization 레이어를 추가하였다.
3. fully-connected hidden layer를 삭제하였다.
4. 생성자 모델에 ReLU 함수를 적용하고 출력의 activation function은 Tanh로 설정하였다.
5. 마지막으로 판별자 모든 레이어에 LeakyReLU를 적용하여 유연성을 더하였다.
위와 같은 intensive한 실험을 통해 알아낸 최적의 generator 구조가 [그림 22]라고 할 수 있다.
DCGAN의 전체 아키텍처는 아래와 같다. [그림 24]의 실험을 통해 알아낸 방법을 적용한 결과를 나타낸다. (출처: Here)


[그림 25] DCGAN 전체 아키텍처
1.3 실험 결과
DCGAN을 사용하여 모델을 학습 시켜 이미지를 생성한 결과는 다음과 같다.


[그림 26] DCGAN 모델의 이미지 생성 결과
얀르쿤의 GAN 모델보다 훨씬 더 다채롭고 가시적인 이미지를 생성하는 것을 확인할 수 있다.
위와 같은 이미지를 생성하기 위해 학습에 사용한 데이터셋은 LSUN(Large-scale Scene Understanding), ImageNet-1K, Face dataset이다.
아래는 판별자 모델의 필터를 시각화한 결과이다.

[그림 27] Discriminator 필터 시각화
각각의 filter들이 침대나 창문과 같이 침실의 일부를 학습하였고, 필터 시각화를 통해 기존의 모델들이 Black Box였던 문제점을 해소하였다.
또한 보간(Interpolation)을 수행하여 이미지의 각도를 변경이 가능함을 보였다.

[그림 28] 보간을 통한 각도 변경
여기서 보간이란 수치해석학에서 사용되는 개념으로 두 점을 연결하는 방법이다. 보간을 사용하는 이유는 모든 점을 메모리에 올리면 비효율적이기 때문에 특징이 될 수 있는 점들만 대표적으로 메모리에 올려 계산하기 위해 사용된다. 종류에는 다항식 보간법, 스플라인 보간법, 라그랑지 보간법, 뉴턴 보간법 등의 여러 종류가 있다.
또한 DCGAN을 통해 벡터 산술 연산(Vector Arithmetic)이 가능함을 보였다.

[그림 29] 벡터 산술 연산
선글라스 낀 남성 - 선글라스 벗은 남성 + 선글라스 벗은 여성 = 선글라스 낀 여성이다.
1.4 주요 Contribution
DCGAN은 크게 5가지 컨트리뷰션이 있다.
1. 대부분의 상황에서 언제나 안정적으로 학습하는 Convolution GAN 구조를 제안하였다는 점
2. word2vec과 같은 벡터 산술 연산이 가능하여 Generator를 semantic 수준에서 데이터를 생성할 수 있다는 점
3. 판별자가 학습한 필터들을 시각화하여 특정 필터들이 특정 물체를 학습했다는 것을 보였다는 점
4. 학습된 판별자 모델이 다른 비지도 학습 알고리즘과 비교해서 뒤쳐지지 않는 분류 성능을 보였다는 점
5. 마지막으로 모든 GAN 연구의 시작점이 될 수 있게 만들어준 연구라고 볼 수 있다.
'Deep Learning > pytorch' 카테고리의 다른 글
| CycleGAN (0) | 2023.08.14 |
|---|---|
| SRGAN (Super Resolution GAN) (0) | 2023.08.14 |
| PGGAN (Progressive Growing GAN) (0) | 2023.08.14 |
| LSGAN (Least Square GAN) (0) | 2023.08.14 |
| About GAN (Generative Adversarial Nets) (0) | 2023.08.14 |