머신러닝
판정 규칙을 사람이 적어 넣는 대신 데이터에서 뽑아내는 방식입니다. 예시를 아주 많이 보여 주면 프로그램이 스스로 판정 기준을 세웁니다. 세워진 기준은 학습에 쓰지 않은 데이터에도 통해야 합니다.
상세
요리를 배우는 길은 둘입니다. 하나는 조리법을 한 줄씩 받아 적는 것입니다. 다른 하나는 완성된 음식을 여러 번 맛보아 감을 잡는 것입니다. 머신러닝은 뒤쪽에 가깝습니다.
머신러닝은 판정 규칙을 사람이 코드로 적어 넣는 대신 예시 데이터에서 뽑아내는 방식입니다. 사람이 건네는 것은 규칙이 아니라 예시입니다. 그 예시는 아주 많아야 합니다. 프로그램은 그 예시들에서 입력과 답 사이의 관계를 찾아 판정 기준을 세웁니다. 기준을 세우는 과정을 학습 또는 훈련이라고 부릅니다. 세워진 기준을 담은 물건을 모델이라고 부릅니다.
flowchart TD
A[예시 데이터] --> B[학습]
B --> C[모델]
D[처음 보는 데이터] --> C
C --> E[예측]
순서는 이렇습니다. 답이 붙은 예시를 모아 학습에 넣습니다. 학습이 끝나면 모델이 남습니다. 그 뒤로는 처음 보는 데이터를 모델에 넣어 예측을 받습니다. 예측을 받는 자리에서는 예시가 더 필요하지 않습니다.
본체는 처음 보는 데이터에 통하는 것입니다. 학습에 쓴 예시를 그대로 되뱉는 것은 여기 해당하지 않습니다. 훈련 데이터를 외워 두었다가 되돌려 주는 프로그램은 새 데이터 앞에서 무너집니다. 그래서 성능은 학습에 쓰지 않은 데이터로 잽니다. 이 성질을 일반화라고 부릅니다.
세워진 기준은 확정된 참이 아니라 데이터에서 얻은 추정입니다. 같은 데이터를 줘도 어떤 학습 절차를 고르느냐에 따라 다른 기준이 나옵니다. 머신러닝이라는 낱말 자체는 이름 붙은 계산 절차 하나를 가리키지 않습니다. 규칙을 데이터에서 얻는다는 방식을 가리킵니다.
배경
규칙을 사람이 다 적어 넣으려면 그 규칙을 말로 적을 수 있어야 합니다. 그런데 규칙을 못 적는 일이 있습니다. 손으로 쓴 숫자를 알아보는 일이 그렇습니다. 사람은 2와 7을 한눈에 가릅니다. 무엇을 근거로 갈랐는지를 조항으로 옮기지는 못합니다. 조항을 적어 나가면 필기마다 예외가 붙습니다.
그래서 규칙 대신 예시를 건네는 쪽이 필요해졌습니다. 사람은 답이 붙은 예시를 모아 주는 데까지만 합니다. 판정 기준은 프로그램이 그 예시에서 만듭니다. 사람이 적을 수 없던 기준을 데이터가 대신 채우는 셈입니다.
이 이름이 쓰인 자리는 1959년입니다. 아서 새뮤얼이 IBM Journal of Research and Development 3권 3호에 낸 「Some Studies in Machine Learning Using the Game of Checkers」입니다. 제목이 말하듯 체커 게임을 두는 프로그램을 다룬 논문입니다.
경계
인공지능과의 선
사람이 규칙을 전부 적어 넣은 판정 프로그램은 인공지능인가 머신러닝인가. 인공지능 쪽입니다. 머신러닝은 아닙니다.
미국 국립표준기술연구소(NIST, National Institute of Standards and Technology)의 용어집이 둘을 따로 적습니다. 인공지능은 사람이 정한 목표들에 대해 실제 환경이나 가상 환경에 영향을 주는 예측·권고·결정을 내릴 수 있는 기계 기반 시스템입니다. 머신러닝은 정확도를 높이는 것을 목표로 데이터에서 적응과 학습을 하는 컴퓨터 시스템의 개발과 사용입니다. 규칙을 사람이 적어 넣은 프로그램도 예측이나 결정을 내리므로 앞의 정의에는 듭니다. 데이터에서 적응과 학습을 하지는 않으므로 뒤의 정의에는 안 듭니다.
자동화와의 선
사람이 데이터에서 판정 기준을 직접 읽어 낸 뒤 그 기준을 코드에 적어 넣은 프로그램은 머신러닝인가. 아닙니다.
앞의 머신러닝 정의가 가르는 자리는 배우는 주체입니다. 데이터에서 적응과 학습을 하는 쪽이 컴퓨터 시스템이어야 합니다. 사람이 데이터를 본 뒤 기준을 정했다면 배운 쪽은 사람입니다. 프로그램은 받아 적은 기준을 실행합니다. 데이터를 썼느냐가 가르는 것이 아닙니다. 데이터에서 기준을 뽑아낸 것이 사람이냐 프로그램이냐가 가릅니다.
예시
MNIST 손글씨 숫자 데이터베이스
얀 르쿤·코리나 코르테스·크리스토퍼 버지스가 배포한 손글씨 숫자 데이터베이스입니다. 훈련 예시 60,000개와 시험 예시 10,000개로 이루어져 있습니다. 미국 국립표준기술연구소의 Special Database 3 과 Special Database 1 에서 구성했습니다. 숫자는 크기가 정규화되어 고정 크기 이미지의 가운데에 놓여 있습니다. 실제 데이터로 학습 기법과 패턴 인식 방법을 시험해 보려는 사람에게 알맞은 데이터베이스라고 배포 페이지가 적습니다. 전처리와 형식 맞추기에 드는 수고가 최소로 든다는 이유입니다.
두 원본의 성격이 다릅니다. Special Database 3 은 인구조사국 직원에게서, Special Database 1 은 고등학생에게서 모았습니다. 그래서 Special Database 3 이 Special Database 1 보다 훨씬 깨끗하다고 적습니다. 알아보기도 더 쉽다고 적습니다. 원래 NIST 는 앞을 훈련 집합으로, 뒤를 시험 집합으로 지정했습니다.
배포 페이지가 시험 오차율을 방법별로 적어 둡니다. 표의 NN 은 신경망(neural network)입니다. 표의 SVM 은 서포트 벡터 머신(support vector machine)입니다.
| 방법 | 전처리 | 시험 오차율(%) | 출처 표기 |
|---|---|---|---|
| linear classifier (1-layer NN) | none | 12.0 | LeCun et al. 1998 |
| linear classifier (1-layer NN) | deskewing | 8.4 | LeCun et al. 1998 |
| pairwise linear classifier | deskewing | 7.6 | LeCun et al. 1998 |
| k-최근접 이웃, 유클리드 거리 | none | 5.0 | LeCun et al. 1998 |
| 2-layer NN, 300 hidden units, 평균 제곱 오차 | none | 4.7 | LeCun et al. 1998 |
| 서포트 벡터 머신(SVM), 가우시안 커널 | none | 1.4 | |
| virtual SVM deg-9 poly [distortions] | none | 0.8 | LeCun et al. 1998 |
| k-최근접 이웃, shape context matching | shape context feature extraction | 0.63 | Belongie et al. IEEE PAMI 2002 |
| virtual SVM, deg-9 poly, 2-pixel jittered | deskewing | 0.56 | DeCoste and Scholkopf, MLJ 2002 |
데이터가 같습니다. 재는 척도도 같습니다. 방법마다 값이 다릅니다. 규칙을 사람이 적는 대신 데이터에서 얻는 자리가 열리면 그 자리를 두고 겨루기가 생깁니다.
대규모 시각 인식 챌린지 2012
2012년 대규모 시각 인식 챌린지(ILSVRC, Large Scale Visual Recognition Challenge)의 공식 결과 페이지입니다. 과제 1의 제출물을 오차와 함께 적습니다. 오차는 다섯 번 추측했을 때의 값입니다.
| 팀 | 오차(5 guesses) | 설명 |
|---|---|---|
| SuperVision | 0.15315 | ImageNet 2011년 가을 배포판의 추가 훈련 데이터 사용 |
| SuperVision | 0.16422 | 제공된 훈련 데이터만 사용 |
| ISI | 0.26172 | 특성 기반 분류기 점수들의 가중합 |
| Oxford_VGG | 0.27302 | Fisher vector 위에서 학습한 서포트 벡터 머신 기준선 |
SuperVision 팀의 제출물은 크리제프스키·수츠케버·힌턴의 합성곱 신경망입니다. 사람이 손으로 짠 특성에 기댄 제출물들과 오차가 이렇게 갈렸습니다.
scikit-learn 의 fit 과 predict
>>> from sklearn.ensemble import RandomForestClassifier
>>> clf = RandomForestClassifier(random_state=0)
>>> X = [[ 1, 2, 3], # 2 samples, 3 features
... [11, 12, 13]]
>>> y = [0, 1] # classes of each sample
>>> clf.fit(X, y)
RandomForestClassifier(random_state=0)
X 가 예시입니다. y 가 각 예시의 답입니다. 예시는 두 개입니다. 예시마다 값이 세 개입니다.
fit 이 이 둘을 받아 판정 기준을 세우는 자리입니다. scikit-learn 은 내장 알고리즘과 모델을
추정기라고 부릅니다. 추정기마다 fit 이 붙습니다.
이 두 자리의 이름을 scikit-learn 용어집이 정의합니다. 특성은 추상적으로 보면 표본 대상 하나를
수치 값이나 범주 값으로 옮기는 함수입니다. 타깃은 지도학습과 준지도학습에서의 종속 변수입니다.
추정기의 fit 메서드에 y 로 건네지는 것이 타깃이라고 용어집이 적습니다.
>>> clf.predict(X)
array([0, 1])
>>> clf.predict([[4, 5, 6], [14, 15, 16]])
array([0, 1])
한 번 학습한 추정기는 새 데이터의 목표값을 예측하는 데 그대로 씁니다. 다시 학습시킬 필요가 없다고 문서가 적습니다. 아래 줄의 두 입력은 학습에 넣지 않은 값입니다. 학습 자리와 예측 자리가 호출 한 줄씩으로 갈려 있습니다.
관련 항목
배우는 방식
지도학습 · 비지도학습 · 준지도학습 · 자기지도학습 · 강화학습 · 생성형 인공지능
푸는 문제의 종류
회귀 · 분류 · 군집화
데이터를 부르는 이름
특성 · 특성 벡터 · 타깃 · 레이블 · 데이터셋 · 훈련 데이터 · 시험 데이터
학습에 쓰는 알고리즘
신경망 · 합성곱 신경망 · 결정 트리 · 최근접 이웃 · 서포트 벡터 머신 · 랜덤 포레스트
학습 과정을 이루는 구성 요소
모델 · 추정기 · 손실 함수 · 경사 하강법 · 역전파 · 임베딩 · 하이퍼파라미터
성능을 재는 지표
일반화 · 과적합 · 교차 검증 · 편향과 분산 · 정확도 · 오차율 · 정밀도와 재현율 · 혼동 행렬
이것을 굴릴 때 마주치는 요소
훈련 · 추론 · 배치 · 예측 · 모델 서빙 · 분포 이동 · 데이터 누수 · 재학습
헷갈리는 이웃
다른 이름: machine learning · 기계학습