본문 바로가기
AI_basic/Pytorch

[Pytorch Part.4] AutoEncoder

by hits_gold 2022. 1. 14.
반응형

AutoEncoder란?

 AutoEncoder란 비지도 학습 방식으로 훈련된 인공 신경망으로, 먼저 데이터에 인코딩 된 표현을 학습한 다음, 학습된 인코딩 표현에서 입력 데이터를 생성하는 것을 목표로 한다. 따라서 , 오토인코더의 출력은 입력에 대한 예측이다.

AutoEncoder  기본 구조

 AE를 활용하면 Input data를 Latent Space에 압축시켜 이 값을 새로운 Feature로 사용할 수 있는데, Dimension을 줄일 수 있다는 장점이 있다.

 

 AE의 응용

  • 이미지 생성
  • 이미지 변환
  • 이미지 초 고해상도
  • 이미지 복원
  • 이미지 설명(caption)

 

대표적인 AE

 1. Stacked AE

SAE

 Stacked AE는 위 그림과 같이 Hidden Layer를 다시 input으로 사용해 AE를 반복적으로 수행 후 각 Hidden Layer를 이름처럼 쌓아올리고, Softmax와 같이 Classification 기능이 있는 output layer를 추가해 만듭니다.

 이 때 그림 오른쪽에서 보이는 모델을 다시 재학습시키는데, 여기서 이미 학습되어 초기 weight값이 정해져있는 모델을 "pre-trained model"이라 하고, 이 모델을 재학습시키는 과정을 "Fine-tunning"이라고 합니다. 

 

 2. Denoising AutoEncoder

Denosing AutoEncoder

 DAE는 더 Robust한 모델을 만들기 위한 AE입니다. 기본적인 AE모델에 Input을 x + noise와 같은 형태로 하고, output을 그대로 x로 둡니다. input data에 noise를 추가함으로써 어떤 데이터가 input으로 오든 강건한 모델을 만들겠다는 목적입니다. noise를 추가한다는 개념을 SAE에 더한다면, Stacked Denoising AutoEncoder가 됩니다.

 

AE 구현

class AE(nn.Module):
  def __init__(self):
    super(AE, self).__init__()

    self.encoder = nn.Sequential(
        nn.Linear(28*28, 512),
        nn.ReLU(),
        nn.Linear(512, 256),
        nn.ReLU(),
        nn.Linear(256, 28*28),)

    self.decoder = nn.Sequential(
        nn.Linear(28*28, 256),
        nn.ReLU(),
        nn.Linear(256, 512),
        nn.ReLU(),
        nn.Linear(512, 28*28),)

  def forward(self, x):
    encoded = self.encoder(x)
    decoded = self.decoder(encoded)
    return encoded, decoded

AE 클래스의 encoder와 decoder의 입력과 출력 차원을 보면 서로 뒤집어 놓은 형상이라는 것을 알 수 있습니다.

 

위 AE를 활용해 FashionMNIST 데이터셋으로 각 이미지들을 복원하면 다음과 같은 결과가 나옵니다.

위 : 정답 레이블 이미지  아래 : 복원 결과

반응형