logo

오토인코더와 VAE

오토인코더 autoencoder

  • 비지도 학습을 이용하면 이미지를 압축할 수 있음
  • 오토인코더: 인코더와 디코더로 구성된 신경망 기반 비지도학습 모델
  • 인코더 encoder: 이미지를 잠재 공간에서 간단한 표현 z로 압축하는 역할
  • 디코더 decoder: 압축된 표현을 다시 원래 이미지로 복원하는 역할
  • 학습 과정에서는 원본 이미지와 복원된 이미지 사이의 차이를 줄이는 방향으로 모델이 학습

인코더가 입력 이미지를 잠재 표현으로 압축하고 디코더가 복원하는 오토인코더 구조

오토인코더의 활용: 잡음 제거

  • 원본 이미지 X에 잡음(noise)를 추가하여 X을 만듦
  • 잡음이 추가된 X을 입력하면, 잡음이 제거된 X를 생성하도록 오토인코더를 학습
  • 노이즈가 있는 새로운 이미지를 입력하면, 노이즈가 제거된 이미지가 생성
  • 또는 X를 입력하면 X를 생성하도록 오토인코더를 학습시켜도 비슷한 효과
  • 인코더가 생성하는 "간단한 표현"에 노이즈의 정보를 반영하지 못하기 때문

잡음이 있는 숫자 이미지를 인코더와 디코더를 거쳐 잡음이 제거된 이미지로 복원하는 구조

임베딩과 오토 인코더

  • 오토 인코더로 압축된 값을 임베딩으로 사용할 수도 있으나, 여러 가지 단점을 가짐
  • 오토 인코더는 원본 이미지를 정확하게 복원하는 데 초점, 비슷한 이미지가 비슷한 임베딩을 가진다는 보장 없음
  • 대조학습은 서로 비슷한 이미지와 다른 이미지를 명시적으로 비교 → 임베딩 공간에서 의미론적으로 유사한 이미지가 가까이 위치하도록 만듦
  • 오토 인코더는 학습 과정에서 임베딩으로부터 이미지를 복원
    • 임베딩만 만드는 목적으로는 불필요한 과정 → 학습 속도 느려짐
    • 더 복잡한 패턴을 학습할 필요

생성 모형으로서 오토인코더의 한계

  • 오토인코더의 유일한 목표는 '입력의 완벽한 재구성(Reconstruction)'
  • 잠재 공간을 어떻게 구성할지에 대한 규칙이나 제약이 없음.
  • 잠재 공간의 비효율적 사용:
    • 모델은 데이터를 잠재 공간 내 특정 지점들로 '암기'하듯 매핑.
    • 데이터들이 잠재 공간에서 파편화되어 분포.
  • 잠재 공간의 특정 벡터 z를 샘플링했을 때 의미 없는 노이즈가 생성될 가능성이 높음

MNIST 손글씨 데이터에서 오토인코더와 VAE의 잠재 공간 분포 비교

변분 오토인코더 Variational Autoencoder

  • 입력을 고정 벡터 대신 분포로 매핑
  • 분포에서 하나의 벡터를 무작위 추출 → 추출된 벡터를 이미지로 복원
  • AE는 z에 대한 가정이 없으나, VAE는 특정한 분포를 가정 → 좀 더 해석가능한 형태
  • VAE를 이용하여 이미지를 원하는 대로 생성/변형할 수 있음
  • 변분 추론 (Variational Inference)이라는 기법을 사용하기 때문에 붙은 이름

평균과 표준편차를 출력한 뒤 샘플링한 잠재 벡터를 디코더로 복원하는 VAE 구조

VAE를 이용한 이미지 생성

  • 잘 정돈된 연속적인 잠재 공간 활용
  • 정규분포에서 무작위로 잠재 벡터 z를 샘플링 → z를 디코더에 입력하여 새로운 이미지를 생성
  • 잠재 공간 내 두 점(이미지 A, B) 사이를 서서히 이동하면, 이미지 A가 B로 부드럽게 변하는 결과물을 얻을 수 있음
  • VAE가 생성한 이미지는 형태는 그럴듯하지만, 전반적으로 선명하지 못하고 흐릿하게 보이는 경향이 강함
    • 주로 사용하는 MSE(평균 제곱 오차) 손실은 픽셀 단위의 평균적인 차이를 최소화하는 방향으로 학습
    • 안전하고 보수적인 "평균적인" 이미지를 생성
    • 확률적 정확성은 높이지만, 사람이 인지하는 시각적 품질은 떨어뜨림

오토인코더와 VAE의 MNIST 잠재 공간 비교

VAE 잠재 공간에서 숫자가 부드럽게 변하는 생성 결과

퀴즈

문제 1 / 3맞음: 0힌트: 0틀림: 0채점중: 0남음: 3

오토인코더에서 인코더의 역할은 무엇입니까?

  • 이미지를 잠재 공간의 간단한 표현으로 압축한다
  • 잡음을 무조건 더 많이 추가한다
  • 구분자를 속이는 가짜 이미지를 만든다
  • 텍스트 토큰을 순서대로 생성한다

퀴즈를 풀려면 대화형 기능을 불러와야 합니다.

Previous
멀티 모달 임베딩