"정상 데이터를 분할한다"는 표현은 데이터셋을 물리적으로 쪼갠다는 의미가 아니라, "정상 데이터의 구성 요소(신호, 통계량, 특징)를 분해한 뒤, 이를 다른 정상 데이터와 교차 결합하여 '가짜 이상치(Pseudo-Anomalies)'를 생성한다"는 의미입니다.
이상 소음 탐지(ASD)의 고질적인 문제는 "학습할 때 이상 소음 데이터가 없다"는 것입니다. 모델에게 "이게 이상 소음이야"라고 알려줄 예시가 없으니, 모델은 단순히 "정상 소리는 이래"라고만 배웁니다.
하지만 연구자들은 생각했습니다. "정상 데이터(A)와 정상 데이터(B)를 교묘하게 섞어서, 기존에는 존재하지 않던 '가짜 이상 소리(Pseudo-Anomaly)'를 만들어내면 어떨까? 그럼 모델이 이걸 맞히려고 더 열심히 공부하겠지?"
이것이 바로 자기지도학습(SSL)을 이용한 가상 데이터 생성 전략입니다.
# x1과 x2를 비율 l과 (1-l)로 선형 결합
X = X1 * l + X2 * (1 - l)
y = y1 * l_y + y2 * (1 - l_y)
# X1의 구조를 유지하면서, X1_rev(다른 샘플)의 통계량(mean2, std2)을 적용
X_ex = (X1 - mean1) / (std1 + 1e-16) * std2 + mean2
# 확률(dec)에 따라 원래 특징(X1)을 쓸지, 뒤집힌 특징(X1_rev)을 쓸지 결정
dec = tf.cast(tf.random.uniform(...) < self.prob, tf.float32)
out = dec * X1 + (1 - dec) * X1_rev
각 SSL 기법은 layers.py의 서로 다른 클래스에 구현되어 있습니다. 핵심 로직만 간략하게 추출하였습니다.
| 기법 | 대상 | 변형 방식 | 학습 효과 |
|---|---|---|---|
| Mixup | 데이터 값 | 를 섞음 | 데이터 간 연속성 확보 |
| StatEx | 데이터 통계 | 의 모양 + 의 | 통계적 질감(Texture) 학습 |
| FeatEx | 추출된 특징 | Branch A의 특징 + Branch B의 특징 | 서로 다른 관점 간 일관성 학습 |
논문에서는 이 세 가지를 동시에 사용합니다. 데이터 하나를 넣었을 때 일어나는 일은 다음과 같습니다.
이 세 가지가 결합되면, 하나의 정상 데이터로부터 "정상이 아닌 상태"를 나타내는 수많은 변형(Variations)이 만들어집니다.
논문에서 "클래스 수가 9배로 늘어난다"고 말한 이유는, 각 단계(Mixup, StatEx, FeatEx)마다 데이터가 3가지 상태(원본, 섞임, 변형)로 분화되기 때문입니다 (). 이를 통해 모델은 매우 복잡하고 정교한 '가짜 이상치' 세계에서 학습하며, 결과적으로 실제 환경에서 아주 미세한 이상 소음도 기가 막히게 찾아내는 능력을 갖추게 됩니다.