오토 인코더
- 오토 인코더 (Autoencoder, 1987)
- 입력 데이터의 패턴을 학습하여 데이터를 재건하는 모델
- 비선형 차원 축소 기법으로 활용 가능
오토 인코더의 구조 - 인코더(Encoder): 데이터를 저차원 잠재 표현으로 요약
- 디코더(Decoder): 저차원 잠재 표현으로부터 데이터를 재구성(Reconstruction)
- 손실 함수: 잠재 표현으로부터 복구한 데이터와 입력 데이터의 평균제곱오차(MSE) - 디노이징 오토 인코더
- 입력 데이터에 랜덤 노이즈를 주입하거나 Dropout 레이어를 적용
- 노이즈가 없는 원래 데이터로 재구성
- 디노이징 오토 인코더의 원리
- 안개 속에서 멀리 있는 물체를 구별하려면? 데이터의 특성들을 더욱 정확히 학습함
- 노이즈에 강건한 잠재 표현 (미세하게 변형된 데이터도 같은 잠재 벡터로 표현되도록) - 오토 인코더의 활용
- 특징 추출기로의 활용
- 학습한 오토 인코더의 인코더 부분을 특징 추출기로 활용
- 잠재 벡터로부터 분류, 클러스터링 문제 해결
- 이상치 탐지 (Anomaly Detection)
- 이상치는 재구성 했을 때 평균제곱오차가 크게 나올 것!
- 특정 임계값을 넘으면 이상치로 판단
변분 오토 인코더
- 변분 오토 인코더(Variational Autoencoder, VAE, 2014)
- 오토 인코더와 동일한 구조(Encoder + Decoder)를 가지는 생성 모델
- 잠재 변수 모델: 데이터는 저차원의 잠재 변수로부터 생성됨
- Autoencoder와 동일한 구조를 갖지만 새로운 데이터를 생성할 수 있음
- 가능도 (Likelihood) 와 동치인 ELBO를 최대화하여 학습
- 경우에 따라 흐릿한 영상이 생성되는 경향이 있음 - VAE의 구조
- 오토 인코더의 구조를 가짐 (인코더 + 디코더)
- 잠재 벡터의 분포: 표준정규분포
- 잠재 변수(z) 가 표준정규분포를 따른다고 가정 (사전 분포 → p(z))
- 조건부 분포 p(x|z) (=확률적 디코더)는 일반적으로 정규분포 또는 베르누이 분포로 모델링
- VAE의 학습
- 잠재 변수(z) 가 표준정규분포를 따른다고 가정 (사전 분포 → p(z))
- 각 특징을 확률 분포로 정의, 이로부터 샘플링을 수행함 - 알아내고자 하는 것 = p(x)
- 데이터 분포 자체는 알고 싶은 것인데 이를 직접 계산하는 것은 불가능함
- 주어진 데이터를 기준으로 우리가 알아내고 싶은 p(x)는 “현재 데이터를 잘 설명하는 분포” 를 의미함
- 동전의 예시로, “앞면이 나올 확률” 을 알아내고 싶음 (모델링) - Evidence of Lower BOund (ELBO)
- 현재 모델이 우리가 가진 현상을 얼마나 잘 설명하는가 = 가능도 (Likelihood)
- 직접 계산이 어려우니, 간접적으로 계산하여 최대화함 - ELBO의 계산
- ELBO의 의미
- 가능도 (Likelihood) 대신 계산 가능한 ELBO를 최대화하자!
- 복원 오차 (Reconstruction error)와 정규화 항 (Regularization term)으로 구성
- VAE의 손실 함수
- MLE 대신 ELBO의 합을 최대화 → -ELBO의 합을 최소화
- 손실 함수 계산 시 샘플링이 필요 → 미분 불가능!
- 재매개변수화 방법
- 정규 분포의 특성: z ~ N(𝜇, 𝜎 2 )와 𝜇 + 𝜎⋅𝜀 (𝜀 ~ N(0, 1))는 분포가 같다
- 표준정규분포에서 샘플링 해서 변환한다면 미분 가능! - 변분 오토 인코더의 활용
- VAE의 생성 결과
- 생성 과정: 잠재 벡터(z)를 표준정규분포에서 샘플링, 디코더의 분포 p(x|z)로부터 새로운 데이터를 생성
- 𝛽-VAE (2017)
- VAE의 손실 함수에서 regularization term에 가중치를 줌
- 각 차원 별로 독립적인 정보를 가지도록 함 → 의미있는 잠재 표현 학습 - VAE의 장단점
- 장점 : q(z|x)로부터 데이터를 요약하는 유용한 잠재 표현을 찾을 수 있음
- 단점 : 가능도가 아닌 가능도의 하한을 최대화, 흐릿한 이미지를 생성 - 변분 추론 (Variational Inference)
- p(z)로부터 z를 샘플링 하는 것은 문제
- ELBO를 인코더 파라미터 𝜙에 대해 최대화 하는 것은 q𝜙 (z|x)가 p(z|x)와 비슷해지도록 함 (변분 추론) - ELBO의 유도
벡터 양자화 변분 오토 인코더 (VQVAE)
- VQVAE & VQVAE-2
- 유한한 표현형으로 데이터를 표현할 수 있다는 관측을 활용
- 벡터 양자화 기법을 활용한 고성능 VAE
- 다른 모델에서 자주 활용됨 - 벡터 양자화 변분 오토 인코더 (Vector Quantized Variational Autoencoder, VQVAE, 2017)
- 유한한 잠재 표현을 활용하는 변분 오토 인코더
- 실제 이미지나 텍스트는 유한한 특성으로 표현할 수 있음! - 이산(Discrete) 잠재 변수
- 범주: K개의 D차원 임베딩(Embedding) 벡터 (e1 , …, eK )
= Codeword in Codebook - VQVAE의 Evidence of Lower BOund (ELBO)
- 사전 분포 p(z): 균등 분포로 가정; p(z) = 1 / K
-> K개의 임베딩 벡터도 학습! : 데이터 특성을 표현하는 단어를 학습하고 수정할 수 있게 함
- 손실 함수 : -ELBO: 재구성 오차 항만 최소화
- 벡터 양자화 항: 임베딩 벡터가 인코딩 출력 방향으로 가까워짐
- 약속 손실 (Commitment Loss): 인코딩 출력이 너무 커지지 않도록 임베딩 벡터 근처로 가까워짐
- sg = stop gradient → 역전파 시 입력에 대한 기울기를 0으로 계산
- 𝛽 > 0는 하이퍼파라미터
- VQVAE의 학습
- 잠재 변수(zq (x), 디코더 입력)는 인코더 출력(ze (x))에 대해 미분 불가능!
- 잠재 변수에 대한 기울기( )를 인코더 출력에 전달 → 역전파 가능해짐
- 실험에서는 잠재 변수를 여러 개 사용 (ex. 128 x 128 x 3 이미지 → 잠재 변수 32 x 32 x 1)
- K = 512 개의 임베딩 벡터 - VQVAE의 생성 과정 ( 예) 잠재 변수 4 x 4개, 임베딩 벡터 512개)
- 가능한 잠재 변수의 가짓수: 512^4 x 4 = 512^16 → 엄청 큼!
- 관측치 개수 만큼의 잠재 변수의 조합만 확인 가능 → 단순 사전 분포에서의 샘플링은 의미 X
-> 잠재 변수의 조합을 PixelCNN으로 학습한 후 샘플링하자! - PixelCNN (2016)
- 이미지 픽셀 값(0~255)들의 결합 분포를 마스크된 합성곱(Masked Convolution) 신경망으로 모델링
- 좌상단에서부터 순차적으로 이미지의 픽셀값을 생성 (행 별, 왼쪽에서 오른쪽, RGB 순서) - VQVAE-2
- 계층 구조 : 고해상도 이미지를 다루기 위해 계층 구조 사용
- 위층(Top level): 전역적인(Global) 특징
- 아래층(Bottom level): 국소적인(Local) 특징 - VQVAE-2 생성
- 사전 분포 학습
- 위층: Self-attention 사용 (PixelSNAIL) → 전역적인 정보를 활용
- 아래층: 위층의 잠재 벡터를 추가로 입력으로 받음
- 생성된 데이터 기각 샘플링(Rejection Sampling)
- 사전 학습된 분류기를 활용
- 생성된 데이터가 실제 데이터와 유사하다면 정답 레이블 예측 확률이 높을 것!
- 예측 확률이 낮은 것은 제외
- 3층의 계층 모형으로 생성한 고해상도 얼굴 사진
'Study > 머신러닝' 카테고리의 다른 글
Generation-확산모델 (0) | 2025.01.10 |
---|---|
적대적 생성 신경망(Generative Adversarial Networks) (0) | 2025.01.09 |
Generation-생성 모델 평가지표 (0) | 2025.01.09 |
Generation-생성 모델 (2) | 2025.01.09 |
PyTorch Hydra (0) | 2024.12.17 |