이미지 분류 설명 — k-NN이 왜 실패하고 선형 분류기가 중요한가
Source: Dev.to
위에 제공된 소스 링크만으로는 번역할 본문이 없습니다. 번역을 원하는 텍스트를 제공해 주시면, 요청하신 대로 한국어로 번역해 드리겠습니다.
소개
우리는 보통 이미지 분류를 다음과 같이 설명합니다:
input: image
output: label이 설명은 맞지만, 어려운 부분을 가립니다. 기계에게 이미지란 “고양이”나 “트럭”이 아니라 248 × 400 × 3개의 숫자와 같은 것입니다. 실제 문제는 다음과 같습니다:
원시 픽셀 값을 의미 있는 클래스에 어떻게 매핑할 것인가?
가장 간단한 실패 사례
고양이 사진을 가지고:
- 오른쪽으로 2 픽셀 이동
- 밝기를 약간 증가
- 작은 영역을 잘라내기
- 배경을 변경
인간에게는 여전히 명확히 고양이로 보인다. 원시 픽셀 거리를 사용하는 모델에게는 매우 다르게 보일 수 있다.
핵심 문제: 픽셀 공간은 의미 공간이 아니다
- 두 입력이 수치적으로는 멀리 떨어져 있어도 의미는 동일할 수 있다.
- 두 입력이 수치적으로는 가깝지만 서로 다른 객체를 나타낼 수 있다.
실제 이미지에서는 다음과 같은 이유로 문제가 더욱 악화된다:
- 시점 변화
- 규모 차이
- 변형
- 가림(폐색)
- 조명 변화
- 배경 잡음
좋은 모델은 중요하지 않은 것을 무시하고 중요한 것에 반응해야 한다.
Rule‑Based Vision
A natural early idea is to define objects manually, e.g.:
- cats have ears
- cats have whiskers
- cats have certain shapes
This breaks quickly:
- ears may be hidden
- lighting may remove edges
- backgrounds may look similar
- poses may distort shapes
Rule‑based vision fails because the visual world is too variable.
규칙 기반 비전
자연스러운 초기 아이디어는 객체를 수동으로 정의하는 것입니다, 예를 들어:
- 고양이는 귀가 있다
- 고양이는 수염이 있다
- 고양이는 특정 형태를 가지고 있다
하지만 이는 곧 깨집니다:
- 귀가 가려질 수 있다
- 조명이 가장자리를 없앨 수 있다
- 배경이 비슷해 보일 수 있다
- 자세가 형태를 왜곡할 수 있다
규칙 기반 비전은 시각 세계가 너무 다양하기 때문에 실패합니다.
k‑Nearest Neighbours (k‑NN)
가장 직관적인 분류기는 k‑NN입니다.
Basic flow
- 모든 훈련 데이터를 저장합니다.
- 각 샘플에 대한 거리를 계산합니다.
- 가장 가까운 top‑k 를 선택합니다.
- 다수표를 통해 라벨을 결정합니다.
Why developers still use k‑NN
- 간단한 베이스라인
- 빠른 sanity check
- 데이터셋 디버깅에 유용
- 표현이 의미가 있는지 확인 가능
k‑NN이 깨지는 경우
- Shift sensitivity: 작은 이동은 모든 픽셀 정렬을 바꿉니다.
- Lighting sensitivity: 밝기 변화가 모든 픽셀에 영향을 줍니다.
- Flattening destroys structure:
image → flatten → vector는 공간적 관계를 잃게 합니다. - High‑dimensional issues: 고차원에서는 거리의 의미가 감소합니다.
- Performance problems: 예측당 O(N) 비교와 높은 메모리 사용량이 발생합니다.
핵심 인사이트
k‑NN은 학습하지 않습니다. 데이터셋을 기억하고 테스트 시에 비교합니다. 이는 직관을 이해하는 데는 유용하지만, 확장성이 없습니다.
k‑NN을 사용할 때도 선택해야 합니다:
- k 값
- 거리 측정 방법
- 전처리 단계
이것들은 하이퍼파라미터입니다. 검증 또는 교차 검증을 통해 다음을 수행할 수 있습니다:
- 구성 비교
- 과적합 방지
- 더 나은 설정 선택
암기에서 학습으로
앞으로 나아가기 위해, 우리는 묻는 것을 멈춥니다:
Which stored images are closest?
그리고 묻기 시작합니다:
Can we learn a function that predicts directly?
A linear classifier computes:
score = W × x + b여기서:
- x – 입력 벡터
- W – 가중치 행렬
- b – 편향
이제 모델은:
- 추론 시 전체 데이터셋이 필요하지 않는다
- 상수 시간에 예측을 계산한다
- 데이터로부터 파라미터를 학습한다
왜 이것이 중요한가
| 항목 | k‑NN | Linear Classifier |
|---|---|---|
| 추론 방식 | 유사도 조회 | 학습된 함수 |
| 학습 | 없음 (데이터 저장) | 파라미터 학습 |
| 추론 속도 | 느림 (O(N)) | 빠름 (O(1)) |
| 메모리 사용량 | 높음 (전체 데이터 저장) | 컴팩트 모델 |
| 일반화 | 약함 | 강함 |
실제로 바뀐 점
성능만이 전부가 아닙니다. 개념적으로는:
- k‑NN → 유사도 기반 추론
- Linear model → 학습된 표현
이 순간에 머신러닝이 실제 학습이 됩니다. CNN, 비전 모델, 혹은 딥러닝 시스템을 다룬다면 이것이 여러분의 기반이 됩니다.
이를 이해하면 다음을 설명할 수 있습니다:
- 왜 원시 픽셀만으로는 충분하지 않은가
- 왜 특징 학습이 중요한가
- 왜 깊은 아키텍처가 존재하는가
최종 요약
이미지 분류는 단순히 레이블을 예측하는 것이 아니라, 불안정한 원시 픽셀 입력을 안정적인 의미 출력으로 변환하는 것입니다.
- k‑NN은 훌륭한 교육 도구이자 디버깅 기준선이지만, 왜 더 나은 방법이 필요한지를 정확히 보여줍니다.
- 선형 분류기는 학습을 도입한다는 점에서 중요하며, 여기서 현대 컴퓨터 비전이 진정으로 시작됩니다.
여전히 k‑NN을 기준선이나 디버깅 도구로 사용하고 계신가요, 아니면 바로 CNN과 같은 학습 모델로 뛰어들고 계신가요?