2019. 5. 11. 14:46ㆍ관심있는 주제
일단 neural network 기반으로 하는 것이 아닌 일반적인(?) ML로 Anomaly Detection을 해주는 패키지부터 소개해드리겠습니다. 종류는 엄청나게 많습니다. https://pyod.readthedocs.io/en/latest/
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에 사용할 수 있을까?!
- vae는 특정 값이 아니라 분포를 모델링한다.
- anomalies란 결국 다른 처리로 인해 기존 분포와는 다른 것에서 나오는 존재이다.
- 그러므로 high reconstruction error / low reconstruction으로 이러한 것을 잡아낼 수 있다는 것이다!
결과물로 살펴보자
그러면 여기서 Anomalies는 뭘까?
- cut - off를 지정한다.
- 다른 통계적 알고리즘과 머신러닝 알고리즘을 함께 사용한다.
이미지 같은 경우에는 모든 픽셀 값이 결국 하나를 나타내는 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
'관심있는 주제' 카테고리의 다른 글
UMAP이 T-SNE와 다른점에 대한 글 리뷰 (3) | 2019.10.05 |
---|---|
Scipy에서 제공하는 분포간 거리 함수(Statistical Distance)와 차이점. (2) | 2019.06.08 |
Uncertainty Autoencoders: Learning Compressed Representations via Variational Information Maximization - 리뷰 (0) | 2019.06.05 |
LSTM AutoEncoder를 사용해서 희귀케이스 잡아내기 (5) | 2019.05.23 |
머신러닝 모델 학습시키기전에 마인드부터 어떻게 해야할지? (0) | 2019.05.18 |