Ref. 딥러닝 파이토치 교과서 Ch.13
생성 모델(generative model)
주어진 데이터를 학습하여 데이터 분포를 따르는 유사한 데이터를 생성하는 모델
판별자 모델 vs 생성 모델
판별(자) 모델(discriminative model)
- 이미지 분류, 이미지 검출 등 입력 이미지(x)가 있을 때 그에 따른 정답(y)을 찾는 이미지를 분류하는 것
- 일반적으로 이미지를 정확히 분류(구별)하고자 해당 이미지를 대표하는 특성들을 잘 찾는 것을 목표로 함
(개의 귀, 꼬리 등)
생성(자) 모델(generative model)
- 판별자 모델에서 추출한 특성들의 조합을 이용하여 새로운 개와 고양이 이미지를 생성하는 것.
- 입력 이미지에 대한 데이터 분포 p(x)를 학습하여 새로운 이미지를 생성하는 것을 목표로함.
- 이때 새로운 이미지는 새로운 이미지이면서 기존 이미지에서 특성을 추출했기 때문에 최대한 입력 이미지와 유사한 이미지
명시적 방법 & 암시적 방법
명시적 방법(explicit density)
- 명시적 방법은 확률 변수 p(x)를 정의하여 사용.
- 변형 오토인코더(variational autoencoder)
- 이미지의 잠재 공간에서 샘플링하여 완전히 새로운 이미지나 기존 이미지를 변형하는 방식으로 학습을 진행
암시적 방법(implicit density)
- 암시적 방법은 확률 변수 p(x)에 대한 정의 없이 p(x)를 샘플링하여 사용
- GAN(Generative Adversarial Network)
- 생성자와 판별자가 서로 경쟁하면서 가짜 이미지를 진짜 이미지와 최대한 비슷하게 만들도록 학습을 진행
오토인코더
- 단순히 입력을 출력으로 복사하는 신경망. 입력과 출력이 동일한 이미지
- 은닉층의 노드 수가 입력 값보다 적음. 적은 수의 병목층 뉴런으로 데이터를 가장 잘 표현할 수 있는 방법
인코더, 병목층(은닉층), 디코더, 손실 재구성
인코더
인지 네트워크(recognition network)라고도 하며, 특성에 대한 학습을 수행하는 부분
데이터셋을 저차원으로 압축하는 것을 인코더, 압축된 것을 다시 원래의 차원으로 복원하는 것이 디코더.
따라서 인코더와 디코더에서 사용하는 네트워크 계층은 같아야 함. (코드 구현시 주의)
병목층(은닉층)
모델의 뉴런 개수가 최소인 계층. 차원이 가장 낮은 입력 데이터의 압축 표현이 포함되어 있음
디코더
생성 네트워크라고도 하며, 병목층에서 압축된 데이터를 원래대로 재구성(reconstruction)하는 역할.
최대한 입력에 가까운 출력을 생성.
손실 재구성
입력층과 출력층의 뉴런 개수가 동일하다는 것만 제외하면 다층 퍼셉트론(MLP)과 동일한 구조.
압축된 입력을 출력층에서 재구성. 손실 함수는 입력과 출력(인코더와 디코더)의 차이를 가지고 계산.
오토인코더가 중요한 이유
데이터 압축
메모리 측면. 이미지나 음성 파일의 중요 특성만 압축하면 용량도 작고 품질도 더 나아짐.
차원의 저주(curse of dimensionality) 예방
특성 개수를 줄여 주기 때문에 데이터 차원이 감소하여 차원의 저주를 피할 수 있음.
특성 추출
비지도 학습으로 자동으로 중요한 특성 찾기 가능. 눈 모양, 털 색, 꼬리 길이 등 중요한 특성을 자동으로 찾아줌.
수식
z = h(x)
입력 데이터를 인코더 네트워크에 통과시켜 압축된 잠재 벡터 z 값
y = g(z) = g(h(x))
압축된 z 벡터에서 입력 데이터와 크기가 같은 출력 값
Loss=∑iL(xi,g(h(xi)))
손실(loss) 값은 입력 값 x와 디코더를 통과한 y 값의 차이
디코더 네트워크를 통과한 출력 값은 입력 값의 크기와 같아야 함.
- Loss 전체 데이터에 대한 손실(loss) 값. 모든 데이터 포인트에 대한 재구성 손실을 합산한 값.
- L 재구성 손실(reconstuction loss) 함수
- xi 입력 데이터의 i번째 데이터 포인트
- h(xi) 입력 데이터 xi를 저차원(latent space)으로 압축하는 인코더 함수의 출력
- g(ℎ(xi)) 인코더의 출력을 다시 원래 차원으로 복원하는 디코더 함수를 통과한 재구성된 값.
구조 예시.
입력(노이즈) - 인코더 - 잠재 벡터 - 디코더 - 출력
원래 이미지 - 인코더 - 압축 - 디코더 - 재구성된 이미지
Google Colaboratory Notebook
Run, share, and edit Python notebooks
colab.research.google.com
변형 오토인코더
- 변형 오토인코더는 데이터가 만들어지는 확률 분포를 찾아 비슷한 데이터를 생성하는 것이 목적
- 오토인코더는 차원을 줄이는 것이 목표이기 때문에 새롭게 생성된 데이터의 확률 분포에는 관심이 없지만,
변형 오토인코더는 표준편차와 평균을 이용하여 확률 분포를 만들고, 거기에서 샘플링하여 디코더를 통과시킨 후 새로운 데이터를 만듦. - 입력 데이터와 조금 다른 출력 데이터를 만들어 내는데, 이때 z(latent vector)라는 가우시안 분포를 이용.
중요한 특성의 파라미터를 담고 있는 z 분포에서 벡터를 랜덤하게 샘플링하고 이 분포의 오차를 이용하여 입력 데이터와 유사한 다양한 데이터를 만들어 내는 것.
• qϕ(z|x): x를 입력받아 잠재 벡터 z와 대응되는 평균과 분산을 구하는 네트워크로 인코더 네트워크
• pθ(x|z): z를 입력받아 x와 대응되는 평균과 분산을 구하는 네트워크로 디코더 네트워크
1. 입력 x를 인코더 네트워크 qϕ(z|x)에 보내 (μz|x, Σz|x)를 출력하고, 이를 이용하여 다음 수식의 ②항에 대한 값을 구한후,
2. (μz|x, Σz|x)의 가우시안 분포에서 z를 샘플링.
3. z를 디코더 네트워크의 입력으로 사용.
4. 디코더 >> 반대로 + 역전파를 이용하여 L(x(i), θ, ϕ)의 값이 높아지는 방향으로 기울기를 업데이트합니다. 즉, 가능도(likelihood)가 증가하는 방향으로 파라미터 θ와 ϕ를 업데이트. 최종적으로 x와 유사한 x'라는 이미지가 생성
https://colab.research.google.com/drive/1PVwpl6d-_ZLsMpNe4Hw5v7vmn9pnM2kG?usp=sharing
variational auroencoder.ipynb
Colaboratory notebook
colab.research.google.com
'AI' 카테고리의 다른 글
ViT (0) | 2023.08.06 |
---|---|
강화학습 (0) | 2023.07.23 |
Transformer (0) | 2023.06.25 |