훈련 데이터
고친 사람 github-actions[bot]
훈련 데이터는 모델에게 판정 기준을 가르치는 예시 모음입니다. 여기서 모델은 예시를 보고 판정을 배우는 프로그램입니다. 스팸인지 아닌지 표시해 둔 메일 수만 통을 건네면 모델이 그 속에서 판정 기준을 스스로 찾아냅니다.
사람이 규칙을 코드로 적는 대신 예시를 모아 건넵니다. 모델이 무엇을 맞히고 무엇을 틀릴지는 이 예시들이 크게 좌우합니다.
쉽고 빠른 이해
훈련 데이터는 모델에게 보여 주는 연습 문제와 정답 묶음입니다. 스팸 필터라면 사람이 「스팸」이나 「정상」을 표시해 둔 옛 메일 수만 통이 훈련 데이터입니다.
이게 없으면 사람이 거르는 규칙을 하나하나 코드로 적어야 합니다. 스팸을 보내는 쪽이 낱말을 바꾸면 규칙도 계속 고쳐야 합니다. 예시를 모아 주면 모델이 판정 기준을 스스로 찾습니다.
- 예시를 모읍니다. 예시마다 정답을 붙입니다
- 모델이 예시마다 답을 냅니다. 정답과 견줘 틀린 만큼 자기를 고칩니다
- 2를 데이터 전체에 걸쳐 여러 번 되풀이한 뒤, 따로 떼어 둔 데이터로 채점합니다
대가는 모델이 훈련 데이터에 담긴 것만 배운다는 점입니다. 예시가 적거나 한쪽으로 치우쳤거나 정답이 틀리면 모델도 똑같이 틀립니다. 예시를 모아 정답을 붙이는 데 품이 많이 듭니다.
상세
아이에게 고양이를 가르칠 때 고양이의 정의를 읽어 주지 않습니다. 고양이 사진을 여러 장 보여 주며 「이건 고양이야」라고 말해 줍니다. 강아지 사진에는 「이건 아니야」라고 말해 줍니다. 아이는 사진을 거듭 보다가 스스로 고양이를 알아보게 됩니다.
머신러닝은 이 방식을 프로그램에 씁니다. 사람이 규칙을 코드로 적지 않습니다. 예시를 많이 보여 주고 판정 기준은 프로그램이 찾게 합니다. 이렇게 판정 기준을 배운 프로그램이 모델입니다.
모델이 예시를 보며 판정 기준을 고쳐 가는 과정이 훈련입니다. 학습이라고도 부릅니다. 훈련 데이터는 이 과정에 넣는 예시 모음입니다.
스팸 필터를 예로 들면, 사람이 「스팸」이나 「정상」을 표시해 둔 옛 메일 수만 통이 훈련 데이터입니다. 훈련 세트나 학습 데이터라는 이름도 같은 것을 가리킵니다.
규칙을 적는 대신 예시를 모으는 까닭
스팸 메일을 거르는 코드를 손으로 짠다고 합시다. 「무료」나 「당첨」 같은 낱말이 들어가면 스팸으로 보는 규칙을 적습니다. 스팸을 보내는 쪽은 곧 낱말을 바꿉니다. 규칙은 계속 늘어납니다. 늘어난 규칙끼리 서로 부딪힙니다.
예시를 모으는 쪽은 규칙을 사람이 다 적지 않아도 됩니다. 새로운 스팸이 나타나면 그 메일을 훈련 데이터에 더합니다. 그리고 모델을 다시 훈련합니다. 여러 단서를 함께 저울질하는 판정 기준도 모델이 찾아냅니다.
그 대신 모델은 훈련 데이터에 담긴 것만 배웁니다. 훈련 데이터에 없는 종류의 메일은 모델도 알아보지 못합니다. 그래서 훈련 데이터를 어떻게 모으고 다듬느냐가 모델을 만드는 일의 큰 몫이 됩니다.
훈련 데이터 한 건의 생김새
훈련 데이터의 한 건은 대개 두 부분으로 이루어집니다. 모델에게 보여 주는 입력과, 모델이 맞혀야 할 정답입니다.
특성은 입력을 이루는 값 하나하나입니다. 모델에 따라서는 메일 원문 대신 메일을 몇 가지 값으로 바꾼 것을 받습니다. 제목에 「무료」가 들어 있나, 링크가 몇 개인가 같은 값이 특성입니다.
정답 표시가 레이블입니다. 메일마다 사람이 달아 둔 「스팸」이나 「정상」이 레이블입니다.
아래 표는 스팸 필터용 훈련 데이터 세 건입니다. 한 줄이 메일 한 통입니다. 마지막 칸이 레이블입니다.
| 보낸 사람이 주소록에 있나 | 제목에 「무료」가 있나 | 링크 수 | 레이블 |
|---|---|---|---|
| 아니요 | 예 | 7 | 스팸 |
| 예 | 아니요 | 1 | 정상 |
| 아니요 | 아니요 | 0 | 정상 |
모델은 이런 줄을 아주 많이 보면서 어떤 특성 조합이 스팸 쪽으로 기우는지 찾습니다. 훈련이 끝나면 레이블 칸이 빈 새 메일을 받아 그 칸을 채웁니다.
레이블이 있는 데이터와 없는 데이터
모든 훈련 데이터에 레이블이 붙지는 않습니다. 레이블이 있느냐에 따라 훈련 방식이 갈립니다.
| 방식 | 한 건에 든 것 | 모델이 배우는 것 |
|---|---|---|
| 지도 학습 | 입력과 레이블 | 입력을 보고 정답을 맞히는 법 |
| 비지도 학습 | 입력만 | 비슷한 것끼리 묶는 법처럼 데이터 안에 숨은 구조 |
| 자기 지도 학습 | 입력만. 정답은 입력에서 만든다 | 가린 부분을 채우는 법 |
자기 지도 학습은 사람이 레이블을 달지 않아도 됩니다. 문장의 다음 낱말을 가리고 맞히게 하면 문장 자신이 정답을 품기 때문입니다. 글을 다루는 언어 모델은 이렇게 아주 많은 문서를 훈련 데이터로 씁니다.
훈련 데이터가 모델을 바꾸는 과정
훈련 데이터가 모델을 바꾼다는 말은 모델 안의 숫자를 바꾼다는 뜻입니다. 모델 안에는 판정 기준을 정하는 숫자가 여럿 들어 있습니다. 이 숫자가 파라미터입니다. 훈련은 파라미터를 조금씩 고쳐 가는 일입니다.
파라미터를 어느 쪽으로 고칠지는 모델의 답이 얼마나 틀렸는지로 정합니다. 모델의 답과 레이블이 얼마나 다른지 숫자로 재는 함수를 손실 함수라고 합니다. 훈련은 아래 고리를 되풀이합니다.
flowchart TD
A["훈련 데이터에서 예시를 꺼낸다"] --> B["모델이 답을 낸다"]
B --> C["손실 함수로 답과 레이블을 견준다"]
C --> D["틀린 정도가 줄도록 파라미터를 고친다"]
D -->|"다음 예시"| A
고리 한 바퀴는 예시 하나를 처리합니다. 예시 여러 개를 한꺼번에 넣어 한 바퀴를 돌기도 합니다.
훈련 데이터를 한 번씩 다 보는 것이 에포크 한 번입니다. 훈련은 보통 에포크를 여러 번 돕니다. 에포크를 거듭할수록 훈련 데이터에서 모델의 답이 레이블에 가까워집니다.
훈련 데이터와 따로 떼어 두는 데이터
레이블이 달린 데이터는 전부 훈련에 넣지 않고 몇 몫으로 나눠 씁니다. 훈련 데이터에서 점수가 높다고 새 데이터에서도 잘 맞히는 것은 아니기 때문입니다. 모델을 만드는 목적은 앞으로 들어올 새 데이터를 맞히는 것입니다. 처음 보는 데이터에서도 잘 맞히는 성질을 일반화라고 합니다.
모델이 훈련 데이터를 외워 버리면 훈련 데이터에서는 거의 다 맞힙니다. 그러나 새 메일 앞에서는 자주 틀립니다. 이렇게 훈련 데이터에만 맞춰진 상태를 과적합이라고 부릅니다.
그래서 새 데이터를 대신할 몫을 처음부터 따로 떼어 둡니다. 훈련 데이터는 그중 모델을 가르치는 몫입니다.
| 몫 | 하는 일 |
|---|---|
| 훈련 데이터 | 모델이 판정 기준을 배운다 |
| 검증 세트 | 설정을 바꿔 만든 후보 모델 가운데 하나를 고른다 |
| 테스트 세트 | 고른 모델이 새 데이터를 얼마나 맞힐지 마지막에 한 번 잰다 |
검증 세트와 테스트 세트는 훈련에 쓰지 않습니다. 모델이 본 적 없는 데이터라야 새 데이터를 대신할 수 있기 때문입니다. 말할 때는 세 몫을 합쳐 넓게 훈련 데이터라고 부르기도 합니다. 이 항목의 훈련 데이터는 가르치는 몫만 가리킵니다.
훈련 데이터의 흠이 모델로 옮겨 가는 모습
훈련 데이터에 흠이 있으면 그 흠이 모델의 판정에 옮겨 갑니다. 아래 표는 흔히 부딪히는 흠 다섯 가지입니다.
| 흠 | 훈련 데이터에서 무엇이 잘못됐나 | 모델에 나타나는 모습 |
|---|---|---|
| 예시가 너무 적다 | 우연히 겹친 특징이 판정 기준처럼 보인다 | 훈련 데이터는 맞히고 새 데이터는 틀린다(과적합) |
| 표본 편향 | 한쪽으로 치우치게 모아 어떤 집단의 예시가 드물다 | 그 집단의 입력을 자주 틀린다 |
| 레이블 노이즈 | 정상 메일에 스팸 레이블이 붙어 있다 | 틀린 판정을 배운다 |
| 분포 이동 | 옛 데이터가 요즘 들어오는 입력과 달라졌다 | 출시 뒤 점점 더 틀린다 |
| 데이터 누수 | 테스트 세트의 메일이 훈련 데이터에도 들어갔다 | 점수가 실력보다 높게 나온다 |
흠의 뿌리가 데이터에 있으므로 고치는 일도 대개 데이터에서 시작합니다. 예시를 더 모으거나, 고르게 다시 모으거나, 틀린 레이블을 바로잡습니다. 「쓰레기를 넣으면 쓰레기가 나온다」는 오래된 말이 이 사정을 가리킵니다.
훈련 데이터를 마련하는 방법
훈련 데이터는 모으기, 레이블 달기, 늘리기 세 단계를 거쳐 마련합니다.
첫 재료는 서비스가 남기는 기록입니다. 주고받은 메일, 주문 내역, 클릭 기록이 그렇습니다. 손글씨 숫자 사진마다 정답 숫자를 붙인 MNIST(Modified National Institute of Standards and Technology)처럼, 여럿이 함께 쓰라고 공개해 둔 데이터셋을 받아 쓰기도 합니다.
모은 예시에는 레이블을 붙입니다. 사람이 예시를 하나씩 보고 정답을 붙이는 일을 데이터 라벨링이라고 합니다. 품이 많이 들어서 훈련 데이터를 마련하는 비용의 큰 몫을 차지하곤 합니다.
사용자의 행동에서 레이블을 얻기도 합니다. 사용자가 메일함에서 「스팸 신고」 버튼을 누르면 그 메일에 스팸 레이블이 붙습니다. 사람을 따로 쓰지 않아도 레이블이 쌓입니다. 대신 잘못 누른 신고가 섞여 레이블 노이즈가 생깁니다.
예시가 모자라면 가진 예시를 조금씩 바꿔 새 예시를 만듭니다. 이 방법을 데이터 증강이라고 합니다. 고양이 사진을 좌우로 뒤집어도 고양이입니다. 레이블은 바꾸지 않고 예시만 하나 더 얻습니다.
훈련 데이터를 관리하는 일
같은 코드로 훈련해도 훈련 데이터가 다르면 다른 모델이 나옵니다. 그래서 어떤 모델이 어느 훈련 데이터로 만들어졌는지 기록해 둡니다. 데이터에도 코드처럼 판을 매겨 두는 일을 데이터 버전 관리라고 합니다.
글을 지어내는 언어 모델이라면 훈련 데이터에 섞인 개인정보를 기억했다가 답에 내놓을 수 있습니다. 그래서 훈련에 넣기 전에 이름이나 연락처 같은 값을 지우거나 가립니다.
관련 항목
훈련 데이터가 속하는 상위 분야
훈련 데이터를 쓰는 학습 방식
지도 학습 · 비지도 학습 · 자기 지도 학습 · 준지도 학습 · 전이 학습 · 사전 학습 · 파인 튜닝
훈련 데이터 한 건을 이루는 구성 요소
훈련 데이터와 함께 데이터를 나누는 세트
검증 세트 · 테스트 세트 · 홀드아웃 검증 · 교차 검증 · 데이터 분할 · 층화 추출
훈련 데이터를 받아 모델을 고치는 처리 단계
훈련 · 모델 · 파라미터 · 손실 함수 · 경사 하강법 · 역전파 · 미니배치 · 에포크 · 하이퍼파라미터
훈련 데이터 밖에서 재는 모델의 성질
일반화 · 일반화 오차 · 편향-분산 트레이드오프
훈련 데이터의 흠에서 비롯되는 문제
과적합 · 과소적합 · 표본 편향 · 레이블 노이즈 · 분포 이동 · 데이터 누수 · 클래스 불균형 · 데이터 오염
훈련 데이터를 마련하는 작업
데이터 라벨링 · 데이터 증강 · 데이터 전처리 · 데이터 정제 · 합성 데이터
훈련 데이터를 관리하는 수단
데이터 버전 관리 · 개인정보 · 비식별화 · MLOps · 데이터 계보
훈련 데이터로 널리 쓰이는 공개 자료
다른 이름: training data · training set · 훈련 세트 · 학습 데이터 · 트레이닝 데이터