GBT
한국외국어대학교기술경영학부
거리 기반 학습과 퓨샷 · 강의자료
인공지능 · 거리 기반 학습

거리 기반 학습과
퓨샷

"가까운 것이 답이다"라는 한 문장이 어디까지 가는지 따라간다 — 이웃의 투표(kNN)에서, 중심의 반복 계산(K-means)을 지나, 거리 자체를 학습하는 임베딩(메트릭 러닝)과 다섯 장으로 새 클래스를 배우는 퓨샷까지.

kNN → Prototypical5개 장해설 · 실습 포함원문 출처 링크
어느 병원의 진단실

환자가 다섯 명뿐인 병

지금까지의 딥러닝은 한 가지를 전제했다 — 데이터가 많다는 것. CIFAR-10은 클래스당 6,000장이었다. 그런데 희귀질환의 의료 영상은 전 세계를 뒤져도 몇 장이 전부다. 수천 장을 요구하는 CNN은 여기서 무력하다.

흥미롭게도 사람은 다섯 장이면 충분하다. 처음 보는 동물 사진 몇 장을 보여 주면 아이는 다음 사진에서 그 동물을 골라낸다. 외운 것이 아니라 "비슷하다"는 감각으로 — 즉, 좋은 거리 개념으로.

이 장은 그 감각을 기계로 옮긴 방법들을 다룬다. 거리를 그냥 재는 알고리즘(kNN, K-means)에서 시작해, 거리를 배우는 알고리즘(메트릭 러닝, 프로토타입)으로 끝난다. 기말의 "시나리오를 읽고 알고리즘을 식별하라" 유형이 정확히 이 장의 사정거리다.

거리를 잰다kNN의 투표, K-means의 중심 — 학습 없이 거리 계산만으로 분류와 군집이 된다
질문을 고른다의사결정트리 — 어떤 질문이 좋은 질문인지를 M5의 엔트로피가 답한다
거리를 배운다임베딩 공간 자체를 학습해, 본 적 없는 클래스도 몇 장이면 되게 만든다
01
kNN

kNN — 이웃이 투표한다

가장 단순한 분류기 — 그리고 k라는 손잡이 하나에 판정이 뒤집히는 분류기.

원리

k개의 이웃에게 물어보기

새 데이터가 들어오면, 가장 가까운 k개의 학습 데이터를 찾아 다수결로 클래스를 정한다. 유사도는 유클리드 거리, 또는 벡터 방향을 비교하는 코사인 유사도로 잰다.

같은 새 데이터가 k=3이면 클래스 A, k=9면 클래스 B로 판정이 뒤집히는 kNN 예시 두 장
그림 1. 같은 별(새 데이터)인데 k=3이면 A, k=9면 B다 — 데이터가 아니라 하이퍼파라미터가 답을 바꿨다. 작은 k는 바로 옆의 소수 의견에 민감하고(노이즈에 흔들림), 큰 k는 멀리 있는 다수에 끌려간다(경계가 뭉개짐). k의 선택이 kNN 사용의 사실상 전부인 이유다.
다수결 (majority voting)k개의 이웃을 동등하게 취급해 빈도가 높은 쪽으로 예측한다. 단순하지만 "아슬아슬하게 가까운 표"와 "멀리서 온 표"가 같은 무게다.
가중 투표 (weighted voting)가까운 이웃에게 더 큰 영향력을 준다 — 가중치를 거리의 역수(1/d, 1/(1+d²) 등)에 비례시켜 가중합으로 판단한다.
직접 해보기 1 · 조작

별을 옮기고 k를 돌려 보기

한 줄 목표: k와 위치에 따라 판정이 어떻게 변하는지, 그리고 다수결과 가중 투표가 언제 갈리는지 확인한다. 캔버스를 클릭하면 별이 이동한다.

조작: 두 무리의 경계 근처를 클릭해 두고 k를 1→15로 돌려 보자. 관찰 포인트: ① 경계 근처에서는 k가 바뀔 때마다 판정이 흔들리고, 무리 깊숙한 곳에서는 꿈쩍도 않는다. ② 먼 다수 대 가까운 소수처럼, 다수결과 가중 투표(1/d²)의 결론이 갈리는 순간을 한 번이라도 만들면 성공이다.

더 읽기

kNN의 장단점은 동전의 양면이다. 장점 — 학습(준비) 시간이 0이고, 데이터가 많으면 노이즈에 강하고 성능도 우수하다. 한계 — 예측할 때마다 모든 학습 데이터와의 거리를 계산해야 하므로, 참조 데이터가 크면 예측이 느리고 메모리를 많이 쓴다. "훈련이 공짜인 대신 시험마다 비싼" 게으른 학습(lazy learning)이다. 넷플릭스식 추천 시나리오("취향이 비슷한 사용자들이 본 영화를 추천")가 기말에 kNN 식별 문제로 나오는 단골 포장이다.

생각해 볼 질문 — k를 짝수로 두면 무슨 문제가 생기는가? k=전체 데이터 수로 두면 이 분류기는 무엇과 같아지는가?

02
K-means

K-means — 중심을 다시 계산하는 반복

비지도 군집의 대표 — 할당과 갱신, 두 동작의 반복이 알아서 멈춘다.

알고리즘

할당 → 갱신 → 반복 → 수렴

n개의 관측값을 k개의 클러스터로 나눈다 — 레이블 없이, 거리만으로. 셔츠 회사가 고객의 키·체중 분포에서 S/M/L 기준을 뽑는 문제가 전형이다.

무작위 중심 선택, 가장 가까운 중심으로의 할당, 중심 재계산과 수렴의 K-means 3단계
그림 2. X표가 중심(centroid)이다. ①에서 무작위로 놓인 중심이, ②할당과 ③재계산의 반복만으로 각 무리의 한가운데로 이동한다 — 아무도 정답을 알려주지 않았는데(비지도), 거리 최소화라는 목표가 스스로 균형점을 찾는다.
  1. 데이터에서 k개를 임의로 뽑아 각 클러스터의 중심(centroid)으로 삼는다.
  2. 할당 — 모든 데이터에 대해 k개 중심과의 거리를 재고, 가장 가까운 중심의 클러스터로 배정한다.
  3. 갱신 — 클러스터별 소속 데이터의 평균 위치로 중심을 다시 계산한다.
  4. 소속이 더 이상 바뀌지 않을 때까지 2~3을 반복한다.
직접 해보기 2 · 실행

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의 선택

엘보우 — 이득이 꺾이는 지점

k를 1부터 늘리며 K-means를 돌리고, 각 k의 SSE를 그래프로 그린다. 팔꿈치처럼 꺾이는 지점, 즉 클러스터를 더 늘려도 이득이 급감하는 곳이 적정 k다.

클러스터 수 k에 따른 SSE 감소 곡선. k=3에서 꺾이는 팔꿈치가 표시되어 있다
그림 3. SSE는 k가 늘면 반드시 준다(극단적으로 k=n이면 0). 그래서 "SSE 최소"는 기준이 못 되고, 대신 기울기가 꺾이는 곳을 찾는다. 이 데이터는 실제로 세 무리로 생성했고, 곡선도 k=3에서 꺾인다 — 방법이 정답을 복원한 셈이다.
더 읽기

엘보우가 항상 뚜렷한 것은 아니다. 무리들이 겹쳐 있거나 크기가 제각각이면 곡선이 완만해 꺾임이 안 보인다 — 그때는 실루엣 계수 같은 다른 기준을 함께 본다. 더 근본적으로, K-means는 "둥근 비슷한 크기의 무리"를 가정한다. 초승달 모양 두 무리 같은 데이터에서는 k를 잘 골라도 엉뚱하게 자른다 — 알고리즘의 가정을 아는 것이 하이퍼파라미터 튜닝보다 먼저다.

생각해 볼 질문 — 배달 거점 문제에서 SSE 말고 현실적으로 함께 고려해야 할 제약은 무엇인가? (거점당 처리 용량, 강 건너기…)

03
트리

의사결정트리 — 좋은 질문부터 한다

어떤 질문이 좋은 질문인가 — M5의 엔트로피가 "불순도를 가장 많이 줄이는 질문"이라고 답한다.

원리

질문 하나 = 직선 하나

의사결정트리는 스무고개다. "x₁이 4보다 작은가?" 같은 질문을 연쇄하는 일은, 그래프에서 보면 공간을 직선으로 잘라 가는 것과 같다. 회귀·분류·다중 출력이 모두 가능한 지도학습이다.

두 개의 질문으로 이루어진 의사결정트리와, 그 질문들이 공간을 세 영역으로 분할하는 좌표 그림
그림 4. 왼쪽 트리의 질문 두 개가 오른쪽 공간을 세 영역으로 자른다. 판단의 흐름이 그대로 보이기 때문에 — 왜 C로 분류했는지 경로를 짚어 설명할 수 있기 때문에 — 트리는 해석 가능성이 필요한 곳(심사, 진단)에서 지금도 사랑받는다. 3장의 규칙 기반과 통하는 미덕이되, 규칙을 사람이 아니라 데이터가 만든다는 점이 다르다.

핵심 설계 문제는 어떤 질문을 먼저 할 것인가다. 답 — 분리 결과의 불순도(impurity)를 가장 많이 낮추는, 변별력 좋은 질문부터. 불순도 감소량이 곧 정보이득(information gain)이며, 매 노드에서 최선의 질문을 고르는 탐욕적 알고리즘으로 트리가 자란다.

더 읽기

M5의 엔트로피가 여기서 재취업한다 — "이 질문을 하면 정답을 맞히기 위해 남은 질문 개수(엔트로피)가 얼마나 줄어드는가"가 정보이득의 정의 그대로다. 불순도 지표로 엔트로피를 쓰면 ID3 계열, 지니 계수를 쓰면 CART가 된다 — 알고리즘 이름 식별 문제의 단골 구분점이다. 단점도 명확하다: 데이터를 완벽히 외울 때까지 트리가 자라면 과대적합이다(M5의 처방인 깊이 제한과 가지치기가 여기서도 쓰인다). 트리 여러 개의 투표로 이 약점을 상쇄한 것이 랜덤 포레스트다.

생각해 볼 질문 — "성별을 먼저 묻는 트리"가 성능이 좋게 나왔다. 배포해도 되는가? 해석 가능성이 오히려 문제를 드러내는 상황을 생각해 보자.

04
메트릭

메트릭 러닝 — 거리 자체를 배운다

픽셀 거리로는 같은 사람의 두 사진이 남남보다 멀다 — 그래서 "의미가 가까우면 가깝게" 놓는 공간을 학습한다.

발상

유사한 것은 가깝게, 다른 것은 멀리

메트릭 러닝은 데이터 간 유사도·거리를 효과적으로 잴 수 있는 임베딩 공간을 학습하는 방법론이다. 신경망 f가 입력을 좌표로 바꾸되, 같은 클래스는 모이고 다른 클래스는 흩어지도록 훈련한다.

Triplet Loss: L = max( d(a,p) − d(a,n) + m, 0 )
기준(anchor)–같은 클래스(positive)–다른 클래스(negative) 세 샘플 — "positive보다 negative가 여유(m)만큼 더 멀어야 벌점이 0"
Contrastive Loss쌍(pair) 기반 — 유사 쌍은 거리²로, 비유사 쌍은 여유 마진 안쪽일 때만 벌점. Triplet의 2점 버전.
N-pair / Center Loss여러 negative를 동시에 비교하거나(N-pair), 클래스 중심과의 거리를 직접 죄는(Center) 변형들 — 목표는 모두 같다.
더 읽기

왜 이런 우회가 필요한가 — 분류기(소프트맥스)는 "지금 있는 클래스들"의 경계만 배운다. 신입사원 얼굴이 등록될 때마다 재훈련할 수는 없다. 메트릭 러닝은 클래스가 아니라 비슷함의 일반 규칙을 배우므로, 처음 보는 사람도 등록 사진 한 장과의 거리로 인증할 수 있다 — 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

05
퓨샷

프로토타입 네트워크 — 다섯 장으로 새 클래스

클래스의 대표 벡터는 지원 샘플 임베딩의 평균 — 그 단순함이 퓨샷 분류의 표준이 됐다.

구조

프로토타입 = 평균, 분류 = 최단 거리

각 클래스를 프로토타입(대표 벡터) 하나로 표현하고, 쿼리와 프로토타입 사이의 거리로 분류한다. 프로토타입은 지원 집합(support set) 임베딩의 평균이다 — cₖ = (1/|Sₖ|) Σ f(xᵢ).

세 클래스의 지원 샘플 임베딩과 그 평균인 프로토타입 별표, 그리고 쿼리에서 각 프로토타입까지의 거리를 표시한 그림
그림 5. 쿼리(◆)는 세 프로토타입(★) 중 가장 가까운 클래스 2로 분류된다. 클래스당 샘플이 다섯 개뿐이어도 평균은 안정적인 대표가 된다 — 단, 이는 그 전에 4장의 메트릭 러닝으로 "의미 있는 거리"의 공간 f를 만들어 두었기에 가능한 일이다. 픽셀 공간의 평균이었다면 무의미했을 것이다.
  1. 에피소드 샘플링 — N개 클래스 × 클래스당 K개 샘플로 미니 과제를 만든다 (N-way K-shot).
  2. 프로토타입 계산 — 지원 집합 임베딩의 클래스별 평균.
  3. 거리 기반 분류 — 쿼리와 각 프로토타입의 유클리드 거리를 잰다.
  4. 손실 계산 — 거리에 소프트맥스를 씌워 확률로 만들고(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 NetMatching NetRelation Net
비교 대상클래스당 프로토타입 1개모든 지원 샘플과 비교쿼리·지원 쌍을 모듈에 입력
거리/유사도유클리드 거리 (고정)코사인 + 어텐션 가중거리 함수 자체를 학습 (비선형)
강점계산 효율 · 해석 용이 · Zero-shot 확장유연한 가중치복잡한 관계 모델링
더 읽기

식별 요령: 지문에 "평균", "대표 벡터", "유클리드"가 보이면 Prototypical, "모든 지원 샘플", "어텐션", "코사인"이면 Matching, "거리 함수를 학습", "관계 모듈"이면 Relation이다. 그리고 한 단계 위의 구분 — 지문에 레이블 있는 소량 신규 클래스가 나오면 퓨샷 계열, 레이블 없는 묶기면 K-means, 레이블 있는 다수 데이터에서 이웃 투표면 kNN. 이 장 전체가 한 문제 세트다.

생각해 볼 질문 — Prototypical이 Zero-shot(샘플 0개)으로 확장 가능한 이유는? 프로토타입을 이미지가 아닌 무엇으로 만들 수 있는가?

06
정리

이 자료가 바로잡은 세 가지

"단순한 알고리즘"이라는 말에 숨은 함정들.

기억해 둘 세 문장

  1. kNN과 K-means는 이름만 닮았다. 레이블이 있으면(분류) kNN, 없으면(묶기) K-means — k의 의미도 투표 인원과 그룹 수로 다르다.
  2. 거리 기반 방법의 성패는 거리의 품질에 달렸다. 픽셀 거리로는 같은 사람의 두 사진이 남남보다 멀다 — 그래서 거리 자체를 배우는 메트릭 러닝이 필요했다.
  3. 퓨샷은 마법이 아니라 사전 투자다. 다섯 장으로 새 클래스를 배우는 능력은, 그 전에 좋은 임베딩 공간을 만들어 둔 대규모 훈련(에피소드 훈련)의 배당금이다.
다음 장 예고

마지막 장은 지금까지와 다른 종류의 학습이다 — 정답 대신 보상이, 그것도 한참 뒤에 온다. 강화학습의 기본기(MDP, 가치함수)에서 출발해, ChatGPT를 만든 RLHF와 그 후계자들(PPO → DPO → GRPO)까지 — 2장에서 예고한 "정렬"의 완결편이다.

한국외국어대학교 기술경영학부 · 본문 도표(그림 1–5)는 직접 제작. 그림 1·2·3·5의 데이터와 판정은 스크립트로 생성·계산한 값이다.
출처

참고문헌

공개 원문 우선. 링크는 2026년 8월 확인 기준.

1차 문헌

  1. Cover, T., & Hart, P. (1967). Nearest Neighbor Pattern Classification. IEEE Trans. Information Theory, 13(1). ieeexplore.ieee.org
  2. Lloyd, S. (1982). Least Squares Quantization in PCM. IEEE Trans. Information Theory, 28(2). (1957년 벨연구소 내부 보고서의 출판본 — K-means의 원형) ieeexplore.ieee.org
  3. Quinlan, J. R. (1986). Induction of Decision Trees (ID3). Machine Learning, 1, 81–106. springer.com
  4. Hadsell, R., Chopra, S., & LeCun, Y. (2006). Dimensionality Reduction by Learning an Invariant Mapping. CVPR. ieeexplore.ieee.org
  5. Schroff, F., Kalenichenko, D., & Philbin, J. (2015). FaceNet: A Unified Embedding for Face Recognition and Clustering. CVPR. arxiv.org
  6. Vinyals, O., et al. (2016). Matching Networks for One Shot Learning. NeurIPS. arxiv.org
  7. Snell, J., Swersky, K., & Zemel, R. (2017). Prototypical Networks for Few-shot Learning. NeurIPS. arxiv.org
  8. Sung, F., et al. (2018). Learning to Compare: Relation Network for Few-Shot Learning. CVPR. arxiv.org
  9. Chen, T., et al. (2020). A Simple Framework for Contrastive Learning of Visual Representations (SimCLR). ICML. arxiv.org

교재

  1. 천인국 (2023). 인공지능: 파이썬으로 배우는 머신러닝과 딥러닝 (2판). 인피니티북스. — 13주차 강의 교재 (kNN·K-means·의사결정트리).
인용 원칙

그림의 데이터·판정 수치는 모두 스크립트로 생성해 계산한 값이다. K-means의 기원은 Lloyd(1957 보고서/1982 출판)로 표기해 발표와 출판 연도의 차이를 병기했다.