오토인코더
오토인코더(Autoencoder)는 아래의 그림과 같이 단순히 입력을 출력으로 복사하는 신경망이다.
간단한 신경망처럼 보이지만 네트워크에 여러가지 방법으로 제약을 가해 복잡하게 만든다.
예를 들면,
- 아래 그림처럼 hidden layer의 뉴런 수를 input layer(입력층) 보다 작게해서 데이터를 압축(차원을 축소)한다거나,
- 입력 데이터에 노이즈(noise)를 추가한 후 원본 입력을 복원할 수 있도록 네트워크를 학습시키는 등 다양한 오토인코더가 있다.
➡ 제약들은 오토인코더가 단순히 입력을 바로 출력으로 복사하지 못하도록 방지
➡ 데이터를 효율적으로 표현(representation)하는 방법을 학습하도록 제어
[목표]
고차원의 데이터를 취한 후 저차원 공간에서 표현할 수 있도록 하는 것
[전략]
1) 자체의 미러 이미지이고 중앙의 뉴런 수가 적은 모델을 만듦.
2) 그런 다음에는 입력을 취하여 이를 트레이닝 시에 출력으로도 사용
➡ 입력했을 것과 동일한 평탄화된 이미지를 출력하도록 이 모델을 트레이닝
대칭 구성의 이유
입력한 것과 동일한 결과를 가져오게 된다면 굳이 왜 이 복잡한 과정을 거쳐야 할까?
이를 알아보기위해 먼저 모델을 트레이닝 한 후 이 모델을 잘라보자
자 이제 잘랐으니 인코더와 디코더를 확인 가능하다.
이는 몇 가지 경우에 유용하게 사용가능하다.
- 모델이 정확하면 단지 몇 개의 숫자로 대량의 데이터를 저장 가능
- 원시 데이터 형식이 필요한 경우 원본 데이터를 복원 가능
- 이상 탐지에 사용 가능
- 이는 보안, 결함 탐지 및 의학에서 유용.
- 대량의 데이터에 대해 정확한 오토인코더를 트레이닝하지만 출력이 입력과 상당히 다른 몇몇 데이터포인트가 있는 경우에는 우리가 더 관심을 기울여야 하는 이상이 있음을 고려할 수도 있음.
[구성]
오토인코더는 위의 그림에서 볼 수 있듯이 항상 인코더(encoder)와 디코더(decoder), 두 부분으로 구성되어 있다.
- 인코더(encoder): 입력을 내부 표현으로 변환한다.즉 입력을 컴퓨터가 알아들을 수 있데 변환한다는 것이다.
- 디코더(decoder) : 생성 네트워크(generative nework)라고도 하며, 컴퓨터가 알아 들을 수 있게 변경한 것을 다시 사람이 알아들을 수 있게 변경해주는 역할을 한다
오토인코더는 위의 그림에서 처럼, 입력과 출력층의 뉴런 수가 동일하다는 것만 제외하면 일반적인 MLP(Multi-Layer Perceptron)와 동일한 구조이다.
오토인코더는 입력을 재구성하기 때문에 출력을 재구성(reconstruction) 이라고도 함
[손실함수]
입력과 재구성(출력)의 차이를 가지고 계산한다.
이상 탐지
오토 인코더를 통해 이상탐지를 사용 가능
➡ 보안, 결함 탐지 및 의학에서 유용
[과정]
1) 입력 데이터가 인코더를 거쳐가며 저차원으로 압축된다.
2) 압축된 샘플을 디코더에 통과시켜 원래의 차원으로 복원
3) 입력값과 복원값(output)의 오차인 복원오차를 구한다
4) 복원오차와 정해둔 임계값을 고려하여 오차율을 판단한다.