본문 바로가기

머신러닝

[머신러닝]오토인코더(Autoencoder)를 알아보자.

1. 오토인코더란 

오토인코더는 출력값을 입력값의 근사로 하는 함수를 학습하는 비지도 학습이다.


인코딩이란 단어는 다음과 같은 뜻을 가지고 있다.


암호화하다, 부호화하다, (다른 언어로)표현하다


오토인코더는 인코더와 같이 입력을 압축하고, 그것을 재구성한다. 오토인코더의 구조는 다음과 같다.



이 구조를 보면 입력을 히든 레이어로 인코딩하고 인코딩된 히든 유닛을 디코딩해서 입력과 사이즈가 같은 출력을 한다. 이때 인코딩 과정에서 입력이 압축되는데 입력값이 압축됨으로써 입력에서 출력으로의 손실없는 완벽한 복사는 일어날 수 없으며 이러한 압축 과정의 일환으로 입력이 무작위적이 아니라는 가정 하에 히든 유닛이 입력의 피처를 학습하게 된다. 


인풋레이어에서 히든 레이어로 인코딩 되는 과정에서 정보가 압축되는 이와 같은 성질을 이용하여 오토인코더를 Feature extracter로 사용하기도 한다. 


추가. 

위키백과에 따르면 손실압축을


주관적으로 중요한 정보들을 최대한 보존하는 것을 목표로 하며, 이를 위해 사람들이 잘 느끼지 못하거나 둔감한 정보는 손실시킨다.


라고 하는데 오토인코더에서는 인코딩 과정을 통과하며 핵심 정보(피처)만을 남기는데, 여기서 보면 중요한 정보만 보존하고 둔감한 정보는 손실시킨다는 점에서 오토인코더를 일종의 손실 압축이라고 볼수 있을것이라는 생각이 났다. 

물론 자세한건 아직 모르겠지만 인코딩된 히든 레이어에서 출력을 뽑았을 때 완벽한 카피가 아닌 근사치라는걸 보면 꽤나 타당한 생각인것같다.

2. 오토인코더의 학습

오토인코더의 학습은 다음과 같이 이루어진다.

  1. 인풋과 히든 레이어의 가중치를 계산해 시그모이드 함수를 통과시킨다.
  2. 1의 결과물과 출력 레이어의 가중치를 계산해 시그모이드 함수를 통과시킨다.
  3. 2의 값을 이용해 MSE(Mean Squarded Error)를 계산한다.
  4. 3의 결과로 나온 loss 값을 SGD로 최적화시키고
  5. 오류역전파를 사용하여 가중치를 갱신한다.

3. 오토인코더의 파생형

오토인코더는 다음과 같은 여러개의 파생형을 가지고 있다.

  • Stacked Auto Encoder
    오토인코더를 다층으로 만든 모델
  • Sparese Auto Encoder
    히든 레이어 부분이 출력과 입력보다 큰 모델
  • Denoising Auto Encoder
    노이즈가 있는 데이터가 주어졌을 때, 노이즈를 제거하여 원래의 데이터를 재현하는 모델.

이 모델들은 앞으로 추가적으로 공부하여 포스팅할 것이다.