사전 준지도학습
개념

준지도학습

gabury1고친 사람 github-actions[bot]

준지도학습은 정답이 달린 데이터는 조금만, 정답이 없는 데이터는 많이 써서 모델을 가르칩니다. 정답을 다는 사람 손이 비쌀 때 쓰는 방식입니다. 사진 만 장 가운데 백 장에만 이름을 답니다. 나머지 사진도 학습에 보탭니다.

쉽고 빠른 이해

준지도학습은 답이 달린 예시 몇 개와 답이 없는 예시 여러 개로 모델을 가르칩니다. 고객 문의 만 건 가운데 이백 건에만 「환불」·「배송」 같은 분류를 달아 둡니다. 나머지 문의까지 학습에 씁니다.

답을 다는 일은 사람이 하나씩 읽어야 해서 오래 걸립니다. 답 없는 데이터는 이미 쌓여 있는 경우가 많습니다. 준지도학습은 이 쌓인 데이터를 버리지 않고 씁니다.

  1. 답이 달린 예시로 모델을 먼저 가르칩니다
  2. 그 모델에게 답 없는 예시의 답을 짐작하게 합니다
  3. 자신 있게 짐작한 것만 골라 답으로 삼아 다시 가르칩니다

대가는 틀린 짐작이 굳을 수 있다는 점입니다. 모델이 잘못 짐작한 답을 정답처럼 다시 배우면 같은 실수가 점점 단단해집니다.

답이 달린 예시가 이미 넉넉하면 쓰지 않습니다. 사람이 몇백 건 더 답을 다는 편이 싸게 먹힐 때도 쓰지 않습니다.

상세

새로 온 직원이 고객 문의를 분류하는 일을 배운다고 해 봅시다. 선배는 바빠서 스무 통만 「환불」과 「배송」으로 나눠 보여 줍니다. 신입은 나머지 수천 통을 혼자 읽습니다. 그러다 보면 답을 듣지 못한 문의끼리도 닮은 것이 눈에 들어옵니다.

준지도학습(semi-supervised learning)은 머신러닝의 한 방식입니다. 머신러닝은 판정 규칙을 사람이 적어 넣는 대신 데이터에서 뽑아내는 방식을 말합니다. 문의를 나누는 규칙을 사람이 일일이 쓰지 않고, 예시를 보여 주어 규칙을 찾게 합니다.

준지도학습은 그 가운데 정답이 달린 예시는 조금만, 정답이 없는 예시는 많이 써서 배웁니다. 앞의 비유에서 선배가 나눠 준 스무 통이 정답 달린 예시입니다. 혼자 읽은 수천 통은 정답 없는 예시입니다.

이 정답을 레이블이라고 부릅니다. 레이블은 예시 하나하나에 사람이 달아 둔 답 표시입니다. 문의 메일에 붙인 「환불」, 사진에 붙인 「고양이」가 레이블입니다. 준지도학습은 레이블이 몇 안 될 때 레이블 없는 데이터까지 끌어와 배웁니다.

배운 결과로 남는 것이 모델입니다. 모델은 입력을 받아 답을 내는 함수라고 보면 됩니다. 준지도학습이 끝나면 새 문의 한 통을 넣었을 때 「환불」인지 「배송」인지 답하는 모델이 남습니다.

모델을 데이터에 맞춰 고쳐 가는 과정을 훈련이라고 합니다. 예시를 보여 주고, 모델의 답이 정답과 다르면 모델을 조금 고칩니다. 이 일을 예시마다 되풀이합니다. 준지도학습에서는 레이블 없는 예시도 이 과정에 들어갑니다.

지도학습과 비지도학습 사이

영어 이름 semi-supervised 의 semi 는 「반쯤」이라는 뜻입니다. 그래서 반지도학습이라고도 부릅니다. 이름대로 두 방식 사이에 섭니다.

한쪽 끝은 지도학습입니다. 지도학습은 모든 예시에 레이블이 달린 데이터로 입력과 답 사이의 관계를 배웁니다. 다른 끝은 비지도학습입니다. 비지도학습은 레이블 없이 데이터 안에 숨은 무리를 찾습니다.

지도학습 준지도학습 비지도학습
받는 데이터 전부 레이블이 달린 예시 레이블 달린 예시 조금과 레이블 없는 예시 많이 레이블 없는 예시
내놓는 것 새 입력에 대한 답 새 입력에 대한 답 데이터 안의 무리
채점하는 법 훈련에 안 쓰고 남겨 둔 정답과 맞춰 본다 훈련에 안 쓰고 남겨 둔 정답과 맞춰 본다 맞춰 볼 정답이 없다

표에서 준지도학습의 아래 두 줄은 지도학습 칸과 같습니다. 묻는 질문은 지도학습의 것입니다. 레이블 없는 데이터는 그 질문에 더 잘 답하도록 거드는 재료입니다.

레이블이 비싼 까닭

레이블은 사람이 예시를 하나씩 보고 답을 적어야 생깁니다. 문의 한 통을 읽고 분류하는 데 30초가 걸린다고 해 봅시다. 십만 통이면 사람 한 명이 쉬지 않고 800시간 넘게 일해야 합니다.

전문 지식이 필요한 데이터는 더 비쌉니다. 의료 영상에 병변이 있는지 표시하는 일은 의사가 해야 합니다. 계약서 조항을 분류하는 일은 법을 아는 사람이 해야 합니다.

반면 레이블 없는 데이터는 대개 이미 쌓여 있습니다. 서비스가 돌아가는 동안 문의와 로그와 사진이 날마다 저장됩니다. 준지도학습은 이 차이를 파고듭니다. 레이블은 조금만 사서 씁니다. 쌓인 데이터는 덤으로 씁니다.

레이블 없는 데이터가 거드는 방식

문의 한 통을 수 몇 개로 바꿔 적으면 평면 위의 점 하나로 찍을 수 있습니다. 이 수 하나하나를 특성이라고 부릅니다. 문의라면 「환불」이라는 낱말이 나온 횟수와 「배송」이라는 낱말이 나온 횟수가 특성이 될 수 있습니다.

분류 모델은 이 평면에 선을 긋는 일을 합니다. 선 이쪽 점에는 「환불」을 답합니다. 저쪽 점에는 「배송」을 답합니다. 이렇게 답이 갈리는 선을 결정 경계라고 부릅니다.

레이블 달린 점이 넷뿐이면 그 넷을 가르는 선은 여러 갈래로 그을 수 있습니다. 넷만 보고는 어느 선이 맞는지 정할 수 없습니다. 지도학습은 이 넷만 가지고 선을 정해야 합니다.

레이블 없는 점 수천 개를 함께 찍으면 사정이 달라집니다. 점들이 두 덩어리로 모여 있는 모습이 드러납니다. 그러면 선을 두 덩어리 사이의 빈 곳으로 긋는 것이 자연스럽습니다. 레이블 없는 점은 답을 알려 주지 않습니다. 대신 데이터가 어떻게 퍼져 있는지를 알려 줍니다.

준지도학습이 기대는 가정

레이블 없는 점이 선을 긋는 데 도움이 되려면 데이터가 어떤 성질을 지녀야 합니다. 이 성질을 준지도학습의 가정이라고 부릅니다. 대표적인 둘은 아래와 같습니다.

가정 내용 문의 메일이라면
매끄러움 가정 가까운 두 점은 답이 같다 낱말이 거의 같은 두 문의는 같은 분류다
군집 가정 한 덩어리에 모인 점들은 답이 같다 「환불」 문의끼리 한 덩어리로 모인다

두 가정이 맞으면 결정 경계는 점이 드문 곳을 지나야 합니다. 빽빽한 덩어리 한가운데로 선이 지나면 바로 붙어 있는 점끼리 답이 갈리기 때문입니다. 레이블 없는 점은 어디가 빽빽하고 어디가 드문지를 보여 줍니다.

가정이 어긋나면 레이블 없는 데이터가 오히려 방해가 됩니다. 「환불」 문의와 「배송」 문의가 한 덩어리에 섞여 있다고 해 봅시다. 덩어리 사이로 그은 경계는 두 분류를 가르지 못합니다.

자기 훈련으로 따라가 보는 한 바퀴

준지도학습을 하는 방법은 여럿입니다. 이 소절은 가장 단순한 자기 훈련(self-training)으로 한 바퀴를 따라갑니다. 모델이 스스로 단 답을 다시 배우는 방법입니다.

먼저 레이블 달린 예시만으로 모델을 훈련합니다. 이 모델에게 레이블 없는 예시의 답을 짐작하게 합니다. 모델은 답과 함께 그 답을 얼마나 확신하는지도 수로 냅니다.

이 수를 신뢰도 점수라고 부릅니다. 대개 0 에서 1 사이 값입니다. 1 에 가까울수록 모델이 그 답을 확신한다는 뜻입니다.

신뢰도가 높은 짐작만 골라 레이블처럼 씁니다. 모델이 스스로 단 이 레이블을 의사 레이블(pseudo-label)이라고 부릅니다. 의사 레이블이 붙은 예시를 원래의 레이블 데이터에 보태 다시 훈련합니다. 이 과정을 몇 바퀴 되풀이합니다.

flowchart TD
    A["레이블 달린 예시로 훈련"] --> B["레이블 없는 예시의 답을 짐작"]
    B --> C["신뢰도 높은 짐작만 고른다"]
    C --> D["의사 레이블을 붙여 훈련 데이터에 보탠다"]
    D --> A

그림에서 화살표는 맨 위로 돌아갑니다. 바퀴마다 훈련 데이터가 늘어납니다. 늘어난 데이터로 훈련한 모델은 다음 바퀴에 더 많은 예시를 자신 있게 짐작합니다.

고르는 단계는 코드 몇 줄이면 됩니다. 아래 코드는 짐작 셋 가운데 신뢰도가 0.9 이상인 것만 남깁니다. 튜플 하나는 문의 이름, 짐작한 분류, 신뢰도 순서입니다.

Python
guesses = [
    ("문의1", "환불", 0.97),
    ("문의2", "배송", 0.55),
    ("문의3", "배송", 0.91),
]
keep = [g for g in guesses if g[2] >= 0.9]
len(keep)              # 2
[g[0] for g in keep]   # ['문의1', '문의3']

문의2 는 신뢰도가 0.55 라서 이번 바퀴에서는 빠집니다. 다음 바퀴에 모델이 나아지면 신뢰도가 올라 들어올 수 있습니다. 0.9 라는 기준은 사람이 정하는 값입니다.

레이블 없는 데이터를 쓰는 다른 방법

자기 훈련 말고도 레이블 없는 데이터를 끌어들이는 방법이 있습니다. 아래 표는 세 방법이 레이블 없는 예시를 어디에 쓰는지 견줍니다.

방법 레이블 없는 예시를 쓰는 곳
일관성 정규화 레이블 없는 예시를 살짝 바꾼 입력을 만든다. 바꾸기 전과 뒤의 답이 같도록 모델을 길들인다
레이블 전파 레이블 없는 예시를 비슷한 예시끼리 선으로 잇는다. 레이블 달린 예시의 답이 그 선을 따라 이웃으로 번진다
공동 훈련 서로 다른 특성을 보는 모델 둘이 레이블 없는 예시에 의사 레이블을 단다. 그 의사 레이블을 상대 모델에게 건넨다

일관성 정규화와 레이블 전파는 매끄러움 가정에 기댑니다. 살짝 바꾼 입력은 원래 입력 바로 옆의 점입니다. 선으로 이은 이웃도 가까운 점입니다. 두 방법 모두 「가까운 점은 답이 같다」를 모델에 심습니다.

공동 훈련은 가정보다 자기 훈련의 짜임을 물려받았습니다. 의사 레이블을 자기에게 쓰지 않고 다른 모델에게 건넨다는 점이 다릅니다.

틀린 짐작이 굳는 문제

자기 훈련에서 모델이 잘못 짐작한 답도 신뢰도가 높을 수 있습니다. 그 답이 의사 레이블로 들어가면 모델은 자기 실수를 정답으로 다시 배웁니다. 바퀴를 거듭할수록 같은 실수가 더 단단해집니다. 이 현상을 확증 편향이라고 부릅니다.

신뢰도 기준을 높게 잡으면 틀린 의사 레이블이 줄어듭니다. 대신 보탤 수 있는 예시도 줄어듭니다. 기준을 낮추면 반대가 됩니다.

가르치지 않은 분류가 섞일 때

모델에게 「환불」과 「배송」 두 분류만 가르쳤습니다. 그런데 레이블 없는 문의에 「회원 탈퇴」 문의가 섞여 있다고 해 봅시다. 모델이 아는 답은 둘뿐이라 그 문의에도 둘 중 하나를 억지로 붙입니다.

자기 훈련이라면 그 억지 답의 신뢰도가 높게 나올 수 있습니다. 그러면 억지 답이 의사 레이블로 들어가 다시 학습됩니다.

채점에는 여전히 레이블이 든다

모델이 잘 배웠는지 보려면 정답과 맞춰 봐야 합니다. 그래서 훈련에 안 쓴 레이블 달린 예시를 따로 떼어 둡니다. 이 예시 묶음이 테스트 데이터입니다.

준지도학습이 정말 도움이 됐는지도 따로 확인합니다. 레이블 달린 예시만으로 훈련한 모델을 하나 더 만들어 같은 테스트 데이터로 채점합니다. 준지도학습 쪽 점수가 낮다면 레이블 없는 데이터가 방해가 된 것입니다.

준지도학습을 쓰는 때

레이블 달린 예시가 적고 레이블 없는 예시가 많을 때 씁니다. 레이블 없는 예시도 가르친 분류 안에 들어야 합니다. 「환불」과 「배송」만 가르쳤다면 레이블 없는 문의도 대부분 그 둘 가운데 하나여야 합니다.

레이블이 이미 넉넉하면 지도학습으로 충분합니다. 레이블 없는 데이터를 더 보태도 얻는 것이 적습니다. 훈련 과정만 복잡해집니다.

레이블을 조금 더 다는 쪽이 싸게 먹힐 때도 있습니다. 사람이 몇백 건을 더 다는 비용이 준지도학습 파이프라인을 만들고 검증하는 비용보다 적을 수 있습니다. 그럴 때는 레이블을 더 다는 쪽이 먼저입니다.

레이블을 아끼는 이웃 방식

레이블이 모자랄 때 쓰는 길은 준지도학습 말고도 있습니다. 레이블을 어떻게 아끼느냐가 다릅니다.

방식 레이블을 아끼는 법
자기지도학습 데이터에서 문제와 답을 스스로 만들어, 진짜 맡길 일을 배우기 전에 미리 배운다. 문장의 낱말 하나를 가리고 맞히는 식
능동 학습 모델이 헷갈려하는 예시를 골라 사람에게 레이블을 부탁한다
전이 학습 다른 데이터로 이미 배운 모델을 가져와 조금만 더 가르친다
약지도학습 사람 대신 규칙이나 키워드로 거친 레이블을 한꺼번에 단다

능동 학습은 준지도학습과 반대 방향에서 같은 문제를 풉니다. 준지도학습은 사람에게 묻지 않고 레이블 없는 예시를 씁니다. 능동 학습은 어느 예시에 사람 손을 쓸지를 고릅니다. 둘을 함께 쓰기도 합니다.

관련 항목

준지도학습이 속하는 상위 분류

머신러닝 · 인공지능 · 딥러닝 · 통계적 학습

레이블을 쓰는 정도로 맞세워지는 학습 방식

지도학습 · 비지도학습 · 자기지도학습 · 강화학습 · 약지도학습

준지도학습을 하는 방법

자기 훈련 · 의사 레이블 · 일관성 정규화 · 레이블 전파 · 공동 훈련 · 엔트로피 최소화 · 생성 모델

준지도학습이 기대는 가정

매끄러움 가정 · 군집 가정 · 다양체 가정 · 저밀도 분리

준지도학습을 이루는 구성 요소

레이블 · 훈련 데이터 · 특성 · 모델 · 분류 · 결정 경계 · 신뢰도 점수 · 데이터 증강

준지도학습에서 자주 나는 문제

확증 편향 · 과적합 · 분포 불일치 · 클래스 불균형

레이블을 아끼는 다른 수단

능동 학습 · 전이 학습 · 사전 학습 · 파인튜닝 · 퓨샷 학습 · 데이터 레이블링

준지도학습 모델을 채점하는 데이터와 지표

테스트 데이터 · 검증 데이터 · 정확도 · 교차 검증

다른 이름: semi-supervised learning · 준지도 학습 · 반지도학습 · 반지도 학습