[딥러닝] 생성적대립신경망(Generative Adversarial Network;GAN)

2022.01.19 10:15 5,027 조회

안녕하세요 !

데이크루 1기 월드파파 입니다.

오늘은 [세소식] 2편. 스튜디오 지브리 캐릭터, AI로 실사화 하다! (Feat.GAN) 에서 언급한 바와 같이,

딥러닝, GAN 에 대하여 소개해 드리려고 합니다.

( 실습도 같이 해보세요 ! [GAN] 딥러닝 생성적 대립 신경망 GAN 기초 실습 입문하기 )


생성적 대립 신경망(Generative Adversarial Network; GAN)의 사전적 의미는

생성모델과 판별모델이 경쟁하면서 실제와 가까운 이미지, 동영상, 음성 등을 자동으로 만들어 내는 딥러닝 방식중 하나입니다.

 

이해를 돕기 위하여 차근차근 설명 드려보겠습니다 !

진행 순서는 다음과 같습니다.


  1. Generative Model
  2. Latent Variable
  3. Auto Encoder
  4. Latent Space Dimension
  5. Generative Adversarial Network
  6. Summary


* 본 포스팅은 데이콘 서포터즈 “데이크루" 1기 활동의 일환입니다.


1.    Generative Model

 

우선 GAN은 Generative Model(생성 모형)으로부터 나온 방식입니다.

그럼 Generative Model이 무엇인고?

 

실제로 있는 것을 생성하는게 아니라

Generative Model은 비지도 학습 기법에 속합니다.

 

비지도 학습은 레이블이 존재하지 않아

학습하는 데이터 내에 예측하고자 하는 값(y)이 없는 것이죠.

쉽게 말해서 많은 피쳐 X(독립변수)들을 가지고 새로운 y(종속변수)를 생성하는 기법입니다.

 

또한 Generative Model은

데이터가 추출된 분포와 최대한 유사한 분포를 학습하는 것이 목표인데요,

 

출처 - MIT youtube, MIT 6.S191: Deep Generative Modeling

 

위의 그림과 같이 실제 데이터분포(Pdata(x))를 가지고

매우 유사한 새로운 확률분포(Pmodel(x))를 가지도록 데이터를 학습 시킵니다.

생성 모형의 목표는 Pmodel(x)가 최대한 유사한 결과가 나올 수 있도록 하는 것이겠죠 !

 

그렇다면 어떻게 유사한 확률 분포를 가지도록 학습을 시킬 수 있을까요?

 


2.    Latent variable


출처 - MIT youtube, MIT 6.S191: Deep Generative Modeling


바로 ‘잠재 변수(Latent Variable)’ 이라는 개념을 사용합니다.

잠재변수는 이름에서도 알 수 있듯이 숨겨진 변수로써 데이터에 직접 나타나진 않지만

현재 데이터 분포를 만드는데 영향을 끼치는 변수 입니다.

 

Generative Model은 이러한 관찰된 내용만 제공하더라도

데이터에서 및 숨겨진 잠재변수를 실제로 학습할 수 있습니다.

다차원 데이터 세트를 처리하고 비선형 함수를 조합하여 학습을 시킨다는 것이죠!

따라서 어떤 데이터의 잠재 변수를 알아 내면, 이를 이용하여 유사한 데이터를 생성해 낼 수 있습니다.


이해를 돕기 위하여 다음 그림의 자율주행 예시를 보시죠 !

출처 - MIT youtube, MIT 6.S191: Deep Generative Modeling

 

내 차에서 이미지를 비디오로 인식하면서 가고있다고 가정해 봅니다!

이미지 데이터들이 계속 처리가 되면서

정상적인 주행 데이터를 대표하는 어떤 변수들이 있을 것입니다.

 

확률 분포를 보면 대부분의 데이터가 정상적인 주행의 상황 일 것이고

그 잠재 변수들을 통하여 정상적인 주행이라고 판단 할 것입니다.

 

하지만 별의별(?) 특이 상황이 나타날 때

정상적인 주행의 상황을 나타내는 잠재 변수들이 인지가 되지 않아

확률분포의 가장자리쪽이라 판단 될 것이고

이상치라고 탐지 하겠죠!

 

따라서 많은 주행 이미지 데이터를 학습 시키고

잠재 변수에 의하여 유사한 데이터를 생성하면

데이터의 생성 분포를 알 수 있고,

분포의 가장자리에 있는 곳이라고 판단 되었을 때 이상치라 판별 하는 것이죠.

 

그렇다면 잠재변수의 근간이 되는 아이디어는 무엇일까요?


바로 주성분 분석(Principal component analysis; PCA) 입니다.

출처 - kkokkilkon.tistory.com/169

 

주성분 분석을 사용하면 선형 벡터의 조합으로 변수의 차원을 줄일 수가 있죠.


출처 – 이지환 교수, 딥러닝과인공지능 자료


하지만 그림과 같이 주성분 분석은 변수의 선형적인 관계만을 표현 하기 때문에

비선형적인 관계를 표현하기 위하여 딥러닝에서는 AutoEncoder를 사용합니다.

 


3.    AutoEncoder


AutoEncoder에 대하여 간단히 설명 드리면

실제 입력을 자체 인코딩하여 잠재변수를 구축하는

단순하고 기본적인 Generation Model 입니다.

 

출처 - lifeignite.tistory.com/53

 

다시말해,

잠재 공간에 대한 레이블이 없는 unsupervised problem이므로

데이터 자체를 label로 활용하여 원시 데이터를 입력해주면 (Original input)

Encoder에게는 잘 압축하는 방법을,  

Decoder에게는 잘 압축된 표현 방식, 즉 잠재공간 (Compressed representation)를 보고

낮은 차원 잠재 공간에서 시작하여 원본 이미지를 실제로 재구성(Reconstructed input)

방식을 학습시켜 디코더 네트워크를 구축하도록 동작하게 됩니다.


출처 - MIT youtube, MIT 6.S191: Deep Generative Modeling


따라서 오토인코더의 손실함수

원래 Input  x와 재구성된 Output x햇을 보고 단순히 둘을 비교하여

이 두 이미지 사이 거리를 최소화(평균 제곱 오차)를 합니다.

 

 

4.    Latent Space Dimension

 

 

그렇다면 잠재공간 차원은 높은게 좋을까요? 낮은게 좋을까요?

출처 – 이지환 교수, 딥러닝과인공지능 자료

 

잠재 공간의 차원이 높을 수록 위 그림에서 50번째에 가까워 정보가 많아지지만

오버피팅이 발생하고 해석이 어려워 질 수 있습니다.

그렇다고 너무 낮은 잠재 공간 차원은 언더피팅이 발생하고 정보손실이 많아지죠.

따라서 적절한 잠재 공간의 차원을 신중히 결정해야하고

손실함수의 Loss를 낮추면서도 차원을 적절히 줄일 수 있는 아키텍쳐를 찾아보는 것이 중요합니다.

 

 

5.    Generative Adversarial Network


그럼 이제 다시 GAN으로 되돌아 가봅시다.

사실상 데이터로부터 직접 생성과정을 학습하는 것은 어렵습니다.

 

따라서 실제와 유사한 가짜 데이터 생성기 Generator를 만드는 것이죠.

Generator는 AutoEncoder의 뒷부분, Decoder 부분의 구조를 착안했다고 볼 수 있습니다.

 

이 구조만으로는 학습하기가 어렵겠죠.

원래 데이터의 분포를 알기 위해서,

여기서 등장하는 것이 바로 Discriminator입니다.

 

Discriminator의 역할은 주어진 데이터가 실제 데이터인지

Generator로부터 생성한 데이터 (가짜 데이터) 인지를 구별시킵니다.

출처 - MIT youtube, MIT 6.S191: Deep Generative Modeling

 

실제 데이터(Real Data)로부터 데이터를 뽑고,

Generator가 생성한 데이터를 또 뽑습니다.

그리고 Discriminator에게 이 두개를 섞어서 주죠.

 

Generator의 주된 목표는 Discriminator가 구분하지 못할 정도로 실제 데이터와 유사한 데이터를 만드는 것입니다.

Discriminator의 주된 목표는 Generator가 만든 것과 실제 데이터를 잘 구분해 내는 것이죠.

 

따라서 Generator와 Discriminator가 서로 경쟁하여 정교해지게 됩니다.

이후 학습 완료 후 정교해진 Generator를 사용하여 샘플을 생성하게 되는 것이죠.

 

그럼 이 논리대로 손실 함수를 같이 보겠습니다.

 


Notation

• x : 실제 데이터

• z : 노이즈 데이터 (가짜 데이터를 만드는데 사용되는)

• D(x) : Discriminator가 x를 ‘실제’인 것으로 분류할 확률

• G(z) : 주어진 z에 대하여 Generator가 만들어낸 샘플

• D(G(z)) : Generator가 만들어낸 샘플을 ‘실제’인 것으로 분류할 확률

• 1-D(G(z)) : 가짜인 것을 ‘가짜’인 것으로 분류할 확률

 

이진 분류에서 Cross Entropy와 비슷한 구조를 가지고 있다는 것을 보실 수 있습니다.


하지만

Discriminator의 목표는

진짜를 진짜인 것으로, 가짜는 가짜인 것으로 분류를 시켜야 되기때문에

손실함수를 최대화를 시키는 것이고

 

Generator의 목표는

Discriminator를 속이는 것이 목표이기 때문에,

가짜는 진짜인것으로, 진짜는 가찌인 것으로 분류를 시켜야 하기 때문에

손실함수를 최소화 시키는 것이겠죠!

 

따라서 두개의 함수를 동시에 매번 학습을 시키는 것 입니다.

 

그럼 다음 그림과 같이 정교해진 Generator를 이용하여

가짜로 생성된 데이터를 거의 실제와 같이 생성할 수 있습니다!

출처 - MIT youtube, MIT 6.S191: Deep Generative Modeling


 

6.    Summary

 

우리는 GAN을 알아보기위하여 우선적으로 GAN의 근간이 되는 1. Generative Model을 알아 보았습니다.

이를 통하여 새로운 모델이 유사한 확률 분포를 가지도록 학습된다는 사실을 알게되었습니다.

이후 Generative Model의 학습 과정을 알아보기 위하여 2. Latent Variable 를 알아 보았고

PCA를 통해 잠재변수의 차원축소 과정을 이해 해 보았습니다.

다음으로 딥러닝에 잠재변수를 적용한 기초 Generative Model 예시로 3. Auto Encoder 를 알아보았고,

4. Latent Space Dimension 에서 잠재공간의 차원 설정의 중요성까지 알아 보았습니다.

마지막으로 오늘의 주제인 비지도 학습 Generative Model 5. Generative Adversarial Network 까지 상세히 알아 보았습니다.

 

감사합니다.

 

 


참고 :

https://terms.naver.com/entry.naver?docId=5911924&cid=42346&categoryId=42346
https://m.blog.naver.com/horajjan/221426061372
https://www.youtube.com/watch?v=BUNl0To1IVw
https://lifeignite.tistory.com/53 


로그인이 필요합니다
0 / 1000
sosum
2023.08.07 17:07

정말 좋은 자료 잘 읽었습니다. GAN에 대해 더 자세하게 이해를 할 수 있게 된 것 같습니다.
자료를 읽으며 궁금한 점이 생겨 질문 드립니다.
GAN모델의 학습 과정 중 latent space에서 noise data z를 뽑아 학습하는 부분에서 latent space의 dimension은 사용자가 직접 설정하는 건가요? 
그리고 latent space에서 noise data z를 sampling할 때 어떤 분포를 따른다고 생각하고 sampling 하는건가요?

다시 한번 좋은 자료 감사드립니다!

dac_oyn
2023.08.09 17:20

좋은 자료 감사합니다!
데이터 증강에 대해 공부하고 있는 중이었는데, 잘 읽었습니다!!

이전 글
전화번호 변경하고싶습니다.
대회 -
좋아요 0
조회 864
댓글 2
일 년 전
현재 글
[딥러닝] 생성적대립신경망(Generative Adversarial Network;GAN)
대회 -
좋아요 14
조회 5,027
댓글 2
3년 전
다음 글
휴대폰 연동 제거
대회 -
좋아요 0
조회 750
댓글 1
일 년 전