본문 바로가기
Visual Intelligence/Generative Model

[Generative Model] GAN (Generative Adversarial Network)

by goatlab 2022. 12. 9.
728x90
반응형
SMALL

GAN (Generative Adversarial Network)

 

영상 처리 AI 기술의 대중화에 GAN8이 차지하는 비중은 매우 크다. 기존의 분류 또는 영역화 문제는 기존의 영상 처리 문제를 푸는 전문가들에게 큰 관심사였다고 한다면 새로운 방법으로 영상을 합성해 대중들의 이목을 집중시킨 것은 GAN이다.

 

GAN은 ‘Generative Adversarial Network’의 약자다. 첫 단어인 ‘Generative’는 GAN이 생성 (Generation) 모델이라는 것을 뜻한다. 생성 모델이란 ‘그럴듯한 가짜’를 만들어내는 모델이다. 언뜻 보면 진짜 같은 가짜 사람 얼굴 사진을 만들어내거나 실제로 있을 법한 고양이 사진을 만들어내는 것이 생성 모델의 예다.

 

GAN을 사용하여 만든 사람 얼굴

 

‘그럴듯하다’라는 것을 어떻게 정의할 수 있을까? 수학적으로는 실제 데이터의 분포와 비슷한 분포에 서 나온 데이터를 실제와 비슷하다고 말할 수 있다. 예를 들어, 어떤 사람이 키는 172cm이고 몸무게 는 68kg이라고 하면 그럴듯하지만, 키는 190cm이고 몸무게는 40kg이라고 하면 현실적으로 그럴듯 하지 않을 것이다. 190cm와 40kg이라는 키와 몸무게의 조합은 실제 데이터 분포에서는 거의 나오지 않는 조합이기 때문이다. 그럴듯한 키와 몸무게 조합을 만들어내려면 실제 키와 몸무게의 분포를 최대한 비슷하게 따라야 한다. 이처럼 수학적으로 생성 모델의 목적은 실제 데이터 분포와 근사한 것이라고 말할 수 있다.

 

키와 몸무게의 생성 모델을 만드는 것은 비교적 쉬운 문제다. 사람 얼굴이나 고양이 사진의 생성 모델 을 만드는 것은 더 어려운 문제다. 이미지는 변수의 수가 훨씬 더 많기 때문이다. 이미지의 크기가 256 × 256픽셀이라면 RGB 컬러값까지 총 256 × 256 × 3개의 변수가 생긴다. 그 변수들의 어떤 조합은 사람 얼굴처럼 보이지만, 어떤 조합은 그렇지 않다. 얼굴 이미지의 생성 모델을 만들겠다는 것은 사람 얼굴처럼 보이는 픽셀 값 조합의 분포를 찾아내겠다는 것이다. 물론 이는 키와 몸무게 두 가지 변수의 조합보다 어려운 문제다. 하지만 딥러닝의 발전으로 이런 생성 문제들이 점점 더 도전해 볼만한 주제 들이 되고 있다.

 

GAN의 두 번째 단어인 ‘Adversarial’은 GAN이 두 개의 모델을 적대적 (Adversarial)으로 경쟁시키며 발전시킨다는 것을 뜻한다. GAN을 제안한 저자 Ian Goodfellow는 두 모델을 위조지폐범과 경찰로 비교하고 있다. 이 둘은 적대적인 경쟁 관계다. 위조지폐범은 경찰을 속이기 위해 점점 지폐 위조 제조 기술을 발전시키고, 경찰은 위조지폐범을 잡기 위해 점점 위폐를 찾는 기술을 발전시킨다. 시간이 흐르면 위조지폐범의 위폐 제조 기술은 완벽에 가깝게 발전할 것이다.

 

이처럼 GAN은 위조지폐범에 해당하는 생성자 (Generator)와 경찰에 해당하는 구분자 (Discriminator)를 경쟁적으로 학습시킨다. 생성자의 목적은 그럴듯한 가짜 데이터를 만들어서 구분자를 속이는 것이며, 구분자의 목적은 생성자가 만든 가짜 데이터와 진짜 데이터를 구분하는 것이다. 이 둘을 함께 학습시키 면서 진짜와 구분할 수 없는 가짜를 만들어내는 생성자를 얻을 수 있다. 이것이 GAN의 핵심적인 아이 디어인 적대적 학습 (Adversarial Training)이다.

 

 

GAN의 마지막 단어 ‘네트워크 (Network)’는 이 모델이 인공신경망 (Artificial NeuralNetwork) 또는 딥러닝 (Deep Learning)으로 만들어졌기 때문에 붙었다. 사실 적대적 학습이라는 개념을 구현하기 위해 반드시 딥러닝을 써야 하는 것은 아니다. 이론적으로는 간단한 퍼셉트론의 구조로도 생성해낼 수 있다. 실제로 사용되는 GAN은 실제 데이터 분포를 근사하는 함수를 만들기 위해 이러한 딥러닝 구조를 활용한다. 요약하자면 GAN은 생성이라는 문제를 풀기 위해 딥러닝으로 만들어진 모델을 적대적 학습이라는 독 특한 방식으로 학습시키는 알고리즘이다. 이처럼 ‘Generative Adversarial Network’라는 이름 속에는 모델의 목적부터 학습 방법까지 GAN의 전반적인 개념이 모두 들어있다.

 

적대적 훈련 (Adversarial Training)

 

생성자와 판별자는 신경망과 같은 미분가능한 함수로 표현된다. 이 신경망은 각자 자신만의 비용 함수를 가진다. 판별자의 손실을 사용해 역전파로 두 네트워크를 훈련한다. 판별자는 진짜와 가짜 샘플에 대한 손실을 최소화하려고 노력하고 생성자는 자신이 생성한 가짜 샘플에 대해 판별자의 손실이 최대화되도록 노력한다.

 

생성자가 흉내 내려는 샘플의 종류는 훈련 데이터셋으로 결정된다. 예를 들어, 실제와 같은 고양이 이미지를 만드는 것이 목적이라면 GAN에 고양이 이미지 데이터셋을 주입해야 한다.

 

조금 더 기술적으로 말하자면 생성자의 목적은 훈련 데이터셋의 데이터 분포를 흉내 내는 샘플을 생성하는 것이다. 컴퓨터 입장에서 보면 이미지는 값을 담은 행렬에 불과한다. 흑백 이미지는 2차원이고 컬러 이미지는 3차원 행렬이다. 화면에 그려질 때 이 행렬에 있는 픽셀 값이 이미지의 모든 시각적 요소를 표현한다. 선, 모서리, 곡선 등이다. 이 값들은 데이터셋에 있는 각 이미지에 복잡하게 걸쳐 있는 어떤 분포를 따른다. 어떤 분포도 따르지 않는다면 이미지는 랜덤한 잡음과 다를 바가 없다. 객체 인식 모델은 이미지 콘텐츠를 이해하기 위해 이미지에 있는 패턴을 학습한다. 이런 작업의 역과정으로 생성자 를 생각할 수 있다. 패턴을 인식하는 것이 아니라 패턴을 합성하는 것을 학습한다.

 

비용 함수

 

표준 표기법을 따라서 𝐽(𝐺)는 생성자의 비용 함수이고 𝐽(𝐷)는 판별자의 비용 함수다. 두 네트워크의 훈련 파라미터는 그리스 문자 𝜃로 나타낸다. 생성자의 파라미터는 𝜃(𝐺)이고 판별자의 파라미터는 𝜃(𝐷)이다.

 

GAN이 합성곱 신경망과 다른 점은 크게 두 가지이다. 첫째, 전통적인 신경망의 비용함수 𝐽는 훈련 파라미터 𝜃의 항으로 정의한다. 이에 반해서 GAN의 두 네트워크는 비용 함수가 두 네트워크의 파라미터에 모두 의존한다. 즉 생성자의 비용 함수는 𝐽(𝐺) (𝜃(𝐺)), 𝜃(𝐷))이고, 판별자의 비용 함수는 𝐽(𝐷) (𝜃(𝐺)), 𝜃(𝐷))이다.

 

두번째 차이점은 전통적인 신경망은 훈련하는 동안 파라미터 𝜃를 모두 튜닝할 수 있다. GAN에서 각 네 트워크는 자신의 가중치와 절편만 튜닝할 수 있다. 훈련하는 동안 생성자는 𝜃(𝐺)만 튜닝할 수 있고 판별자는 𝜃(𝐷)만 튜닝할 수 있다. 따라서, 각 네트워크는 손실을 정의하는 것 중에 일부분만 제어한다.

 

훈련 과정

 

앞서 설명한 두 가지 차이점은 GAN 훈련 과정에 큰 영향을 가져올 수 있다. 전통적인 신경망 훈련은 최적화 문제다. 파라미터 공간에서 비용이 감소되는 근방의 포인트로 이동하는 식으로 일련의 파라미터를 찾아 비용 함수를 최적화한다. 최적화하려는 비용 함수가 정의한 파라미터 공간에서 지역 최소점 또는 전역 최소점에 도달할 수 있다.

 

 

생성자와 판별자는 자신의 파라미터만 튜닝하고 상대방의 파라미터는 튜닝할 수 없기 때문에 GAN 훈련을 최적화보다 게임으로 더 잘 설명이 가능하다. 게임의 선수는 GAN의 두 네트워크로 어느 선수도 전략을 바꾸어 현재 상황을 향상할 수 없을 때 수학적으로 생성자의 훈련 파라미터에 대한 생성자의 비용 함수가 최소화되고 동시에 판별자의 파라미터에 대한 판별자의 비용 함수가 최소화될 때 일어난다. 즉, 적대적인 상대에서 배우는 것이 가장 최선의 방법이다.

 

생성자와 판별자

 

 

생성자 G는 랜덤한 잡음 벡터 z를 받고 가짜 샘플 𝐺(𝑧)를 만든다. 판별자 D는 실제 샘플 또는 가짜 샘 플을 받아 각 입력에 대해 진짜일 확률인 0과 1 사이의 값을 출력한다.

 

이렇게 한번 판별자가 구분하는 행동을 하는 구간이 한 번의 epoch가 된다. 한 epoch에서 판별자가 진짜와 가짜를 잘 구분할지라도, 점차 생성자는 더욱 비슷하게 생긴 샘플을 만들려고 노력할 것이고 그러다가 어느 순간 판별자가 구분하지 못할 정도로 진짜에 가까운 가짜 샘플이 만들어진다면 판별자의 확률은 50%가 되며 그 순간 학습이 끝나게 된다.

 

판별자 모델

 

 

판별자 모델은 지도 학습 방법이며 어떠한 입력 데이터가 들어갔을 때, 해당 입력 값이 어떤 것인지 분류한다. 판별자의 목적은 가능한 한 정확하게 구별하는 것이다. 진짜 샘플 x일 경우 D(x)는 가능한 한 1 (양성 클래스)와 가까워져야 하고 가짜 샘플 x일 경우 0 (음성 클래스)와 가까워야 한다

 

들어가는 입력은 영상과 같이 고차원의 vector가 들어갈지 몰라도, 결국 나오는 출력값은 0과 1의 값 을 가지게 된다. 이때, sigmoid 함수를 써서 0.5를 기준으로 0과 1을 구분하게 된다.

 

생성자 모델

 

 

생성자 모델은 어떤 latent code를 가지고 학습 데이터가 되도록 학습하는 비지도 학습 모델이다. 생성자의 목적은 훈련 세트에 있는 진짜 샘플과 구분하기 힘든 가짜 샘플을 만들어 판별자를 속이는 것이다. 생성자는 판별자가 얼마나 진짜 샘플을 잘 분류하는지 관심이 없고 오직 가짜 샘플에 대한 판별자의 분류만을 생각한다.

 

GAN 훈련 과정

 

GAN의 생성자와 판별자의 구조는 매우 단순하고 다른 신경망 모델들과 크게 다르지 않다. GAN에서의 핵심은 훈련 과정을 이해하는 것이다.

 

 

훈련 세트에서 진짜 샘플을 랜덤하게 선택하고 생성자의 출력을 합쳐서 훈련 세트를 만들어 판별자를 훈련한다. 진짜 데이터의 타깃은 1이고 생성된 데이터의 타깃은 0이다. 지도 학습의 관점에서 원본 데이터와 생성된 데이터 사이의 차이점을 구분할 수 있도록 판별자를 훈련시킬 수 있다.

 

진짜 데이터가 잠재 공간의 어떤 포인트에 매핑되는지 알려주는 훈련 세트가 없기 때문에 생성자 훈련을 위해서는 먼저 생성자의 출력을 판별자에 주입하여 판별자가 생성자의 이미지가 진짜일 확률을 출력한다.

 

GAN이 생성 모델링 분야의 커다란 혁신이지만 훈련이 어렵기로도 유명하다.

 

손실 함수의 비수렴

 

판별자와 생성자의 손실이 장기간 안정된 모습을 보여주지 못하고 큰 폭으로 진동하기 시작할 수 있다. 일반적으로 배치마다 손실에 약한 진동이 있다. 하지만 장기적으로 심하게 출렁이는 것이 아니라 손실이 안정되거나 점진적으로 증가하거나 감소하는 형태를 보여야 한다. 이는 시간이 지남에 따라 GAN이 수렴하거나 향상된다고 확신을 줄 수 있다.

 

 

위의 그림은 판별자와 생성자의 손실이 통제 불능 상태에 빠진 GAN의 예이다. 이런 상태가 일어날지 혹은 언제 일어날지 판단하기 어렵다. 일반적인 GAN은 이런 종류의 불안정한 상태가 발생하기 쉽다.

 

모드 붕괴 (Mode Collapsing)

 

 

모드 붕괴는 생성자가 판별자를 속이는 적은 수의 샘플을 찾을 때 일어난다. 따라서, 한정된 이 샘플 외에는 생성하지 못한다. 아래의 오른쪽 그림처럼 파란색 선이 실제 데이터의 분포라고 하였을 때 특정 분포에 강하게 몰리게 된다.

 

 

판별자의 가중치를 업데이트하지 않고 몇 번의 배치를 하는 동안 생성자를 훈련한다고 가정하였을 때 생성자는 판별자를 항상 속이는 하나의 샘플 (모드)을 찾으려는 경향이 있고 잠재 공산의 모든 포인트를 이 샘플에 매핑할 수 있다. 이 말은 손실 함수의 기울기가 0에 가까운 값으로 무너진다는 뜻이다. 하나의 포인트에 넘어가지 못하도록 판별자를 다시 훈련하더라도 생성자는 판별자를 속이는 또 다른 모드를 쉽게 찾을 것이다. 생성자가 이미 입력에 무뎌져서 다양한 출력을 만들 이유가 없기 때문이다.

 

유용하지 않은 손실

 

딥러닝 모델은 손실 함수를 최소화하기 때문에 생성자의 손실이 작을수록 생성된 이미지 품질이 더 좋을 것이라고 자연스럽게 생각할 수 있지만 생성자는 현재 판별자에 의해서만 평가되고 판별자는 계속 향상되기 때문에 훈련 과정의 다른 지점에서 평가된 손실을 비교할 수 없다. 실제로 이미지 품질이 확실히 향상됨에도 불구하고 생성자의 손실 함수의 값이 증가할 수 있다. 이렇게 생성자의 손실과 이미지 품질 사이의 연관성 부족은 빈번히 GAN 훈련 과정을 모니터링하기 어렵게 만든다.

 

힘의 균형 (Nash Equilibrium)

 

 

판별자보다 생성자를 학습시키는 것이 일반적으로 더 어렵다. 생성자가 학습이 잘 안되어 둘 사이의 힘 의 균형이 깨지는 경우 GAN 학습이 더 이상 진전될 수 없다.

 

많은 하이퍼파라미터

 

GAN은 간단한 구조라도 튜닝해야 할 하이퍼파라미터의 개수가 상당히 많다. 판별자와 생성자의 전체 구조는 물론이고 배치 정규화, 드롭아웃, 학습률, 활성화 층 등의 하이퍼파라미터를 고려해야 한다. GAN은 이런 파라미터의 작은 변화에도 매우 민감하다.

 

따라서, GAN의 내부 작동 원리를 이해하고 손실 함수를 해석하는 방법을 알아야 한다. 이를 통해 모델 의 안정성을 향상시킬 수 있는 민감한 하이퍼파라미터를 조정할 수 있다.

 

다음은 문제점 해결을 위해 제안된 여러 손실함수들이다.

 

728x90
반응형
LIST