1. 개요
生成的敵對神經網 / Generative Adversarial Network |
대표적인 GAN 관련 모델인 StyleGAN을 통해 만든 가상인물 이미지. |
심층학습의 기법을 이용해 임의의 랜덤 노이즈로부터[1] 가상의 데이터를 생성하는 네트워크(생성자: Generator, G)가 더 실제와 같은 데이터를 생성할 수 있도록 진위 여부를 판별할 수 있는 네트워크(구별자: Discriminator, D)를 붙여 경쟁적으로 학습시키는 생성 모델. 생성적 적대 신경망이라는 용어는 직역된 표현으로, 다소 의역된 표현인 적대적 생성 신경망이란 표현도 많이 사용된다.
주로 GAN이라는 축약어를 사용하며, 2014년 Ian Goodfellow의 논문을 통해 처음 발표되었다. 기본적으로 비지도 학습(Unsupervised Learning)의 한 종류지만 파생 모델인 조건부 생성적 적대 신경망(Conditional GAN, cGAN)은 지도학습(Supervised Learning)에 활용되기도 한다.
2. 역사
GAN은 2014년 6월, 당시 박사과정 학생이던 이안 굿펠로우가 동료들과 함께 발표한 논문 "Generative Adversarial Nets"를 통해 처음 소개되었다. 굿펠로우는 친구들과 술집에서 생성 모델에 대한 토론을 하던 중 이 아이디어를 떠올렸다고 알려져 있다.초기 GAN 모델은 학습이 불안정하고 생성되는 결과물의 품질이 높지 않았지만, 그 참신한 아이디어와 잠재력 덕분에 빠르게 연구 커뮤니티의 주목을 받았다. 이후 DCGAN(Deep Convolutional GAN)의 등장을 시작으로 수많은 개선된 GAN 모델들이 제안되면서 성능이 비약적으로 발전하였고, 다양한 분야로 응용 범위가 넓어졌다. 얀 르쿤은 GAN을 "지난 10년간 머신러닝 분야에서 가장 흥미로운 아이디어"라고 평가하기도 했다.
이처럼 처음 등장할 때는 꽤나 각광받았던 모델 아키텍처이고, 적은 데이터로도 학습 가능하다는 장점과 좁은 도메인에서 고품질 데이터 생성이 가능하다는 장점 때문에 2010년대 내내 인공 신경망 기반 생성형 인공지능 서비스는 절대 다수가 GAN을 기반으로 하고 있었다. 생성형 모델 역사 초창기를 GAN이 주도하다보니 이미지를 생성하는 모델들은 특히 딥페이크에 사용되어 사회적으로 여러가지 파장을 일으키기도 했다.
하지만 2020년대 들어 생성형 모델 인공지능의 패러다임이 또 한 번 바뀌게 되고, 자연어 프롬프트로부터 이미지를 생성하는 text-to-image 분야에서는 두각을 보이지 못했다. 단적으로 대중들에게 처음 널리 알려진 text-to-image 모델이라고 할 수 있는 DALL·E의 첫번째 버전도 GAN이 아닌 자기회귀모델(autoregressive model) 기반이었다. 그리고 또 다른 생성 모델의 한 갈래인 디퓨전 모델이 2020년대 초중반 기준으로 Stable Diffusion을 비롯한 여러 SOTA text-to-image, text-to-video 모델들을 탄생시키며 눈부신 발전을 이루면서 상대적으로 주목을 받지 못하고 있는 상태다.
3. 작동 원리
GAN의 핵심 아이디어는 두 신경망, 즉 생성자(Generator, G)와 판별자(Discriminator, D)의 경쟁적인 학습 과정에 있다. GAN의 학습 과정을 위조지폐범과 경찰의 관계에 비유해 설명하자면 아래와 같다.- 생성자 (Generator, G)
위조지폐범에 해당한다. 실제 데이터와 최대한 유사한 가짜 데이터를 생성하는 것을 목표로 한다. 일반적으로 잠재 공간(Latent Space)으로부터 무작위 노이즈 벡터 [math(z)]를 입력받아, 이로부터 가짜 데이터 [math(G(z))]를 생성한다. 생성자는 판별자가 자신이 만든 가짜 데이터를 진짜라고 속이도록 학습한다. - 판별자 (Discriminator, D)
경찰에 해당한다. 주어진 데이터가 실제 데이터 [math(x)]인지, 아니면 생성자가 만든 가짜 데이터 [math(G(z))]인지를 판별하는 것을 목표로 한다. 입력된 데이터가 실제 데이터일 확률 [math(D(x))] 또는 가짜 데이터일 확률 [math(1 - D(G(z)))]을 출력하는 이진 분류기(Binary Classifier)로 볼 수 있다. 판별자는 실제 데이터는 1(진짜)로, 가짜 데이터는 0(가짜)으로 정확하게 분류하도록 학습한다.
이 두 단계를 반복적으로 수행하면서, 생성자는 점점 더 실제 같은 가짜 데이터를 만들게 되고, 판별자는 진짜와 가짜를 구별하는 능력이 향상된다. 이상적으로 학습이 진행되면, 생성자가 만든 가짜 데이터는 실제 데이터와 구별할 수 없을 정도로 정교해지고, 판별자는 어떤 데이터가 들어오든 진짜일 확률을 0.5로 판단하게 되는 내시 균형(Nash Equilibrium) 상태에 도달하게 된다.
4. 학습 과정
4.1. 목적 함수
GAN의 학습 목표는 다음과 같은 목적 함수(Objective Function) 또는 가치 함수(Value Function) [math(V(D, G))]를 통해 수학적으로 표현될 수 있다. 이는 생성자 G와 판별자 D 사이의 최소최대 게임(Minimax Game)으로 공식화된다.[math( \min_G \max_D V(D, G) = \mathbb{E}_{x \sim p_{data}(x)}[\log D(x)] + [math(\mathbb{E}_{z \sim p_z(z)}[\log(1 - D(G(z)))][math(])]
여기서 각 기호는 다음을 의미한다
- [math(p_{data}(x))]: 실제 데이터의 분포
- [math(x \sim p_{data}(x))]: 실제 데이터 분포에서 샘플링된 데이터 [math(x)]
- [math(p_z(z))]: 잠재 변수 [math(z)]의 사전 분포[2]
- [math(z \sim p_z(z))]: 잠재 변수 분포에서 샘플링된 노이즈 벡터 [math(z)]
- [math(G(z))]: 생성자가 노이즈 [math(z)]로부터 생성한 가짜 데이터
- [math(D(x))]: 판별자가 실제 데이터 [math(x)]가 진짜일 확률을 출력하는 함수
- [math(D(G(z)))]: 판별자가 생성된 데이터 [math(G(z))]가 진짜일 확률을 출력하는 함수
- [math(\mathbb{E})]: 기댓값(Expectation)
4.2. 판별자(D)의 학습
판별자 D는 가치 함수 [math(V(D, G))]를 최대화([math(\max_D)])하는 것을 목표로 한다. 이를 위해 판별자는 실제 데이터 [math(x)]에 대해서는 [math(\mathbb{E}{x \sim p{data}(x)}[\log D(x)])] 항을 통해 자신의 출력값 [math(D(x))]가 1에 가까워지도록 [3] 학습한다. 동시에, 생성자가 만들어낸 가짜 데이터 [math(G(z))]에 대해서는 [math(\mathbb{E}_{z \sim p_z(z)}[\log(1 - D(G(z)))])] 항을 통해 자신의 출력값 [math(D(G(z)))])가 0에 가까워지도록 [4] 학습한다. 이 과정을 통해 판별자는 궁극적으로 실제 데이터와 가짜 데이터를 잘 구별하도록 능력을 키우게 된다. 판별자의 학습은 다음의 과정을 따라 이루어진다.
- 실제 데이터셋에서 샘플 [math(x)]를 가져온다.
- 잠재 공간에서 무작위 노이즈 [math(z)]를 샘플링하여 생성자를 통해 가짜 데이터 [math(G(z))]를 생성한다.
- 판별자는 실제 데이터 [math(x)]와 가짜 데이터 [math(G(z))]를 입력받아 각각의 판별 결과([math(D(x))], [math(D(G(z)))])를 출력한다.
- 판별자는 [math(D(x))]는 1에 가깝게, [math(D(G(z)))])는 0에 가깝게 만들도록 자신의 가중치를 업데이트한다. 즉, 진짜는 진짜로, 가짜는 가짜로 더 잘 구별하도록 학습한다. 이 과정에서 생성자의 가중치는 고정된다.
4.3. 생성자(G)의 학습
생성자 G는 가치 함수 [math(V(D, G))]를 최소화([math(\min_G)])함으로써 판별자를 속이는 방향으로 학습하며, [math(\log(1 - D(G(z)))]) 항을 최소화하려고 한다[5] 즉, 생성자는 판별자가 자신이 만든 가짜 데이터를 진짜라고 판단하도록 유도한다. 생성자의 학습은 다음의 과정을 따라 이루어진다.
- 잠재 공간에서 새로운 무작위 노이즈 [math(z)]를 샘플링하여 생성자를 통해 가짜 데이터 [math(G(z))]를 생성한다.
- 생성된 가짜 데이터 [math(G(z))]를 판별자에 입력하여 판별 결과 [math(D(G(z)))])를 얻는다.
- 생성자는 판별자가 가짜 데이터를 진짜라고 착각하도록, 즉 [math(D(G(z)))])가 1에 가깝게 나오도록 자신의 가중치를 업데이트한다. 이 과정에서 판별자의 가중치는 고정된다.
실제 학습에서는 [math(\log(1 - D(G(z)))])를 최소화하는 것보다 [math(\log D(G(z)))])를 최대화하는 방식으로 학습하는 것이 초기 학습 단계에서 기울기 소실(vanishing gradient) 문제를 완화하는 데 도움이 된다고 알려져 있다.
5. 주요 모델
초기 GAN 이후 학습 안정성, 생성 품질, 제어 가능성 등을 개선하기 위한 수많은 변형 모델들이 제안되었다.5.1. DCGAN (Deep Convolutional GAN)
합성곱 신경망(CNN) 구조를 생성자와 판별자에 도입해 이미지 생성 성능과 학습 안정성을 크게 향상시켰다. 배치 정규화(Batch Normalization)를 사용하고 완전 연결 계층을 제거 하는 등 새로운 구조적 혁신을 내세웠다.
5.2. Conditional GAN(cGAN)
생성자와 판별자 모두에게 특정 조건 정보(예: 이미지 레이블)를 추가로 입력해 원하는 조건에 맞는 데이터를 생성할 수 있게 만든 모델이다. 예를 들어, 특정 숫자의 손글씨 이미지를 생성하도록 제어할 수 있다.
5.3. StyleGAN
엔비디아에서 개발한 모델로 당시 기준으로 고해상도 이미지 생성에서 매우 뛰어난 성능을 보였으며 생성 이미지의 스타일을 다양한 수준에서 제어할 수 있는 기능을 제공한다. 특히 잠재 공간의 특성을 분리하여 제어하는 기법(AdaIN 등)이 특징이다.
StyleGAN2, StyleGAN3 등 후속 모델들도 존재한다.
StyleGAN2, StyleGAN3 등 후속 모델들도 존재한다.
5.4. CycleGAN
쌍을 이루지 않는(unpaired) 두 이미지 도메인 간의 변환을 학습하는 모델이다. 예를 들어 말 사진을 얼룩말 사진으로 바꾸거나 여름 풍경 사진을 겨울 풍경 사진으로 변환하는 등의 작업이 가능하다. 순환 일관성 손실(Cycle Consistency Loss)이라는 개념을 도입해 학습한다.
5.5. WGAN(Wasserstein GAN)
기존 GAN의 학습 불안정성 문제를 해결하기 위해 손실 함수로 바서슈타인 거리(Wasserstein distance)를 사용한 모델이다. 판별자 대신 '평론가'(Critic)를 사용하며, 가치 함수 클리핑(weight clipping)이나 기울기 페널티(gradient penalty, WGAN-GP)를 통해 안정적인 학습을 유도한다.
5.6. BigGAN
대규모 데이터셋(ImageNet)과 큰 모델 크기, 그리고 다양한 학습 기법(Self-Attention, Spectral Normalization 등)을 활용하여 매우 다양하고 고품질의 이미지를 생성하는 데 성공한 모델이다.
5.7. InfoGAN
비지도 방식으로 데이터의 의미론적 특징(latent code)을 학습해 생성 과정을 더 잘 제어할 수 있도록 한 모델이다. 생성자의 입력 노이즈 일부를 해석 가능한 잠재 코드로 간주하고, 이 코드와 생성된 데이터 간의 상호 정보량(Mutual Information)을 최대화하는 방식으로 학습한다.
5.8. 기타 모델
이 외에도 Pix2Pix, SRGAN, ProGAN, GauGAN 등 수많은 GAN 변형 모델들이 존재하며, 특정 문제나 데이터에 맞춰 계속해서 발전하고 있다.6. 장단점
6.1. 장점 및 활용 사례
적은 데이터로 학습 가능하며 생성 속도가 빠르다는 것이 가장 큰 장점이다. 여러모로 다른 생성형 모델 아키텍처에 밀리고 있는 지금도 상대적으로 규모가 작은 데이터셋에서는 여전히 좋은 성능을 발휘하며, 태생적으로 아무리 못해도 수십 번의 네트워크 연산이 필요한 디퓨전 모델에 비해 단 한 번의 네트워크 연산만으로 데이터 생성이 가능하므로 효율면에서 월등히 유리하다는 장점도 있다.이러한 장점 때문에 현재 제일 자주 쓰이는 분야는 이미지 생성 분야가 아닌 음성합성 분야이다. 기본적으로 음성데이터는 멜스펙트로그램이라는 시간과 주파수를 축으로 삼는 2차원 데이터로 표현이 되는데, 이로부터 실제 우리가 듣는 음성데이터를 합성하는 작업이 바로 음성 합성이다. 이 분야에서 뛰어난 성능을 가진 많은 모델들이 이 GAN을 기반으로 하여 만들어졌다.
6.2. 단점 및 한계
GAN의 가장 큰 문제점은 학습 과정의 불안정성이다. 생성자와 판별자라는 두 네트워크를 동시에 경쟁적으로 훈련시키는 GAN의 구조적 특성 때문에 기울기 소실(vanishing gradients), 발산(divergence), 진동(oscillation) 같은 문제들이 발생하기 쉽기 때문이다. 이처럼 GAN이 본질적으로 안고 있는 불안정성은 대규모 데이터셋을 이용한 훈련을 어렵게 만들고 모델의 일반화 능력을 떨어뜨리는 핵심적인 단점으로 꼽힌다.학습 불안정성은 생성형 모델의 역사 초반, 특히 트랜스포머가 등장하기 전에 GAN이 주목받았음에도 결국 디퓨전 모델이나 VAE+트랜스포머 하이브리드 모델 등 다른 대안적인 접근 방식에 주도권을 내주게 된 결정적인 이유가 되었다. GAN 연구자들도 WGAN, WGAN-GP 같은 개선된 구조를 제안하며 이 문제를 해결하려 노력했지만 결국 전체적인 흐름을 바꾸지는 못했다.
같은 맥락에서 생성자가 판별자를 속이기 쉬운 소수의 특정 데이터만을 반복적으로 생성하고, 실제 데이터 분포의 다양성을 제대로 학습하지 못하는 모드 붕괴(Mode Collapse)현상이나 모델 구조, 학습률, 배치 크기 등 최적의 하이퍼파라미터를 찾는 것이 어렵고 민감하다는 점도 단점으로 꼽힌다.
7. 관련 웹사이트
- ARTBREEDER - 특정한 이미지 조합 및 변수 주입으로 이미지를 자동 생성, 앨범아트, 인물, 풍경, 모에 그림 등의 옵션을 제공한다. 구글 등을 경유한 로그인 필요.
- Waifu Labs - 각 단계별로 유사한 이미지를 참조해 하술한 This Waifu Does Not Exist에 비교해 그럴싸한 모에 그림체 포트레이트를 생성해준다.
- 침착한 생성모델(깃헙) - 인물 사진을 이말년풍으로 해석해준다.
- ArcaneGAN - 인물 사진을 아케인: 리그 오브 레전드의 화풍으로 변환해 준다.
7.1. This ~ doesn't Exist 시리즈
관련 웹페이지들을 모은 링크집이 있다.- This Person Does Not Exist - 무작위 인물 사진 생성. 이쪽 계열에서는 가장 유명하고 정교도도 비교적 높다. 그러나 역시 헛점은 있으며[6] 딥페이크 티가 드러나는 지점을 정리한 포스트가 존재한다. 모에그림체 GAN만큼은 아니지만 사람 얼굴 옆에 곤죽처럼 기괴하게 된 얼굴이 또 생성된 경우도 많다. 주로 옆에 찍은 사람이 학습모델에 주입되었는데 그게 꼬여버린경우로 추정된다. (혐오주의!)
- This Cat Does Not Exist - 무작위 고양이 사진 생성
- This Waifu Does Not Exist - 모에 그림체 포트레이트를 생성. 인물 이미지는 정교한 수준까지 갔지만 모에 그림체 생성은 다소 어설픈 측면이 남아있다. 간혹 기괴한 시안이 나오기도 한다.
- This Anime Does Not Exist - 모에 그림을 생성. 위에서 발전된거라 말풍선같은 만화 이미지까지 구현하지만, 표현되는 문자는 일본어가 외계어로 왜곡된 수준이다. 창의도(Creativity level)에 따라 인공지능이 참조한 이미지가 겹치거나 변하는 것처럼 보이는 스냅이 잡혀서 기괴해 보이는 경우가 많다.[7]
- This Pony Does Not Exist - MLP풍 포트레이트 생성
- This Fursona Does Not Exist - 수인캐릭터 포트레이트 생성. 수인농도는 천차만별이다.
가끔씩 주토피아에 나오는 닉 와일드가 보인다. - This Rental Does Not Exist - 무작위의 숙소 방 사진과 가짜 설명을 생성.
- This Startup Does Not Exist - 랜덤한 내용의 가짜 스타트업 기업 페이지를 생성.
- This Artwork Does Not Exist - 무작위의 추상미술을 생성.
- This Automobile Does Not Exist - 무작위의 자동차 사진을 생성. 인물 버금갈정도로 정교도가 그럴싸한 사진이 나오지만 차의 앞뒤가 바뀌거나 분별할 수 없는 뒤죽박죽도 가끔 나온다.
- This City Does Not Exist - 무작위의 도심 항공 촬영사진같은 가상의 지형사진을 생성
- This Map Does Not Exist - 무작위의 지도 사진. 글자는 뭉개져서 인공문자같다.
- This Beach Does Not Exist - 무작위의 해변 풍경 사진 생성.
- This Music Video Does Not Exist - OpenAI Jukebox를 통해 생성된 음악과 추상그림의 변화로 구성된 뮤직비디오 생성.
- This Night Sky Does Not Exist - 무작위의 밤하늘 사진 생성. 지형은 굉장히 어색하다.
- This Wojak Does Not Exist - 무작위의 Wojak풍 얼굴(...)(형체를 알아볼수 없는 기괴한 얼굴이 많이 나온다.)
[1] 주로 정규분포에서 샘플링한다.[2] 보통 가우시안 분포나 균등 분포가 사용된다[3] 결과적으로 로그 값이 0에 가까워진다.[4] 결과적으로 [math(1 - D(G(z)))])가 1에 가까워지고 해당 로그 값이 0에 가까워진다.[5] 이는 판별자의 출력 [math(D(G(z)))])를 1에 가깝게 만드는 것과 같다.[6] 사실 맨 위에 예시로 올린 짤에도 옥에 티 수준으로 위화감이 느껴지는 부분이 아주 조금 있다.[7] 일본의 몇몇 트위터리안을 중심으로 #waifubattle이라는 해시태그 아래 waifulab 및 TADNE에서 아예 이러한 이상하게 도출된 결과물만 모으는 밈도 존재한다(...). 당연히 관람주의. 그 외계어처럼 보이는 문자를 속칭 waifu어라고 한다.