딥러닝 파이토치 교과서 13장 생성 모델이란? 공부
생성 모델이란
생성 모델 개념
생성모델은 주어진 데이터를 학습하여 데이터 분포를 따르는 유사한 데이터를 생성하는 모델이다.
판별자 모델
- 이미지를 분류하는 것
- 이미지를 정확히 분류하고자 해당 이미지를 대표하는 특성들을 잘 찾는 것을 목표로 한다.
생성자 모델
- 판별자 모델에서 추출한 특성들의 조합을 이용하여 새로운 개와 고양이 이미지를 생성하는 것
- 입력 이미지에 대한 데이터 분포 p(x)를 학습하여 새로운 이미지를 생성하는 것을 목표로 한다.

생성 모델의 유형
명시적 방법
- 확률 변수 p(x)를 정의하여 사용
- 대표적인 모델: 변형 오토인코더
- 오토인코더는 이미지의 잠재 공간*에서 샘플링하여 완전히 새로운 이미지나 기존 이미지를 변형하는 방식으로 학습 진행
암시적 방법
- 확률변수 p(x)에 대한 정의 없이 p(x)를 샘플링*하여 사용
- 대표적인 모델: GAN
- GAN은 생성자와 판별자가 서로 경쟁하면서 가짜 이미지를 진짜 이미지와 최대한 비슷하게 만들도록 학습을 진행

샘플링: 모집단의 데이터에서 최대한 모집단과 유사한 일부 데이터를 추출하는 과정
잼재공간: 숫자 5이미지를 입력하면 인코더는 숫자 5를 받아서 분석한 후 2차원 좌표평면, 예를 들어 (5,5)에 표현한다. 이때 숫자 5 이미지를 고차원 데이터라고 하며 좌표평면에 표현된 벡터는 점 (5,5)에 해당된다. 이떄, 2차원 좌표 평면을 잠재공간이라고 한다.
변형 오토인코더
오토인코더란?
오토인코더
- 단순히 입력을 출력으로 복사하는 신경망으로, 은닉층의 노드 수가 입력 값보다 적은 것이 특징이다.
입력을 출력으로 복사하는 이유?
- 은닉층때문
- 오토인코더의 은닉층은 입력과 출력의 뉴런보다 훨씬 적다. 즉, 적은 수의 은닉층 뉴력으로 데이터를 가장 잘 표현할 수 있는 방법이 오토인코더이다.
오토인코더의 4가지 주요 부분
인코더: 인지 네트워크, 특성에 대한 학습을 수행
은닉층: 모델의 뉴런 개수가 최소인 계층, 차원이 가장 낮은 입력 데이터의 압축 표현이 포함됨
디코더: 생성 네트워크, 은닉층에서 압축된 데이터를 원래대로 재구성하는 역할을 함. (최대한 입력에 가까운 출력을 생성하도록)
손실 재구성: 오토인코더는 압축된 입력을 출력층에서 재구성하며, 손실함수는 입력과 출력의 차이를 가지고 계산한다.

오토인코더가 중요한 이유
데이터 압축: 데이터 압축은 메모리 측면에서 상당한 장점이다. 오토인코더를 이용하면 이미지나 음성 파일의 중요 특성만 압축하면 용량이 작아지며 품질도 좋아진다.
차원의 저주 예방: 오토인코더는 특성 개수를 줄여주기 때문에 데이터 차원이 감소하여 차원의 저주를 피할 수 있다.
특성 추출: 오토인코더는 비지도 학습으로 자동으로 중요한 특성을 찾아준다.
수학적 접근
- 입력 x와 출력 y는 같은 차원(R)에 존재한다는 가정하에 입력 데이터를 인코더 네트워크에 통과시켜 압축된 잠재 벡터 z값을 얻는다. 이때 z를 구하는 공식:
z = h(x)
- 압축된 z 벡터에서 입력 데이터와 크기가 같은 출력 값은 다음과 같이 계산한다.
y = g(z) = z(h(x))
- 이때 손실 값은 입력 값 x와 디코더를 통과한 y값의 차이로 다음과 같이 계산한다.

- 즉, 디코더 네트워크를 통과한 출력 값은 입력값의 크기와 같아야 한다.

변형 오토인코더
오토인코더와의 비교
오토인코더
- 차원을 줄이는 것이 목표이기 때문에 새롭게 생성된 데이터의 확률 분포에는 관심이 없다.
- 목적: 데이터 벡터에 대한 차원을 축소하여 실제 이미지와 동일한 이미지를 출력하는 것

변형 오토인코더
- 표준편차와 평균을 이용하여 확률 분포를 만들고, 거기에서 샘플링하여 디코더를 통과시킨 후 새로운 데이터를 만들어 낸다.
- 입력 데이터와 조금 다른 출력 데이터를 만들어 내는데, 중요한 특성의 파라미터를 담고 있는 z 분포에서 벡터를 랜덤하게 샘플링하고 이 분포의 오차를 이용하여 입력 데이터와 유사한 다량의 데이터를 만들어낸다.
- 목적: 데이터가 만들어지는 확률 분포를 찾아 비슷한 데이터를 생성하는 것

변형 오토인코더의 인코더와 디코더

q(z|x): x를 입력받아 잠재 벡터 z와 대응되는 평균과 분산을 구하는 네트워크 (인코더 네트워크)
p(x|z): z를 입력받아 x와 대응되는 평균과 분산을 구하는 네트워크 (디코더 네트워크)
적대적 생성 신경망 (GAN)
GAN 개념
GAN 생성 모델: 생성자와 판별자가 각각 존재하여 서로 적대적으로 학습하는 모델
- 생성자: 최대한 진짜와 비슷한 데이터를 생성
- 판별자: 진짜와 가짜를 구별
GAN 학습 방법
- 판별자를 먼저 학습시킨 후 생성자를 학습시키는 과정을 반복한다.
- 판별자 학습 : 아래 과정을 거쳐 판별자는 실제 이미지를 진짜로 분류하고, 모조 이미지를 가짜로 분류한다.
- 실제 이미지를 입력해서 네트워크가 해당 이미지를 진짜로 분류하도록 학습
- 생성자가 생성한 모조 이미지를 입력해서 해당 이미지를 가짜로 분류하도록 학습

- 이와 같은 학습 과정을 반복하면 판별자와 생성자가 서로 적대적인 경쟁자로 인식하여 모두 발전하게 된다. 결과적으로 생성자는 진짜 이미지에 완벽히 가까울 정도의 유사한 모조 이미지를 만들고, 이에 따라 판별자는 실제 이미지와 모조 이미지를 구분할 수 없게 된다.
GAN 동작 원리
GAN 구조
GAN은 생성자와 판별자 네트워크가 서로 적대적으로 경쟁하며 학습을 진행한다.
생성자 G는 판별자 D를 속이려고 원래 이미지와 최대한 비슷한 이미지를 만들도록 학습한다.
- 반대로
판별자 D는 원래 이미지와 생성자 G가 만든 이미지를 구분하도록 학습을 진행한다.

판별자 D
- 주어진 입력 이미지가 진짜 이미지인지 가짜 이미지인지 구별하는 것
- 이미지 x가 입력으로 주어졌을 때 판별자 D의 출력에 해당하는 D(x)는 진짜 이미지일 확률을 반환한다.
생성자 G
- 판별자 D가 진짜인지 가자짜인지 구분할 수 없을 만큼 진짜와 같은 모조 이미지를 노이즈 데이터를 사용하여 만들어낸다.
예시상황
- 실제 이미지인 알파벳 z가 입력으로 주어짐
- 판별자는 z를 학습
- 생성자는 임의의 노이즈 데이터를 사용하여 모조 이미지를 생성함
- 이를 다시 판별자 D의 입력으로 주면 판별자는 실제 이미지일 확률을 반환함

GAN 손실 함수

- 수식에서 판별자 D는 실제 이미지 x를 입력받을 경우 D(x)를 1로 예측하고, 생성자가 잠재 벡터에서 생성한 모조 이미지 G(z)를 입력받을 경우 D(G(z))를 0으로 예측함
- 판별자가 모조 이미지 G(z)를 입력받을 경우 1로 예측하도록 하는 것이 목표