본문 바로가기
파이토치

[딥러닝 파이토치 교과서] 생성 모델

by 나연하야 2023. 7. 23.
  • 생성 모델

- 주어진 데이터를 학습하여 데이터 분포를 따르는 유사한 데이터를 생성하는 모델

 

  • 생성 모델 개념

- 이미지를 분류하는 것을 판별 모델이라고 하면, 판별 모델에서 추출한 특성들의 조합을 이용하여 새로운 이미지를 생성하는 것을 생성 모델이라고 함(입력 이미지에 대한 데이터 분포를 학습하여 새로운 이미지를 생성하는 것이 목표)

 

  • 생성 모델의 유형

- 생성 모델의 유형에는 모델의 확률 변수를 구하는 '변형 오토인코더 모델(명시적 방법)'과 확률 변수를 이용하지 않는 'GAN 모델(암시적 방법)'이 있음

- 변형 오토인코더는 이미지의 잠재 공간에서 샘플링하여 완전히 새로운 이미지나 기존 이미지를 변형하는 방식으로 학습을 진행하며, GAN은 생성자와 판별자가 서로 경쟁하면서 가짜 이미지를 진짜 이미지와 최대한 비슷하게 만들도록 학습을 진행

 

변형 오토인코더

  • 오토인코더

- 입력을 출력으로 복사하는 신경망으로 은닉층(혹은 병목층이라고도 함)의 노드 수가 입력 값보다 적은 것이 특징임

 

  • 오토인코더의 네 가지 주요 부분

- 인코더: 특성에 대한 학습을 수행하는 부분

- 병목층(은닉층): 모델의 뉴런 개수가 최소인 계층, 이 계층에서는 차원이 가장 낮은 입력 데이터의 압축 표현이 포함

- 디코더: 병목층에서 압축된 데이터를 원래대로 재구성하는 역할(최대한 입력에 가까운 출력을 생성하도록 함)

- 손실 재구성: 오토인코더는 입력층과 출력층의 뉴런 개수가 동일하다는 것만 제외하면 다층 퍼셉트론과 구조가 동일, 오토인코더는 압축된 입력을 출력층에서 재구성하며, 손실함수는 입력과 출력의 차이를 가지고 계산함

 

  • 오토인코더가 중요한 이유

- 데이터 압축: 오토인코더를 이용하여 이미지나 음성 파일의 중요 특성만 압축하면 용량도 작고 품질도 더 좋아짐

- 차원의 저주 예방: 오토인코더는 특성 개수를 줄여 주기 때문에 데이터 차원이 감소하여 차원원의 저주를 피할 수 있음

- 특성 추출: 비지도 학습으로 자동으로 중요한 특성을 찾아줌

 

  • 변형 오토인코더

- 오토인코더는 입력 -> 인코더 -> 압축 -> 디코더 -> 출력이 나오게 하는 방법이며, 차원을 줄이는 것이 목표이기 떄문에 새롭게 생성된 데이터의 확률 분포에는 관심이 없음

- 반면, 변형 오토인코더는 표준편차와 평균을 이용하여 확률 분포를 만들고, 거기에서 샘플링하여 디코더를 통과시킨 후 새로운 데이터를 만들어 냄(즉, 입력 데이터와 조금 다른 출력 데이터를 만들어 내는데, 이때 z라는 가우시안 분포를 이용함)

 

적대적 생성 신경망

  • 적대적 생성 신경망

- 최대한 진짜와 비슷한 데이터를 생성하려는 생성자와 진짜와 가짜를 구별하는 판별자가 각각 존재하여 서로 적대적으로 학습

- 적대적 학습에서는 판별자를 먼저 학습시킨 후 생성자를 학습시키는 과정을 반복(판별자 학습은 크게 두 단계로 진행되는데 먼저 실제 이미지를 입력해서 네트워크가 해당 이미지를 진짜로 분류하도록 학습시키고, 생성자가 생성한 모조 이미지를 입력해서 해당 이미지를 가짜로 분류하도록 학습시킴)

-> 생성자는 진짜 이미지에 완벽히 가까울 정도의 유사한 모조 이미지를 만들고, 이에 따라 판별자는 실제 이미지와 모조 이미지를 구분할 수 없게 됨

 

  • GAN 동작 원리

- 생성자와 판별자 네트워크 두 개로 구성되어 있음(생성자 G는 판별자 D를 속이려고 원래 이미지와 최대한 비슷한 이미지를 만들도록 학습하고, 판별자 D는 원래 이미지와 생성자 G가 만든 이미지를 잘 구분하도록 학습 진행)

- 실제 데이터를 판단하려고 판별자 D를 학습시킬 때는 생성자 G를 고정시킨 채 실제 이미지는 높은 확률을 반환하는 방향으로, 모조 이미지는 낮은 확률을 반환하는 방향으로 가중치를 업데이트

 

  • GAN의 손실 함수

 

GAN 파생 기술

  • GAN 파생 기술

- GAN은 생성자와 판별자가 서로 대결하면서 학습하는 구조이기 때문에 학습이 매우 불안정하며, 생성자와 판별자 중 한쪽으로 치우친 훈련이 발생하면 성능에 문제가 생겨 정상적인 분류가 불가능함 -> 이러한 제약을 해결한 모델이 DCGAN임(GAN 학습에 CNN을 사용한 것)

- GAN과 DCGAN이 가짜 이미지 생성을 위해 임의의 노이즈 값을 사용했다면 cGAN은 출력에 어떤 조건을 주어 변형하는 모델이며, CycleGAN은 사진이 주어졌을 떄 다른 사진으로 변형시키는 모델(예를 들어 말을 얼룩말로 변환하는 것이 가능)

 

  • DCGAN

- GAN과 동일하게 생성자와 판별자 네트워크 두 개가 서로 적대적으로 학습하는 구조

- 생성자 네트워크: 임의의 입력을 받아들여 판별자에서 사용할 수 있는 이미지 데이터를 생성하며, 출력은 64*64가 됨

- 판별자 네트워크: 64*64 크기의 이미지를 입력받아 진짜 혹은 가짜의 1차원 결과를 출력

 

  • cGAN

- GAN의 출력에 조건을 주어 통제하려는 시도에서 만들어짐

- 예를 들어 MNIST 데이터셋을 사용하여 데이터를 훈련시킨 후 숫자 1을 출력한다고 하면 생성자와 노이즈 벡터와 더불어 그것을 뜻하는 조건 C(예를 들어, [0,0,1])를 넣어줌(판별자에도 동일 조건이 추가되어야 함)

 

  • CycleGAN

- 위의 방법들은 랜덤 노이즈를 입력으로 하므로 무작위 데이터가 생성되기 때문에 원하는 결과를 얻기 어려운 문제가 있으며, 이를 해결하는 방법으로 PIX2PIX가 있음

- PIX2PIX: 임의의 노이즈 벡터가 아닌 이미지를 입력으로 받아 다른 스타일의 이미지를 출력하는 지도 학습 알고리즘

- 생성자 네트워크: 입력과 출력이 모두 이미지이기 떄문에 전체적으로 크기가 줄어들었다가 다시 커지는 인코더-디코더의 구조임

- 판별자 네트워크: GAN 모델의 출력이 0~1 사이의 스칼라인 것과는 차이가 있는데, 그 이유는 판별자를 이미지의 각 부분별로 진행하기 위해서임(판별자는 이미지를 통쨰로 진짜인지 아닌지 판별하는 것이 아니라 이미지의 각 부분이 진짜인지 아닌지 판별함)

- PIX2PIX가 강력한 모델이기는 하지만 데이터 쌍이 필요하다는 단점이 있는데 이를 해결한 방법이 CycleGAN(생성자 하나, 판별자 하나를 사용하는 대신 생성자 둘, 판별자 둘을 사용하고, 이미지 X에서 이미지 Y로 변환하는 것뿐만 아니라 역방향으로도 변환이 진행)임

 

출처: 서지영(2022). 딥러닝 파이토치 교과서. p681-p732.