본문 바로가기
Deep Learning

[DL] Anomaly Detection

by holy_jjjae 2023. 10. 7.

Anomaly Dectection 이란?

데이터에서 정상 범위를 벗어난 패턴, 값, 또는 사건을 식별하는 기법이다.
Anomaly Detection 의 목적은 매우 많은 정상 데이터에서 극소수의 비정상 데이터를 구별하는 것이라 말할 수 있다.
 
** 주의할 점은 오류를 탐지하기 위한 알고리즘이 아니라, 전체 데이터 중 매우 작은 비율을 갖는 skewed class를 검출하는 알고리즘이다. 
 

Outlier와 Anomaly 

 Outlier는 주로 통계학에서 사용하는 용어로, 다른 관측치들과는 크게 다른 값을 가지는 관측치를 지칭한다. Outlier는 데이터 분석을 진행할 때 관심을 가지고 봐야하며, 때로는 오류나 노이즈의 의미일 수 있다.

 반면, Anomaly는 데이터나 패턴에서 예상치 못한 행동이나 사건을 지칭한다. Anomaly는 주로 네트워크 보안, 금융 거래의 사기 탐지 등에서 사용되는 용어이다.

 
 정리하자면, 둘 다 평범하지 않은 것을 의미하지만, Outlier는 주로 개별적인 데이터 포인트의 관점에서 사용되며, Anomaly는 보다 넓은 범위나 패턴에서의 예외 상황을 의미한다.
 
 사실 Anomaly Detection 은 단순히 이진 분류 문제로 생각할 수 있다. 이진 분류에 대한 방법들은 잘 알려져 있으며, 딥러닝을 통해서 쉽게 구현이 가능하다. 하지만 기존의 전형적인 분류 알고리즘들은 다음과 같은 이유로 적용될 수 없다.
 

1. 불균형한 데이터

 실제 우리는 당연히 정상 데이터를 비정상 데이터에 비해서 훨씬 쉽게 얻을 수 있다. 바꿔 말하면 비정상 데이터는 정상 데이터에 비해 매우 적게 수집될 가능성 높다. 이렇게 수집된 불균형한 데이터셋을 통해 머신러닝을 수행하게 된다면, 모델은 각 샘플들에 대해 동등하게 학습하였을 때, 비정상 데이터에 대한 특징을 잘 배우지 못하게 된다. 
 예를 들어, 99%의 정상 데이터들로 구성되어 있는 데이터셋이 있을 때 시스템이 단순히 정상이라고 추측한다면 평균적으로 99점을 받게 될 것이다. 따라서 이와 같이 불균형 데이터셋에 대해서 판별하는 모델을 만들고자 한다면, Anomaly Dectection 알고리즘을 활용해야 한다.
 
아니 그러면 비정상을 99배 더 학습하도록 되는거 아닌가?
 

2. Open-World Classification

 비정상 데이터의 특징을 생각해보면 정상 데이터에 비해서 다양한 패턴을 가질 것이다. 하지만 불균형 데이터셋에서도 알 수 있듯이, 우리는 이러한 다양한 특징들을 배우기에는 비정상 데이터의 양이 매우 적은 상태이다. 게다가 비정상 패턴들을 통해 비정상 클래스를 유한하게 정의할 수 있는지 조차 확신할 수 없다. 이러한 문제를 Open-World Classification이라고 한다. 

 위의 그림과 같이 분류 문제라면 단순히 Decision Boundary를 찾는 문제로 귀결되지만, Anomaly Detection에서 비정상 데이터는 정상 영역 이외의 영역에 분포하는 데이터를 가리킨다. 따라서 단순히 주어진 데이터를 통해 경계선을 찾게 된다면, 학습 데이터 내의 비정상 데이터에 대해서만 정상적으로 판별할 수 있는 모델 (일종의 overfitting) 이 되므로 기존의 판별 알고리즘으로는 Anomaly Detection을 구현하기에는 한계가 있다.
 

딥러닝 이전의 Anomaly Detection

 딥러닝 이전에는 One-class SVM, Gaussian Mixture Model과 같은 알고리즘을 사용하여 정상 데이터의 영역을 정의하거나, 정상 데이터의 분포를 추정하는 방법을 통해 Anomaly Detection을 수행하였다. 특히 kernel-SVM의 경우에는 Neural Network를 커널로 사용하여 여전히 사용된다.
 

PCA (주성분 분석)

 Principal Component Analysis (PCA)는 데이터의 분포에 따라 분산을 가장 최대로 하는 축을 찾아낸다. 우리는 보통 Singular Value Decomposition(SVD)을 통해 PCA를 수행할 수 있다. 
PCA는 차원축소라는 점에서 앞으로 나올 Auto-Encoder(AE)와 가장 유사한 아이디어로 동작한다는 점을 기억해보자.

더보기

Singular Value Decomposition(SVD)?

(fig)
우리는 이처럼 선형적으로 차원을 축소할 수 있다. 이때 데이터는 선택된 축들로  Projection된다. 이렇게 낮은 차원의 공간들에 존재하는 데이터들을 다시 원래 높은 차원의 공간으로 복원할 때, 차원 축소 전 원래의 샘플의 위치와 비교하여 거리가 먼 샘플은 비정상이라고 판별하게 된다.
(fig)
이를 수식으로 표현하면 
(수식)
정리하면, 우리는 PCA를 통해 고차원의 공간에서 저차원의 공간으로 매핑하는 함수를 알게 되었다. 이후 다시 복원된 값과 원본 값을 비교하여 차이가 작을수록 정상이다라고 할 수 있다.
 

PCA의 한계

우리는 PCA를 통해 Anomaly Detection 을 수행할 수 있었다. 하지만 많은 경우에 PCA는 훌륭하게 동작하지만, 아래와 같은 경우는 잘 동작하지 않을 수 있다.
( fig)
 
 만약 데이터의 분포가 아래와 같다면, 선형적인 축소 방식으로 인해 PCA를 통해 성공적인 Anomaly Detection을 수행하지 못할 것이다. 따라서 우리는 비선형방식을 사용할 수 있는 딥러닝을 통해 비선형적인 데이터에 대해서 Anomaly Detection을 수행한다.
(fig)

Anomaly Detection에 대한 문제 정의

1. Out-of-Distribution (OOD)

 먼저 컴퓨터 비전 분야에서 활발히 연구되고 있는 주제이다. 예를 들어, MNIST를 대상으로 학습된 예측성능이 매우 좋은 이미지 분류 네트워크가 있다고 가정해보자. 만약 이 네트워크에 얼굴 사진을 넣으면 어떤 예측이 나올까? 아마 얼굴이 동그란 모양이므로 이 네트워크는 우연히 0에 대해서 높은 Softmax 값을 예측했다고 해보자. 그럼 우리는 네트워크가 예측한 이 값을 신뢰해야할까? 
 
 신경망은 학습데이터의 도메인에 대해서만 학습되었기 때문에, 학습데이터 영역 밖의 데이터가 주어지면 어떻게 동작하는지 전혀 알 수없다. 또한, 이러한 경우에 출력된 값은 신뢰할 수 없다. OOD는 이러한 문제를 해결하고자 한다.
 OOD는 보통 학습한 데이터와 다른 데이터셋이 주어졌을 때, 이를 판별해내는 것이다. 보통 OOD알고리즘을 평가하기 위해서는 하나의 데이터셋만을 학습한 신경망에 학습에 참여하지 않은 다른 하나의 데이터셋이 주어지는 형태로 실험이 진행된다. 다시 MNIST데이터로 설명해보면, MNIST를 학습한 신경망에 MNIST와 F-MNIST가 주어진다면 신경망이 이를 구분해 낼 수 있는지 여부가 중요하게 적용된다. 
 
 결과적으로 우리는 이미지 분류기를 통과하기에 앞서 주어진 입력을 OOD모델을 통해 적합한지만 판단할 수 있을 것이다. 
 

2. Semi-supervised Anomaly Detection

 Semi-supervised Anomaly Detection은 정상 데이터만을 가지고 학습한 경우를 말한다. 현재 가지고 있는 데이터가 모두 정상 데이터이지만, 미래의 이상 징후를 탐지하고 싶은 경우에 적절하다. 정상 데이터의 특징만을 학습해서 비정상 데이터가 테스트로 입력되었을 때, 정상 특징과 부합하지 않아 이상 징후를 탐지하는 개념이다. 즉, 정상인지 비정상인지 판별할 수 있는지 여부가 가장 중요한 평가 요소이다.
 
 OOD와 유사한 형태로 진행되는 것 같지만,  Semi-supervised Anomaly Detection은 보통 동일한 데이터셋 또는 연관있는 데이터셋내에서 이루어진다는 점이다.
 

2-1. Unimodal normalirty case

 정상의 패턴이 하나이고, 비정상 패턴이 다양한 형태를 상상해보자. 예를 들어, MNIST의 경우에 임의의 숫자 클래스 하나를 정상 데이터로 가정하고 학습을 진행한다. 이후에 테스트 과정에서 10가지 클래스 모두를 포함하여 모델이 정상 클래스와 비정상 클래스를 잘 구별하는지 테스트할 수 있을 것이다.
 

2-2. Multimodal normality case

 정상의 패턴이 다양한 패턴으로 나타날 경우는 어떻게 할까?
예를 들어, 우리가 자동차 엔진에 대해서 Anomaly Detection을 수행한다고 해보자. 엔진은 4가지 각기 다른 상태인 흡기, 압축, 폭발, 배기로 정의된다. 따라서 우리는 정상 데이터가 단순히 한 가지라고 가정하고 문제에 접근하는 것은 상황에 따라 옳지 않은 방법이 될 수 있다.
 
 예를 들어 MNIST 9개의 클래스를 임의로 정상 데이터로 가정해보자. 그러면 9가지 클래스를 통해 모델 학습을 진행하고 나머지 비정상으로 간주된 1개의 클래스를 합쳐 전체 10개의 클래스를 통해 정상 클래스와 비정상 클래스를 분류해내는지 평가한다. 앞의 Unimodal normality case에 비해 어려운 과정이고 모델도 더 낮은 성능을 보이게 된다.
 
 비록 우리는 모델을 학습할 때에는 비정상 데이터를 보여주지 않지만 정상 데이터만 넣어주어야 한다는 점에서 수집된 데이터들을 정상 데이터와 비정상 데이터로 Labeling 해야 하며, 이와 같은 이유 때문에 Semi-supervised 방식에 속하는 것이다.
 

3. Unsupervised Anomaly Detection

 Unsupervised Anomaly Detection은 학습 데이터에 정상, 비정상 데이터의 Labeling이 안 된 경우를 말한다. 즉, 데이터에 대한 가정이 없을 경우로서 모든 데이터를 활용하여 학습하지만, 모델링 후 정상/비정상에 대한 구분이 필요할 수 있다. 적합이 잘 된다면 정상/비정상 데이터의 모델링 후 분포가 이질적으로 나타날 수 있다.
 

Deep Anomaly Detection

 위에서 정의한 Anomaly Detection을 딥러닝을 이용하는 알고리즘 4가지를 알아보자.
 

1. Deep-kernel-based Anomaly Detection

 Kernel-SVM과 같이 기존의 커널 기반 머신러닝 알고리즘에 Deep Neural Network를 활용한 커널을 사용하는 방식이다.
 

2. Auto-Encoder based Anomaly Detection

 Auto-Encoder(AE)는 PCA 처럼 차원축소를 통해 피쳐를 추출해내지만 그것을 선형적으로 수행한다는 점에서 큰 차이가 있다. AE는 쉽게 말해 압축과 해제를 하며 피쳐를 추출해낸다. 예를 들어, MP3의 경우에는 일반적인 사람이 듣기에는 실제 음원과 큰 차이가 없지만 용량에서는 큰 차이를 보인다. 이는 사람이 잘 듣지 못하는 주파수 영역의 데이터는 날려버리고, 실제로 중요한 주파수 영역만 압축했기 때문이다. 마찬가지로 AE도 주어진 고차원 공간상의 샘플을 bottle-neck 구간의 처원 공간으로 매핑하는 방법을 학습하는 과정에서 복원에 필요없는 정보부터 버리게 될 것이다.
 
 이처럼 AE는 encoding과 decoding 과정을 통해 스스로 피쳐를 추출하는 방법을 배운다. 하지만 MNIST에 대한 복원 결과를 보면 알 수 있듯이, 보통은 흐리게 복원되는 특징이 있다. 이는 MSE 손실 함수를 사용했기 때문이라고 볼 수 있다. MSE 손실 함수는 불확실한 부분에 대해서는 평균값으로 예측하도록 동작하기 때문이다. 추가로 우리는 단순한 AE뿐만 아니라 VAE, AAE 등을 활용하여 Anomaly Detection을 수행할 수 있다. 
 

3. Generative Adversarial Network based Anomaly Detection

 복원 오차에 기반한 Anomaly Detection 방식에서  MSE 손실함수의 사용으로 인한 복원 성능 하락은 Anomaly Detection  성능에 영향을 끼칠 수 있다. 따라서 AE 기반 방식의 단점을 보완하기 위해 제안된 방법은 GAN을 활용하여 Anomaly Detection을 수행하는 것이다. 하지만 GAN은 generator와 discriminator 사이의 적대적인 학습을 통해 모델이 학습되기 대문에 AE와 달리 직접적으로 차원 축소를 수행하는 모듈이 존재하지 않는다. 사실 GAN은 생성 자체를 위한 모델이고, 차원 축소를 위한 모델은 아니기 때문이다. 하지만 Anomaly Detection은 테스트 과정에서 샘플이 주어지면 이를 차원 축소 이후에 복원하는 과정을 거쳐야 하기 때문에, 차원 축소를 위한 모듈이 필요하다.
 
 따라서 기존의 GAN 기반의 Anomaly Detection방법들은 이를 해결하기 위해 여러 방법들을 제시한다. 예를 들어, AnoGAN는 generator로부터 생성된 x_hat과 x의 차이를 최소화하는 latent variable z를 찾도록 backpropagation을 수행하는 방법을 제시했다. 
 
 MSE의 단점을 보완하고자 제안된 GAN의 경우에는 CNN에서만 동작하고,  generator와 discriminator 의 균형있는 학습도 굉장히 큰 장애물로 작용한다. 또한, reconstruction error가 낮다고 무조건 모델의 성능이 좋은 것도 아님을 실험적으로 알 수 있었다. 
 

4. Self-supervised Learning based Anomaly Detection

 가장 최근에 제안된 방법으로, AE도 주어진 입력을 똑같이 복원한다는 점에서 여기에 속할 수 있다. 하지만 좀 더 다양한 목적을 수행하도록 학습시킨다는 점에서 다르다.
 
 예를 들어 Deep Anomaly Detection Using Geometric Transformations에서는 주어진 이미지에 대해서 미리 정의한 변형을 준 이후에, 네트워크가 변형의 종류를 맞추도록 학습시킨다. 그러면 테스트 과정에서 비정상 데이터에 변형이 추가되었을 대, 네트워크는 어떤 변형이 추가되었는지 잘 맞추지 못할 것이다. 
 
 
 
 

'Deep Learning' 카테고리의 다른 글

[DL] Ground-Truth 개념  (0) 2023.11.07