GAN/이론 27

7. 훈련의 어려움

GAN 훈련은 복잡하다. 주요 문제를 나열하면 다음과 같다. 1. 모드 붕괴 모드 붕괴(model collapse)는 일부 모드(예를 들면 클래스)가 생성된 샘플에 잘 나타나지 않는 것이다. 실제 데이터 분포가 해당 부분의 샘플을 제공함에도 모드가 붕괴된다. 예를 들어 생성된 MNIST 데이터셋에 숫자 8이 없다. 네트워크가 수렴했음에도 모드 붕괴가 일어날 수 있다. 2. 느린 수렴 느린 수렴은 GAN과 비지도 학습에서 큰 문제이다. 수렴 속도와 가용 계산 성능은 주요 제약 사항이다. 일반적으로 레이블된 가용 데이터가 첫 번째 장벽인 지도 학습과는 다르다. 3. 과잉 일반화 과잉 일반화는 특히 지원할 필요가 없는(즉, 존재하지 않는) 모드(잠재적인 데이터 샘플)가 발생하는 경우를 말한다. 예를 들어 머리..

GAN/이론 2021.06.24

6. 훈련 평가

GAN이 어디에 위치하는지 알아보자. 다음 그림은 모델의 분류 체계를 보여준다. 이 그림에서 어떤 생성 모델이 있는지 알 수 있고 서로 비슷한 것과 비슷하지 않은 것을 확인할 수 있다. 이 그림에 두가지 중요한 점이 있다. GAN은 위조범과 미술품 감정사 사이의(비유) 끝없는 경쟁 문제를 풀려고 한다. 일반적으로 판별자보다 생성자가 더 관심의 대상이라는 것을 생각하면 생성자에 대한 평가는 아주 주의 깊어야 한다. 평가를 하기 위한 가장 좋은 방법은 다빈치가 그릴 수 있는 모든 그림을 그리고 GAN이 생성한 이미지가 이 안에 포함되는지 확인하는 것이다. 이 과정을 최대 가능도 최대화(maximum likelihood maximization)의 비근사 버전으로 생각할 수 있다. 사실 이미지가 이 집합에 포함..

GAN/이론 2021.06.24

5. DCGAN - 구현

앞에서 사용했던 MNIST 손글씨 숫자 데이터셋을 다시 사용한다. 이번에는 DCGAN 구조를 사용하므로 다음 그림처럼 생성자와 판별자를 합성곱 신경망으로 표현한다. 이 변화를 제외하고 신경망의 나머지 구조는 동일하다. %matplotlib inline import matplotlib.pyplot as plt import numpy as np from tensorflow.keras.datasets import mnist from tensorflow.keras.layers import Activation,BatchNormalization,Dense,Dropout,Flatten,Reshape from tensorflow.keras.layers import LeakyReLU from tensorflow.kera..

GAN/이론 2021.06.23

4. DCGAN - 배치정규화

간단한 2개 층의 피드포워드 신경망 대신에 생성자와 판별자를 합성곱 신경망으로 구현해보자. 이런 GAN 구조를 심층 합성곱 GAN(deep convolutional generative adversarial network) 이라고 한다. 이 기법을 연구한 연구진이 사용한 핵심 기법중 하나는 배치 정규화이다. 정규화는 평균이 0이고 단위 분산을 가지도록 데이터의 스케일을 조정하는 것이다. 정규화에는 여러 가지 장점이 있다. 가장 중요한 것은 스케일이 다른 특성을 쉽게 비교하고 더 나아가 특성의 스케일에 훈련 과정이 민감하지 않게 만든다. 배치 정규화의 아이디어는 많은 층을 가진 심층 신경망을 다룰 때 입력을 정규화하는 것이 충분하지 않다는 것에서 출발한다. 입력 값이 네트워크를 통과하여 한 층에서 다음 층으..

GAN/이론 2021.06.23

3. GAN 훈련 알고리즘

단계 1에서 판별자를 훈련하는 동안 생성자의 파라미터는 변경하지 않는다. 비슷하게 단계 2에서 생성자를 훈련하는 동안 판별자의 파라미터를 그대로 유지한다. 훈련하는 네트워크의 가중치와 절편만 업데이트 하는 이유는 이 네트워크가 제어할 수 있는 파라미터만 바꾸기 위해서이다. 이렇게 하면 각 네트워크는 다른 네트워크의 업데이트에 간섭받지 않고 자신에게 관련된 신호만 업데이트에 적용할 수 있다. 진짜 손글씨 숫자처럼 보이는 이미지를 생성하는 GAN을 만들겠다. 파이썬 신경망 라이브러리인 텐서플로의 케라스 API를 사용한다. 만들고자 하는 GAN의 구조는 다음 그림과 같다. 먼저 모델 실행에 필요한 모든 패키지와 라이브러리를 임포트한다. %matplotlib inline import matplotlib.pypl..

GAN/이론 2021.06.22

2. 생성자와 판별자

판별자의 목적은 가능한 한 정확하게 구별하는 것이다. 진짜 샘플 x일 경우 D(x)는 가능한 한 1(양성 클래스의 레이블)과 가까워야 한다. 가짜 샘플 x*일 경우 D(x*)는 가능한 한 0(음성 클래스의 레이블)과 가까워야 한다. 생성자의 목적은 이와 반대이다. 훈련 세트에 있는 진짜 샘플과 구분하기 힘든 가짜 샘플 x*를 만들어 판별자를 속여야 한다. 수학적으로 보면 생성자는 D(x*)이 가능한 한 1이 되도록 가짜 샘플 x*을 만들어야 한다. 판별자의 분류는 오차 행렬로 표현할 수 있다. 오차 행렬은 이진 분류의 모든 출력을 나타내는 표이다. 판별자의 경우 다음과 같다. 판별자는 진짜 양성과 진짜 음성 분류를 최대화하려고 노력한다. 또는 같은 의미로 거짓 양성과 거짓 음성 분류를 최소화한다. 반대로..

GAN/이론 2021.06.22

1. GAN 기초: 적대적 훈련

생성자와 판별자는 신경망과 같은 미분가능한 함수로 표현된다. 이 신경망은 각자 자신만의 비용 함수를 가진다. 판별자의 손실을 사용해 역전파로 두 네트워크를 훈련한다. 판별자는 진짜와 가짜 샘플에 대한 손실을 최소화하려고 노력한다. 반면 생성자는 자신이 생성한 가짜 샘플에 대해 판별자의 손실이 최대화되도록 노력한다. 이 구조가 다음 그림에 요약되어 있다. 생성자가 흉내 내려는 샘플의 종류는 훈련 데이터셋으로 결정된다. 조금 더 기술적으로 말하면 생성자의 목적은 훈련 데이터셋의 데이터 분포를 흉내 내는 샘플을 생성하는 것이다. 패턴 인식이 아닌 패턴을 합성하는 것을 학습한다. 앞서 설명한 두 가지 차이점은 GAN 훈련 과정에 큰 영향을 가져올 수 있다. 다음 그림은 비용 함수를 최소화 하는 최적화 과정을 보..

GAN/이론 2021.06.22