이 장에서는 GAN을 평가하는 것이 얼마나 어려운지에 대해 다룬다.
평가
다빈치 그림을 예시로 설명한다. 위조범(생성자)은 전시회에 들어갈 가짜 그림을 만들기 위해 다빈치를 흉내내고 미술품 감정사(판별자)는 위조품을 구별해내려 한다. 이 상황에서 만약 감정사를 속이기 위해 완벽한 다빈치 스타일로 위조품을 만드려고 한다면 어떻게 해야 잘 위조하고 있다고 판단하고 평가할 수 있을 것인가?
흉내내려면 화가의 스타일을 정량화하여 위조해야 한다. 그렇다면 어떻게 화가의 스타일을 정량화할 수 있을까? 또는 얼마나 비슷하게 흉내 냈는지 정량화할 수 있을지 고민해봐야 한다.
평가 프레임워크
가장 좋은 방법은 다빈치가 그릴 수 있는 모든 그림을 그리고 GAN이 생성한 이미지가 이 안에 포함되는지 확인하는 것이다. 이 과정을 최대 가능도 최대화의 비근사 버전으로 생각할 수 있다. 사실 이미지가 이 집합에 포함되는지 아닌지 알 수 있으므로 가능도와는 관련이 없지만 실제로는 이런 방식은 불가능하다. (말이 안됨;;)
그렇다면 이미지를 평가하고 찾고자 하는 것을 정의한 다음, 오류나 인공적으로 보이는 것을 헤아리는 것이다. 이러면 미술품을 검토하기위해 항상 평가자가 필요하다. 그러므로 좋은 방법이라고 볼 수 없다.
일반적으로 사용하려면 우리는 생성된 샘플의 품질을 평가하는 통계적인 방법이 필요하다. 통계적인 방법은 확장이 용이하고 실험 겨로가를 평가할 수 있기 때문이다.
최대가능도와 같이 이미 알고 있는 것을 사용한다면 어느 정도 원하는 것을 측정할 수 있다. 하지만 최대가능도는 사용하기 어렵다. 내재된 분포와 가능도를 잘 추정해야하기 때문이다. 이는 결국 수십억개 이상의 이미지가 필요하다는 것이다. 최대 가능도는 많은 머신러닝 연구에서 잘 정립된 지표이다. 일반적으로 최대 가능도는 바람직한 성질을 많이 가지고 있지만 GAN 평가 방법으로는 사용하기 쉽지 않다. 게다가 실전에서 최대 가능도 근사는 과도하게 일반화하여 현실적이지 않게 다양한 샘플을 만든다. 최대 가능도를 사용하게 되면 우리가 세상에서 절대 발견할 수 없는 샘플을 찾을 수 있다. 예를 들면, 머리가 여러 개인 강아지나 수십 개의 눈을 가지고 몸은 없는 기린 같은 것이다. 그러므로 손실 함수나 평가 방법으로 너무 일반화된 샘플은 제거해야 한다.
과잉 일반화를 생각하는 다른 방법은 가짜 데이터와 진짜 데이터의 확률 분포에서 시작해서 확률 질량이 0일 경우 거리 함수가 무엇을 할 수 있는지 살펴보는 것이다. 예를 들어 과도하게 일반화된 샘플로 인해 추가된 손실은 샘플이 너무 다르지 않다면 작을 수 있다. 머리가 여러 개인 것처럼 몇 가지 주요한 문제를 제외하고는 생성된 샘플의 종류가 실제 데이터와 가깝기 때문이다. 따라서 과잉 일반화 지표를 사용하면 진짜 데이터 생성 과정에서 있어서는 안될 샘플을 생성한다.
이상적인 평가 방법
1. 생성된 샘플은 실제 사물과 같고 구분이 가능해야 한다.
예를 들어 양동이와 소 같은 것이다. 이 샘플이 실제처럼 보이면 데이터셋에 있는 샘플을 생성할 수 있다. 또한 분류기가 보고 있는 것을 인식하고 있다고 확신 할 수 있다. 다행이 이미지가 특정 클래스에 속하는지 일정한 신뢰도로 분류하는 컴퓨터 비전 분류기가 이미 존재한다.
2. 생성된 샘플은 다양하고 이상적으로 원본 데이터셋에 있는 모든 클래스를 포함해야 한다.
샘플이 주어진 데이터셋을 대표해야 하기 때문이다. MNIST 데이터를 생성하는 GAN이 항상 숫자 8을 생성하지 못한다면 좋은 생성 모델이라 말할 수 없다. 즉, 클래스 사이에 모드 붕괴가 없어야 한다.
인셉션 점수
2016년에 논문에서 처음 소개되었으며 이 논문에서 이 지표를 광범위하게 검증하였고 실제 사람이 생각하는 고품질 샘플의 구성에 진짜 관련되어 있다고 확인하였다.
인셉션 점수(IS)를 계산하는 과정은 다음과 같다.
1. 진짜 분포와 생성된 분포 사이의 KL 발산을 계산한다.
2. 1의 결과에 지수 함수를 적용한다.
※ KL 발산(쿨백-라이블러 발산)이란?
분포 간의 차이를 측정한다. 두 분포의 부피를 계산한 다음 겹치는 부분의 부피를 측정한다.
예를 들어 이미지넷 데이터셋에서 데이지 꽃의 샘플을 생성하는 데 실패한 ACGAN이 있다. 실패한 ACGAN에 대해 인셉션 모델을 실행했을 때 인셉션 모델이 이것이 무엇인지 확신하지 못한다. 사람은 아마 꽃이라고 생각할 수 있지만 확실하진 않고 전체 예측 신뢰도도 낮게 측정되었다. 인셉션 점수는 사람의 인식과 유사하게 나타내는 점수라고 생각할 수 있다.
프레셰 인셉션 거리(Frechet-Inception-Distance)
다음 해결할 문제는 샘플의 다양성 부족이다. 종종 GAN은 클래스 별로 손쉬운 이미지만 학습한다. FID는 잡음에 강하고 클래스 내부의 샘플 누락을 감지할 수 있어서 IS를 향상시킨다.
IS 기반에서는 한 타입의 카테고리만 생성해도 기술적으로 카테고리 생성 조건을 만족하기 때문에 FID가 중요하다. 예시로 고양이 하나를 생성하는 알고리즘은 우리가 원하는 것이 아니다. 여러 종류의 고양이가 존재하기 때문에 그저 고양이 하나만 생성하는 것은 필요하지 않다. 마찬가지로 이미지를 그냥 외우는 GAN을 원하지 않는다. 이는 픽셀 공간에서 이미지 사이의 거리를 계산하면 된다.
FID는 인셉션 모델에 이미지를 통과시켜 계산한다. 실제로 최종 출력 대신 중간 표현(특성맵 또는 layer)을 비교한다. 진짜와 생성된 두 분포의 임베딩된 평균, 분산, 공분산의 거리를 평가한다.
이미지 뿐만 아니라 어떤 분야의 분류기가 잘 훈련되어 있다면 이 분류기의 예측을 사용해 특정 샘플이 현실적으로 보이는지 측정할 수 있다. 요약하자면 FID는 사실적인 이미지를 정량화하는 것처럼 어려운 작업에서도 사람의 평가에서 벗어나 분포 측면에서 확률적인 추론을 할 수 있다.
훈련의 어려움
GAN 훈련은 복잡하다. GAN을 훈련하는 것에 있어서 나타나는 문제들이 있다.
모드 붕괴
모드 붕괴는 일부 모드(클래스)가 생성된 샘플에 잘 나타나지 않는 것이다. 실제 데이터 분포가 해당 부분의 샘플을 제공함에도 모드가 붕괴된다. 예를 들어 생성된 MNIST 데이터에 숫자 8이 없다. 네트워크가 수렴했음에도 모드 붕괴가 나타날 수 있다.
느린 수렴
느린 수렴은 GAN과 비지도 학습에서 큰 문제이다. 수렴속도와 가용 계산 성능은 주요 제약 사항이다. 심지어 일부 사람들은 미래 AI 경쟁에서 데이터가 아니라 계산 성능이 결정적 요소가 된다고 믿는다.
과잉 일반화
과잉 일반화는 특히 지원할 필요가 없는 (즉, 존재하지 않는) 모드가 발생하는 경우를 말한다. 예를 들어 머리는 하나에 몸통은 여러개 이거나 그 반대인 동물을 볼 수 있다. 이는 GAN이 과도하게 일반화되어 실제 데이터에 존재하지 않는 것을 학습할 때 일어난다.
모드 붕괴와 과잉 일반화는 이따금 알고리즘을 초기화하여 쉽게 해결할 수 있다. 하지만 이런 알고리즘은 안정되지 않기에 좋지 않다. 다음과 같은 방법은 다른 머신러닝 알고리즘과 마찬가지로 GAN을 훈련할 때 몇 가지 기법이 훈련 과정을 향상하는 데 도움이 된다.
- 신경망 깊이 늘리기
- 게임 설정 바꾸기
- 오리지널 논문에서 제시한 최소-최대 설계와 종료 조건
- 오리지널 논문에서 제시한 수렴하지 않는 설계와 종료 조건
- 최신 기법의 WGAN
- 여러 가지 훈련 기법
- 입력 정규화
- 그레디언트에 벌칙 부과하기
- 판별자를 더 많이 훈련하기
- 희소한 그레디언트 피하기
- 간접적이고 잡음이 있는 레이블로 바꾸기
신경망 깊이 늘리기
많은 머신러닝 알고리즘처럼 안정되게 학습하는 가장 쉬운 방법은 복잡도를 낮추는 것이다. 간단한 알고리즘에서 시작해 점차 복잡도를 높이면 훈련의 안정성과 빠른 수렴, 그 외 여러 이점을 얻을 수 있다.
간단한 생성자와 판별자를 사용하면 금방 안정 상태에 도달할 수 있다. 그런 다음 훈련하면서 복잡도를 추가할 수 있다. 처음에는 간단한 두 네트워크로 시작하고 좋은 성능을 얻을 때까지 훈련한다.
이 방법은 초기 입력 크기보다 수십 수백 배가 더 큰 파라미터 공간으로 시작하지 않는다. 대신 4 x 4 픽셀 이미지를 생성하고 이 파라미터 공간을 탐색한 다음 출력의 크기를 두 배로 늘린다. 이미지 크기가 1024 x 1024가 될 때까지 이 과정을 반복한다.
이 방식은 안정성, 훈련 속도, 그리고 가장 중요한 크기와 생성한 샘플의 품질이 좋다.
게임 설정
GAN은 생성자와 판별자가 서로 경쟁하듯 이미지를 생성하는 모델이다. 따라서 규칙과 거리(승리)지표가 필요하다. 하지만 일부 GAN의 성공 지표(거리 또는 발산)가 다른 GAN에서는 안되고 특정 게임 설정에서만 사용되는 경향이 있다. 각 손실 함수(성공 지표)와 선수 간의 역학 관계(게임 설정)을 나누어 조사해야 한다.
최소-최대 GAN
GAN 설정을 게임 이론의 관점으로 생각하면 GAN 문제를 최소-최대 게임으로 생각한다. 판별자가 실제 샘플을 가짜로 착각할 가능성을 최소화하거나 가짜 샘플을 진짜로 착각할 가능성을 최소화한다는 의미의 손실 함수를 세운다. 생성자의 손실 함수는 판별자의 손실 함수에 음수를 취한 값이다. 그렇다면 두 개의 손실 함수가 있고 하나는 다른 하나의 음수 값이다. 생성자는 판별자를 이기려고 하고 판별자는 이진 분류기이다. 판별자는 두 개의 클래스가 아니라 하나의 숫자를 출력한다. 따라서 확신이나 불확신에 대한 벌칙을 받는다.
앞서 최대 가능도를 사용하지 않는 이유를 설명했다. 대신 KL 발산과 JS 발산과 같은 측정 값을 사용한다. 더 최근에는 와서스테인 거리로도 알려진 EM거리(Earth Mover Distance)를 사용한다. 이 모든 발산은 진짜와 생성된 분포의 차이를 이해하도록 돕는다. (지금은 JS 발산을 KL 발산의 대칭 버전으로 생각하자)
조금 더 자세히 말하면 JS 발산 및 KL 발산은 GAN을 궁극적으로 최소화하려는 것으로 간주한다. 이 두 종류의 거리 지표는 고차원 공간에서 두 분포가 어떻게 다른지 이해하는 데 도움을 준다.
이론적으로 잘 보장되는 것을 넘어서 최소-최대 GAN(MMGAN, min-max GAN)을 일반적으로 사용하진 않는다. MMGAN은 두 신경망 사이의 경쟁 특성에서 유래된 게임 이론 개념과 정보 이론 개념으로서 GAN을 이해하는 좋은 이론적 프레임워크를 제공한다. 하지만 그 이상의 장점은 없다.
비포화 GAN
실제로 최소-최대 방식은 생성자의 느린 수렴과 같은 문제를 종종 일으킨다. 오리지널 GAN 논문은 비포화GAN(NSGAN, non-saturating GAN)이라는 다른 방식을 제안한다. 이 방식은 두 개의 손실 함수가 서로 직접 경쟁하는 것이 아니라 두 손실 함수를 독립적으로 만든다. 두 손실 함수는 더는 직접 서로 연결되지 않는다. 하지만 생성자가 판별자 손실 함수의 일부 영역을 최소화 한다. 판별자의 손실 함수 식은 최소-최대GAN의 손실 함수와 동일하지만 생성자의 식이 다르다. NSGAN이 필요한 이유는 MMGAN의 경우 그레디언트가 쉽게 포화될 수 있기 때문이다. 그러면 그레디언트가 0에 가까워져 수렴이 느려진다. 하지만 NSGAN은 훨씬 많은 그레디언트를 받기 때문에 초기에 훈련이 빠르게 진행된다. NSGAN이 왜 내시 균형에 수렴하는지 이론적으로 잘 이해하기 어렵다. NSGAN은 경험에 기반해 만들어졌기 때문에 수학적으로 잘 증명하기 어렵다. 하지만 NSGAN의 경우에도 GAN 문제의 복잡도 때문에 훈련이 전혀 수렴되지 않는 경우가 있지만 MMGAN보다 잘 수행한다.
NSGAN 방식의 좋은 점은 초기 훈련이 빠른 것 뿐만 아니라 생성자가 빠르게 학습해서 판별자 학습도 빨라진다는 것이다. 모든 사람이 한정된 컴퓨팅 자원과 시간을 가지고 있기 때문에 이는 매우 좋은 현상이다. 어쨌든 빠르면 좋은 것이다.
훈련 종료 시점
NSGAN은 다음과 같은 특징을 가진다.
- 더는 JS 발산과 점근적으로 일치하지 않는다.
- 이론적으로 정의하기 더 힘든 평형 상태를 가진다.
JS 발산은 생서된 분포가 실제 데이터 분포에 수렴해야 하는 이유를 설명하는 의미 있는 도구이다. 원론적으로 보면 이는 종료 기준이다. 하지만 실제로는 진짜 분포와 생성된 분포가 수렴할 때는 검증할 수 없기 때문에 거의 의미가 없다. 일반적으로 몇 번의 반복마다 생성된 샘플을 보고 멈출 때는 정해야 하낟. 최근에는 FID와 IS로 종료 기준을 찾기도 하고 분할 와서 스테인 거리(SWD, sliced Wasserstein distance)를 사용하기도 한다.
확실하게 불안정성도 훈련 문제를 일으키므로 두 번째 항목도 중요하다. 더 중요한 것은 멈출 때를 아는 것이다. GAN 문제의 원본 공식 두 개에서는 실전에서 훈련이 종료될 조건이 명확하지 않다. 원칙적으로는 내시 균형에 도달할 때 훈련이 끝난다고 말하지만 이를 입증하기 어렵다.(내시 균형에 도달한지 증명할 방법이 없다..) 고차원은 평형 상태를 증명하기 어렵기 때문이다.
생성자와 판별자의 손실 함수를 그려보면 변동이 아주 심하다. 하나가 앞서면 다른 하나의 손실이 커진다. 언제 훈련을 끝내야 할지 실제로 알기 어렵다.
NSGAN은 WGAN보다 훨씬 빠르다. 따라서 NSGAN이 더 빠르게 실행할 수 있으므로 이런 제약을 극복할 수 있다.
WGAN
최근에 개발된 새로운 GAN 훈련 방법이다. WGAN이 중요한 이유는 세가지가 있다.
- 손실 함수에 큰 진전이 있다. 해석이 용이하고 종료 기준이 명확하다
- 경험적으로 보았을 때 WGAN이 더 나은 결과를 만드는 경향이 있다.
- 많은 GAN 연구들과 달리 손실부터 이론적 뒷받침이 명확하다. 또 근사하려는 KL 발산이 이론적으로나 실전에서 어떻게 잘 맞지 않는지 보여준다. 이 이론에 근거하여 문제를 완화할 수 있는 더 나은 손실 함수를 제안한다.
WGAN은 생성된 샘플의 비주얼 품질과 명확히 관련되어 있는 EM 거리를 손실 함수로 사용한다. WGAN의 판별자의 와서스테인 손실을 살펴보자.

이 식은 NSGAN의 판별자 손실과 비슷하지만 몇 가지 차이가 있다. 여기에는 판별자 역할을 하는 함수 f(w)가 존재한다. 비평자(판별자)는 EM 거리를 추정하고 f(w) 함수의 모델 파라미터를 바꾸어가며 진짜 분포와 생성된 분포 사이의 최대 차이를 찾는다. 그리고 그 차이를 측정한다. 비평자는 이동해야 할 확률 질량의 양을 최대화하는 f(w)를 찾음으로써 생성자를 최대로 어렵게 만든다. 다음은 생성자의 손실 함수이다.

고수준에서 보면 이 식은 실제 분포의 기댓값과 생성된 분포의 기댓값 사이 거리를 최소화한다. 결국 핵심은 f(w)가 기술적인 제약 사항을 만족하는 함수라는 것이 핵심이다.
기술적인 제약은 f(w)가 '1-립시츠(Lipschitz)' 함수여야 한다. 즉 모든 x1, x2에 대해 | f(x1) - f(x2) | <= | x1 - x2 |이다.
생성자가 풀려는 문제에 대해 더 알아보자.
1. 실제 분포(x ~ Pr)와 생성된 분포 x*(g(z), 여기에서 z ~ p(z))에서 x를 뽑는다.
2. 생성된 샘플은 z에서 샘플링되고 동일한 공간에 있는 샘플(x*)를 얻기 위해 g로 변환된다. 그 다음 f(w)를 사용해 평가한다.
3. 손실 함수 또는 거리 함수(EM 거리)를 최소화해야 한다.
WGAN에서는 일반 머신러닝에서 학습률처럼 동작하는 클리핑 상수를 정해야 하기 때문에 튜닝할 하이퍼 파라미터가 더 많다. 튜닝할 파라미터가 늘어나지만 어떤 GAN 구조가 이에 매우 민감하다면 양날의 검이 될 수도 있다. WGAN의 실용적인 영향을 알아보면
첫째, 후속 논문에서 이 GAN이 판별자 손실과 체감 품질 사이에 상관관계를 보여준다고 검증되었기 때문에 명확한 종료 기준이 만들어 진다. 그냥 와서스테인 거리를 계산하면 멈출 때를 알 수 있다.
둘째, WGAN을 훈련하여 수렴시킬 수 있다. 메타 리뷰 논문들이 실제 분포에서 JS 손실과 생성자 사이의 발산을 사용해서 훈련 과정을 측정한 것이 종종 의미 없다는 것을 보여준 것과 관련 있다. 예를 들면 체스에서 이따금 몇 판을 지면 계속 승률이 나빠지지만 그래야 실력이 늘고 결국 체스를 잘 둘 수 있다.
WGAN이 좋은 성능을 보이는 이유는 지금까지와는 다른 거리 지표를 사용하기 때문이다. 이를 EM거리 또는 와서스테인 거리라고 부른다.
와서스테인 거리에 대해 책에서는 잘 설명해주지 않아 따로 조사해보았다.
만약 w 하나를 샘플링하여 X(w)와 Y(w)를 계산하고 이 때 두 점간의 거리 d(X(w), Y(w)) 역시 계산할 수 있다. 샘플링을 계속 할수록 (X,Y)의 결합확률 분포의 윤곽이 나오게 된다. (P,Q)는 결합확률 분포의 주변확률 분포가 된다. 이때 (X,Y)의 결합확률 분포가 두 확률변수 X,Y의 연관성을 어떻게 측정하느냐에 따라 d(X,Y)의 분포가 달라지게 된다. 여기서 P와 Q는 바뀌지 않기 때문에 각 X와 Y가 분포하는 모양은 변하지 않는다. 다만 w에 따라 뽑히는 경향이 달라질 뿐이다. 와서스테인 거리는 이렇게 여러가지 결합확률 분포 중에서 d(X,Y)의 기대값이 가장 작게 나오는 확률 분포를 취하는 거리이다.
와서스테인 거리의 근사 버전을 사용해 실제 분포에서 추출한 것 같이 보이는 샘플을 생성하는 데 얼마나 근접했는지 평가할 수 있다. 근사버전을 사용하는 이유는 실제 데이터 분포를 알지 못하면 EM 거리를 정확히 평가하기 어렵기 때문이다.
결국 핵심은 EM 거리가 JS, KL 발산보다 더 훌륭한 속성을 가진다는 것이다. WGAN을 만드는 것은 물론 높은 일반화 성능을 검증하는 방법도 이미 개발되었다. WGAN이 다른 GAN 모델보다 완벽하게 뛰어나지 못한 경우도 있지ㅏㄴ 일반적으로 모든 경우에 최소한 동일한 성능을 낸다.
이 책에서 참고한 논문 중에 하나는 이러한 WGAN이 우수한 성능을 낸다는 것에 동의하지 않는 논문이 있다.(Lucic et al., 2017, http://arxiv.org/abs/1711.10337.) 이 논문이 어떤 결과를 낸 것인지 궁금하여 찾아보았고 이를 써보자면
이 연구는 GAN 모델들을 공정하게 비교하여 어떤 알고리즘이 가장 우수한지 판단하고자 한다. 이를 위해 여러 GAN 모델들을 동일한 조건(같은 구조, 하이퍼 파라미터 튜닝, 랜덤 초기화 등)에서 테스트하여 성능을 비교한다. 성능 평가는 주로 FID와 같은 정량적 지표를 사용해서 이루어졌다.
<결과>
- 대부분의 GAN 모델들은 충분한 하이퍼파라미터 최적화와 계산 자원이 주어지면 비슷한 성능을 발휘할 수 있다.
- 개별 실험의 최적 성능이 아닌 겨로가의 분포를 요약하여 비교할 필요가 있다고 주장한다. 이는 GAN모델의 불안정성과 최적화 과정의 무작위성 때문이다.
- FID 지표는 데이터의 모드 붕괴 현상에 민감하며, 이는 일부 클래스에 대한 이미지 생성이 빈약할 때 발생하는 현상이다.
<결론>
- GAN 연구의 향후 방향은 보다 체계적이고 객관적인 평가 절차에 기반해야 한다고 주장한다.
- 다양한 조건에서 여러 GAN 알고리즘을 공정하게 비교할 수 있는 실험 환경과 평가 지표의 개발이 필요하다.
결국 어느 모델이 가장 우수한 결과를 보여준다기 보단 자신의 응용 사례에 알맞는 모델을 선택하고 그 모델에 맞는 최적의 하이퍼파라미터를 찾는 과정이 필요하다고 말한다.
WGAN은 현재 널리 사용되고 많은 GAN 연구와 실험에서 사실상 표준이 되었다. 만약 새로운 논문에서 비교를 위해 WGAN을 포함하지 않고 이에 대한 타당한 이유를 대지 않는다면 그 논문은 조심해야한다...
게임 설정 정리
MMGAN, NSGAN, WGAN에 대해 소개하였고 이들 중 하나는 모든 논문의 시작에 언급되므로 적어도 논문이 어떤 방법을 사용하는지 이해할 수 있다. 이들의 손실 함수를 정리한 표가 있다.
| 이름 | 손실 함수 | 설명 |
| NSGAN | L(D) = -(E[log(D(x))] + E[log(1-D(G(z)))]) L(G) = -E[log(D(G(z)))] |
원본 공식 중 하나이다. 기본 구성이나 비교 목적을 제외하면, 실전에서 더는 사용되지 않는다. |
| WGAN | L(D) = -(E[D(x)] - E[D(G(z))]) L(G) = -E[D(G(z))] |
조금 간소화된 WGAN 손실 함수이다. |
| WGAN - GP(그레디언트 패널티) | L(D) = -(E[D(x)] - E[D(G(z))]) + GPterm L(G) = -E[D(G(z))] |
그레디언트 패널티가 있는 GAN이다. 보통 WGAN - GP가 가장 좋은 성능을 낸다. |
훈련 노하우
이제 잘 정립된 학술 이론에서 학계와 기술자들이 찾아놓은 노하우에 대해 학습해보자. 현재는 대부분의 사람들이 WGAN에서 시작한다. 앞으로는 SAGAN(self-attention GAN)을 주목할 것이다.
입력 정규화
친탈라의 리스트를 포함해 거의 모든 머신러닝 자료를 보면 이미지를 -1과 1 사이로 정규화하는 것이 좋다. 다른 머신러닝 분야처럼 정규화를 하면 일반적으로 계산이 용이하다. 입력을 제한한 것처럼 생성자의 출력도 tanh 활성화 함수 등으로 제한을 두는 것이 좋다.
배치 정규화
초기에 배치 정ㄱ화는 매우 좋은 기법으로 널리 여겨졌지만 최근에는 특히 생성자에서 가끔 나쁜 결과를 만들기도 한다. 반면 판별자에서는 일반적으로 긍정적인 결과를 만든다.
그레디언트 패널티
이 훈련기법은 친탈라의 리스트에 있는 10번에 해당한다. 그레디언트의 노름이 너무 크면 무언가 잘못된다. 요즘에는 BigGAN 같은 모델이 이분야에서 혁신을 만들고 있다.
하지만 기술적인 이슈가 여전히 있다. 단순한 가중치 클리핑은 다른 딥러닝 분야처럼 그레디언트 소실과 폭발을 만들 수 있다. 판별자의 입력에 대한 출력의 그레디언트 노름을 제한할 수 있다. 다른 말로, 입력을 조금 바꾼다면 가중치를 너무 많이 바꿔서는 안된다.
주요 딥러닝 프레임워크에서 제공하는 구현을 사용하여 간단하게 그레디언트를 제한할 수 있다. 최근에는 연구자들이 더 영리한 방법을 연구하여 <ICML 2018>에 제출했다. (현재 2024년이므로 더 좋은 방법들이 나왔을 수 있다..) 안정된 GAN을 위해 많은 연구들이 수행되고 있다. 예를 들어 야코피 클램핑도 아직 메타 연구에서 재현되지 못했다.
더 많은 판별자 훈련
판별자를 더 많이 훈련하는 방법이 최근에 많은 성과를 거두고 있다. 친탈라의 원래 리스트에서 이 항목은 확신이 없다고 표시되어 있으니 주의를 기울여 사용해야 한다. 크게 두가지 접근 방법으로 나뉜다.
- 생성자가 무엇인가를 만들기 전에 판별자를 사전 훈련한다.
- 훈련 반복마다 판별자를 더 많이 업데이트한다. 일반적인 비율은 생성자를 한 번 업데이트할 때 판별자를 다섯 번 업데이트 한다.
실제 데이터가 어떤 형태인지 판별자에게 초기에, 그리고 계속해서 정보를 주입해야 한다.
희소한 그레디언트 피하기
직관적으로 생각해도 희소한 그레디언트는 훈련을 어렵게 만든다. 보통의 최대 풀링을 사용한다면 합성곱의 전체 수용장에서 최댓값을 제외하고 나머지는 모두 잃게 된다. 따라서 DCGAN에서 전치 합성곱을 사용하여 정보를 복원하기 더 어려워진다. 평균 풀링을 사용하면 적어도 평균 값이 무엇인지 알 수 있다. 여전히 완벽하지 않고 정보를 잃지만 이전보다는 덜하다. 평균은 최대값보다는 더 대표성을 띄기 때문이다.
다른 문제는 ReLU 활성화 함수를 사용할 때의 정보 손실이다. 이 연산을 적용했을 때 얼마나 많은 정보를 잃는지 고려한느 것이 이 문제를 바라보는 한 가지 방법이다. 나중에 이 정보를 복원해야 하기 때문이다. ReLU 활성화 함수는 모든 음수에 대한 정보를 완전히 잃는다. 대신 음수 영역의 정보를 전달하여 이 정보가 다르다는 것을 보여주면 이 정보를 모두 보존할 수 있다.
이 해결책으로는 LeakyReLU 활성화 함수가 있다. 음수 x에서는 0.1(0.001) x X이고 양수 x에서는 x인 LeakyReLU와 평균 풀링으로 이런 문제를 해결할 수 있다. 다른 활성화 함수가 있지만 LeakyReLU가 가장 널리 사용된다.
소프트 레이블과 잡음 레이블
연구자들은 몇 가지 방법을 사용해 레이블에 잡음을 넣거나 완화시킨다. 이언 굿펠로는 원-사이드 레이블 스무딩을 추천한다. 예를 들어 이진 레이블에 0과 0.9를 사용한다. 하지만 잡음을 넣거나 클리핑을 사용하는 것이 좋은 방향인 것 같다.
'Book > GAN In Action' 카테고리의 다른 글
| 7장. SGAN (0) | 2024.08.08 |
|---|---|
| 6장. ProGAN (0) | 2024.08.07 |
| 4장. DCGAN (0) | 2024.08.01 |
| 3장. GAN 구현하기 (0) | 2024.07.30 |
| 2장. 오토인코더와 생성 학습 (0) | 2024.07.29 |