Auto Encoder (Anomaly Detection)

03_6 : Anomaly Detection : Auto-Encoder, 1-SVM, SVDD

Auto encoder 자체는 다양한 분야에 활용되는 모델이다. 이 글에서는 간단하게 어떤식으로 이상치 탐지에 이용되는지 알아볼 것이다.

Auto Encoder (Auto-Associative Neural Network)

이미지를 처리하는 경우 Convolutional Auto Encoder를, 시계열이나 자연어와 같은 데이터를 처리하는 경우 RNN 기반의 Auto Encoder를 사용하는 등 다양한 응용이 있다. 하지만 이 글에서는 가장 기본적인 Feed-forward neural network에서 Auto Encoder를 이해해보자.

Auto Encoder의 목적은 입력으로 주어진 data를 출력으로 최대한 원본에 가깝게 reproduce 하는 것이다. 목적함수인 Loss function을 살펴보자.
  • Loss function
$$l(f(x)) = \frac{1}{2}\sum_k(\hat{x}_k-x_k)^2$$

입력값 $x_k$와 reproduce 한 $\hat{x}_k$의 차이가 loss function이다.
  • Encoder
$$h(x) = g(a(x)) = sigmoid(b+Wx)$$
activation function으로 Sigmoid 함수를 사용한 예시이다. 입력 $x\in R^D$를 $h(x)\in R^d$로 인코딩한다. 이때 반드시 $d<D$이어야 한다. 왜냐하면 인코딩 과정에서 정보의 축약(손실)이 일어나야지만 입력 data의 특징을 잘 보존하는 hidden layer를 학습할 것이고, 이를 통해 이상치 탐지를 할 수 있기 때문이다. (이후에 좀더 자세히 알아보자)
+ hidden layer를 latent vector라고 부르기도 한다.
  • Decode
$$\hat{x} = o(\hat{a}(x)) = sigmoid(c+W^*h(x))$$
Encoding된 $h(x)$를 다시 원래 차원의 data $\hat{x}$로 복원하는 과정이다. 여기서 $W^*$는 $W$행렬의 Conjugate transpose(켤레 전치)를 의미한다. ($W^* = W^\dagger = \overline{W^T}$) 복소수를 사용하지 않는 일반적인 경우 $W^* = W^T$ 이다. 식에서 $W^*$를 사용하는 것은 $W$가 유니터리(unitary) 행렬이라면 $W^{-1} = W^*$임을 이용한 것이다.

Normal data로 학습된 Auto Encoder는 normal data가 주어졌을 때 loss값이 작게 잘 복원할 것이다. 하지만 abnormal data가 주어진다면 이 데이터로는 학습하지 않았음으로 loss값이 크게 복원될 것이다. 결론적으로 위 loss function을 Anomaly score로 사용하여 Anomaly를 판단한다.
위 그림에서 bottleneck(hidden) layer에 해당하는 $h(x)$의 dimension이 반드시 input의 dimension보다 작아야 하는 이유를 다시 살펴보자. 만약 input layer의 차원 $D$와 bottleneck(hidden) layer의 차원 $d$가 같다면, 인코딩과 디코딩 과정에서 정보의 손실 없이 그대로 값을 복사하도록 학습될 것이다. 이렇게 된다면 Anomaly data가 주어졌을 때, 그대로 손실 없이 reconstruction 하게 될 것이다. 이렇게 되면 원하던 Anomaly detection을 수행할 수 없다.


※ 이 글은 고려대학교 산업경영공학과 강필성 교수님의 IME654 강의를 정리하고, 공부한 내용을 추가하여 작성되었습니다.

댓글

이 블로그의 인기 게시물

One-Class SVM & SVDD

Support Vector Regression (SVR)

Self-Training & Co-Training