Deep Learning Network의 종류 중의 하나인 GAN에 대해서 정말 간략하게 설명하고자 합니다.
GAN이란, Generative Adversarial Network의 약자로 적대적 생성 신경망이라고 합니다.
단어가 좀 애매하지만, 결론적으로는 Generator와 Discriminator의 어떠한 상호 적대적 관계를 통해 Real에 가까운 무언가를 생성해내는 모델이라 볼 수 있습니다.
GAN을 활용한 몇 가지 사례는 다음과 같습니다.
FaceBook에서 개발한 Real-eye-opener입니다. 이는 순간적으로 눈을 감은 채 찍힌 이미지에 가짜 눈을 생성하여 마치 눈을 뜨고 찍힌 것처럼 만드는 기술입니다.
다음은 CycleGAN이라고 하여 Image Translation에 적용한 사례입니다. 화풍을 바꾸거나, 얼룩말을 갈색말로, 반대로 갈색 말을 얼룩말로 만드는 것을 가능하게 합니다.
이외에도 음악을 만들거나, 존재하지 않는 사람 이미지를 생성하거나 하는 등 여러 분야에서 활발히 활용되고 있습니다.
이러한 GAN에 대해 좀 더 자세히 알아보고자 합니다.
예시를 통한 직관적인 설명과 수식에 대한 설명은 다음과 같습니다.
"나는 위조 지폐를 만들고 싶다. 지폐가 어떻게 생겼는지에 대한 많은 데이터들을 가지고 있고 현재 0과 1로 구성된 어떠한 이미지를 가지고 있다. 소문에 의하면 GAN이라는 것을 이용해 Real에 가까운 또는 Real인 무언가를 만들 수 있다고 한다. 그래서 GAN을 이용해 보고자 한다."
우선, GAN은 아래와 같은 구조를 가지고 있습니다.
0과 1로 구성된 어떠한 이미지, 즉 Noise라는 초기 데이터가 있습니다. 이를 수식으로는 z라고 합시다. 이 Noise(→ z)를 이용해 Generator가 위조지폐를 만들어보면, 이때의 수식은 G(z)입니다. 그리고 실제 지폐는 X라고 합시다.
Generator가 만들어낸 이 결과물을 Discriminator가 한번 살펴 봅니다. 이때 이 위조지폐가 위조지폐라고 판별되면 0을, 위조지폐가 아닌 실제 지폐라고 판단되면 1을 출력하기로 합니다. 이때의 수식은 D(G(z)) = 0 or 1, D(X) = 1입니다.
위와 같이 Generator가 한번 지폐를 생성하고 Discriminator가 한번 해당 지폐를 판별하는 과정이 1Epoch입니다. 여러 번의 Epoch를 반복하면서 Generator는 좀 더 사실적인 지폐를 만들고자 할 것이고 Discriminator는 지폐를 더 정확히 판별하고자 할 것입니다. (과정을 반복하게 되면 초기 이미지인 Noise(→ z)는 조금씩 변화할 것입니다.) 이러다 어느 순간 Discriminator가 판별하지 못한 위조지폐들이 생겨나게 될 것입니다. 이런 식으로 Discriminator가 구별하지 못하도록 위조지폐를 생성하는 Generator를 학습시키는 것이 GAN입니다.
이제 수식 부분을 살펴봅시다.
왼쪽 min max V(D, G)는 Generator는 V(D, G)를 최소화시키려고 하고 Discriminator는 V(D, G)를 최대화시키려고 함을 의미합니다.
Discriminator의 입장에서 위 수식을 보면, D(X)는 실제 데이터이므로 1의 값을 가지고 D(G(z))는 0 ~ 1의 값을 가집니다. 1에 가까울 수록 진짜에 가까운 것입니다.
따라서 Discriminator가 가장 원하는 상황은 D(X) = 1이고 D(G(z)) = 0인 상황이므로 이때의 수식 값은 V(D, G) = 0입니다.
Generator의 입장에서 위 수식을 보면, D(X)의 값은 고려하지 않습니다. 오직 관심있는 것은 실제 데이터와 얼마만큼 유사하게 만들 수 있는지입니다. 따라서 D(G(z)) = 1이 되는 것이 목표인 것이죠. 이렇게 되면 V(D, G)는 -infinity가 됩니다.
수식 자체가 중요하다고는 할 수 없지만, GAN이라는 Network를 수식으로 위와 같이 표현할 수 있다는 것을 알면 좋을 것 같습니다.
위 내용이 GAN의 공통적인 개념 부분입니다.
GAN의 종류도 굉장히 다양하고 Model에 대한 기초 지식도 많이 있지만 이를 전부 다룰 수는 없으므로 우선, GAN이란 이렇다 정도만 설명하였습니다.
정리하면 GAN은 Generator와 Discriminator의 상호 작용을 통해 Real Data를 생성하고자 하는 목적을 지닌 DL Network 중 하나라고 볼 수 있습니다.
이렇게 요번 포스트는 간단하게 마치도록 하겠습니다.
'Programming > Deep Learning Network' 카테고리의 다른 글
[Model] FPN (0) | 2023.02.22 |
---|---|
[Model] RetinaNet (0) | 2023.02.22 |
[Model] MobileNet v1 (0) | 2023.02.21 |
[Model] Grad-CAM (1) | 2023.02.15 |
[Model] ResNet (0) | 2023.02.13 |
댓글