점점 미쳐가는 개발 일기

GAN(Generative Adversarial Networks) 이해하기 본문

인공지능/Computer Vision(CV)

GAN(Generative Adversarial Networks) 이해하기

Sangwoo Seo 2023. 6. 30. 09:44

GAN(Generative Adversarial Networks)의 구조

생산적 적대 신경망이라는 이름을 가진 GAN은 기존의 딥러닝 모델과는 다른 형태를 가집니다. GAN은 생성자(Generator, $ G $)와 판별자(Disciriminator, $ D $)로 이루러진 두 개의 모델이 서로 경쟁적으로 학습되는 형태를 지닙니다. 생성자는 최대한 실제처럼 보이는 데이터를 생성함으로써 판별자를 속이는 역할이며 판별자는 실제 데이터와 생성자가 만든 데이터를 구별하는 역할을 합니다.

 

그림 1: GAN의 구조[1]

 

GAN의 원리

실제 세계의 많은 현상들, 즉 데이터들은 확률분포(특히, 정규분포)로 표현 가능합니다. 아래의 사람의 키 분포를 보면, 일반적으로 정규 분포(가우스 분포)를 따르는 경향이 있습니다. 이는 특정 범위 내에서 사람의 키가 가장 자주 발생하고, 그 범위에서 멀어질수록 키의 빈도가 줄어든다는 사실을 보여줍니다.

 

그림 2: 남자 키와 여자 키의 분포[2]

이처럼 확률 분포는 이론적으로나 경험적으로 관측된 데이터의 패턴을 수치적으로 설명하는 방법을 제공합니다. 확률 분포를 사용하면 데이터의 중심 경향성, 변동성, 그리고 다른 통계적 특성을 파악하고, 미래의 데이터 표본이 어떻게 나타날지 예측하는 데 도움이 됩니다. 이미지 데이터 또한 통계적인 평균치가 존재하며, 딥러닝 모델은 이를 수치적으로 표현 가능합니다. 예를 들어, 사람의 얼굴에 대한 특징적인 부분을 딥러닝 모델이 수치로 표현할 수 있습니다.

 

GAN의 학습과정

① 생성자 $ G $는 랜덤 노이즈 벡터를 입력으로 받아 특정 확률 분포를 따르는 가짜 데이터를 생성합니다. 이 때 생성자 모델은 특정 확률분포(진짜 이미지의 확률분포)에 근사하도록 학습하는 것이 목표입니다.

② 생성된 가짜 데이터와 진짜 데이터를 판별자 $ D $에 입력합니다. 판별자 모델의 예측값은 0~1 사이의 확률값으로, 입력받은 이미지가 진짜인지, 가짜인지를 판별합니다. 즉, 입력 받은 이미지가 진짜 데이터인지 가짜 데이터인지 확률로 표현합니다.

③ 생성자와 판별자의 비용함수를 계산하고, 각 모델의 파라미터를 업데이트합니다.

 

①~③번을 반복하면서 생성자와 판별자가 서로 경쟁적으로 학습됩니다.

 

위의 학습 과정을 통해 생성자는 진짜 이미지와 구별이 어려운 가짜 이미지를 생성하도록, 판별자는 진짜 이미지와 가짜 이미지를 구별할 수 있는 능력을 키우도록 학습됩니다. 위의 학습 과정을 반복하면서 생성자는 점점 더 진짜 이미지와 유사한 이미지를 생성할 수 있게 되고, 판별자는 점점 더 정확하게 진짜 이미지와 가짜 이미지를 구별할 수 있게 됩니다.

 

GAN의 손실함수

 

그림 3: GAN의 판별자 함수이자 목적 함수
그림 4: GAN의 생성자 함수

$ x $: 입력 이미지, $ z $: 랜덤 노이즈 벡터, $ p_{data} $: 진짜 이미지의 분포, $ p_z $: 랜덤 노이즈 벡터의 분포

$ D(x) $: 이미지 $ x $가 실제일 확률을 예측하는 판별자 $ D $

$ G(z) $: 랜덤 노이즈 벡터 $ z $가 실제 이미지와 유사한 이미지로 변환하는 생성자 $ G $ 

 

그림3의 첫번째 항은 판별자가 실제 데이터의 예측을 최대화합니다. 즉, 실제 이미지를 실제 이미지로 분류하는 것을 의미합니다. 두번째 항은 판별자가 생성자가 생성한 가짜 이미지의 예측을 최소화합니다. 즉, 생성자는 생성한 이미지(가짜 이미지)를 판별자가 실제 이미지로 분류합니다.

 

위 내용을 다시 정리하면 생성자의 목표는 실제 이미지와 가장 비슷한 가짜 이미지를 생성하려고 노력하고, 판별자의 목표는  입력 이미지가 실제 이미지 인지 생성자가 만든 가짜 이미지인지 판별하려는 것입니다. 이것은 게임 이론에서의 미니맥스(Minimax) 게임에 비유할 수 있습니다. 미니맥스 게임은 각 플레이어가 자신의 손실을 최소화하려는 동시에 상대방의 이익을 최대한 줄이려고 합니다. GAN에서 이 개념은 판별자와 생성자  사이의 경쟁적 관계를 나타냅니다. 생성자는 판별자를 속이려고 최선을 다하며 판별자는 생성자가 만든 가짜 이미지를 최대한 잘 구별하려고 합니다.

 

그림 5: GAN의 학습과정과 목표[3]

 

위 그림의 예시를 들어 GAN의 학습과정을 다시 설명하자면 GAN의 판별자 $ D $(파란색 점선)과 생성자 $ G $(초록색 실선)이 동시에 업데이트 되며 학습됩니다. 이 두 모델은 실제 데이터 생성 분포(검은색 점선, $ p_x $)와 생성자의 분포($ p_g $) 사이를 구별하려고 합니다.

 

그림 3의 아래쪽 수평선은 잠재 벡터 $ z $(latent vector $ z $)가 샘플링 되는 도메인을 나타내며, 주로 균등하게 샘플링(보통, 표준정규분포에서 추출되는 임의의 벡터) 됩니다. 그 위의 수평선은 $ x $의 도메인의 일부를 나타냅니다. 위쪽 화살표는 $ x = G(z) $가 변환되는 샘플에 비균일 분포 $ p_g $를 부과하는 방식을 보여줍니다. 여기서 말하는 비균일 분포란, 생성자 $ G $가 잠재 벡터 $ z $를 데이터 $ x $로 변환할 때 만들어내는 데이터의 분포를 의미합니다. 이 분포는 실제 데이터 분포를 모방하려 합니다. 즉, 생성자는 균등하게 샘플링된 잠재 벡터 $ z $를 입력으로 받아서, 실제 데이터 분포와 유사한 비균일한 분포를 가진 출력 $ x $를 만들어냅니다. 이 과정에서 $ z $의 원래 분포는 무시되고, 생성자의 학습을 통해 생긴 변환에 의해 새로운 분포 $ p_g $가 생성되는 것입니다.

 

생성자 $ G $가 특정 영역에서 샘플들을 생성하는 데 있어서, 실제 데이터 분포에서 높은 확률 밀도를 가진 영역, 즉 실제 데이터가 자주 등장하는 영역에 대응하는 잠재 공간의 영역을 '축소'하고, 실제 데이터 분포에서 낮은 확률 밀도를 가진 영역, 즉 실제 데이터가 드물게 등장하는 영역에 대응하는 잠재 공간의 영역을 '확장'합니다.

 

(a) 학습이 진행되어 적대적 학습이 어느정도 완료된 생성자 $ G $와 판별자 $ D $를 고려한다면,  $ p_g $는 $ p_{data} $ 유사하며 판별자 $ D $는 가짜와 실제를 어느정도 잘 구별합니다.

 

(b) 학습이 각 스텝에서 판별자 $ D $는 가짜 이미지와 실제 이미지를 구별하는 방향으로 학습됩니다. 이 때 판별자 $ D $가 출력하는 값 $ D(x) $는 입력 $ x $가 실제 이미지일 확률을 뜻하는데, 이 값은 학습이 진행될수록 $ p_{data}(x) / (p_{data}(x) + p_g(x))  $에 수렴하게 됩니다.

 

(c) 판별자 $ D $의 학습이 끝나면 이어서 생성자 $ G $의 학습이 시작되는데, 이 때 생성자 $ G $는 판별자 $ D $의 기울기를 이용해 자신을 업데이트 합니다. 판별자 $ D $가 가짜 이미지를 진짜로 잘못 분류할 확률을 높이는 방향으로 생성자 $ G $는 자신을 개선하게 됩니다.

 

(d) GAN이 충분히 학습되면, 생성자 $ G $가 만들어내는 가짜 이미지 분포 $ p_g $는 실제 이미지 분포와 거의 같아집니다. 이 경우 판별자 $ D $는 가짜와 진짜를 구별하지 못하게 되므로, 모든 데이터에 대해 가짜일 확률과 진짜일 확률이 각각 $ 1/2 $, 즉 $ D(x) = 1/2 $이 됩니다. 이런 상태가 되면 생성자와 판별자 모두 더 이상 개선의 여지가 없으므로 학습이 종료됩니다.

 

GAN의 생성자가 실제 이미지의 분포를 완벽하게 모사할 수 있게 되면, 판별자는 실제 이미지와 생성된 이미지를 구별할 수 없게 됩니다. 즉, 판별자는 모든 입력에 대해 $ 1/2 $의 확률을 출력합니다.

 

GAN의 학습 과정에서 생성자와 판별자의 손실값이 어떤 특정한 값으로 수렴한다는 것은 보통 두 가지 경우를 의미할 수 있습니다.

 

1. 수렴

생성자와 판별자가 모두 특정한 성능 수준에 도달하여 더 이상 학습이 진행되지 않는 상태를 말합니다. 즉, 손실값이 일정한 값으로 수렴하고 있음을 의미합니다. 하지만, GAN은 이런 상태가 반드시 이상적인 상태라고 볼 수 없습니다. 왜냐하면 생성자와 판별자는 서로의 성능을 끊임없이 개선하려는 경쟁 상태에 있어야 합니다.

 

2. 모드 붕괴(Mode Collapse)

모드 붕괴는 GAN 학습에서 발생할 수 있는 문제 중 하나로, 생성자가 항상 같은 혹은 매우 비슷한 출력(데이터가 한 가지 유형만을 생성)을 내는 상태를 말합니다. 이 경우 생성자의 손실은 낮아지고 판별자의 손실은 높아집니다. 모드 붕괴는 생성자가 판별자를 속이는 데 특정 패턴을 과하게 학습한 결과로, 이상적인 상태가 아닙니다.

 

따라서, GAN에서 손실값이 특정값으로 수렴한다고 해서 항상 이상적인 결과를 의미하지 않습니다. 이상적인 GAN 학습에서는 생성자와 판별자가 계속해서 경쟁하며 서로의 성능을 개선하는 상태(동적 균형 상태, dynamic equilibrium)에  이르는 것이 목표입니다. 이러한 상태는 생성자는 실제 이미지와 구별할 수 없는 가짜 이미지를 만들어내고, 판별자는 이를 최대한 잘 구별하는 역할을 합니다.

 

GAN은 학습 초기에 수렴하지 않거나 모드 붕괴 현상이 발생하는 등의 문제가 발생할 수 있습니다. 이러한 문제를 해결하기 위해서 학습률 조절, 손실함수 개선, 모델 구조 변경 등의 다양한 기법을 적용해야합니다.