Anomaly Detection Using VAE

2019. 5. 11. 14:46관심있는 주제

일단 neural network 기반으로 하는 것이 아닌 일반적인(?) ML로 Anomaly Detection을 해주는 패키지부터 소개해드리겠습니다. 종류는 엄청나게 많습니다.  https://pyod.readthedocs.io/en/latest/

 

Welcome to PyOD documentation! — pyod 0.7.0 documentation

[AJHuszarPvdH12]JHM Janssens, Ferenc Huszár, EO Postma, and HJ van den Herik. Stochastic outlier selection. Technical Report, Technical report TiCC TR 2012-001, Tilburg University, Tilburg Center for Cognition and Communication, Tilburg, The Netherlands, 2

pyod.readthedocs.io

Neural network가 유행을 하면서 특히 autoencoder 같은 개념이 참 많이 사용되고 있다.

autoencoder는 pca의 좀 더 일반적인 형태라고 간단하게 생각해도 될 것 같다.

1단 layer로 network로 구성하고 선형구조로 만들면, autoenocder가 즉 pca와 같이 선형 차원 축소가 된다고 한다.

이 사람은 autoencoder를 self-supervised 라고 한다고 한다. 생각해보면 실제 target 값은 없으면서 Loss를 를 볼 때는 MSE로 Minimize 하기 때문에 Unsupervised도 아닌 것 같다. 

그리고 이 글에서는 autoencoder를 재밌는 특징이나 추상화를 배울 수 없다고 한다.

내가 알고 있기에는 좋은 feature를 배우는 것으로 알고 있는데... 음 아무튼 그렇다고 한다.

그래서 (1) 시각화를 위한 차원 축소(2)Image에서 denosing 할 때 유용하다고 한다!

이제 Anomalies 에 대해서 이야기해보자.

Outlier를 다음과 같이 이야기할 수도 있다.

  • 기존의 관측치라는 다른 메커니즘으로 생성되었다고 의혹을 일으키게 생긴 것?!
    • 이래서 결국 확률적으로 생각해보면 아주 희귀한 것?!이라 할 수 있다.
    • 그러므로 확률적인 모델링 관점으로 접근을 해야 한다.

latent variable model를 보자

일반적으로 우리가 관측되는 것이 아닌 , 

내부에 숨겨진 것이 있다고 하자.

아주 나쁜 예일 수도 있지만

사람의 키라는 관측치가 있는데,  그것을 만드는 것에는 환경적인 요건도 있지만 유전자라는 눈에 직접적으로 측정할 수 없는 요소가 영향을 주는 것이다.

In statistics, latent variables are variables that are not directly observed but are rather inferred (through a mathematical model) from other variables that are observed (directly measured).

 

여기서 질문이 나올 수 있다고 한다.

  • z라는 쉬운 샘플에서 어떻게 우리가 원하는 샘플로 어떻게 Mapping을 시킬 수 있을까?
  • X를 생성하기 위해서 어떻게 우리의 Z의 적절한 범위를 확실하게 정의할 수 있을까?
    • 즉 Z에서 X를 생성 시 X가 나오는 Z의 범위를 어떻게 알 수 있을까?!

Variational Autoencoder

  • 여기서 수리적인 증명 부분은 요점에 벗어날 수 있으니 패스하겠다. 

  • z를 일단 Normal에서 샘플링한다. 그다음에 z를 Decoder에 태워서 생성시키는 Network와 이 이미지를 잘 축소하기 위한 Q network 가 있다고 하자.

목적함수는 다음과 같다. 두 가지 텀이 있다고 하는데, 일단 autoencoder처럼 reconstruction loss가 있다.

그리고 z라는 우리의  원하는 샘플 분포와 Q network를 통해서 approximate사후 분포 간의 거리를 최소화하는 KL Divergence가 있다.

이러한 VAE가 있는데 이것을 어떻게 Anomaly Detection에 사용할 수 있을까?!

  1. vae는 특정 값이 아니라 분포를 모델링한다.
  2. anomalies란 결국 다른 처리로 인해 기존 분포와는 다른 것에서 나오는 존재이다.
  3. 그러므로 high reconstruction error / low reconstruction으로 이러한 것을 잡아낼 수 있다는 것이다!

결과물로 살펴보자

그러면 여기서 Anomalies는 뭘까?

  1. cut - off를 지정한다. 
  2. 다른 통계적 알고리즘과 머신러닝 알고리즘을 함께 사용한다.

이미지 같은 경우에는 모든 픽셀 값이 결국 하나를 나타내는 super humogeneous data! 최고로 균질한 데이터라 한다.

그리고 실제로 이것을 잘 분류할 때도 쉽게 분류할 수 있는 정도의 쉬운 Task라고 한다!

그렇다면 실제 데이터는 다른 스케일과 다른 타입들이 있는 데이터는 어떨까?

  • one-hot을 해야 한다. 하지만 sparse matrix 피하기 위해서 다 사용하지는 않는다고 한다!
  • 양과 총가치는 모두 유지되어야 합니다 (단가로 환원되지 않습니다!). 왜냐하면 각각은 유익한 정보 일 수 있기 때문입니다(번역)
  • 그러나 우리는 적절한 loss function을 선택하기 위해서는 유사한 scale로 조정을 해야 한다.
    • 그래서 결국 quantity와 total 값은 normalize 처 리르 해준다.

  • 내가 몰랐던 것은 Decoder 부분에 linear function을 씌운다는 것이 인상적이다!
    • 으음 만약 이게 된다면 내가 지금까지 GAN에서 할 때도 Scaling을 (0~1)로 해주고 sigmoid 나 gaussian activation을 했는데,  그럴 필요가 없는 것인가도 생각이 든다!

  • 알듯이 unlabedl data를 어떻게 처리할지에 대한 명백한 근거가 없다!
  • 결정 :  알 수 없는 집합에 대해서 train을 시킨다! / testing 해서 labeled data를 사용하기로 결정했다!

  • train set은 MSE가 3.5
  • 사기 친 사람은 3.57 / 사기가 아닌 사람은 3.49 정도가 나온다.

  • non-attack 데이터로 학습을 시켜야 한다.

  • 여기서 배운 점은 굳이 Binary일 필요도 없이 된다는 것이고 다중 클래스 같은 경우에도 먼가 보통가는 다른 형태로 학습이 된다는 것이다.
  • 물론 이것은 라벨을 알 때니까 보이는 것 같기도 하다.

결론

  • 아직 결론을 내기는 좀 그런가 보다.
  • 전처리를 아주 많이 해야 하는 것 같다.
  • 그래도 VAE가 개념적으로는 Latent 확률 쪽을 학습하는 것이기 때문에 아웃라이어 디텍션에 적합한 모형일 수도 있다는 것이다.
  • 여러 가지 실험을 할 필요가 있다고 한다. 내가 전에 포스팅한 것 중에 있는 Categorical Embedding 같은!!

여기까지가 VAE을 활용하여 Outlier Detection 하는 글에 대해서 내 생각과 함께 참고를 하였다.

VAE는 추천 시스템에 쓰이는 Collaboraive filtering 에도 적용을 할 수 있고, 생성 모델에서도 여전히 많이 쓰이는 좋은 알고리즘인 것 같다.

 

추천 자료

Refer : https://rstudio-pubs-static.s3.amazonaws.com/308801_ca2c3b7a649b4fd1838402ac0cb921e0.html#/11 

728x90