본문으로 바로가기
지식 목록

Knowledge

머신러닝이란 무엇인가

머신러닝은 사람이 규칙을 적어넣는 대신, 데이터로부터 규칙을 만들어내는 방식이다. 무엇으로 배우는지, 학습이 실제로 무엇을 하는 일인지, 어떤 갈래가 있는지, 그리고 언제 이 방식을 쓰지 말아야 하는지까지 다룬다.

  • 머신러닝
  • AI
  • 지도학습
  • 자기지도학습
  • 데이터
  • 모델

머신러닝이란 무엇인가

머신러닝(machine learning, 기계학습)은 사람이 규칙을 직접 적어넣는 대신, 데이터로부터 규칙을 만들어내는 방식이다. 인공지능을 구현하는 여러 접근 중 하나이며, 오늘날 AI라고 불리는 것들의 상당수가 이 방식으로 만들어진다.

일반적인 프로그래밍에서는 사람이 규칙을 쓴다. 무엇을 어떻게 판단할지 조건문으로 적어 넣으면, 컴퓨터는 그 규칙대로 입력을 처리해 답을 낸다.

규칙(사람이 작성) + 입력  →  컴퓨터  →  답

머신러닝은 이 구조를 뒤집는다. 규칙을 적어주는 대신, 입력과 그에 대한 답을 잔뜩 보여주고 규칙 쪽을 만들어내게 한다.

입력 + 답  →  컴퓨터  →  규칙(기계가 생성)
사람이 작성한 규칙과 입력이 컴퓨터에 들어가 답이 나오는 흐름과, 데이터가 컴퓨터에 들어가 모델이 나오는 흐름을 위아래로 비교한 그림
일반적인 프로그래밍에서는 사람이 규칙을 쓰지만, 머신러닝에서는 데이터를 넣어 규칙에 해당하는 모델을 얻는다.

이렇게 만들어진 규칙 쪽을 모델(model) 이라고 부른다. 다만 사람이 쓰는 조건문 같은 형태는 아니다. 모델의 실체가 무엇인지는 잠시 뒤에 다룬다.

그래서 머신러닝이 자동화하는 것은 판단 그 자체가 아니라 판단 규칙을 만드는 일이다. 이 구분이 중요하다. 사람이 하던 일이 사라지는 게 아니라, 사람이 하는 일의 성격이 "규칙을 쓰는 것"에서 "데이터를 고르고 결과를 검증하는 것"으로 옮겨간다.


왜 이 방식이 필요한가

규칙을 적을 수 있다면 굳이 머신러닝을 쓸 이유가 없다. 문제는 사람이 해낼 수는 있지만 규칙으로 적기는 어려운 일이 아주 많다는 것이다.

사진에 고양이가 있는지 판별하는 규칙을 적어보려 하면 금방 막힌다. 귀가 뾰족하고, 털이 있고, 수염이 있고… 그런데 뒤돌아 앉은 고양이는? 새끼 고양이는? 인형은? 사람은 이걸 순식간에 해내지만, 자기가 어떤 판단 과정을 거쳤는지를 빠짐없는 규칙 목록으로 옮겨 적지는 못한다. 예외가 끝없이 나오기 때문이다.

손글씨 인식, 음성을 글자로 옮기기, 번역, 추천, 이상 거래 탐지 — 머신러닝이 실제로 성과를 낸 영역은 대체로 이런 성격을 공유한다. 정답은 분명한데 정답에 이르는 규칙은 말로 다 못 하는 문제들이다.


알고리즘과 모델은 무엇이 다른가

머신러닝을 이야기할 때 이 두 단어가 자주 섞여 쓰인다. 구분해두면 나머지가 훨씬 명확해진다.

알고리즘(algorithm) 은 데이터로부터 패턴을 배우는 절차이자 수학적 논리다. "어떤 방식으로 배울 것인가"에 해당한다. 결정 트리, 선형 회귀, 신경망 같은 것들이 알고리즘이다.

모델(model) 은 그 알고리즘이 데이터를 학습한 뒤 남는 결과물이다. 새로운 입력을 받아 답을 내놓는 데 쓰이는 것이 바로 이 모델이다.

요리에 비유하면 알고리즘은 조리법이고, 모델은 그 조리법으로 특정 재료를 써서 만들어낸 요리다. 같은 알고리즘이라도 다른 데이터로 학습하면 다른 모델이 나온다.

그렇다면 모델의 실체는 무엇인가. 파라미터(parameter, 매개변수)라고 부르는 수많은 숫자들의 묶음이다. 신경망에서는 이 파라미터가 주로 가중치(weight)와 편향(bias)의 형태를 띤다. 학습이란 이 숫자들을 적절한 값으로 맞춰가는 과정이고, 학습이 끝났다는 것은 이 숫자들이 어떤 값으로 고정됐다는 뜻이다.


학습했다는 것을 어떻게 확인하는가

"이 프로그램은 학습한다"는 말은 그 자체로는 검증할 수 없다. 무엇을 배웠는지, 얼마나 잘하게 됐는지 잴 방법이 없으면 확인할 도리가 없기 때문이다.

Tom Mitchell이 1997년 교재 『Machine Learning』에서 제시한 정의는 이 문제를 정면으로 다룬다.

어떤 프로그램이 작업 T를, 성능 척도 P로 측정했을 때, 경험 E를 쌓을수록 더 잘하게 된다면, 그 프로그램은 E로부터 학습한다고 말한다.

이 정의가 실용적인 이유는 세 가지를 반드시 명시하게 만들기 때문이다.

  • T (Task, 작업) — 무엇을 하는가

  • P (Performance measure, 성능 척도) — 잘한다는 것을 무엇으로 재는가

  • E (Experience, 경험) — 무엇으로부터 배우는가

스팸 분류기라면 T는 메일을 스팸인지 아닌지 가르는 일, P는 정확히 가른 비율, E는 스팸 여부가 표시된 과거 메일이 된다. 셋이 모두 채워져야 "학습했다"는 주장이 확인 가능한 것이 된다.

이 셋 중 하나라도 비어 있으면 검증할 방법이 없다. 특히 P가 빠진 주장, 즉 무엇으로 측정했는지 밝히지 않은 성능 주장은 확인할 수 없다. "우리 모델이 더 똑똑해졌다"는 문장을 만났을 때 T·P·E를 되물어보면 대부분의 모호함이 걸러진다.


무엇으로 배우는가 — 특징과 레이블

여기가 머신러닝을 이해하는 데 가장 자주 건너뛰는 부분이다.

모델은 사진을 보지 않는다. 숫자를 본다. 아무리 좋은 알고리즘이라도 사진이나 문장을 그대로 받아들이지는 못한다. 데이터를 모델이 다룰 수 있는 숫자의 목록으로 바꿔주어야 한다.

집 한 채를 그린 그림과, 그 옆에 면적 84제곱미터, 방 개수 3, 지어진 지 12년, 역까지 거리 400미터라는 네 줄짜리 표를 화살표로 이어놓은 그림
모델은 집을 보지 못한다. 특징이라는 숫자로 바꿔주어야 다룰 수 있다.

이때 각각의 숫자를 특징(feature, 특성) 이라고 부른다. 통계학에서는 독립변수라고 부르는 것과 대체로 같다.

집값을 예측하는 모델을 생각해보자. 집이라는 대상 자체를 모델에 넣을 수는 없다. 대신 면적, 방 개수, 지어진 연도, 역까지의 거리 같은 숫자로 바꾼다. 이 숫자들이 특징이고, 모델은 오직 이것만 본다.

그리고 지도학습에서는 맞혀야 할 정답이 함께 주어진다. 이 정답을 레이블(label, 정답표) 또는 타깃(target) 이라고 부른다. 통계학의 종속변수에 해당한다. 집값 예측에서는 실제 거래 가격이 레이블이다.

정리하면 지도학습이란 특징과 레이블 사이의 관계를 배우는 일이다.

어떤 특징을 고르느냐가 성능을 좌우한다

원본 데이터에서 어떤 특징을 뽑아낼지, 어떻게 변형할지, 새로운 특징을 만들어낼지 결정하는 작업을 특징 공학(feature engineering) 이라고 한다.

집값 예측에서 "지어진 연도"를 그대로 쓰는 것보다 "지어진 지 몇 년 됐는가"로 바꾸는 편이 나을 수 있다. 면적과 방 개수를 나눠 "방 하나당 면적"이라는 새 특징을 만들 수도 있다. 같은 데이터라도 어떤 특징으로 바꾸느냐에 따라 결과가 크게 달라진다.

딥러닝은 이 부분을 상당히 자동화한다. 여러 층을 쌓은 신경망은 원본 데이터에서 유용한 특징을 스스로 찾아내는 경향이 있다. 이를 표현 학습(representation learning) 이라고 부른다. 이미지나 음성처럼 사람이 특징을 일일이 설계하기 어려운 데이터에서 딥러닝이 강한 이유가 여기에 있다.

다만 자동화됐다고 해서 사라진 것은 아니다. 어떤 데이터를 넣을지, 어떤 형태로 넣을지는 여전히 사람이 정한다.


데이터를 준비한다는 것

실제 머신러닝 작업에서 가장 많은 시간이 드는 곳은 학습이 아니라 데이터 준비다. 이 단계를 모르면 머신러닝이 실제로 어떤 일인지 알기 어렵다.

데이터 수집. 풀려는 문제와 관련 있는 데이터를 모은다. 양보다 중요한 것은 그 데이터가 실제로 마주칠 상황을 대표하는가다.

레이블링(labeling, 어노테이션). 지도학습을 하려면 각 데이터에 정답을 붙여야 한다. 사진 수만 장에 "고양이"인지 아닌지를 사람이 일일이 표시하는 식이다. 비용이 크고 오래 걸리며, 여기서 생긴 실수는 그대로 모델의 실수가 된다. 사람마다 판단이 갈리는 애매한 경우를 어떻게 처리할지도 미리 정해야 한다.

전처리와 정제(preprocessing, cleaning). 빠진 값을 어떻게 할지, 명백히 잘못된 값을 어떻게 걸러낼지, 단위가 다른 숫자들을 어떤 범위로 맞출지 정한다. 키를 센티미터로 재고 몸무게를 킬로그램으로 잰 데이터를 그대로 쓰면, 숫자가 큰 쪽이 부당하게 큰 영향을 미칠 수 있다. 이런 조정을 스케일링(scaling) 또는 정규화(normalization)라고 한다. 참고로 한국어에서 '정규화'는 과적합을 막기 위한 별개의 기법인 regularization을 옮길 때도 쓰인다. 같은 단어가 전혀 다른 두 가지를 가리키므로, 어느 쪽인지는 문맥으로 판단해야 한다.

데이터 증강(data augmentation). 데이터가 부족할 때 기존 데이터를 변형해 늘리는 방법이다. 이미지를 좌우로 뒤집거나 조금 회전시켜 새로운 학습 예시로 쓰는 식이다.

클래스 불균형(class imbalance) 다루기. 사기 거래 탐지처럼 한쪽 경우가 극단적으로 드문 문제가 있다. 정상 거래가 99.9%라면 무조건 "정상"이라고 답하는 모델도 정확도 99.9%가 나온다. 이런 상황에서는 데이터 구성을 조정하거나 평가 방식을 바꿔야 한다.


학습이 실제로 무엇을 하는가

머신러닝에서 "학습"은 사람이 무언가를 이해하는 과정과 다르다. 실제로 일어나는 일은 다음의 반복이다.

데이터에 맞지 않는 점선을 그은 산점도에서 시작해, 각 점과 선 사이의 오차를 재고, 세 개의 슬라이더로 파라미터를 조정한 뒤, 데이터에 잘 맞는 실선이 된 산점도로 돌아오는 네 단계의 순환 그림
학습은 예측하고, 얼마나 틀렸는지 재고, 그만큼 조정하는 일의 반복이다.

1. 모델이 답을 내본다. 처음에는 파라미터가 사실상 아무렇게나 정해져 있으므로 답도 엉망이다.

2. 얼마나 틀렸는지 잰다. 모델이 낸 답과 실제 레이블을 비교해 오차를 하나의 숫자로 만든다. 이 오차를 계산하는 식을 손실 함수(loss function) 라고 한다. 손실이 크다는 것은 많이 틀렸다는 뜻이다.

3. 손실이 줄어드는 방향으로 파라미터를 조금 조정한다. 어느 방향으로 얼마나 움직여야 손실이 줄어드는지 계산해서 그만큼 움직인다. 이 과정을 최적화(optimization) 라고 하고, 가장 널리 쓰이는 방법이 경사하강법(gradient descent) 이다. 한 번에 얼마나 크게 움직일지를 정하는 값이 학습률(learning rate) 이다.

4. 1~3을 수없이 반복한다. 전체 학습 데이터를 한 번 다 훑는 것을 에폭(epoch) 이라고 하며, 보통 여러 에폭을 돌린다. 손실이 더 줄지 않을 때까지 반복한다.

파라미터와 하이퍼파라미터

학습 중에 기계가 조정하는 값이 파라미터다. 반면 학습률처럼 사람이 학습 전에 정해주는 값하이퍼파라미터(hyperparameter) 라고 부른다. 몇 개의 층을 쌓을지, 학습률을 얼마로 할지, 몇 에폭을 돌릴지 같은 것들이다.

하이퍼파라미터를 이리저리 바꿔가며 가장 좋은 조합을 찾는 작업을 하이퍼파라미터 튜닝이라고 한다. 이 작업은 기계가 아니라 사람이(또는 사람이 짜놓은 탐색 절차가) 한다.

기계가 스스로 하는 부분은 생각보다 좁다

어떤 데이터를 모을지, 무엇을 정답으로 삼을지, 어떤 특징을 쓸지, 무엇으로 성능을 잴지, 언제 학습을 멈출지 — 이런 결정은 전부 사람이 한다. 자동화되는 것은 정해진 목표를 향해 파라미터를 조정하는 반복 작업이지, 그 목표를 정하는 일이 아니다.


외운 것과 배운 것은 다르다

머신러닝에서 가장 중요한 판단 기준이 여기 있다.

학습에 쓴 데이터에서 정답을 잘 맞히는 것은 학습이 성공했다는 증거가 아니다. 데이터를 통째로 외워버려도 그 데이터에서는 만점이 나오기 때문이다.

왼쪽에는 기출 문제집을 펴놓고 머리를 긁으며 곤란해하는 학생, 오른쪽에는 원리와 문제 해결이라는 책을 펴놓고 손가락을 들어 답을 찾은 학생을 나란히 놓고, 각각 과적합과 일반화로 이름 붙인 그림
학습 데이터에서만 잘하는 것을 과적합, 처음 보는 데이터에서도 잘하는 것을 일반화라고 한다.

시험 문제를 이해하지 못한 채 기출 문제의 답만 외운 학생을 생각하면 된다. 기출에서는 만점이지만 새 문제에서는 무너진다. 모델도 똑같은 일을 한다. 학습 데이터의 세세한 잡음까지 통째로 기억해버리는 현상을 과적합(overfitting, 과대적합) 이라고 한다.

반대로 모델이 너무 단순해서 데이터의 패턴조차 제대로 잡아내지 못하는 경우도 있다. 이것은 과소적합(underfitting) 이라고 한다.

우리가 원하는 것은 그 사이 어딘가다. 본 적 없는 데이터에서도 잘 해내는 능력, 이것을 일반화(generalization) 라고 하며, 머신러닝이 실제로 달성하려는 목표가 바로 이것이다.

그래서 데이터를 나눈다

일반화가 됐는지 확인하려면 모델이 본 적 없는 데이터가 필요하다. 그래서 가진 데이터를 보통 셋으로 나눈다.

  • 학습 데이터(training set) — 모델을 학습시키는 데 쓴다

  • 검증 데이터(validation set) — 학습 중에 하이퍼파라미터를 고르고 조정하는 데 쓴다

  • 테스트 데이터(test set) — 마지막에 최종 성능을 재는 데 한 번만 쓴다

테스트 데이터를 학습이나 조정에 쓰면 그 순간부터 그 숫자는 성능이 아니게 된다. 이렇게 알아서는 안 될 정보가 학습 과정에 새어 들어가는 것데이터 누수(data leakage) 라고 한다.

데이터 누수는 데이터를 잘못 나눴을 때만 생기는 것이 아니다. 더 흔한 형태는 예측 시점에는 알 수 없는 정보가 특징에 섞여 들어가는 경우다. 환자의 질병 발생을 예측하는 모델에 "처방받은 약" 정보를 특징으로 넣으면, 학습 데이터에서는 성능이 놀랍도록 좋게 나온다. 하지만 실제로 예측해야 하는 시점에는 아직 처방이 없다. 검증 단계에서 유난히 좋은 성능이 나올 때 가장 먼저 의심해야 할 것이 데이터 누수다.

데이터가 적을 때는 나누기가 아까우므로, 데이터를 여러 조각으로 쪼개 번갈아 검증용으로 쓰는 교차 검증(cross-validation) 을 쓴다.

성능 수치를 볼 때 물어야 할 것

이 원칙이 실무에서 갖는 의미는 단순하다. 어떤 모델의 성능 수치를 봤을 때 물어야 할 첫 질문은 "그 숫자를 어떤 데이터에서 쟀는가"이다. 학습에 쓴 데이터에서 잰 수치는 성능이 아니라 암기 정도에 가깝다.

그리고 정확도(accuracy) 하나만으로는 부족한 경우가 많다. 앞서 본 사기 탐지처럼 한쪽이 드문 문제에서는, 놓친 것과 잘못 잡은 것을 따로 봐야 한다. 이를 위해 정밀도(precision), 재현율(recall), 둘을 합친 F1 점수 같은 지표를 함께 쓴다.


머신러닝의 다섯 갈래

무엇을 가지고 배우느냐에 따라 나뉜다. 흔히 셋으로 소개되지만, 실제로는 다섯으로 보는 것이 지금 상황에 맞다.

다섯 개의 세로 칸에 지도학습, 비지도학습, 자기지도학습, 준지도학습, 강화학습을 나란히 놓고, 각각 모든 데이터에 정답표가 붙은 모습, 정답표 없이 무리로 묶인 모습, 데이터 일부가 가려져 물음표가 붙은 모습, 일부에만 정답표가 붙은 모습, 로봇이 환경과 행동과 보상을 주고받는 모습으로 비교한 그림
정답이 어떻게 주어지느냐가 갈래를 가른다. 자기지도학습은 데이터가 스스로 정답을 만들어내며, 오늘날 대규모 언어 모델을 만드는 방법이다.

지도학습(supervised learning) 입력과 정답이 짝지어진 데이터로 배운다. 사진과 "고양이"라는 레이블이 함께 주어지는 식이다. 결과를 몇 개의 범주 중 하나로 고르는 문제를 분류(classification), 연속적인 숫자를 맞히는 문제를 회귀(regression) 라고 한다. 가장 널리 쓰이지만, 레이블을 붙이는 비용이 크다는 한계가 있다.

비지도학습(unsupervised learning) 정답 없이 데이터만 주고 그 안의 구조를 찾게 한다. 비슷한 것끼리 묶는 군집화(clustering), 데이터의 차원을 줄이는 차원 축소 같은 작업이 여기 속한다. 고객을 비슷한 무리로 나누는 일이 대표적이다.

자기지도학습(self-supervised learning) 레이블이 없는 데이터에서 정답을 데이터 자신으로부터 만들어내 학습한다. 문장에서 일부 단어를 가린 뒤 그 단어를 맞히게 하는 것이 대표적이다. 정답을 사람이 붙이지 않았을 뿐, 학습 과정 자체는 지도학습과 같다.

이 방식이 오늘날 대규모 언어 모델을 학습시키는 주된 방법이다. 인터넷의 방대한 텍스트에 사람이 일일이 레이블을 붙이는 것은 불가능하지만, "다음 단어 맞히기"라는 문제로 바꾸면 텍스트 자체가 무한한 학습 데이터가 된다. 이렇게 폭넓은 능력을 갖춘 모델을 먼저 만든 뒤, 특정 작업에 맞춰 다듬는 흐름이 지금 AI의 기본 구조다.

준지도학습(semi-supervised learning) 레이블이 붙은 데이터와 붙지 않은 데이터를 함께 쓴다. 레이블이 있는 소량의 데이터에서 얻은 정보로 나머지 데이터에 대한 추정을 세우고, 그것을 학습에 끌어들이는 방식이다. 레이블링 비용을 줄이려는 현실적인 절충이다.

강화학습(reinforcement learning) 정답 대신 행동의 결과로 주어지는 보상(reward) 을 통해 배운다. 무엇이 정답인지 미리 알려주지 않고, 잘한 행동에는 높은 보상을 주는 방식으로 방향을 잡아준다. 게임, 로봇 제어처럼 순차적인 결정이 필요한 문제에 쓰이며, 언어 모델을 사람의 선호에 맞추는 과정에도 활용된다.

이 갈래들은 배타적이지 않다. 실제 시스템은 여러 방식을 단계별로 조합하는 경우가 많다.


신경망만 있는 것이 아니다

딥러닝은 머신러닝의 한 방법이다. 여러 층으로 쌓은 인공신경망을 쓰는 방식이며, 지금 가장 주목받는 것은 사실이다. 하지만 머신러닝에는 다른 방법이 많고, 상황에 따라 그쪽이 더 나은 경우도 흔하다.

  • 선형 회귀·로지스틱 회귀 — 가장 단순한 축에 속하지만 여전히 널리 쓰인다. 결과를 해석하기 쉽다는 큰 장점이 있다.

  • 결정 트리(decision tree) — 조건을 나무 모양으로 이어붙여 판단한다. 사람이 읽을 수 있는 규칙이 결과로 나온다.

  • 랜덤 포레스트, Gradient Boosting — 여러 개의 결정 트리를 조합해 성능을 높이는 앙상블(ensemble) 방법이다. 표 형태의 데이터에서는 딥러닝보다 나은 결과를 내는 경우가 많다.

  • 서포트 벡터 머신(SVM) — 클래스 사이의 경계를 최대한 여유 있게 긋는 방식이다.

  • k-최근접 이웃(kNN) — 새 데이터와 가장 비슷한 기존 데이터들을 찾아 그들의 답을 따른다.

  • k-평균(k-means) — 대표적인 군집화 방법이다.

선택 기준은 대체로 이렇다. 데이터가 표 형태이고 양이 많지 않다면 앙상블 계열이 유리하다. 이미지·음성·텍스트처럼 사람이 특징을 설계하기 어렵고 데이터가 많다면 딥러닝이 강하다. 판단 근거를 설명해야 한다면 단순한 방법이 낫다.


학습이 끝난 뒤 — 추론

머신러닝에는 뚜렷이 구분되는 두 단계가 있다.

학습(training) — 데이터로부터 파라미터를 조정해 모델을 만드는 단계. 시간과 계산 자원이 많이 든다.

추론(inference) — 학습이 끝난 모델에 새로운 입력을 넣어 답을 얻는 단계. 실제로 사용자가 마주하는 것은 이쪽이다.

이 구분에서 나오는 중요한 사실이 있다. 배포된 모델은 대체로 더 이상 학습하지 않는다. 파라미터가 고정된 상태로 답만 내놓는다. 쓰는 동안 저절로 똑똑해지지 않는다는 뜻이다.

새로 배우게 하려면 데이터를 추가해 다시 학습시키고 새 버전으로 교체해야 한다. 사용할수록 저절로 좋아진다는 인상은 대체로 사실이 아니며, 실제로는 뒤에서 사람이 새 데이터를 모아 재학습시키고 있는 경우가 많다.

예외가 없지는 않다. 새 데이터가 들어올 때마다 조금씩 파라미터를 갱신하도록 만든 방식을 온라인 학습(online learning) 이라고 하며, 이에 대비되는 일반적인 방식을 배치 학습(batch learning)이라고 부른다. 다만 온라인 학습은 잘못된 데이터가 들어오면 모델이 그대로 망가질 수 있어, 쓰는 곳이 제한적이고 별도의 감시 장치가 필요하다.


처음부터 배우지 않는다 — 전이학습

오늘날 실제 시스템의 상당수는 백지 상태에서 학습을 시작하지 않는다.

이미 학습된 모델을 가져와 새로운 작업에 맞게 조정하는 것을 전이학습(transfer learning) 이라고 한다. 어떤 작업을 배우며 얻은 능력이 다른 작업에도 쓸모 있다는 발상이다.

가장 흔한 형태는 이렇다. 먼저 방대한 데이터로 폭넓은 능력을 갖춘 모델을 만든다. 이 단계를 사전학습(pre-training) 이라고 한다. 그다음 상대적으로 적은 양의 특정 작업 데이터로 그 모델을 다듬는다. 이 단계를 미세조정(fine-tuning) 이라고 하며, 전이학습의 한 형태다.

이 방식이 널리 쓰이는 이유는 단순하다. 처음부터 학습시키려면 막대한 데이터와 계산 자원이 필요하지만, 이미 만들어진 모델을 다듬는 것은 훨씬 적은 비용으로 가능하기 때문이다.


머신러닝 프로젝트의 전체 흐름

지금까지의 내용을 순서대로 늘어놓으면 이렇게 된다.

  1. 문제 정의 — 무엇을 예측하거나 판단할 것인가. 성공을 무엇으로 잴 것인가. (사람)

  2. 데이터 수집 — 관련 데이터를 모은다. (사람)

  3. 레이블링 — 필요하다면 정답을 붙인다. (사람, 또는 사람이 관리하는 절차)

  4. 전처리와 특징 준비 — 정제하고, 모델이 다룰 형태로 바꾼다. (사람)

  5. 데이터 분할 — 학습·검증·테스트로 나눈다. (사람)

  6. 알고리즘 선택 — 문제와 데이터에 맞는 방법을 고른다. (사람)

  7. 학습 — 파라미터를 조정하는 반복. (기계)

  8. 평가와 튜닝 — 검증 데이터로 성능을 보고 하이퍼파라미터를 조정한다. (사람이 판단, 기계가 실행)

  9. 최종 평가 — 테스트 데이터로 한 번 잰다. (사람)

  10. 배포 — 실제 시스템에 넣는다. (사람)

  11. 감시와 재학습 — 성능이 떨어지는지 지켜보고, 필요하면 새 데이터로 다시 학습시킨다. (사람)

기계가 맡는 것은 7번, 그리고 8번의 실행 부분뿐이다. 나머지는 전부 사람의 판단이다. "머신러닝이 알아서 해준다"는 인상이 실제와 얼마나 다른지는 이 목록을 보면 분명해진다.


언제 쓰고, 언제 쓰지 않는가

머신러닝은 만능 도구가 아니다. 다음 조건에서는 오히려 나쁜 선택이다.

규칙이 이미 명확할 때. 세율 계산, 재고 차감, 배송비 산정처럼 규칙이 정해져 있는 일에 머신러닝을 쓰면 정확도는 떨어지고 설명은 어려워지고 비용만 는다. 규칙으로 적을 수 있으면 규칙으로 적는 게 낫다.

데이터가 없거나 정답을 모를 때. 머신러닝은 예시로부터 배우므로, 배울 예시가 없으면 아무것도 못 한다.

틀렸을 때의 대가가 크고 근거를 설명해야 할 때. 대출 거절, 의료 판단, 채용처럼 결과에 책임이 따르는 영역에서는 왜 그렇게 판단했는지를 설명할 수 있어야 한다.

과거가 미래를 알려주지 않는 상황일 때. 머신러닝은 과거 데이터의 패턴을 배운다. 규칙이 근본적으로 바뀌는 상황에서는 과거 데이터가 오히려 방해가 된다.

반대로 규칙으로 적기는 어렵지만 예시는 많이 모을 수 있는 문제, 그리고 가끔 틀려도 감당할 수 있는 문제라면 머신러닝이 강하다.


데이터로부터 배우기 때문에 생기는 문제들

머신러닝의 장점과 단점은 같은 뿌리에서 나온다. 데이터로부터 배운다는 성질 자체가 다음을 함께 데려온다.

데이터에 있는 치우침을 그대로 배운다. 과거 데이터에 특정 집단에 불리한 패턴이 들어 있으면, 모델은 그 패턴을 충실히 재현한다. 모델에 악의가 있어서가 아니라, 주어진 데이터에서 규칙을 찾는 일을 성실히 해낸 결과다. 이를 알고리즘 편향(algorithmic bias) 이라고 한다.

상관관계를 배우지 인과관계를 배우지 않는다. 함께 나타나는 것들 사이의 관계를 찾을 뿐, 무엇이 무엇의 원인인지는 구분하지 못한다. 아이스크림 판매량과 익사 사고가 함께 늘어난다는 패턴은 찾아내지만, 둘 다 여름이라는 공통 원인 때문이라는 것은 데이터만으로 알 수 없다. 예측에는 쓸 수 있어도 "이걸 바꾸면 저게 바뀐다"는 결론으로 넘어가면 위험하다.

세상이 변하면 낡는다. 모델은 학습 시점의 데이터를 반영한다. 시간이 지나 사람들의 행동이나 환경이 달라지면, 모델이 배운 규칙은 점점 현실과 어긋난다. 코드를 한 줄도 고치지 않았는데 성능이 떨어지는 이 현상을 드리프트(drift) 라고 한다. 그래서 머신러닝 시스템은 만들고 끝나는 게 아니라 계속 지켜봐야 한다.

왜 그렇게 판단했는지 따라가기 어렵다. 규칙 기반 시스템은 어느 조건에서 결론이 나왔는지 추적할 수 있지만, 머신러닝 모델의 판단 근거는 수많은 파라미터에 분산돼 있어 사람이 읽어내기 어렵다. 이 문제를 다루는 분야를 설명 가능성(explainability) 이라고 한다.


가장 널리 인용되는 정의의 문제

머신러닝을 설명하는 글에는 거의 빠짐없이 등장하는 문장이 있다.

명시적으로 프로그래밍하지 않고도 컴퓨터가 학습할 수 있게 하는 연구 분야

보통 1959년 Arthur Samuel의 논문 인용으로 소개된다. 그런데 이 문장이 그 논문에 그대로 실려 있는지는 확인되지 않는다.

Samuel의 1959년 논문 「Some Studies in Machine Learning Using the Game of Checkers」에 실제로 담긴 것은 이런 취지의 서술이다. 컴퓨터는 그것을 프로그래밍한 사람보다 체커를 더 잘 두도록 프로그래밍될 수 있다는 것, 그리고 경험으로부터 배우도록 프로그래밍하는 일이 결국 세세한 프로그래밍 노력의 상당 부분을 없애줄 것이라는 것.

널리 도는 그 한 문장은 논문의 취지를 요약한 해석일 가능성이 크다는 지적이 오래전부터 있었다. 그런데도 교육 자료, 블로그, 심지어 학술 출판물까지 "(Samuel, 1959)"라는 각주를 달아 그대로 싣는다. 인용이 인용을 낳으면서 출처가 굳어진 사례다.

이걸 굳이 짚는 이유가 있다. 이 문장은 지금도 머신러닝을 설명하는 거의 모든 곳에서 재생산되고 있고, AI에게 머신러닝의 정의를 물으면 대개 이 문장을 출처와 함께 내놓는다. 문장의 내용 자체는 머신러닝을 잘 요약한다. 문제는 그것을 특정 인물이 특정 해에 한 말로 인용하는 부분이다.

출처가 붙어 있다는 것과 검증됐다는 것은 다르다.


흔한 오해

"머신러닝이 곧 AI다." 머신러닝은 AI를 구현하는 방법 중 하나다. 지식을 규칙으로 표현하고 그것으로 추론하는 시스템도 AI이며, 정확성과 설명 가능성이 필요한 영역에서는 여전히 더 적합하다.

"머신러닝은 곧 딥러닝이다." 딥러닝은 머신러닝의 한 방법이다. 결정 트리, 앙상블, 회귀 같은 방법이 현장에서 널리 쓰이고 있으며, 표 형태 데이터에서는 더 나은 선택인 경우가 많다.

"머신러닝의 갈래는 셋이다." 지도·비지도·강화로 소개되는 경우가 많지만, 자기지도학습과 준지도학습을 포함해 다섯으로 보는 것이 지금 상황에 맞다. 특히 자기지도학습은 오늘날 대규모 언어 모델을 만드는 주된 방법이다.

"데이터만 많으면 잘 된다." 양보다 데이터가 무엇을 담고 있는지가 중요하다. 풀려는 문제와 상관없는 데이터가 아무리 많아도 소용없고, 치우친 데이터가 많으면 치우침만 더 확고하게 학습된다.

"모델이 스스로 배운다." 자동화되는 부분은 정해진 목표를 향해 파라미터를 조정하는 반복 작업이다. 무엇을 배울지, 어떤 특징을 쓸지, 무엇으로 성능을 잴지는 사람이 정한다.

"쓸수록 똑똑해진다." 배포된 모델은 대체로 학습이 끝나 파라미터가 고정된 상태다. 개선하려면 새 데이터로 다시 학습시켜 새 버전으로 교체해야 한다.

"학습 데이터에서 정확도가 높으면 좋은 모델이다." 학습에 쓴 데이터에서의 정확도는 암기 정도에 가깝다. 판단 기준은 본 적 없는 데이터에서의 성능, 즉 일반화 능력이다.

"정확도 하나로 성능을 판단할 수 있다." 한쪽 경우가 극단적으로 드문 문제에서는 정확도가 쉽게 부풀려진다. 사기 거래가 0.1%뿐인 데이터에서는 전부 정상이라고 답해도 정확도 99.9%가 나온다. 무엇을 놓쳤고 무엇을 잘못 잡았는지를 정밀도와 재현율로 함께 봐야 한다.


확인한 자료

아직 직접 확인하지 못한 자료

  • Samuel, A. L., Some Studies in Machine Learning Using the Game of Checkers, IBM Journal of Research and Development 3(3), 1959

「가장 널리 인용되는 정의의 문제」에서 다룬 내용은 이 논문의 원문을 직접 확인한 것이 아니라, 원문에 해당 문구가 없다는 여러 2차 지적을 근거로 한 것이다. 원문을 확인하는 대로 이 항목을 갱신한다.

작성일 ·

← 모든 지식 보기