거리 기반 학습과
퓨샷
"가까운 것이 답이다"라는 한 문장이 어디까지 가는지 따라간다 — 이웃의 투표(kNN)에서, 중심의 반복 계산(K-means)을 지나, 거리 자체를 학습하는 임베딩(메트릭 러닝)과 다섯 장으로 새 클래스를 배우는 퓨샷까지.
환자가 다섯 명뿐인 병
지금까지의 딥러닝은 한 가지를 전제했다 — 데이터가 많다는 것. CIFAR-10은 클래스당 6,000장이었다. 그런데 희귀질환의 의료 영상은 전 세계를 뒤져도 몇 장이 전부다. 수천 장을 요구하는 CNN은 여기서 무력하다.
흥미롭게도 사람은 다섯 장이면 충분하다. 처음 보는 동물 사진 몇 장을 보여 주면 아이는 다음 사진에서 그 동물을 골라낸다. 외운 것이 아니라 "비슷하다"는 감각으로 — 즉, 좋은 거리 개념으로.
이 장은 그 감각을 기계로 옮긴 방법들을 다룬다. 거리를 그냥 재는 알고리즘(kNN, K-means)에서 시작해, 거리를 배우는 알고리즘(메트릭 러닝, 프로토타입)으로 끝난다. 기말의 "시나리오를 읽고 알고리즘을 식별하라" 유형이 정확히 이 장의 사정거리다.
kNN — 이웃이 투표한다
가장 단순한 분류기 — 그리고 k라는 손잡이 하나에 판정이 뒤집히는 분류기.
k개의 이웃에게 물어보기
새 데이터가 들어오면, 가장 가까운 k개의 학습 데이터를 찾아 다수결로 클래스를 정한다. 유사도는 유클리드 거리, 또는 벡터 방향을 비교하는 코사인 유사도로 잰다.
별을 옮기고 k를 돌려 보기
한 줄 목표: k와 위치에 따라 판정이 어떻게 변하는지, 그리고 다수결과 가중 투표가 언제 갈리는지 확인한다. 캔버스를 클릭하면 별이 이동한다.
조작: 두 무리의 경계 근처를 클릭해 두고 k를 1→15로 돌려 보자. 관찰 포인트: ① 경계 근처에서는 k가 바뀔 때마다 판정이 흔들리고, 무리 깊숙한 곳에서는 꿈쩍도 않는다. ② 먼 다수 대 가까운 소수처럼, 다수결과 가중 투표(1/d²)의 결론이 갈리는 순간을 한 번이라도 만들면 성공이다.
kNN의 장단점은 동전의 양면이다. 장점 — 학습(준비) 시간이 0이고, 데이터가 많으면 노이즈에 강하고 성능도 우수하다. 한계 — 예측할 때마다 모든 학습 데이터와의 거리를 계산해야 하므로, 참조 데이터가 크면 예측이 느리고 메모리를 많이 쓴다. "훈련이 공짜인 대신 시험마다 비싼" 게으른 학습(lazy learning)이다. 넷플릭스식 추천 시나리오("취향이 비슷한 사용자들이 본 영화를 추천")가 기말에 kNN 식별 문제로 나오는 단골 포장이다.
생각해 볼 질문 — k를 짝수로 두면 무슨 문제가 생기는가? k=전체 데이터 수로 두면 이 분류기는 무엇과 같아지는가?
K-means — 중심을 다시 계산하는 반복
비지도 군집의 대표 — 할당과 갱신, 두 동작의 반복이 알아서 멈춘다.
할당 → 갱신 → 반복 → 수렴
n개의 관측값을 k개의 클러스터로 나눈다 — 레이블 없이, 거리만으로. 셔츠 회사가 고객의 키·체중 분포에서 S/M/L 기준을 뽑는 문제가 전형이다.
- 데이터에서 k개를 임의로 뽑아 각 클러스터의 중심(centroid)으로 삼는다.
- 할당 — 모든 데이터에 대해 k개 중심과의 거리를 재고, 가장 가까운 중심의 클러스터로 배정한다.
- 갱신 — 클러스터별 소속 데이터의 평균 위치로 중심을 다시 계산한다.
- 소속이 더 이상 바뀌지 않을 때까지 2~3을 반복한다.
K-means를 한 동작씩 굴려 보기
한 줄 목표: "할당과 갱신 두 동작뿐"임을 버튼으로 체감하고, SSE가 매 반복 줄어들다 멈추는 것을 본다.
조작: [할당+갱신 1회]를 수렴 표시가 뜰 때까지 누른 뒤, [새 초기값]으로 서너 번 다시 돌려 보자. 관찰 포인트: ① SSE가 반복마다 감소하다가 소속 불변과 함께 멈춘다. ② 초기값에 따라 최종 군집과 SSE가 달라지는 경우가 있다 — K-means가 초기값에 민감하며 여러 번 돌려 최선을 고르는 이유가 보이면 성공이다. k=4, 5로 늘려 무리가 억지로 쪼개지는 것도 관찰하자.
kNN과 K-means는 이름이 닮아 시험마다 혼동을 부른다. 구분 기준은 하나 — 정답 레이블이 있는가. kNN은 레이블 있는 데이터로 새 데이터를 분류하는 지도학습, K-means는 레이블 없이 데이터를 묶는 비지도학습이다. "배달 거점을 3개 권역으로 나눈다"처럼 정답이 없고 묶는 것이 목적이면 K-means다. k의 의미도 다르다 — kNN의 k는 투표 인원, K-means의 k는 그룹 수.
생각해 볼 질문 — K-means의 갱신 단계가 "평균"인 이유를 SSE 최소화와 연결해 설명할 수 있는가? 평균 대신 중앙값을 쓰면 무엇이 달라지는가?
엘보우 — 이득이 꺾이는 지점
k를 1부터 늘리며 K-means를 돌리고, 각 k의 SSE를 그래프로 그린다. 팔꿈치처럼 꺾이는 지점, 즉 클러스터를 더 늘려도 이득이 급감하는 곳이 적정 k다.
엘보우가 항상 뚜렷한 것은 아니다. 무리들이 겹쳐 있거나 크기가 제각각이면 곡선이 완만해 꺾임이 안 보인다 — 그때는 실루엣 계수 같은 다른 기준을 함께 본다. 더 근본적으로, K-means는 "둥근 비슷한 크기의 무리"를 가정한다. 초승달 모양 두 무리 같은 데이터에서는 k를 잘 골라도 엉뚱하게 자른다 — 알고리즘의 가정을 아는 것이 하이퍼파라미터 튜닝보다 먼저다.
생각해 볼 질문 — 배달 거점 문제에서 SSE 말고 현실적으로 함께 고려해야 할 제약은 무엇인가? (거점당 처리 용량, 강 건너기…)
의사결정트리 — 좋은 질문부터 한다
어떤 질문이 좋은 질문인가 — M5의 엔트로피가 "불순도를 가장 많이 줄이는 질문"이라고 답한다.
질문 하나 = 직선 하나
의사결정트리는 스무고개다. "x₁이 4보다 작은가?" 같은 질문을 연쇄하는 일은, 그래프에서 보면 공간을 직선으로 잘라 가는 것과 같다. 회귀·분류·다중 출력이 모두 가능한 지도학습이다.
핵심 설계 문제는 어떤 질문을 먼저 할 것인가다. 답 — 분리 결과의 불순도(impurity)를 가장 많이 낮추는, 변별력 좋은 질문부터. 불순도 감소량이 곧 정보이득(information gain)이며, 매 노드에서 최선의 질문을 고르는 탐욕적 알고리즘으로 트리가 자란다.
M5의 엔트로피가 여기서 재취업한다 — "이 질문을 하면 정답을 맞히기 위해 남은 질문 개수(엔트로피)가 얼마나 줄어드는가"가 정보이득의 정의 그대로다. 불순도 지표로 엔트로피를 쓰면 ID3 계열, 지니 계수를 쓰면 CART가 된다 — 알고리즘 이름 식별 문제의 단골 구분점이다. 단점도 명확하다: 데이터를 완벽히 외울 때까지 트리가 자라면 과대적합이다(M5의 처방인 깊이 제한과 가지치기가 여기서도 쓰인다). 트리 여러 개의 투표로 이 약점을 상쇄한 것이 랜덤 포레스트다.
생각해 볼 질문 — "성별을 먼저 묻는 트리"가 성능이 좋게 나왔다. 배포해도 되는가? 해석 가능성이 오히려 문제를 드러내는 상황을 생각해 보자.
메트릭 러닝 — 거리 자체를 배운다
픽셀 거리로는 같은 사람의 두 사진이 남남보다 멀다 — 그래서 "의미가 가까우면 가깝게" 놓는 공간을 학습한다.
유사한 것은 가깝게, 다른 것은 멀리
메트릭 러닝은 데이터 간 유사도·거리를 효과적으로 잴 수 있는 임베딩 공간을 학습하는 방법론이다. 신경망 f가 입력을 좌표로 바꾸되, 같은 클래스는 모이고 다른 클래스는 흩어지도록 훈련한다.
기준(anchor)–같은 클래스(positive)–다른 클래스(negative) 세 샘플 — "positive보다 negative가 여유(m)만큼 더 멀어야 벌점이 0"
왜 이런 우회가 필요한가 — 분류기(소프트맥스)는 "지금 있는 클래스들"의 경계만 배운다. 신입사원 얼굴이 등록될 때마다 재훈련할 수는 없다. 메트릭 러닝은 클래스가 아니라 비슷함의 일반 규칙을 배우므로, 처음 보는 사람도 등록 사진 한 장과의 거리로 인증할 수 있다 — FaceNet·ArcFace 계열 얼굴 인식, 유사 이미지 검색, 상품 추천이 전부 이 구조다. M2의 RAG 의미 검색도 같은 원리의 문장 버전이다.
생각해 볼 질문 — Triplet 훈련에서 "너무 쉬운 negative"(이미 충분히 먼 샘플)만 뽑으면 학습이 왜 멈추는가? 어떤 negative를 골라야 하는가?
출처 FaceNet: Schroff 외, 2015: arxiv.org · Contrastive: Hadsell 외, 2006: ieeexplore.ieee.org
대조학습 — 레이블 없이 표현을 배우다
대조학습(contrastive learning)은 레이블 없이 데이터의 표현을 배우는 자기지도 학습이다. 정답 대신, "같은 것의 변형은 같아야 한다"는 원리를 쓴다.
- Positive pair — 같은 이미지에 다른 증강(자르기, 색 왜곡)을 가한 두 버전. 임베딩이 가까워지도록.
- Negative pair — 서로 다른 이미지들. 임베딩이 멀어지도록.
- 데이터 증강이 핵심 — 무엇을 "같다"로 정의할지가 증강의 설계에 달려 있다.
이것이 4장(M4)에서 예고한 "레이블 비용의 우회"의 정점이다 — 대규모 라벨링 없이 범용 표현을 배우고, 소량의 레이블로 마무리한다. M2의 LLM 사전학습(다음 단어 맞히기)과 정확히 같은 철학의 이미지 버전이며, 실제로 SimCLR(2020) 이후 대조학습은 이미지 표현 학습의 표준 도구가 됐다. 증강 설계의 함의를 놓치지 말자 — "색을 바꿔도 같은 것"으로 훈련하면 모델은 색을 무시하는 표현을 배운다. 무엇을 불변으로 둘지는 데이터가 아니라 설계자의 결정이다.
생각해 볼 질문 — 의료 영상에서 "좌우 반전" 증강이 위험할 수 있는 이유는? (심장의 위치를 생각해 보라)
출처 SimCLR: Chen 외, 2020: arxiv.org
프로토타입 네트워크 — 다섯 장으로 새 클래스
클래스의 대표 벡터는 지원 샘플 임베딩의 평균 — 그 단순함이 퓨샷 분류의 표준이 됐다.
프로토타입 = 평균, 분류 = 최단 거리
각 클래스를 프로토타입(대표 벡터) 하나로 표현하고, 쿼리와 프로토타입 사이의 거리로 분류한다. 프로토타입은 지원 집합(support set) 임베딩의 평균이다 — cₖ = (1/|Sₖ|) Σ f(xᵢ).
- 에피소드 샘플링 — N개 클래스 × 클래스당 K개 샘플로 미니 과제를 만든다 (N-way K-shot).
- 프로토타입 계산 — 지원 집합 임베딩의 클래스별 평균.
- 거리 기반 분류 — 쿼리와 각 프로토타입의 유클리드 거리를 잰다.
- 손실 계산 — 거리에 소프트맥스를 씌워 확률로 만들고(M5), 교차엔트로피로 학습한다: p(y=k|x) = exp(−d(f(x),cₖ)) / Σⱼ exp(−d(f(x),cⱼ)).
에피소드 훈련의 요점은 "시험처럼 공부한다"는 것이다 — 배포 후 만날 상황(새 클래스 N개, 샘플 K개)을 훈련 때부터 수천 번 반복 연습시킨다. 훈련에 쓴 클래스와 시험 클래스는 겹치지 않는다. 모델이 배우는 것은 특정 클래스가 아니라 "적은 샘플로 클래스를 요약하고 비교하는 능력" 자체다 — 이런 구도를 메타러닝(배우는 법을 배우기)이라 부른다.
생각해 볼 질문 — 희귀질환 영상 5장으로 새 질환을 식별하는 시스템 — 기말 시나리오 그대로다. 이 문제에서 지원 집합과 쿼리는 각각 무엇인가?
출처 Snell, Swersky & Zemel, "Prototypical Networks for Few-shot Learning", NeurIPS 2017: arxiv.org
퓨샷 세 형제 — 무엇으로 구별하는가
기말의 알고리즘 식별 문제는 미세한 구분점을 묻는다. 세 방법의 차이를 "무엇과 비교하는가, 거리를 어떻게 재는가"로 정리한다.
| Prototypical Net | Matching Net | Relation Net | |
|---|---|---|---|
| 비교 대상 | 클래스당 프로토타입 1개 | 모든 지원 샘플과 비교 | 쿼리·지원 쌍을 모듈에 입력 |
| 거리/유사도 | 유클리드 거리 (고정) | 코사인 + 어텐션 가중 | 거리 함수 자체를 학습 (비선형) |
| 강점 | 계산 효율 · 해석 용이 · Zero-shot 확장 | 유연한 가중치 | 복잡한 관계 모델링 |
식별 요령: 지문에 "평균", "대표 벡터", "유클리드"가 보이면 Prototypical, "모든 지원 샘플", "어텐션", "코사인"이면 Matching, "거리 함수를 학습", "관계 모듈"이면 Relation이다. 그리고 한 단계 위의 구분 — 지문에 레이블 있는 소량 신규 클래스가 나오면 퓨샷 계열, 레이블 없는 묶기면 K-means, 레이블 있는 다수 데이터에서 이웃 투표면 kNN. 이 장 전체가 한 문제 세트다.
생각해 볼 질문 — Prototypical이 Zero-shot(샘플 0개)으로 확장 가능한 이유는? 프로토타입을 이미지가 아닌 무엇으로 만들 수 있는가?
이 자료가 바로잡은 세 가지
"단순한 알고리즘"이라는 말에 숨은 함정들.
기억해 둘 세 문장
- kNN과 K-means는 이름만 닮았다. 레이블이 있으면(분류) kNN, 없으면(묶기) K-means — k의 의미도 투표 인원과 그룹 수로 다르다.
- 거리 기반 방법의 성패는 거리의 품질에 달렸다. 픽셀 거리로는 같은 사람의 두 사진이 남남보다 멀다 — 그래서 거리 자체를 배우는 메트릭 러닝이 필요했다.
- 퓨샷은 마법이 아니라 사전 투자다. 다섯 장으로 새 클래스를 배우는 능력은, 그 전에 좋은 임베딩 공간을 만들어 둔 대규모 훈련(에피소드 훈련)의 배당금이다.
마지막 장은 지금까지와 다른 종류의 학습이다 — 정답 대신 보상이, 그것도 한참 뒤에 온다. 강화학습의 기본기(MDP, 가치함수)에서 출발해, ChatGPT를 만든 RLHF와 그 후계자들(PPO → DPO → GRPO)까지 — 2장에서 예고한 "정렬"의 완결편이다.
참고문헌
공개 원문 우선. 링크는 2026년 8월 확인 기준.
1차 문헌
- Cover, T., & Hart, P. (1967). Nearest Neighbor Pattern Classification. IEEE Trans. Information Theory, 13(1). ieeexplore.ieee.org
- Lloyd, S. (1982). Least Squares Quantization in PCM. IEEE Trans. Information Theory, 28(2). (1957년 벨연구소 내부 보고서의 출판본 — K-means의 원형) ieeexplore.ieee.org
- Quinlan, J. R. (1986). Induction of Decision Trees (ID3). Machine Learning, 1, 81–106. springer.com
- Hadsell, R., Chopra, S., & LeCun, Y. (2006). Dimensionality Reduction by Learning an Invariant Mapping. CVPR. ieeexplore.ieee.org
- Schroff, F., Kalenichenko, D., & Philbin, J. (2015). FaceNet: A Unified Embedding for Face Recognition and Clustering. CVPR. arxiv.org
- Vinyals, O., et al. (2016). Matching Networks for One Shot Learning. NeurIPS. arxiv.org
- Snell, J., Swersky, K., & Zemel, R. (2017). Prototypical Networks for Few-shot Learning. NeurIPS. arxiv.org
- Sung, F., et al. (2018). Learning to Compare: Relation Network for Few-Shot Learning. CVPR. arxiv.org
- Chen, T., et al. (2020). A Simple Framework for Contrastive Learning of Visual Representations (SimCLR). ICML. arxiv.org
교재
- 천인국 (2023). 인공지능: 파이썬으로 배우는 머신러닝과 딥러닝 (2판). 인피니티북스. — 13주차 강의 교재 (kNN·K-means·의사결정트리).
그림의 데이터·판정 수치는 모두 스크립트로 생성해 계산한 값이다. K-means의 기원은 Lloyd(1957 보고서/1982 출판)로 표기해 발표와 출판 연도의 차이를 병기했다.