Skip to content

5장. 갈림길을 배우다 — 분류

이 장의 질문: "예/아니오"는 어떻게 배우는가? 회귀의 뼈대를 분류로 확장하며, 시그모이드·소프트맥스·교차 엔트로피 — 딥러닝 끝까지 쓰일 부품 셋 — 를 손에 넣는다.

전제: 2장(모델·손실·최적화), 3장(확률, 최대가능도).

직선으로 예/아니오를 답하려면

종양의 크기로 악성/양성을 판별하는 문제를 보자. 입력은 숫자(크기), 출력은 범주(악성=1, 양성=0)다. 2장의 직선 y^=wx+b를 그대로 쓰면 어떻게 되나? 직선은 3.7이든 42든 아무 값이나 뱉는다. "악성 여부가 42"라는 답은 해석할 길이 없다.

우리가 원하는 출력은 3장에서 배운 언어로 정확히 표현된다 — 확률이다. "악성일 확률 0.93". 그러려면 직선의 출력(아무 실수)을 0과 1 사이로 구겨 넣는 장치가 필요하다. 그 장치가 시그모이드(sigmoid) 함수다.

σ(z)=11+ez

모양을 말로 그리면: 입력 z가 큰 음수면 0에 붙고, 0이면 정확히 0.5, 큰 양수면 1에 붙는 부드러운 S자 곡선이다. 직선 뒤에 이것을 달면 완성이다.

p(악성x)=σ(wx+b)

이 모델이 로지스틱 회귀다(이름에 회귀가 붙었지만 분류 모델이다 — 역사적 명명의 장난이니 그러려니 하자). 구조를 음미하라. 직선 부분 wx+b는 여전히 "증거를 가중해서 합산한 점수"이고, 시그모이드는 그 점수를 확률로 번역하는 통역사일 뿐이다. 점수 0은 확률 0.5(반반), 점수가 클수록 확신이 강해진다. 결정이 필요하면 확률 0.5(또는 업무에 맞는 다른 임계값)에서 자르면 된다. 기하학적으로 이 "자르는 선"은 입력 공간을 두 쪽으로 가르는 경계 — 결정 경계 — 이며, 로지스틱 회귀의 결정 경계는 언제나 직선(고차원에선 평면)이다.

채점은 어떻게 하나: 교차 엔트로피의 탄생

손실 함수가 필요하다. 제곱오차를 재활용하면 안 되나? 되긴 되는데, 두 가지 이유로 나쁜 선택이다. 하나는 기술적 문제 — 시그모이드와 제곱오차를 겹치면 손실 지형이 밥그릇 모양이 아니게 되고, 모델이 크게 틀렸을 때 오히려 기울기가 0에 가까워져 학습이 굼떠진다. 다른 하나가 본질적이다 — 3장에서 약속했듯, 손실은 발명이 아니라 확률 가정에서 도출하는 것이다. 도출해 보자.

모델이 확률을 출력하니, 최대가능도 원리를 그대로 적용할 수 있다. "지금 파라미터라면, 실제로 관측된 정답들이 나올 확률은 얼마인가?" 정답이 1인 데이터에는 모델이 말한 p를, 정답이 0인 데이터에는 1p를 곱해 나가면 그것이 가능도다. 곱셈은 다루기 불편하니 로그를 씌워 덧셈으로 바꾸고(로그는 곱을 합으로 바꾸며 최대값의 위치를 보존한다), 최대화 대신 부호를 뒤집어 최소화 문제로 만들면:

L=1Ni[yilogpi+(1yi)log(1pi)]

읽는 법: 각 데이터에서, 정답이 1이면(yi=1) logpi를, 정답이 0이면 log(1pi)를 벌점으로 매겨 평균낸다. 요약하면 — 정답에 부여한 확률의 로그에 마이너스를 붙인 것. 이것이 교차 엔트로피(cross-entropy) 손실이다.

숫자로 감을 잡자. 정답이 1일 때: 모델이 p=0.9라 했으면 벌점 log0.90.1 — 거의 무죄. p=0.50.69. p=0.01이면 4.6. 그리고 p0이면 벌점이 무한대로 치솟는다. 교차 엔트로피의 성격이 여기 있다 — 정답에 확신을 갖고 틀리는 것을 극형으로 다스린다. "확률을 내놓는 모델은 자신의 확신에 책임을 져야 한다"는 원칙이 수식이 된 것이다.

선택지가 여럿이면: 소프트맥스

예/아니오가 아니라 고양이/개/새처럼 선택지가 K개면? 점수를 K개 계산한 뒤, 시그모이드의 K지선다 버전인 소프트맥스(softmax)로 확률 분포를 만든다.

pk=ezkjezj

읽는 법: k번 선택지의 확률은, 그 점수의 지수값을 전체 지수값의 합으로 나눈 것. 지수 덕분에 모두 양수가 되고, 합으로 나누니 총합이 1 — 어엿한 확률 분포다. 점수 차이가 클수록 승자에게 확률이 쏠린다. 예를 들어 점수 (2.0,1.0,0.1)은 확률 (0.66,0.24,0.10)이 된다. 가장 큰 점수를 부드럽게(soft) 뽑는(max) 함수 — 이름 그대로다. 손실은 똑같이 "정답 선택지에 부여한 확률의 log"다.

이 소프트맥스 + 교차 엔트로피 조합을 눈에 새겨 두라. MNIST 숫자 분류부터 GPT의 "다음 단어 고르기"(선택지 수만 개짜리 분류!)까지, 딥러닝 분류의 최종 출구는 거의 예외 없이 이 조합이다. 게다가 이 조합은 미분하면 기울기가 py(예측 확률 빼기 정답)라는 극도로 단순한 형태로 떨어진다 — 우연이 아니라 최대가능도로 유도된 짝이기에 생기는 축복이며, 코드랩 01에서 이 한 줄을 직접 코딩하게 된다.

작은 보너스 하나: 소프트맥스의 점수를 온도 T로 나누면(zk/T) 분포의 뾰족함을 조절할 수 있다. T가 크면 분포가 평평해져 다양한 선택이, 작으면 승자 독식이 된다. ChatGPT API의 "temperature" 다이얼이 문자 그대로 이것이다 — 21장에서 재회한다.

완전히 다른 두 가지 발상

로지스틱 회귀는 "점수를 배우는" 접근이다. 분류를 보는 전혀 다른 시각 둘을 짧게 만나 두자. 대비 속에서 각 방법의 성격이 선명해진다.

k-최근접 이웃(kNN): 배우지 않고 기억한다. 훈련 데이터를 통째로 저장해 두고, 새 입력이 오면 가장 가까운 k개의 이웃을 찾아 다수결한다. 학습 과정이 아예 없다! 데이터가 곧 모델이다. 단순하지만 뼈아픈 교훈 두 개를 남긴다. 첫째, "가깝다"의 정의(거리 척도)가 성능을 지배한다 — 벡터 표현이 좋아야 이웃이 의미 있다. 이 통찰은 훗날 임베딩(16장)과 RAG(23장)에서 만개한다. 둘째, 차원이 높아지면 모든 점이 서로 비슷하게 멀어져 "가까움" 자체가 무의미해진다(차원의 저주) — 고차원 데이터에는 좋은 표현의 학습이 필수인 이유다.

서포트 벡터 머신(SVM): 여유를 최대화한다. 두 무리를 가르는 직선은 무수히 많다. 그중 무엇이 최선인가? SVM의 답 — 양쪽 무리에서 가장 멀리 떨어진 직선, 즉 여유(마진)가 최대인 경계다. 아슬아슬하게 가르는 경계보다 넉넉하게 가르는 경계가 새 데이터의 흔들림에 강하리라는, 일반화에 대한 기하학적 직관이다. 여기에 커널 트릭(데이터를 고차원으로 은근슬쩍 보내 직선으로 못 가르던 것을 가르게 하는 기법)을 더해, 딥러닝 이전 시대를 SVM이 평정했었다. 지금도 중소 규모 데이터에서는 여전히 강력한 기본기다.

세 접근의 대비를 정리하면 — 로지스틱 회귀는 확률 점수를, kNN은 이웃을, SVM은 여유를 믿는다. 같은 문제에 이렇게 다른 철학이 가능하다는 것, 그리고 셋 다 "모델·손실·최적화"의 틀(kNN은 극단적으로 퇴화한 경우지만) 위에 있다는 것을 함께 기억하라.

손을 움직여 보자

이론이 손에 붙는 데는 몇 줄이면 충분하다.

python
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression

X, y = load_breast_cancer(return_X_y=True)     # 유방암 진단 데이터 (569건, 특징 30개)
X_tr, X_te, y_tr, y_te = train_test_split(X, y, test_size=0.2, random_state=42)

model = LogisticRegression(max_iter=5000)
model.fit(X_tr, y_tr)                          # 내부에서: 교차 엔트로피 + 경사 기반 최적화
print("정확도:", model.score(X_te, y_te))       # ~0.96
print("확률 출력:", model.predict_proba(X_te[:3]).round(3))

predict_proba가 내놓는 확률을 눈으로 확인하라. 그리고 model.coef_(학습된 w들)를 보면 어떤 특징이 악성 판정을 밀어 올리는지까지 읽을 수 있다 — 선형 모델의 큰 미덕인 해석 가능성이다.

핵심 요약

  • 분류는 조건부 확률 p(범주|x)를 배우는 문제다. 점수(선형 결합)를 시그모이드(2지선다)나 소프트맥스(K지선다)로 확률로 번역한다.
  • 손실은 최대가능도에서 도출된 교차 엔트로피 — "정답에 부여한 확률의 log". 확신에 찬 오답을 극형으로 다스린다.
  • 소프트맥스 + 교차 엔트로피는 GPT까지 이어지는 딥러닝 분류의 표준 출구이며, 기울기가 py로 떨어지는 아름다운 짝이다.
  • 다른 발상들: kNN(이웃 다수결 — 표현과 거리의 중요성, 차원의 저주), SVM(마진 최대화 — 일반화의 기하학).

스스로 점검

  1. 정답이 1인 데이터에 모델 A는 p=0.8, 모델 B는 p=0.99를 내놓고 맞췄다. 반대로 정답이 0인 다른 데이터에 A는 p=0.4, B는 p=0.99를 내놓았다(B는 틀림). 각 경우의 교차 엔트로피 벌점을 계산해, 이 손실이 무엇을 장려하고 무엇을 벌하는지 말해 보라.
  2. 점수 (1,1,1)의 소프트맥스는? 점수 (10,1,1)은? 온도 T=10으로 나눈 (10,1,1)은? (계산기를 써도 좋다.)
  3. 스팸 필터에서 "정상 메일을 스팸으로 오판하는 것"이 반대보다 훨씬 치명적이라면, 결정 임계값 0.5를 어느 방향으로 옮겨야 하나?
  4. kNN이 "학습이 없는" 모델이라는 말의 의미와, 그럼에도 성능이 표현(벡터화)에 크게 의존하는 이유를 설명해 보라.

다음 장에서

지금까지의 모델은 모두 "점수를 합산"하는 한 가족이었다. 다음 장은 전혀 다른 사고방식 — 스무고개처럼 질문을 던져 데이터를 쪼개 나가는 결정 트리, 그리고 평범한 트리 수백 그루를 묶어 최강의 실무 병기로 만드는 앙상블의 마법이다. 테이블 데이터의 현재 챔피언이 거기서 나온다.

6장. 질문의 나무 — 트리와 앙상블 →