이 장에서는 GAN이 무엇인지, GAN이 특별한 이유, 흥미로운 GAN 어플리케이션에 대해 설명해준다.
GAN은 이언 굿펠로가 만든 모델로 신경망 하나가 아닌 두 개의 구분된 신경망을 사용해 실제와 유사한 데이터를 생성한다. 이전에도 데이터를 생성하는 프로그램은 있었지만 그 전의 프로그램과는 확연한 성능 차이를 보여주었다.
GAN이란?
생성적 적대 신경망 GAN(generative adversarial network)은 동시에 두 개의 모델을 훈련하는 머신러닝의 한 종류로 하나(생성자)는 가짜 데이터를 생성하도록 훈련되고 다른 하나(판별자)는 실제 샘플과 가짜 샘플을 구분하도록 훈련한다.
이 생성적, 적대, 신경망 이라는 용어에 대해 나누어 설명해보자면 생성적이라는 용어는 이 모델의 목적을 나타낸다. GAN이 생성하기 위해 학습할 데이터는 훈련 세트에 따라 결정된다. 예를 들어 GAN을 이용해 레오나르도 다빈치의 작품처럼 보이는 이미지를 만들고 싶다면 다빈치의 작품을 훈련 데이터셋으로 이용해야 한다.
적대적이라는 용어는 GAN의 두 모델인 생성자와 판별자 사이의 경쟁 구도를 나타낸다. 생성자의 목표는 실제 데이터와 구분이 안될 정도로 유사한 샘플을 만드는 것이고 판별자의 목표는 생성자가 만든 가짜 데이터를 훈련 데이터셋에 있는 실제 데이터와 구별하는 것이다.
신경망은 생성자와 판별자를 만드는데 가장 널리 사용하는 머신러닝 모델의 한 종류이다. 신경망의 종류는 GAN 구현의 복잡성 정도에 따라 간단한 피드포워드 신경망부터 합성곱 신경망까지 다양하다.
GAN의 동작 방식
GAN을 설명하기 위해서 이언 굿펠로는 주로 지폐 위조범(생성자)와 이를 잡으려는 형사(판별자)로 예시를 들어 설명한다. 위조 지폐가 완벽할수록 형사가 위조 지폐를 가려내는 능력도 뛰어나야 한다.
생성자의 목표는 훈련 데이터와 구별이 안 될 정도로 훈련 데이터셋의 특징이 잘 드러난 샘플을 생성하는 것이다. 생성자는 판별자의 분류 결과에서 피드백을 받아 학습하낟. 판별자의 목표는 특정 샘플이 진짜(훈련 데이터셋의 일부)인지 가짜(생성자가 생성한 데이터)인지 구별하는 것이다. 판별자가 가짜 이미지에 속아 가짜를 진짜로 분류할 때마다 생성자는 자신이 임무를 잘 수행하고 있다는 것을 알게 되고 반대로 판별자가 가짜라고 판단할 때마다 생성자는 더 완성도 높은 결과물을 생성해야 한다는 피드백을 받게 된다. 판별자 또한 지속해서 성능을 향상해야 한다.
GAN 시스템
예를 들어 실제 손글씨 숫자 이미지를 생성하는 GAN을 훈련하는 것이 목표라고 가정하자
1. 훈련 데이터셋 : 생성자가 거의 완벽한 수준으로 모방하기 위해 학습하는 데이터셋.
2. 랜덤한 잡음 벡터 : 생성자 네트워크의 입력(z). 입력은 랜덤한 숫자 벡터로 생성자가 가짜 샘플 합성의 시작점으로 사용한다.
3. 생성자 네트워크 : 생성자는 랜덤한 숫자 벡터(z)를 입력으로 받아서 가짜 샘플(x*)을 출력한다. 생성자의 목표는 훈련 데이터셋의 진짜 샘플과 구별이 안되는 가짜 샘플을 출력하는 것.
4. 판별자 네트워크 : 판별자는 훈련 데이터셋의 진짜 샘플(x)와 생성자가 만든 가짜 샘플(x*)을 입력으로 받아 각 샘플이 진짜일 확률을 계산하여 출력한다.
5. 반복 훈련 : 판별자의 예측이 얼마나 정확한지 평가하고 이 결과를 사용하여 역전파로 판별자와 생성자 네트워크를 반복해서 훈련한다. -> 생성자의 가중치와 편향은 판별자가 x*를 잘못 분류할 확률을 높이도록 업데이트, 판별자의 가중치와 편향은 분류 정확도를 최대화하도록 업데이트 한다.
GAN 훈련 알고리즘
1. 판별자 훈련하기
- 훈련 데이터셋에서 랜덤하게 샘플 x를 선택한다.
- 새로운 랜덤한 잡음 벡터 z를 얻어서 생성자네트워크를 이용해 가짜 샘플 x*를 합성한다.
- 판별자 네트워크를 이용해 x 와 x*를 분류한다.
- 분류 오차를 계산하고 전체 오차를 역전파해서 판별자의 훈련 가능한 파라미터를 업데이트하고 분류 오차를 최소화한다.
2. 생성자 훈련하기
- 생성자 네트워크를 사용하여 랜덤한 잡음 벡터 z에서 가짜 샘플 x*를 합성한다.
- 판별자 네트워크를 이용해 x*를 분류한다.
- 분류 오차를 계산하고 역전파해서 생성자의 훈련 가능한 파라미터를 업데이트하고 판별자의 오차를 최대화 한다.
균형에 도달하기
그렇다면 언제 GAN 훈련 반복을 끝내야 할까??
일반적인 신경망 모델에서는 오류를 측정하고(손실함수를 측정하고) 그 값이 안좋아지면 훈련을 중단한다.
하지만 GAN을 구성하는 두 네트워크는 서로의 목적이 다르다.
이는 제로섬 게임과 흡사하다. 한 쪽이 이득을 얻는 만큼 다른 쪽은 손해를 보게 된다. 모든 제로섬 게임은 참가자 모두 자신의 상황을 더는 개선할 수 없거나, 자신의 행위를 변경함으로써 이익을 볼 수 없는 시점에서 내시 균형에 도달하게 된다.
GAN에서는 다음과 같은 조건이 충족될 때 내시 균형에 도달한다.
- 생성자가 훈련 데이터셋의 실제 데이터와 구별이 안된느 데이터를 생성할 때
- 판별자가 할 수 있는 최선이 특정 샘플이 진짜인지 가짜인지 랜덤하게 추측할 때 -> 즉 구별 확률이 50대50인 경우
위 조건에 만족할 때 GAN은 수렴했다고 한다. 여기서 문제가 발생한다.
실제 실무에서 GAN의 내시 균형을 찾기는 불가능에 가깝기 때문이다. 비볼록 게임의 수렴도달에는 복잡성이 매우 크기 때문이다. -> 아직 미결 문제임
'Book > GAN In Action' 카테고리의 다른 글
| 6장. ProGAN (0) | 2024.08.07 |
|---|---|
| 5장. GAN 평가의 어려움 (0) | 2024.08.06 |
| 4장. DCGAN (0) | 2024.08.01 |
| 3장. GAN 구현하기 (0) | 2024.07.30 |
| 2장. 오토인코더와 생성 학습 (0) | 2024.07.29 |