GAN은 Generative Adversarial Networks의 약자로 우리말로는 “적대적 생성 신경망”이라고 번역되는 AI기술 중 하나입니다. GAN은 실제에 가까운 이미지나 사람이 쓴 것과 같은 글 등 여러 가짜 데이터들을 생성하는 모델입니다. “적대적 생성 신경망”이라는 이름에서 알 수 있듯 GAN은 서로 다른 두 개의 네트워크를 적대적으로(adversarial) 학습시키며 실제 데이터와 비슷한 데이터를 생성(generative)해내는 모델이며 이렇게 생성된 데이터에 정해진 label값이 없기 때문에 비지도 학습 기반 생성모델로 분류됩니다.
개념
GAN은 Generator(G,생성모델/생성기)와 Discriminator(D,판별모델/판별기)라는 서로 다른 2개의 네트워크로 이루어져 있으며 이 두 네트워크를 적대적으로 학습시키며 목적을 달성합니다. 이 2가지 모델을 포함한 GAN의 궁극적인 목적은 “실제 데이터의 분포”에 가까운 데이터를 생성하는 것이며, 따라서 판별기가 진짜인지 가짜인지를 한 쪽으로 판단하지 못하는 경계(가짜와 진짜를 0과 1로 보았을 때 0.5의 값)에서 가짜 샘플과 실제 샘플을 구별할 수 없는 최적 솔루션으로 간주하게 됩니다. 어진 표본이 실제 표본이 될 확률이 0.5에 가까운 값을 가질 때까지 계속됩니다. 가짜로 확신하는 경우 판별기의 확률값이 0, 실제로 확신하는 경우 판별기의 확률값이 1을 나타내게 되며, 판별기의 확률값이 0.5라는 것은 가짜인지 진짜인지 판단하기 어려운 것을 의미하게 되는 것입니다.
모델구조
위조 지폐범(생성모델G)이 위조지폐를 만들면 경찰(판별모델D)은 해당 지폐가 진짜인지 아닌지를 구별하게 되고 이를 반복하다 보면 위조 지폐범이 점차 더욱 진짜 같은 위조지폐를 만든다는 이야기입니다.
G는 V(D, G) 가 최소(min) 가 되려 하고, D는 V(D, G) 최대(max) 가 되려고 한다는 의미
z는 noise이고 위조지폐범(G)가 z를 가지고 위조지폐(G(z))를 만들었습니다.
x는 실제 지폐이고 경찰(D)은 G(z)와 x를 판별하여 D(G(z))값과 D(x)값을 출력합니다.
Discriminator는 D(x)가 커지면서 log값이 커지면서 높은 확률값이 나오도록 하고, 가짜 데이터(G(z))를 입력하면 log값이 작아짐에 따라 낮은 확률값이 나오도록 학습됩니다. 다시 말해 D는 실제 데이터와 G가 만든 가짜 데이터를 잘 구분하도록 조금씩 업데이트되는 것입니다. 를 최대한 0에 가깝게
Generator는 가짜 데이터 G(z)를 D에 input으로 넣었을 때 실제 데이터처럼 확률이 높게 나오도록 학습됩니다. 즉 D(G(z))값을 높도록, 그리고 전체 확률 값이 낮아지도록 하는 것이며 이는 다시 말해 G가 ‘D가 잘 구분하지 못하는’ 데이터를 생성하도록 조금씩 업데이트되는 것입니다. 를 최대한 1에 가깝게
실제 학습을 진행할 때는 G와 D 두 네트워크를 동시에 학습시키지 않고 하나의 네트워크를 고정한 상태에서 다른 한 네트워크를 업데이트하는 방식으로 따로따로 업데이트합니다.
Generator의 성능이 좋지 않으면, 위 식이 학습이 실제로 잘 안되는 경우가 있는데, gradient가 굉장히 작아서 학습이 빠르게 될 수 없기 때문입니다.
위 그래프를 보면, 는 가 0에 가까울 때, gradient가 0에 가깝기 때문에 학습이 잘 되지 않을 수 있습니다. 그렇기 때문에 우리는, 위의 generator objective function 대신에 다음 objective function을 학습에 활용합니다.
적용 사례
2017년 NVIDIA에서 공개한 ‘실존하지 않는 사람들의 이미지’가 GAN의 대표적인 적용 사례입니다.
Facebook은 ExGAN 기술을 개발하여 사람이 눈을 감은 사진에서 눈을 뜬 사람의 모습의 사진으로 바꾸는 과정을 공개했습니다.
'영상처리 > 기초' 카테고리의 다른 글
영상 요약해주는 Vision Transformer 모델 (30) | 2023.02.26 |
---|---|
Vision Transformer(ViT) 리뷰 (16) | 2023.02.26 |
VGG-Net 리뷰 (60) | 2023.01.25 |
ResNet 리뷰 (10) | 2023.01.24 |
Python slowfast설치 windows환경 (23) | 2023.01.20 |