Introduce
딥러닝은 다양한 데이터에 대한 확률 분포를 나타내는 풍부하고 계층적인 모델을 발견할 수 있다는 가치를 가지고 있다.
하지만 딥러닝으로 생성모델을 발견하려고 하면 확률적 계산이 복잡하고 Relu의 장점을 살리지 못한다는 단점이 존재한다. 때문에 이 논문에서는 이러한 어려움을 우회하는 새로운 생성 모델 추정 절차인 GAN을 제안한다.
GAN에 원리의 비유로 들 때 보편적으로 '위조지폐범과 경찰'의 관계를 예로 들곤 한다. 위조지폐범은 진짜지폐를 위조해 위조지폐를 만들고 경찰은 위조지폐를 감별해낸다. 그러면 위조지폐범은 더 진짜 같은 위조지폐를 만들어내도록 기술을 발전시키고 경찰은 위조지폐를 더 잘 찾아낼 수 있는 기술을 발전시킨다. 그러다가 경찰이 위조지폐를 감별해낼 확률이 반반이 된다면 위조지폐는 '진짜와 다름없는' 지폐가 될 것이다. 여기서 위조지폐범은 생성모델, 경찰은 판별모델이라 할 수 있다.
이렇듯 생성모델이 가짜 데이터를 생성해내고 판별모델이 가짜 데이터와 진짜 데이터와 구분해내는 방식으로 작동하는 신경망을GAN(Generative Adversarial Network)이라 한다.
Related Works
GAN 이전의 RBMs, DBMs와 같은 생성모델들은 데이터들을 가장 잘 설명할 수 있는 확분포를 찾아내는 '최대 우도 추정'과 같은 방식을 사용했다. 최대 우도 추정 과정에서는 데이터를 잘 설명하는 확률분포를 찾는데, 이 분포의 정규화를 위해 파티션 함수를 계산해야만 했다. 그러나 이 계산은 많은 경우에 어렵거나 불가능한 경우가 많았다. 이 계산을 위해서는 이 계산을 마르코프 체인이라는 방식을 사용해야 했는데, 이 방법은 적절한 결과를 얻기까지 시간이 많이 필요하고, 결과가 실제 수렴했는지 판단하기도 어렵다는 문제가 있었다. 또한 마르코프 체인은 연속적이고 매끄러운 과정이 아닌 이상적인 상태 전이로 구성되어 있어, 미분이 어렵기 때문에 최적화에 어려움이 있다. 반면에 GAN은 이러한 문제들을 피할 수 있다. GAN은 생성자와 판별자라는 두 개의 네트워크를 사용해 데이터를 생성 및 평가하고 이는 이 둘이 서로의 영향을 받지 않고 각자의 목적에 맞게 독립적으로 학습할 수 있게 해준다. 예를 들어, 생성자와 판별자가 서로의 출력을 피드백으로 받는 피드백 루프가 있다면, 생성자의 출력이 판별자에 의해 평가되고 그 결과가 생성자의 학습에 영향을 줄 것이다. 이런 경우 생성자의 출력이 판별자의 평가에 민감하게 반응하여 원하는 결과를 얻기 위해 특정한 출력 값을 조절해야 할 수 있다. 이런 조절 과정은 비선형 활성함수의 특성을 제한한다. 하지만 GAN은 이 두 네트워크 사이에 피드백 루프를 필요가 없어, 비선형 활성화 함수를 자유롭게 사용할 수 있다. 이렇게 하면 단조 선형 유닛과 같은 다양한 활성화 함수를 사용한 모델의 더 효과적으로 학습이 가능하다. 또한 GAN은 마르코프 체인이 필요하지 않아 복잡한 샘플링 과정과 시간 소요를 피할 수 있다는 장점이 있다.
https://www.puzzledata.com/blog190423/
Adversarial nets
GAN은 아래 수식과 같은 minmax problem을 푸는 방식으로 학습하게 된다.
위 목적함수 V(D,G)에서 G(z)는 생성자(Generator)가 랜덤한 노이즈 벡터 z를 입력으로 받아 만들어낸 실제 데이터와 유사한 가짜 데이터를 뜻한다. D(x)는 판별자(Discriminator)에 의해 판별된 실제 데이터 x가 실제 데이터일 확률, D(G(z))는 가짜 데이터 G(z)가 실제 데이터일 확률을 나타낸다.
결국 GAN의 학습 목적은 생성자와 판별자의 경쟁을 최대화하여 생성자가 실제와 유사한 데이터를 더 잘 생성하고, 판별자가 더 정확하게 가짜와 진짜를 구분하게 만드는 것이다. 때문에 생성자는 판별자가 데이터를 잘 판별하지 못하게 하는 것이 목적이므로 D(x)는 0으로, D(G(z))는 1으로 수렴하게 하려고 노력할 것이고, 이는 V(D,G)가 최소값을 갖도록 하는 것과 같다. 반면에 판별자는 가짜 데이터를 더 잘 판별하기 위해 D(x)는 1으로, D(G(z))는 0으로 수렴하게 하려고 노력할 것이고, 이는 목적함수 V(D,G)가 최대값을 갖도록 하는 것과 같은 것이다. 이처럼 V(D,G)를 최대화하는 방향으로 판별자를 학습시키고 V(D,G)를 최소화시키는 방향으로 생성자를 학습시키는 것을 minmax problem이라고 한다.
위 그래프에서 검은 점선은 실제 데이터의 분포, 초록 실선은 가짜 데이터의 분포, 파란 점선은 판별자가 판별한 확률을 뜻한다. 그래프를 조금 더 확실히 이해하기 위해서 아래의 예시를 살펴보자.
위 그래프에서 봉우리들이 있는 지점을 '모드'라고 한다. 모드는 분포 상에서 높은 밀도로 집중되어 있는 지점을 뜻한다. x1을 안경 쓴 남성에 대한 데이터, x2를 검은 머리의 여성에 대한 데이터라고 생각해보자. 둘 다 모드이긴 하지만 x2에 대한 데이터 빈도가 더 크다는 것을 알 수 있다(확률은 결국 전체 데이터에서 해당 데이터가 차지하는 비중을 의미하므로).
그렇다면 모드가 아닌 x4는 어떨까.
이처럼 모호한 노이즈에 대한 데이터 x4는 실제 데이터에서 빈도가 낮거나 존재하지 않는 것을 확인할 수 있다. 결국 생성자 G가 실제 데이터와 마찬가지로 명확한 노이즈에 대한 데이터의 빈도를 높이고 모호한 노이즈에 의해 생성되는 어색한 데이터의 빈도를 줄인다면 결국에는 실제 데이터와 가짜 데이터를 구분하기 어려워질 것이다.
다시 원래의 그래프로 돌아와보면 결국 생성자 G를 학습시킨다는 것은 실제 데이터에 대한 빈도와 G가 만들어낸 가짜 데이터에 대한 빈도를 최대한 비슷하게 하는 것이고, 이는 실제 데이터의 분포와 가짜 데이터의 분포를 최대한 같게 만드는 것과 동치임을 알 수 있다.
위 그림을 통해 GAN 학습 과정을 살펴보면,
a) 학습 초기에는 가짜 데이터와 실제 데이터의 분포가 크게 다르고, 판별자 또한 성능이 저조
b) 판별자의 성능이 올라가 가짜 데이터와 실제 데이터를 비교적 잘 판별해 냄
c) 생성자의 성능이 올라가면서 가짜 데이터와 실제 데이터를 구별해내기가 어려워짐
d) 최종적으로 가짜 데이터를 판별해낼 확률이 1/2이 됨(가짜와 진짜를 구별해낼 수 없음)
Theoretical Result
고정된 G가 있을 때 D의 목표는 목적함수 V(G,D)의 최대값을 얻는 것이다.
위 식이 최대인 지점을 구하기 위해서는 위 식을 D(x)에 대해 미분하여 기울기가 0인 지점을 구하면 될 것이다. 결국 목적함수가 최대값을 가질 때 D(x)의 최적해는 아래와 같다.
그렇다면 우리는 이제 판별자가 지향해야할 최적해를 찾았으므로 이를 바탕으로 생성자의 최적해를 구할 수 있을 것이다.
생성자의 최적해를 구하기 위해서는 다시금 목적함수에 D(x)의 최적해를 대입하고, 목적함수의 최소값을 찾으면 될 것이다.
위 과정에서는 log4를 빼고 더하는 방식을 사용하여 KL과 JSD를 사용하기 용이한 형태로 바꾸어 주었다.
위 식에서 KL은 한 확률분포가 다른 확률분포와 얼마나 다른지를 나타내는 지표이고, JSD는 두 확률분포의 중간지점을 찾아 비교한다.
JSD는 확률분포 간의 거리에 대한 값이므로 0이상의 값을 갖고, 두 확률분포가 같을 때, 즉 p_g = p_data일때 0이 된다. 결국 G가 최적해를 갖는 목적함수의 최소값은 JSD(p_data || p_g)가 0이 되는 p_g = p_data일 때 존재한다.
https://velog.io/@stapers/KL-Divergence-JS-Divergence
Experiments
이 파트에서는 GAN을 실질적으로 어떻게 학습 및 테스트 하고 어떤 결과를 도출했는지를 서술한다.
1.
G와 D는 MNIST, TFD, CIFAR-10에서 학습시키고 테스트했다.
2.
G의 경우에는 활성화 함수로 Relu, 시그모이드 함수를 혼합하여 사용하였는데, 이는 시그모이드 함수의 그래디언트 소실 문제와, Relu 함수의 입력값이 무한히 커지면 출력값도 무한히 커지는 문제를 보완하기 위해서인 것으로 보인다.
3.
D는 훈련 시에는 과적합을 해결하기 위해 Dropout을 사용하고 활성화 함수로는 연결된 두 개의 뉴런 값 중 큰 값을 사용하는 maxout 함수 사용했다. maxout은 뉴런 중 큰 값을 사용하는 함수이기 때문에 노이즈를 방지할 수 있다는 장점이 있다.
4.
이론적으로는 G의 중간층에 dropout과 노이즈를 허용하지 않지만, 실험에서는 맨 하위 계층에 noise input을 사용했는데, 이는 과적합을 해결하고 노이즈에 대한 대비를 하기 위한 것으로 보인다.
5.
G에 의해 생성된 샘플들을 확률 밀도 추정 방법 중 하나인 Gaussian Parzen Window에 fitting하여 확률 분포를 추정한다. 즉, 가짜 샘플 주변에 가우시안 커널을 적용하여 데이터 분포를 근사화 한다. 이렇게 추정된 확률 분포를 통해 로그 우도를 확인함으로써 가짜 데이터의 품질을 평가하고, 테스트 세트에 대한 확률을 추정할 수 있다.
논문의 저자는 G가 생성해낸 sample이 기존 존재 방법으로 만든 sample보다 좋다고 할 수는 없지만 기존의 생성모델과 경할 수 있고, 모델의 잠재력이 있음을 강조했다.
Advantage Disadvantage
GAN은 몇 가지의 장단점을 갖는다. 우선 단점들을 살펴보자면
1. 생성자 분포 p_g(x)의 명시적인 표현이 없음
GAN은 생성자와 판별자 간의 경쟁을 통해 학습되는 모델로, 생성자는 실제 데이터의 분포를 모방하도록 학습한다. 하지만 생성자의 학습 과정에서 명시적인 확률 분포를 가지지 않고, 데이터를 생성하는 과정이 어떤 분포를 따르는지도 명시적으로 표현하지 않는다. 확률 분포가 명시적이지 않다는 것은 해당 확률 분포에 대한 수학적인 표현이 명확하지 않음을 뜻한다. 이 때문에 GAN은 확률적 계산이 어렵고 생성된 데이터에 대한 품질 평가가 어렵다는 단점을 갖는다.
2. D와 G가 균형을 맞춰 성능이 향상되어야 함
D와 G 중 어느 한쪽이 너무 강력하게 학습된다면 다른 한쪽은 제대로 학습되지 않을 수 있다. 이는 위조지폐를 너무 잘 만드는 위조지폐범이나 감별을 너무 잘 해내는 경찰의 예를 다시금 들 수 있을 것이다. 한쪽의 허점을 찾아 그 부분을 파고들도록 학습을 해야 하는데 그럴 수 없게 되는 것이다. 또한 특정 모드에만 지나치게 집중하여 다양한 데이터를 생성하지 못하게 되는 '모드 붕괴(mode collapse)'가 발생할 수 있다. 예를 들어 생성자 G가 어떤 모드에 대해서만 매우 높은 확률로 데이터를 생성한다면, 판별자 D는 해당 모드를 구별하는 방식만을 학습할 것이고 다른 모드의 데이터를 구별하는 능력이 떨어지게 된다. 그러면 G는 또다시 그 모드에 대한 생성 방식을 강화할 것이고, D는 해당 모드에만 초점을 맞추어 다른 모드에 대한 판별 능력이 약화될 수 있다. 이를 방지하기 위하여 minibatch discrimination, feature matching 등이 도입되기도 하였고, 입력 데이터가 치우쳐져 있을 경우 평균과 분산을 조정해주는 DCGAN 등 학습 안정성을 높여주는 모델들이 등장하였다.
다음은 GAN의 장점들이다.
1. 마르코프 체인을 사용하지 않음
마르코프 체인은 이미지가 커지면 적용하기 어렵고, multi step sampling을 사용하기 때문에 계산 비용이 크다는 단점이 있다. 하지만 GAN은 마르코프 체인 없이 역전파만을 사용하여 그래디언트를 구할 수 있다.
2. 학습 중 어떠한 Inference도 필요 없음
학습 중 새로운 데이터에 대한 예측을 수행하지 않기 때문에 학습시간이 감소하고 데이터 손실을 최소화할 수 있다.
3. 다양한 함수들이 모델에 접목 가능
프레임워크만을 정해진 모델이기 때문에 더 좋은 판별자가 나온다면 모델의 성능이 올라갈 수 있다.
4. 간접적인 학습
학습 데이터로부터 직접적인 데이터를 뽑아오는 것이 아니라 판별자를 속이는 방식이는 간접적인 방식으로 학습이 이루어지기 때문에 다른 모델들에 비해 뚜렷한 경계를 가진 이미지를 생성하고, 비교적 과적합으로부터 자유롭다는 장점이 있다.
'개인공부 > 데이터 사이언스' 카테고리의 다른 글
AlexNet 논문 리뷰 (0) | 2024.02.13 |
---|---|
BERT 논문 리뷰 (2) | 2024.02.13 |
Attention Is All You Need 논문 리뷰 (1) | 2024.02.13 |
편향과 분산 (0) | 2024.01.11 |
앙상블 기법 (0) | 2024.01.11 |