No Limitation
[Paper Review] Deep Anomaly Detection with Deviation Network + Anomaly Detection의 개요 (1) 본문
[Paper Review] Deep Anomaly Detection with Deviation Network + Anomaly Detection의 개요 (1)
yesungcho 2022. 4. 11. 23:36( 본 논문은 카이스트 산업 및 시스템 공학과 박찬영 교수님 지식서비스를 위한 기계학습 수업에 참고가 되는 포스팅입니다, Reviewer: 조예성 )
본 포스팅의 양이 많아 총 2개의 포스팅으로 나누어 정리하려고 합니다.
우선 본 포스팅은 위 논문을 포스팅하는 동시에, Anomaly Detection 개념에 대해 생소하신 분들을 위해 기초 개념적인 것부터 정리하고자 합니다.
본 논문에 대한 리뷰 영상도 제 개인 유튜브 채널에 올려놓았습니다.
글보다 영상이 더 편하신 분은 영상을 참고하시면 좋을 거 같습니다.
리뷰 영상 :
https://www.youtube.com/watch?v=1lEtPCn-lcY
본 리뷰는 크게 다음 5가지 주제를 바탕으로 정리를 하고자 합니다.
1. Anomaly Detection이 어떤 개념이고 무슨 task를 수행하고자 하는 건지
2. 본 논문의 방법이 제안된 배경
3. 방법론
4. 실험 결과
5. 코드 리뷰
이번 포스팅에서는 Anomaly Detection의 개요 부분을 말씀드리고자 합니다.
( Anomaly Detection 개념에 대한 부분은 추후에 Survey 논문 리뷰를 블로그와 유튜브에 정리해 올리도록 하겠습니다. )
그럼 차근차근 살펴보도록 하겠습니다.
자 그렇다면 Anomaly Detection (AD)는 무엇을 의미하는 걸까요? Survey 논문에 나와있는 문구를 인용하면 다음과 같습니다.
Anomaly Detection (AD) is the task of detecting samples and events which rarely appear or even do not exist in the available training data.
즉, 말 그대로 일반적으로 발생하는 event들과는 다른 특이한, 일반적인 특징을 띄고 있지 않은 샘플을 탐지하는 것을 의미합니다. 그렇다면 이런 궁금증이 들겁니다.
일반적인 Classification과 다른 것이 뭐지?
위 영어 문장에 잘 보면 'rarely appear or even do not exist in training data'라는 문구가 포인트입니다.
즉, 거의 학습 데이터에 존재하지 않거나 심지어 아예 존재하지 않는 경우의 이상치 데이터를 탐지하는 것을 의미합니다. 일반적으로 Supervised 기반 분류 모형은 분류할 클래스에 대한 충분한 데이터가 있는 것을 바탕으로 합니다. 하지만 Anomaly Detection은 anomaly로 분류되는 데이터가 거의 없기 때문에, 또 anomaly 데이터 간의 distribution이 유사하는 것을 보장할 수 없기 때문에 일반적인 classification과 차이점이 발생하게 됩니다.
아래 그림을 보겠습니다.
본 그림을 보면, 일반적으로 파란색 원 안에 들어가 있는 데이터들이 normal data라고 할 수 있습니다. 우리는 이 데이터들을 F라고 하는 feature representation을 통해 F1, F2를 사용하여 다음과 같은 plot을 그릴 수 있습니다. 녹색 점들의 경우 일반적으로 오토바이의 이미지들을 표현한 데이터로 볼 수 있습니다. 하지만 빨간색 자동차의 경우 우리가 일반적으로 관찰한 오토바이와는 조금 다른 특징을 가지게 됩니다. 이 경우 F를 통해 representation을 하게 되면 일반적으로 다른 위치에 데이터가 존재하게 되고 그 '격차'가 바로 이 데이터를 anomaly라고 측정하게 되는 기준이 됩니다. 이러한 방법을 통해 anomaly detection은 일반적으로 수행되게 됩니다.
자, 그렇다면 Anomaly Detection을 수행하기 위해서는 다양한 데이터 셋에서 수행이 될 수 있는데 이에 따라 여러가지 케이스로 분류할 수 있습니다. 크게는 'Supervised', 'Unsupervised' 그리고 'Semi-supervised' 케이스로 나뉘게 됩니다.
그리고 용이한 표현을 위해 각각의 기호를 다음과 같이 정의해보겠습니다.
U : Unlabeled data
N : Normal labeled data
A : Abnormal labeled data
U는 label이 되지 않은 데이터를 의미하고, N과 A는 각각 label이 된 정상 데이터와 비정상 데이터를 의미합니다.
이러한 상황에서 위 3가지 케이스는 다음과 같이 정리할 수 있습니다.
[1] Supervised Lerning ( N + A )
Supervised Learning의 경우 데이터가 충분히 많을 경우 세가지 케이스 중 가장 강력한 정확도를 가지게 됩니다. 데이터가 있는 상태에서의 예측은 데이터가 없는 경우보다 예측이 정확한 건 make sense하죠. 하지만, 문제는 데이터가 거의 없다는 것이 문제입니다. 실제 Real world에서는 labeled 된 데이터가 많지도 않을 뿐더러 labeled 데이터를 가지고 있다고 해도, abnormal 데이터의 경우는 극히 드문 경우가 많기 때문입니다. 이러한 경우 supervised learning은 데이터 불균형 문제를 맞이하게 됩니다. 또한 generalized된 판단을 수행할 수 없게 됩니다. 사실 anomaly 데이터는 우리가 관측한 케이스 외에도 다양한 형태로 존재할 수 있는데 모형은 우리가 관측한 anomaly 데이터의 분포를 바탕으로 판단을 수행하기 때문에 학습할 때 보지 않은 unseen anomaly에 대해서는 대응할 수 있는 힘이 부족하게 됩니다. 따라서 일반적으로 AD에서는 supervised learning을 사용하는 데에는 한계점이 존재하게 됩니다.
[2] Unsupervised Learning ( U )
그래서 일반적으로 labeled이 정의되지 않는 데이터를 바탕으로 학습을 수행합니다.
왜냐하면 이런 경우가 실제 real world 상황에 조금 더 유사하기 때문입니다.
실제 labeled 데이터를 얻기 어려울 뿐더러 abnormal 데이터가 거의 발생하지 않는다는 것을 바탕으로 해서 가장 real world와 유사한 것이 바로 unsupervised learning이라고 할 수 있습니다.
그리고 위 Supervised Learning에서 한계점인 generalizability에 대해서도 보장이 되기 때문에 여러 단점을 보완한 방법이라고 할 수 있습니다.
[3] Semi-supervised Learning ( N + A + U, N + A << U )
하지만, Unsupervised learning은 아무런 단점이 없을까요? Unsupervised의 가장 큰 문제점은 바로 anomaly data에 대한 'pre-knowledge'가 부족한 점에 있습니다. 가뜩이나 anomaly data가 적은데, 그 특징에 대한 아무런 정보가 없게 되면 모형이 온전히 anomaly의 특징을 잡는 것도 어려운 부분이 있겠죠. 그러면 labeled된 데이터를 사용하기에는 불균형 문제가 있고, 다 비지도 학습을 사용하기에는 사전 지식이 부족한 문제가 있어 둘 다 활용하자는 취지에서 나온 것이 바로 semi-supervisd learning입니다.
이 방법의 경우 limited number of labeled data를 사전 지식으로 활용해 보다 학습을 강화하겠다는 취지에서 비롯됩니다.
예를 들어보겠습니다.
다음 그림은 unsupervised-learning의 한계점을 극복하는 차원에서 semi-supervised learning을 사용하는 것의 이점을 보여주는 그림입니다. 본 그림은 'DeepSAD' 기법으로 유명한 Ruff의 논문에서 참고하였으며 해당 논문은 기존 저자가 제안한 'DeepSVDD'의 방법을 조금 더 개선한 'DeepSAD'을 제안하였는데, 이 때가 바로 Unsupervised learning에서 Semi-supervised learning으로 방법을 더 개선한 것입니다. 조금 더 구체적으로 봐볼까요?
DeepSVDD의 loss function은 다음과 같이 구성됩니다.
저기서 c는 쉽게 말하면 사전 학습을 통해 normal 데이터 학습을 통해 가장 normal을 잘 나타내는 feature representation으로 보면 될 것 같습니다. 여기서 주어진 input xi를 feature representation을 시키는 파이 함수를 통해 계산된 값이 c로부터 거리가 가까울 수록 normal, 멀수록 abnormal에 가깝게 판단을 하게 됩니다. 그 정도를 가지고 loss를 최소화하는 함수입니다. 이 경우 어떠한 것이 normal인지, abnormal인지를 label이 되어 있지 않는 경우이기에 다음과 같이 loss function이 디자인됩니다.
반면 이를 개선한 DeepSAD은 loss function이 다음과 같이 구성됩니다.
즉 가운데 term이 추가된 것을 확인할 수 있는데요. 초반 n개까지는 동일한 unlabeled 데이터에 대한 loss지만 가운데 m개의 경우 지수에 yi가 들어가있는 것을 확인할 수 있습니다. 이 yi는 normal의 경우 1, abnormal의 경우 -1이 되는데, normal인 경우는 식의 구조가 동일하지만 abnormal인 경우 -1이 되 해당 수식이 역수가 됩니다. 즉, 전체 loss를 최소화하려면 분모에 있는 수식은 값이 커져야 합니다. 즉, 격차가 커져야죠. 이러한 방법으로 loss function을 학습하게 되는 것입니다. 이게 Unsupervised learning을 개선한 semi-supervised learning입니다.
하지만 semi-supervised 학습을 사용한다고 하더라도 절대적으로 데이터 불균형 문제에 온전히 자유롭지는 못합니다. 그리고 또한 unlabeled 데이터에서 대부분의 normal을 가정한다 하더라도 데이터 내에 abnormal 데이터가 들어가 있을 지도 ( 이를 오염됬다는 의미로 contaminated 되었다고도 표현합니다 ) 모를 일입니다. 어쨌든 semi-supervised 방법도 한계점은 존재하게 됩니다. 그래서 이러한 한계점들을 극복하기 위해 많은 연구들이 나오고 있으며 다음 포스팅에서 다루게될 'DevNet' 논문도 바로 이 semi-supervised 방법에 기초하게 됩니다.
자 그렇다면 여기서 알 수 있듯이, 일반적으로 Anomaly Detection은 Representation Learning 방법을 사용하는 것을 알 수 있습니다. (물론 항상 그런 것은 아닙니다. ) 그래서 간단하게 다음 그림을 통해 정리할 수 있을 것 같습니다.
이러한 Representation Learning을 기반으로 AD를 수행하는 방법은 크게 3가지로 나눌 수 있을 것 같은데요. 처음으로는 AE/GAN 같이 input을 넣어 다시 재구성하여 그 차이가 작으면 normal, 차이가 크면 abnormal로 판단하는 'Reconstruction Error'를 바탕으로 판단하는 방법이 있습니다. 두 번째로는 distance metric을 사용하는 방법인데 앞서 소개드렸던 DeepSVDD나 DeepSAD같은 방법이 그러한 method에 속할 수 있을 것 같습니다. 그리고 그 외의 방법도 시도되고 있는데 GT의 경우 Geometric Transformations를 활용하는 방법으로, normal 데이터에 여러 transformation (혹은 Augmentation, like rotate, size up etc. ) 방법을 주어 이를 self-labeled 한 다음, 이를 구분하는 softmax를 계산하여 알맞게 분류하는 경우 normal 그렇지 않은 경우는 abnormal로 판단하는 방법을 수행합니다. 그리고 다음 포스팅에 다룰 DevNet은 anomaly score를 직접 계산하여 direct로 optimize하는 방법을 수행합니다. 본 논문에서 다루는 DevNet은 기존의 Reconstruction error나 distance metric 방법이 아닌 새로운 방법을 제안하고 있으며 semi-supervisd learning 방법을 제시합니다. 다음 포스팅에서는 DevNet에 대해 구체적으로 다루어 보도록 하겠습니다.