메뉴 바로가기 검색 및 카테고리 바로가기

한빛미디어

독자리뷰

[GAN 인 액션] 도서 리뷰

tee***

|

2021-08-21

GAN 인 액션

생성적 적대 신경망(GAN)을 구축하는 방법을 사례와 함께 안내하는 책. GAN의 개념과 학술적 성과를 소개하되, 수학적 원리는 꼭 필요한 것만 골라서 설명한다.

  • 저자 : 야쿠프 란그르 , 블라디미르 보크
  • 번역 : 박해선
  • 출간 : 2020-09-17

 

[소감]

 

개인적으로 선호하는 매닝 출판사의 in action 시리즈이다. 내용을 잘 모르는 사람도 따라하고 다시 생각하고 다시 따라하다 보면, 차근차근 내용을 이해할 수 있도록 구성되어 있다. 각 장의 내용 하나하나가 쉽게 넘어가지는 않고 조금 생각해야 알 수 있는 수준의 난이도 구성도 적절하다. 초급과 중급 사이의 그 어딘가라고 볼 수 있겠다. 물론 주제가 딥러닝의 구현 형태 중의 하나인 GAN이므로 파이썬과 머신러닝/딥러닝의 기초가 전혀 없는 사람은 읽기 어렵다.

 

내용은 각 장마다 이론적인 설명과 실습 코드가 이어서 구성되어 있다. 이론이 잘 이해가 가지 않아도, 충분한 주석이 달린 코드를 통해 실습 따라하기가 가능하다. 일단 타이핑 하다보면 모델 학습이 되고 결과가 나온다. 아무래도 결과를 눈으로 보게 되면 작은 성취감과 도전의식이 생긴다. 그랬을 때 이론을 다시 펴보면 더 잘 이해가 가는 경우가 많았다.

 

[편집/번역]

 

ㅇ 박해선님의 번역은 원문에 충실하며 꼼꼼하고 엄중하다.

- 그러면서도 적절한 윤문이 가미되어 부드럽고 읽기 쉽다.

- AI와 데이터 관련 책 중에는 박해선님의 이름이 저/역자에 있으면 뒤도 돌아보지 않고 일단 주문하는 편이다.

 

ㅇ 편집도 올컬러 인쇄에 매우 깔끔하다. 

- 공부하다보니 이미지 생성을 다루는 내용이기 때문에 컬러가 아니면 결과물의 가독성이 매우 떨어졌을 것 같다. 

- 독자 입장에서는 대단히 만족스럽다.

 

 

 

[1장: GAN 시작하기]

 

ㅇ GAN은 생성적 적대 신경망(Generative Adversarial Network)의 약자

- 두 네트워크 간의 경쟁을 이용해, 진짜 같은 데이터 샘플을 합성하는 딥러닝 기법

- 생성자(generator):가짜 데이터를 생성하도록 훈련됨

- 판별자(discriminator):실제 샘플과 가짜 샘플을 구분하도록 훈련됨

 

ㅇ 생성적(generative): 이 모델이 훈련 데이터를 통해 새로운 데이터를 생성하는데 목적이 있다는 의미

 

ㅇ 적대적(adversarial): 두 모델인 생성자와 판별자 사이의 게임 같은 경쟁구도

- 생성자는 훈련 데이터셋에 있는 실제 데이터와 유사한 샘플을 만들어냄

- 판별자는 생성자가 만든 가짜 데이터를 훈련 데이터셋에 있는 실제 데이터와 구별

 

ㅇ 판별자 훈련

- 훈련 데이터셋에서 랜덤하게 진짜 샘플 x를 선택

- 새 랜덤 잡음 벡터 z를 얻어서 생성자 네트워크를 이용해 가짜 샘플 x*을 합성

- 분류 오차를 계산하고 전체 오차를 역전파해서 판별자의 훈련 가능한 파라미터를 업데이트하고 분류 오차를 최소화

 

ㅇ 생성자 훈련

- 생성자 네트워크를 사용해 새로운 랜덤한 잡음 벡터 z에서 가짜 샘플 x*을 합성

- 판별자 네트워크를 이용해 x*을 분류

- 분류 오차를 계산하고 역전파해서 생성자의 훈련 가능한 파라미터를 업데이트하고 판별자의 오차를 최대화

 

ㅇ 훈련 목표

- 훈련 반복은 내시 균형에 도달할 때까지 진행됨

- 생성자가 훈련 데이터셋의 실제 데이터와 구별이 안 되는 데이터를 생성

- 판별자가 특정 샘플이 진짜인지 가짜인지 판단할 때 랜덤(50:50) 추측만 가능

 

 

[2장: 오토인코더와 생성 학습]

 

ㅇ 오토인코더는 인코더, 잠재 공간, 디코더로 구성됨

- 재구성된 데이터와 원본 데이터 사이의 거리를 측정하는 목표 함수를 사용해 훈련

 

ㅇ 오토인코더는 많은 앱이 있으며 생성모델로 사용할 수 있음

- GAN보다 떨어지는 성능으로 생성모델로 주로 사용되지는 않음

 

- KERAS를 이용해 MNIST 손글씨 숫자 생성 예제 수행

 

ㅇ 변이형 오토인코더는 보다 안전한 중간지대의 픽셀을 선택하기 때문에 결과물의 경계가 흐릿함

 

 

[3장: 첫 번째 GAN 구현하기]

 

ㅇ 생성자의 목적은 훈련 데이터셋의 데이터 분포를 흉내 내는 샘플을 생성하는 것

- 객체 인식 모델: 이미지 컨텐츠를 이해하기 위해, 이미지에 있는 패턴을 학습

 

ㅇ GAN은 생성자(G)와 판별자(D) 두 개의 네트워크로 구성됨

 

ㅇ 훈련하는 동안 생성자와 판별자는 자신의 파라미터는 세타(G)와 세타(D)만 조정 가능

 

ㅇ GAN은 게임 같은 방식으로 동시에 훈련됨

- 생성자는 판별자의 거짓 양성 분류가 최대가 되게 함

- 판별자는 거짓 양성과 거짓 음성 분류를 최소화하려고 함

 

ㅇ 생성자 구현 시 은닉층은 LeakyReLU 활성화 함수 사용

- 음수 입력을 모두 0으로 만드는 일반적인 ReLU함수와 달리, 작은 기울기 사용

- 훈련 중에 그레디언트가 사라지는 것을 방지해서 결과를 향상시킴

 

ㅇ 생성자 구현 시 출력층은 tanh 활성화 함수 사용

- 출력값을 [-1, 1] 범위로 조정

- 0~1로 조정하는 시그모이드 함수보다 조금 더 또렷한 이미지 생성 가능

 

ㅇ 판별자 구현 시 시그모이드 활성화 함수 적용

- 출력 값을 0~1사이로 만들기 때문에 판별자가 입력을 진짜로 생각하는 확률로 해석

 

ㅇ 손실함수는 이진 교차 엔트로피 사용

- 두 개의 클래스만 있는 예측에서 계산된 확률과 진짜 확률 사이의 차이 측정

 

ㅇ 네트워크 최적화를 위해 Adam 최적화 알고리즈 ㅁ사용

- 고급 경사 하강법 기반의 옵티마이저

- Adam은 뛰어난 성능으로 대부분 GAN 구현의 기본 옵티마이저

 

- 훈련 시 원-핫 인코딩 사용: 1이 진짜 이미지, 0이 가짜 이미지

- 미니배치 사용

(이하 생략)

 

 

[예제 소스]

 

https://github.com/rickiepark/gans-in-action

 

 

[정오표]

 

https://tensorflow.blog/gan-in-action/

 

 

[목차]

 

- CHAPTER 1 GAN 시작하기

- CHAPTER 2 오토인코더와 생성 학습

- CHAPTER 3 첫 번째 GAN 구현하기

- CHAPTER 4 DCGAN

- CHAPTER 5 GAN 훈련의 어려움과 노하우

- CHAPTER 6 ProGAN

- CHAPTER 7 SGAN

- CHAPTER 8 CGAN

- CHAPTER 9 CycleGAN

- CHAPTER 10 적대 샘플

- CHAPTER 11 실용적인 GAN 애플리케이션

- CHAPTER 12 향후 전망

 

닫기

해당 상품을 장바구니에 담았습니다.이미 장바구니에 추가된 상품입니다.
장바구니로 이동하시겠습니까?