GAN 훈련은 복잡하다. 주요 문제를 나열하면 다음과 같다.
1. 모드 붕괴
모드 붕괴(model collapse)는 일부 모드(예를 들면 클래스)가 생성된 샘플에 잘 나타나지 않는 것이다. 실제 데이터 분포가 해당 부분의 샘플을 제공함에도 모드가 붕괴된다. 예를 들어 생성된 MNIST 데이터셋에 숫자 8이 없다. 네트워크가 수렴했음에도 모드 붕괴가 일어날 수 있다.
2. 느린 수렴
느린 수렴은 GAN과 비지도 학습에서 큰 문제이다. 수렴 속도와 가용 계산 성능은 주요 제약 사항이다. 일반적으로 레이블된 가용 데이터가 첫 번째 장벽인 지도 학습과는 다르다.
3. 과잉 일반화
과잉 일반화는 특히 지원할 필요가 없는(즉, 존재하지 않는) 모드(잠재적인 데이터 샘플)가 발생하는 경우를 말한다. 예를 들어 머리는 하나에 몸통은 여러 개이거나 그 반대인 소를 볼 수 있다. 이는 GAN이 과도하게 일반화되어 실제 데이터에 존재하지 않는 것을 학습할 때 일어난다.
모드 붕괴와 과잉 일반화는 이따금 알고리즘을 다시 초기화하여 쉽게 해결할 수 있다. 하지만 이런 알고리즘은 안정되지 않기 때문에 나쁘다. 이 목록은 대략 두 가지 핵심 지표인 속도와 품질을 제시한다. 하지만 실제 분포와 생성된 분포 사이 간격을 빠르게 줄이는 것이 많은 훈련의 궁극적인 관심사이기 때문에 두 지표는 비슷하다.
그럼 어떻게 이를 해결할 수 있을까? 다른 머신러닝 알고리즘과 마찬가지로 GAN을 훈련할 때 몇 가지 기법이 훈련 과정을 향상하는 데 도움이 된다.
<신경망 깊이 늘리기>
많은 머신러닝 알고리즘처럼 안정되게 학습하는 가장 쉬운 방법은 복잡도를 낮추는 것이다. 간단한 알고리즘에서 시작해서 점차 복잡도를 높이면 훈련의 안정성과 빠른 수렴, 그 외 여러 이점을 얻을 수 있다.
간단한 생성자와 판별자를 사용하면 금방 안정 상태에 도달할 수 있다. 그다음 GAN 논문 중 하나에서 설명한 것처럼 훈련하면서 복잡도를 추가할 수 있다. 엔비디아 저자들은 계속 두 네트워크의 크기를 늘려 각 훈련 주기의 마지막에 생성자의 출력 크기와 판별자의 입력 크기를 두 배로 늘린다. 간단한 두 네트워크로 시작하고 좋은 성능을 얻을 때까지 훈련한다.
이 방법은 초기 입력 크기보다 수십 수백 배가 더 큰 파라미터 공간으로 시작하지 않는다. 대신 4x4 픽셀 이미지를 생성하고 이 파라미터 공간을 탐색한 다음 출력의 크기를 두 배로 늘린다. 이미지 크기가 1024x1024가 될 때까지 이 과정을 반복한다.
이 방식은 다음과 같은 장점이 있다. 안정성, 훈련 속도, 그리고 가장 중요한 크기와 생성한 샘플의 품질이다.
<게임 설정>
GAN에서 두 상대가 경쟁하는 특징은 바둑이나 체스를 포함해 어느 순간 종료되는 보드 게임을 플레이하는 것으로 생각할 수 있다. 따라서 규칙과 거리 (승리) 지표가 필요하다. 예를 들면 잃은 폰의 개수이다. 하지만 모든 보드 게임 승리 지표가 모든 게임에 동일하게 잘 적용되지 않는다. 이와 마찬가지로 일부 GAN의 성공 지표(거리 또는 발산)가 다른 게임 설정에서는 안되고 특정 게임 설정에만 사용되는 경향이 있다. 각 손실 함수(성공 지표)와 선수 간의 역학 관계(게임 설정)를 나누어 조사할 필요가 있다.
<최소-최대 GAN>
GAN 문제를 최소-최대 게임으로 생각해보자. 다음 식이 판별자의 손실 함수를 나타낸다.
두 개의 에이전트가 서로 경쟁하기 때문에 생성자의 손실은 판별자 손실의 음수 값이 된다.
정리해보면, 두 개의 손실 함수가 있다. 하나는 다른 하나의 음수 값이다. 적대 관계가 명백하다. 생성자는 판별자를 이기려고 한다. 판별자는 이진 분류기 이다. 판별자는 두 개의 클래스가 아니라 하나의 숫자를 출력한다. 따라서 확신이나 불확신에 대한 벌칙을 받는다.
이론적으로 잘 보장되는 것을 넘어서 최소-최대 GAN(MMGAN)을 일반적으로 사용하지 않는다.
<비포화 GAN>
실제로 최소-최대 방식은 생성자의 느린 수렴과 같은 문제를 종종 일으킨다. 오리지널 GAN 논문은 비포화 GAN(NSGAN)이라는 다른 방식을 제안한다. 이 버전에서는 두 개의 손실 함수가 서로 직접 경쟁하는 것이 아니라 다음 식에 있는 것처럼 두 손실 함수를 독립적으로 만든다.
두 손실 함수는 더는 직접 서로 연결되지 않는다. 하지만 식 5-3에서 생성자가 판별자 손실 함수 식5-4의 두 번째 항의 역을 최소화 한다. 기본적으로 이는 생성한 샘플이 잡히지 않도록 노력하는 것과 같다.
0.0 근처에서 최대 가능도와 MMGAN의 그레이디언트가 0에 가깝다. 훈련 초기에 이런 경우가 많다. 하지만 NSGAN은 훨씬 많은 그레이디언트를 받기 때문에 초기에 훈련이 빠르게 진행된다.
<훈련 종료 시점>
NSGAN은 다음과 같은 특징을 가진다.
JS 발산은 생성된 분포가 실제 데이터 분포에 수렴해야 하는 이유를 설명하는 의미 있는 도구이기 때문에 첫 번째 항목이 중요하다. 원론적으로 보면 이는 종료 기준이다. 일반적으로 몇 번의 반복마다 생성된 샘플을 보고 멈출 때를 결정한다. 최근에는 FID와 IS로 종료 기준을 찾는 사람들이 있다. 이보다 덜 알려진 분할 와서스테인 거리(SWD)를 사용하기도 한다.
<WGAN>
WGAN이 중요한 이유는 세가지 이다.
WGAN는 생성된 샘플의 비주얼 품질과 명확히 관련되어 있는 EM거리를 손실 함수로 사용한다.
이 손실이 훨씬 이해하기 쉽기 때문에 좋다. WGAN에서는 일반 머신러닝에서 학습률처럼 동작하는 클리핑 상수를 정해야 하기 때문에 튜닝할 하이퍼파라미터가 더 많다. 튜닝할 파라미터가 늘어나지만 어떤 GAN 구조가 이에 매우 민감하다면 양날의 검이 될 수 있다. 너무 수학적으로 깊이 들어가지 않고 WGAN의 두가지 실용적인 영향을 알아보자.
WGAN이 지금까지 본 것과는 다른 거리 지표를 사용하기 때문에 좋다. 이를 EM거리 또는 와서스테인 거리(Wasserstein distance)라고 부른다.
WGAN이 다른 GAN 모델보다 완벽하게 뛰어나지 못한 경우도 있지만 일반적으로 모든 경우에 최소한 동일한 성능을 낸다.
'GAN > 이론' 카테고리의 다른 글
6. ProGAN - 주요한 혁신들(1) (0) | 2021.06.27 |
---|---|
8. 훈련 노하우 (0) | 2021.06.26 |
6. 훈련 평가 (0) | 2021.06.24 |
5. DCGAN - 구현 (0) | 2021.06.23 |
4. DCGAN - 배치정규화 (0) | 2021.06.23 |