함께하는 데이터 분석

[Find-A] 생성적 적대 신경망 본문

학회 세션/파인드 알파

[Find-A] 생성적 적대 신경망

JEONGHEON 2022. 10. 2. 17:33

생성적 적대 신경망이란

 

생성적 적대 신경망(generative adversarial network) 

  • GAN은 심층 신경망의 발전에 힘입어 2014년 처음 소개된 학습 방식
  • gernerative(생성적)는 기존의 분류 모델들이 하던 역할은 데이터에서 특성들을 뽑아내고 이를 통해 데이터를 구분하는 것과 달리 생성 모델들은 데이터 자체를 생성해 냄
  • adversarial(적대적)는 생성 네트워크와 구분 네트워크 간의 상반되는 목적 함수로 인해 적대성이 생기게 되는데 예를 들면 위조지폐를 만드는 사람(생성 네트워크)과 위조지폐 감별사(구분 네트워크)가 있고 처음에는 쉽게 감별이 되겠지만 감별사를 속이는 것을 목표로 계속 학습하고 생성하다 보면 점점 감별사가 구분하기 어려운 수준까지 생성. 이때 위조지폐 생성자는 자신이 생성한 지폐가 진짜로 판별되기를 원하고, 감별사는 가짜 지폐를 가짜로 판별하는 것을 목표로 하기 때문에 적대성이 생김
  • network(네트워크)는 딥러닝에서 흔히 사용하는 의미대로 신경망의 형태를 가진 다양한 네트워크를 의미하고 GAN에서도 생성자와 구분자의 구조가 인공 신경망의 형태를 이룸

 

<단순화한 생성적 적대 신경망의 형태>

생성자(Generator)는 어떠한 입력 z를 받아서 가짜 데이터를 생성하고 구분자(Discriminator)는 실제 데이터와 가짜 데이터를 받아서 각각이 실제인지 아닌지 구분

 

 

<MNIST 생성자 네트워크>

MNIST 데이터셋을 예로 들어 살펴보면, MNIST 데이터는 28x28 크기에 1개의 채널을 가지는 이미지 데이터

 

파이토치에서 사용하는 채널, 가로, 세로 순서로는 [1, 28, 28] 형태

 

먼저 생성자는 특별한 조건 없이 이미지를 생성해야 하기 때문에 표준 정규분포 N(0, 1)를 따르는 랜덤 한 노이즈를 z로 받음

 

z 벡터의 길이는 생성하는 데이터의 종류마다 다르지만 MNIST의 경우는 50 정도면 충분하다고 알려져 있음

 

이러한 z가 입력으로 들어오면 생성자는 신경망이나 합성곱 신경망을 통해서 MNIST 데이터와 같은 형태의 데이터를 생성해냄

 

 

<MNIST 구분자 네트워크>

구분자는 MNIST 형태의 데이터를 입력으로 받아 하나의 결괏값을 내는 네트워크이며 실제 데이터가 들어가기도 하고 생성자에서 만들어진 데이터가 들어가기도 함

 

구분자는 실제 데이터가 들어오면 실제라고 구분해야 하고 가짜 데이터가 들어오면 가짜라고 구분해야 함

 

실제로 학습할 때 구분자의 결괏값은 하나의 수치이기 때문에 라벨 역시 수치를 사용하는데 보통 실제 데이터는 1, 가짜 데이터는 0을 사용

 

예를 들어 어떤 데이터가 구분자에 들어가서 0.9라는 값이 나오면 진짜 데이터에 가깝다는 의미를 가지고 구분자의 입장에서 실제 데이터는 1, 가짜 데이터는 0에 가깝게 나오도록 학습되지만 생성자 입장에서는 생성한 가짜 데이터가 1에 가깝게 나오는 것이 목표이므로 가짜 데이터의 구분에 대해서 서로 경쟁

 

 

<목적 함수>

위는 목적 함수의 수식이고 G는 생성자, D는 구분자, x는 데이터, z는 랜덤 노이즈, x ~ P(x)는 x를 data의 분포에서 샘플링한다는 것을 의미

 

<구분자의 목적 함수>

먼저 구분자에 대해서만 살펴보면 구분자의 입장에서는 이 값을 최대화해야 하는데 그러려면 각 항의 기댓값이 커져야 함

 

<y=log(x) 그래프>

즉, logD(x)와 log(1-D(G(z)))가 최대화되어야 하고 D(x)는 0~1 사이의 값을 갖는다는 것과 로그의 성질을 고려할 때 D(x)는 1, D(G(z))는 0이 되어야 함

 

<생성자의 목적 함수>

이번에는 생성자의 입장에서 살펴보면 관여할 수 있는 부분은 뒷부분인 log(1-D(G(z)))이므로 이 값을 최소화하려면 1-D(G(z))가 0이 되어야 하고 이는 D(G(z))가 1이어야 한다는 것과 같음

 

앞의 구분자의 목적과 정확히 반대이고 여기서 적대성이 발생

 

 

구분자의 목적 함수를 달성한 최적의 상태일 때, 생성자의 목적 함수를 달성하는 것이 실제 데이터의 분포 P_data(x)와 생성된 데이터의 분포인 P_g(x)가 같아지게 만드는 것과 같다는 것이 증명되어 있음

 

자세히 말하면 구분자가 최적의 상태일 때, 생성자의 목적 함수는 두 분포의 옌센-섀넌 발산(Jensen-Shannon divergence)을 최소화하는 것과 같아짐

 

 

 

Pytorch 학습을 위한 간단한 트릭

지금까지 우리는 손실을 정의하고 이를 최소화하는 방식으로 모델을 학습했기에 이러한 형태를 유지하면서 GAN에서 목적 함수를 달성하려면 몇 가지 간단한 트릭이 필요

 

<구분자의 목적 함수>

구분자에는 실제 데이터가 들어오는 경우와 생성된 데이터가 들어오는 경우 두 가지가 있고, 실제 데이터가 들어오는 경우는 수식에서 아래에 해당

<실제 데이터가 들어오는 경우의 수식>

이를 최대화가 아닌 최소화하는 수식으로 바꾸기 위해 마이너스를 붙이면 아래와 같이 바뀜

 

<구분자의 목적 함수 변형>

그러면 이 수식은 교차 엔트로피 수식과 같아지고 현재 가능한 카테고리의 종류는 진짜와 가짜 두 종류이기 때문에 파이토치의 이진 교차 엔트로피 손실 함수 torch.nn.BCELoss()를 사용하면 됨

 

이때 라벨로 넣는 값은 실제 데이터에 대한 라벨 1이고 생성된 가짜 데이터가 들어온 경우에 대해서도 같은 방식으로 계산할 수 있고 사용되는 라벨은 가짜를 의미하는 0

 

 

<생성자가 관여하는 목적 함수>

생성자의 경우에서도 마찬가지로 목적 함수를 아래와 같이 변형하여 학습하는 것이 유리하다고 알려져 있음

 

<생성자의 목적 함수 변형>

여기에도 마이너스를 붙여주면 교차 엔트로피 식과 같아짐


https://www.hanbit.co.kr/store/books/look.php?p_code=B7818450418 

 

파이토치 첫걸음

딥러닝 구현 복잡도가 증가함에 따라 ‘파이써닉’하고 사용이 편리한 파이토치가 주목받고 있다. 파이토치 코리아 운영진인 저자는 다년간 딥러닝을 공부하고 강의한 경험을 살려 딥러닝의

www.hanbit.co.kr

 

'학회 세션 > 파인드 알파' 카테고리의 다른 글

[Find-A] ELECTRA SpanBERT  (0) 2022.11.05
[Find-A] Markov process  (0) 2022.10.29
[Find-A][Pytorch] 정규화  (1) 2022.09.25
[Find-A][Pytorch] 학습률  (1) 2022.09.25
[Find-A][Pytorch] 초기화  (0) 2022.09.25