여기서 y~j∈{+1,−1}: 라벨 있는 j번째 샘플이 정상(+1)인지 이상치(−1)인지 나타내는 값.
① 비라벨(unlabeled) 항
Deep SVDD와 동일한 형태로, n개의 라벨 없는 학습 샘플을 중심 c 쪽으로 모으는 역할을 합니다. 라벨 있는 데이터가 없다면(m=0) 이 목적함수는 그대로 Deep SVDD로 환원됩니다.
② 라벨(labeled) 항 — Deep SAD의 핵심
여기서 지수 y~j가 트릭입니다.
라벨 있는 정상 샘플 (y~j=+1): (∥ϕ(x~j)−c∥2)+1=∥ϕ(x~j)−c∥2 → 그냥 제곱거리 → 이 값을 작게 만들도록 학습 → 정상 샘플을 중심 쪽으로 끌어당김 (①과 같은 방향)
라벨 있는 이상치 샘플 (y~j=−1): (∥ϕ(x~j)−c∥2)−1=∥ϕ(x~j)−c∥21 → 거리의 역수(inverse) → 이 값을 작게 만들려면 분모인 거리 ∥ϕ(x~j)−c∥가 커져야 함 → 이상치를 중심에서 최대한 멀리 밀어냄
즉 지수 하나로 "정상은 끌어당기고 이상치는 밀어낸다"는 상반된 두 가지 목표를 하나의 수식으로 통일한 것이 이 논문의 독창적인 부분입니다. (실제 구현에서는 분모가 0이 되는 걸 막기 위해 아주 작은 값 ϵ≈10−6을 더합니다.)
η>0은 "라벨 있는 데이터에 얼마나 가중치를 둘지" 조절하는 하이퍼파라미터입니다. η>1이면 라벨 데이터를, η<1이면 비라벨 데이터를 더 신뢰하도록 학습에 반영합니다. 논문은 실험적으로 η=1(균등 가중치)만으로도 충분히 좋은 성능 향상을 얻었다고 보고합니다.
③ 정규화 항
Deep SVDD와 동일한 L2 weight decay.
왜 하필 "역제곱거리"인가 (설계 근거)
논문은 다른 손실 함수 후보들(negative squared norm, Hampel 같은 robust loss, hinge loss)도 실험했지만 모두 문제가 있었다고 설명합니다.
Negative squared norm(그냥 부호만 반대로 한 거리): 아래로 무한히 발산해서 최적화 자체가 성립하지 않음(ill-posed)
Robust loss류: 추가 스케일 파라미터가 필요해서 조율이 어려움
Hinge loss: 최적화가 잘 안 되고 성능이 떨어짐
반면 역제곱거리는 아래로 유계(bounded below, 항상 0 이상)이면서 매끄러운(smooth) 함수라서 딥러닝 최적화에 적합했고, 실험적으로도 가장 성능이 좋았다고 합니다.
이론적 해석: 엔트로피 관점 (식 8)
논문은 이 목적함수를 정보이론적으로도 해석합니다. 잠재공간에서:
정상 데이터의 분포 Z+=Z∣{Y=+1}는 엔트로피가 낮아야 함 (한 점에 압축·집중)
이상치 데이터의 분포 Z−=Z∣{Y=−1}는 엔트로피가 높아야 함 (넓게 퍼짐, 특정 군집 가정을 하지 않음)
maxp(z∣x)I(X;Z)+β(H(Z−)−H(Z+))
이 관점이 중요한 이유는, 일반적인 (준)지도 분류에서 쓰이는 "군집 가정(cluster assumption: 비슷한 데이터는 같은 클래스다)"이 정상 데이터에는 적용될 수 있지만 이상치에는 성립하지 않는다는 점을 명시적으로 반영했기 때문입니다. 이상치는 정의상 "무엇이든 정상이 아닌 것"이라 서로 닮을 필요가 없고, 그래서 이상치 분포는 오히려 높은 엔트로피(넓게 퍼진 형태)를 갖도록 설계한 것입니다. 이 설계가 바로 "학습 때 본 적 없는 새로운 종류의 이상치에도 일반화가 잘 되는" Deep SAD의 이론적 근거입니다.
요약 표
구성 요소
역할
ϕ(⋅;W)
데이터를 잠재공간으로 매핑하는 신경망
c
하이퍼스피어 중심 (고정)
비라벨 항 (①)
대다수 라벨 없는 데이터를 정상으로 가정하고 압축
라벨 정상 항 (②, y~=+1)
제곱거리 최소화 → 중심으로 끌어당김
라벨 이상치 항 (②, y~=−1)
역제곱거리 최소화 → 중심에서 밀어냄
η
라벨 vs 비라벨 데이터 간 가중치 균형
λ
가중치 정규화 강도
정규화 항(Regularization Term) 상세 설명
Deep SAD 목적함수 식 (7)의 세 번째 항입니다.
2λ∑ℓ=1L∥Wℓ∥F2
1. 수식의 각 기호가 의미하는 것
기호
의미
L
신경망의 은닉층(hidden layer) 개수
ℓ
층 인덱스 (ℓ=1,…,L)
Wℓ
ℓ번째 층의 가중치 행렬(또는 합성곱 필터 텐서)
∥⋅∥F
프로베니우스 노름(Frobenius norm) — 행렬(또는 텐서)의 모든 원소를 제곱해서 더한 뒤 제곱근을 취한 값
λ>0
정규화 강도를 조절하는 하이퍼파라미터
프로베니우스 노름을 풀어쓰면 다음과 같습니다.
∥Wℓ∥F2=∑a,b(Wa,bℓ)2
즉 그 층에 있는 모든 가중치 값을 하나하나 제곱해서 다 더한 것입니다. 여러 층에 걸쳐(l=1부터 L까지) 이걸 다 더하면, 결국 신경망 전체 가중치의 "제곱합"이 됩니다.
2. 이게 하는 일: L2 가중치 감쇠(Weight Decay)
이 항은 손실 함수에 "가중치 값 자체가 클수록 페널티를 받는다"는 항을 더하는 것으로, 딥러닝에서 흔히 쓰는 L2 정규화(=weight decay)입니다.
목적함수 전체를 최소화해야 하므로, 이 항이 있으면 네트워크는 데이터를 잘 설명하면서도 가중치 값을 필요 이상으로 키우지 않는 쪽으로 학습됩니다.
앞의 두 항(①비라벨 항, ②라벨 항)은 "데이터를 얼마나 잘 압축/분리하는가"를 담당하고, 이 항은 "모델이 너무 복잡해지지(과적합되지) 않도록" 담당합니다.
21을 곱하는 이유는 순전히 계산상의 편의입니다. 이 항을 가중치에 대해 미분(gradient)하면 λ⋅Wℓ이 되어 깔끔하게 떨어지기 때문에 (제곱 미분 시 나오는 2가 앞의 1/2과 상쇄) 관례적으로 붙이는 계수입니다.
3. λ의 역할과 논문에서 쓰인 값
λ가 크면: 가중치를 작게 유지하는 데 더 강하게 페널티를 줌 → 모델이 단순해지고 과적합 위험은 줄지만, 데이터를 충분히 잘 표현하지 못할 위험(과소적합)도 생김
λ가 작으면: 데이터 재현(압축)에 집중하지만 과적합 위험이 커짐
논문 부록 E에서는 Deep SAD와 Deep SVDD 모두 λ=10−6이라는 매우 작은 값을 고정해서 사용했다고 명시합니다. 즉 이 정규화는 "핵심적인 학습 목표"라기보다는 가중치가 과도하게 발산하지 않도록 잡아주는 보조적인 안정화 장치에 가깝습니다.
4. 코드(main.py)와의 대응
지금까지 다뤄온 CLI 옵션이 바로 이 λ입니다.
--weight_decay 0.5e-6 # 본 학습(Deep SAD trainer)의 λ
--ae_weight_decay 0.5e-3 # 오토인코더 프리트레이닝의 λ (별도 값)
PyTorch의 Adam 옵티마이저에 weight_decay 파라미터로 그대로 전달되어, 매 스텝마다 그래디언트에 λ⋅W 항이 더해지는 방식으로 구현됩니다(수식과 동일한 효과).
흥미로운 점은 본 학습(λ=0.5×10−6)과 프리트레이닝(λ=0.5×10−3)의 λ 값이 1000배 차이난다는 것인데, 이는 오토인코더 프리트레이닝 단계에서는 재구성 손실(reconstruction loss)이 상대적으로 큰 스케일을 가지므로 더 강한 정규화가 필요하고, 본 학습 단계(하이퍼스피어 거리 기반 손실)에서는 손실 스케일이 다르므로 약한 정규화만으로 충분하기 때문입니다.
5. 하이퍼스피어 붕괴(collapse) 방지와의 관계 — 오해하기 쉬운 부분
이 정규화 항이 "하이퍼스피어 붕괴"를 직접 막아주는 건 아닙니다. 붕괴 방지는 부록 C에서 별도로 설명하는 네트워크 구조 제약(bias term 제거, 무경계 활성함수인 ReLU/LeakyReLU 사용)이 담당합니다. 정규화 항은 그와 별개로, 일반적인 딥러닝에서처럼 가중치가 지나치게 커져서 과적합되거나 최적화가 불안정해지는 것을 막는 표준적인 역할만 합니다.
요약
질문
답
무엇을 정규화하는가?
신경망 전체 층의 가중치 크기(L2 노름)
왜 필요한가?
과적합 방지, 학습 안정화 (Deep SAD 고유의 이론이 아니라 표준적인 weight decay)
Hello, I'm Terry! 👋 Enjoy every moment of your life! 🌱 My current interests are Signal processing, Machine learning, Python, Database, LLM & RAG, MCP & ADK, Multi-Agents, Physical AI, ROS2...