SVDD는 Support Vector Data Description의 약자로, 데이터의 주요 패턴을 파악하고 정상적인 데이터 분포를 정의하여, 새로운 데이터가 이 정상 데이터 범위 안에 속하는지를 평가하는 이상탐지 모델을 말합니다.
주로 정상 데이터만으로 학습 후 새로운 데이터가 정상 범위를 벗어나면 이상으로 간주하는 모델로 결함 감지, 품질 관리 등 다양한 분야에서 이상탐지 모델로서 사용할 수 있습니다.
1. SVDD의 주요 개념과 원리
- SVDD는 주로 One-Class SVM의 아이디어에서 파생되었습니다.
- 이는 비지도 학습 방식 중 하나로, 정상 데이터의 중심에 밀접한 구(sphere)를 형성하여 대부분의 정상 데이터를 포함하도록 합니다. 이때 새로운 데이터가 이 sphere 밖에 위치할 경우 이상치로 분류하는 것입니다.
- SVDD에서 구의 중심과 반지름 아래와 같은 수식을 통해서 정의됩니다.
* 정상 데이터 xi가 주어졌을때 SVDD의 목표는 모든 데이터 xi를 포함하는 최소 반지름 R과 중심 a를 찾는 것입니다.
* 이때의 제약 조건은 아래와 같습니다. 각 데이터가 반지름 R 안에 속하도록 해야하는 제약조건을 말합니다.
- 라그랑주 승수를 활용한 최적화
* 이 문제는 라그랑주 승수 alpha i 와 r i를 사용해 다음과 같이 이차 계획법으로 최적화 할 수 있습니다.
* 라그랑주 함수는 아래와 같습니다.
* 위 라그랑주 함수를 최소화하고, 각 데이터 포인트가 구에 포함되도록 제약조건을 만족시키는데 이는 아래와 같이 최적화를 통해 다음 듀얼 형태의 문제를 해결하면 됩니다.
- 이상탐지 단계는 아래와 같이 이루어집니다.
1) 학습 단계에서는 정상 데이터를 통해 SVDD 모델을 학습시키고, 학습이 완료되면 중심과 반지름이 결정되어 정상 데이터의 분포를 설명하는 구가 정의됩니다.
2) Detection 단계에서는 새로운 데이터가 주어지고 해당 데이터가 구의 바깥에 있는지 아닌지를 R과 비교해서 판단해 이상치인지 아닌지를 확인하게 됩니다.
2. SVDD의 장점과 한계
- 장점
1) 비지도 학습 : 레이블이 없는 데이터로도 이상 탐지가 가능한 비지도학습이므로 데이터를 구하고 레이블링하는 Cost를 줄일 수 있습니다.
2) 비선형 확장성 : 커널 트릭을 사용하게된다면 비선형 데이터도 효과적으로 처리할 수 있습니다.
3) 설명 가능성 : 모델이 정의한 구의 반지름과 중심을 통해 정상 데이터 분포를 설명 할 수 있어 직관적이라 할 수 있습니다.
- 단점
1) 데이터 분포의 민감성 : 데이터의 분포에 따라 모델 성능이 크게 달라질 수 있습니다.
2) 파라미터 조정 문제 : 반지름인 R과 정규화 파라미터인 C 등 하이퍼 파라미터의 조정에 따라 성능이 달라질 수 있기에 이를 조정하는 문제가 수반되게 됩니다.
3) 고차원 데이터에 대한 Computational Cost : 고차원 데이터에서는 계산 비용이 많이 들기 때문에 효율적인 데이터 전처리 똔느 차원 축소 기법이 선행되어야 될 수 도 있습니다.
3. 파이썬 코드로 구현해보는 SVDD
- Scikit learn의 OnceClassSVM을 활용해 SVDD와 유사한 방식으로 정상 데이터의 분포를 학습하고, 새로운 데이터가 정상 분포에 포함되는지 여부를 시각화 해보겠습니다. 아래는 파이썬 코드와 그 실행 결과 입니다.
* 위 그림에서 하얀색 데이터는 정상, 빨간색 데이터는 설정된 R(구의 반지름) 밖에 위치한 데이터들로 비정상을 구분한 것이라 보면 되겠습니다. 하얀색 데이터로 학습해서 데이터들을 포괄할 수 있는 구체의 반지름을 지정했을때 그 외부에 있는 데이터들은 비정상으로 보는 것입니다.
'딥러닝 with Python' 카테고리의 다른 글
[딥러닝 with Python] LSTM을 활용한 회귀 분석 (0) | 2024.12.03 |
---|---|
[딥러닝 with Python] Anomaly Detection(이상탐지) : Deep SVDD (0) | 2024.11.28 |
[딥러닝 with Python] Anomaly Detection 방법론 : Reconstruction Based Approach (0) | 2024.11.25 |
[딥러닝 with Python] Anomaly Detection이란? (이상 탐지) (1) | 2024.11.22 |
[딥러닝 with Python] Self Supervised Learning(SSL) (6) : Sequential Structure 활용 (0) | 2024.11.19 |
댓글