자기 학습(Self-training)이란? AI에서 예측 라벨을 골라 분류기를 다시 학습하는 방법
TL;DR
자기 학습은 일부 정답으로 훈련한 분류기가 미라벨 자료를 예측하고, 선택한 예측 라벨을 훈련 자료에 추가해 다시 학습하는 반지도 방법입니다. 모델이 붙인 임시 정답을 의사 라벨이라고 부릅니다. 확률이 높은 사례부터 골라도 틀린 라벨이 섞일 수 있으며 반복 과정에서 오류가 커질 수 있습니다. 자동으로 채운 라벨 수와 실제 분류 품질을 구분하고, 원래 정답과 별도 평가 자료를 보존합니다.
핵심 3줄 요약
- 핵심 1
일부 확인 라벨에서 시작합니다. 기존 지도 분류기를 먼저 훈련하고 나머지 자료의 클래스를 예측합니다. - 핵심 2
선택한 예측으로 다시 배웁니다. 확률 임계값이나 상위 개수 기준으로 의사 라벨을 훈련 집합에 추가합니다. - 핵심 3
모델의 확신도 검증합니다. 높은 확률이 곧 정답은 아닙니다. 잘못 붙인 라벨과 드문 클래스를 따로 점검합니다.
이 글에서 다룰 내용
- 자기 학습의 한 문장 정의와 의사 라벨의 뜻
- 수치 특징 여섯 개로 이해하는 쉬운 예시
- 처음 훈련·예측 선택·재학습·종료 순서
- 확률 임계값·상위 개수·결과 속성 읽는 법
- 라벨 전파·능동 학습·자기지도학습과의 차이
- 정답이 부족한 문서와 이미지 분류의 사용처
- 라벨 출처·확률 점검·독립 평가 체크리스트
자기 학습을 한 문장으로 정의하면 무엇인가요?
자기 학습(Self-training)은 라벨이 있는 자료로 만든 분류기의 예측 중 일부를 미라벨 자료의 의사 라벨로 채택하고, 늘어난 훈련 집합으로 분류기를 반복 학습하는 반지도학습 방법입니다.
반지도학습은 확인된 정답이 있는 자료와 정답이 없는 자료를 함께 활용합니다. 의사 라벨은 모델의 예측을 학습용 정답처럼 쓰는 임시 값입니다. 사람이 확인한 정답이라는 뜻은 아니므로 생성 모델이 새 원문을 만드는 합성 데이터와도 구분합니다.
scikit-learn의 사용자 가이드는 기존 지도 분류기에 이 반복 절차를 적용하는 구현을 소개합니다. 여기서는
SelfTrainingClassifier
를 기준으로 선택 규칙과 결과를 설명합니다. 에이전트가 실행 오류를 고치거나 대화를 기억하는 모든 행동을 자기 학습이라고 묶는 글은 아닙니다.
한 줄 정리: 예측한 답을 전부 믿는 것이 아니라, 정한 규칙으로 일부를 골라 훈련 자료를 늘리고 분류기를 다시 맞춥니다.
쉬운 예시로 이해해 볼까요?
감자나라ai님이 숫자 특징 하나로 두 종류의 기록을 구분한다고 가정해 보겠습니다. 양끝의 기록에만 사람이 라벨을 확인했고 중간 네 개는 미라벨입니다. 실제 고객 자료가 아닌 교육용 합성 입력으로, 이 결과는 업무 정확도나 권장 임계값을 측정한 보고가 아닙니다.
- 입력 특징은
X = [[-3], [-2], [-1], [1], [2], [3]]입니다. - 라벨은
y = [0, -1, -1, -1, -1, 1]입니다. 라벨 배열의 정수-1은 이 구현에서 미라벨 표시입니다. 입력 특징의 음수는 정상 숫자입니다. - 기본 분류기는
LogisticRegression(C=1)이고 자기 학습에는threshold=0.75,max_iter=10을 지정했습니다.
scikit-learn 1.9.1에서 실제 실행한
transduction_
는
[0, 0, -1, -1, 1, 1]
이었습니다. 특징 -2와 2인 기록에는 의사 라벨이 추가됐고 -1과 1인 두 기록은 여전히 미라벨로 남았습니다. 빈칸을 모두 채우는 것이 필수 목표는 아닙니다.
labeled_iter_
는
[0, 1, -1, -1, 1, 0]
이었습니다. 양끝의 0은 처음부터 확인된 라벨, 중간의 1은 첫 반복에서 채택된 라벨입니다. 추가할 라벨이 더 없어 종료 이유는
no_change
였습니다. 이 기록만으로 의사 라벨의 정답률은 알 수 없습니다.
쉬운 예시: 확인된 이름표로 규칙을 먼저 익힌 뒤, 그 규칙이 비교적 확실하게 분류한 기록만 새 연습 자료로 가져오는 과정입니다.
왜 AI에서 자기 학습이 중요한가요?
정답이 부족한 분류에서 비교할 후보입니다
입력 자료는 많이 쌓여도 모든 문서나 이미지에 사람이 정답을 붙이기 어려울 수 있습니다. 일부 확인 라벨로 만든 모델에 미라벨 자료를 추가하는 실험을 고려합니다. 라벨 수를 늘리는 목적과 실제로 분류가 좋아지는지는 따로 평가합니다.
처음 확인한 자료가 업무 전체를 대표하는지도 중요합니다. 한 클래스나 쉬운 표현만 남았다면 그 모델이 고른 추가 사례도 비슷한 쪽으로 쏠릴 수 있습니다. 정답이 없는 자료를 많이 모았다는 사실만으로 이 빈틈이 메워지지는 않습니다.
기존 분류기와 선택 규칙을 분리해 봅니다
이 구현은 기본 분류기의 종류와 의사 라벨 선택 방식을 따로 정합니다. 새 분류 알고리즘을 처음부터 만드는 대신, 이미 쓰는 모델을 출발점으로 미라벨 추가의 효과를 비교할 수 있습니다. 다만 기본 모델은 학습과 확률 예측을 지원해야 합니다.
핵심 인사이트: 자기 학습의 성패는 추가 라벨의 개수만으로 판단할 수 없습니다. 출발 모델의 오류와 확률, 미라벨 자료의 성격을 함께 봐야 합니다.
자기 학습은 어떤 순서로 작동하나요?
1. 확인 라벨로 기본 분류기를 훈련합니다
입력 한 행과 라벨 한 항목을 같은 기록으로 맞춥니다. 알려진 라벨만 사용해 기본 분류기를 학습합니다. 미라벨을 뜻하는 정수 -1을 실제 클래스 코드로 동시에 사용하지 않으며, 각 클래스의 확인 사례가 부족한지도 점검합니다.
2. 미라벨 자료의 클래스와 확률을 구합니다
현재 분류기가 남은 사례의 클래스별 확률을 예측합니다. 각 사례에서 가장 높은 확률과 그 클래스가 의사 라벨 후보입니다. API 문서는 기본 분류기에
fit
과
predict_proba
가 필요하다고 안내합니다. 점수만 반환하는 모델을 그대로 넣는 것과는 다릅니다.
3. 선택한 의사 라벨을 추가하고 다시 훈련합니다
확률 임계값을 넘은 후보나 확률이 높은 상위 후보를 골라 라벨된 훈련 집합에 추가합니다. 그다음 처음 확인한 라벨과 채택한 의사 라벨을 함께 써 기본 분류기를 다시 맞춥니다. 이 재학습 때문에 단순히 예측 파일을 저장하는 작업과 구분됩니다.
여기서 설명한 scikit-learn 구현은 한 번 채택한 의사 라벨을 다음 반복마다 자동으로 다시 고쳐 붙이는 방식이 아닙니다. 따라서 초기에 잘못 채택한 값이 이후 학습에 남을 수 있습니다. 사람의 수정이나 라벨 재검토는 별도 절차로 관리합니다.
4. 새 라벨 추가 여부와 반복 한도를 확인합니다
모든 사례에 라벨이 붙거나 더는 새 후보가 선택되지 않으면 반복을 끝냅니다. 설정한 최대 반복 횟수에 도달해도 종료합니다. 멈춘 이유와 남은 미라벨 수를 기록하고, 종료를 좋은 분류 품질이나 오류 없는 라벨의 증거로 읽지 않습니다.
선택 설정과 결과는 어떻게 읽나요?
threshold와 k_best는 선택 기준이 다릅니다
criterion="threshold"
에서는 가장 높은 예측 확률이
threshold
를 넘는 사례를 고릅니다. 확인한 구현의 비교는 초과이며 경계와 같은 값은 선택하지 않습니다. 임계값의 허용 범위는 0 이상 1 미만입니다. 기본값 0.75가 모든 자료의 최적값이라는 뜻은 아닙니다.
criterion="k_best"
에서는 확률 순서로 매 반복 최대
k_best
개를 추가합니다. 이 규칙은 후보의 절대 확률이 충분히 높은지까지 보증하지 않습니다. 남은 후보가 적으면 지정한 수보다 적게 추가되며, threshold는 이 선택 기준에 쓰이지 않습니다.
max_iter는 반복 한도입니다
max_iter
는 반복 가능한 최대 횟수입니다.
None
을 주면 모든 라벨이 채워지거나 새 후보가 없어질 때까지 이어 갑니다. 연산 비용을 측정하고 한도와 실제
n_iter_
를 함께 보관합니다. 반복을 늘리는 것만으로 틀린 의사 라벨이 교정되지는 않습니다.
라벨 채택 기록과 새 입력 예측을 구분합니다
transduction_
는 최종 학습에 쓰는 라벨 배열이며 채택하지 못한 미라벨은 -1로 남을 수 있습니다.
labeled_iter_
의 0은 원래 확인된 라벨, 양수는 채택 반복, -1은 끝까지 미채택인 사례입니다. 배열의 순서와 원본 ID를 함께 저장합니다.
termination_condition_
는
max_iter
,
no_change
,
all_labeled
중 종료 이유를 나타냅니다. 새 입력의
predict
는 마지막에 맞춘 분류기로 예측합니다. 학습 자료의 라벨 채택 목록과 새 입력의 결과를 같은 의미로 비교하지 않습니다.
자기 학습과 헷갈리는 용어는 무엇이 다른가요?
라벨 전파와의 차이
기존 라벨 전파 글은 사례 사이의 유사도 그래프를 따라 클래스 정보를 전달합니다. 자기 학습은 기본 분류기의 예측으로 후보를 고르고 늘어난 라벨 집합으로 다시 학습합니다. 둘 다 일부 정답과 미라벨을 쓰지만 정보를 이용하는 절차가 다릅니다.
능동 학습과의 차이
능동 학습은 다음에 사람이 정답을 확인할 사례를 고릅니다. 자기 학습의 선택 라벨은 모델의 예측입니다. 사람 검토와 자동 후보 선택을 함께 설계할 수 있어도, 라벨을 누가 확인했는지 기록에서 분리해야 합니다.
자기지도학습·비지도학습과의 차이
자기지도학습은 입력 데이터 자체에서 학습용 신호를 구성합니다. 여기의 자기 학습은 알려진 클래스 라벨로 만든 분류기를 출발점으로 삼아 해당 클래스의 의사 라벨을 고릅니다. 비지도 군집화처럼 정답 없이 새로운 그룹의 구조를 찾는 작업과도 구분합니다.
의사 라벨·지식 증류와의 차이
의사 라벨은 모델이 붙인 학습용 예측값입니다. 자기 학습은 그 일부를 고르고 재학습을 반복하는 절차입니다. 한 번 의사 라벨을 만들었다고 모든 과정이 자동으로 자기 학습이 되지는 않습니다. 지식 증류는 교사 모델의 정보를 학생 모델로 전달하는 목적이며, 이 단일 분류기의 반복 재학습과는 설명의 초점이 다릅니다.
비교 정리: 라벨 전파는 그래프 전달, 능동 학습은 사람에게 물을 사례 선택, 자기 학습은 예측 라벨 선택과 재학습입니다.
실전에서는 어디에 쓰이나요?
문서·이미지 분류의 미라벨 추가를 시험합니다
일부 문의의 주제를 사람이 확인했고 나머지 원문만 남은 상황에서 비교 후보로 검토합니다. 문서는 먼저 모델이 받는 수치 특징으로 표현하고 라벨 기준을 통일합니다. 상품 이미지처럼 일부만 확인한 분류에도 같은 절차를 고려하되 실제 자료에서 별도로 검증합니다.
라벨 비율에 따른 분류 경계를 비교합니다
scikit-learn의 Iris 예제는 알려진 라벨의 비율을 바꾸며 자기 학습과 그래프 기반 방식의 경계를 비교합니다. 모든 훈련 자료에 라벨이 있을 때 예제의 자기 학습은 기본 지도 SVC로 줄어듭니다. 미라벨이 없으면 새 의사 라벨을 추가할 대상도 없습니다.
임계값 비교 예제는 낮은 기준에서 잘못된 라벨이 늘고 너무 높은 기준에서는 추가 사례가 없을 수 있음을 보여 줍니다. 특정 예제의 가장 좋은 값을 현재 업무의 권장값으로 복사하지 않습니다. 같은 분할에서 기준 모델과 선택 정책을 비교해야 합니다.
자기 학습을 적용할 때 어떤 순서로 확인하나요?
1. 정답 기준과 평가 자료를 먼저 고정합니다
클래스 정의와 원본 ID를 정하고 학습·검증·최종 테스트를 분리합니다. 새로운 입력의 성능을 평가하려면 보류 입력도 자기 학습의 미라벨 집합에 미리 넣지 않습니다. 같은 사람이나 문서의 중복이 여러 분할에 걸치지 않는지도 확인합니다.
2. 출발 모델의 확률과 오류를 봅니다
모델 캘리브레이션을 점검해 높은 확률 구간이 실제로 얼마나 맞는지 별도 확인 라벨과 대조합니다. 캘리브레이션 곡선과 구간별 표본 수를 함께 읽으며 드문 클래스의 오류도 확인합니다. 전체 정확도가 높다는 이유만으로 확률이 믿을 만하다고 단정하지 않습니다.
3. 추가 수와 독립 평가를 함께 비교합니다
확인 라벨만 쓰는 기준 분류기를 남긴 뒤 같은 분할에서 임계값이나 상위 개수 정책을 비교합니다. 검증 자료는 설정 선택에 쓰고 최종 테스트는 마지막까지 보존합니다. 전처리와 확률 보정도 평가 정답을 미리 보지 않는 훈련 절차 안에서 수행합니다.
4. 라벨의 출처와 채택 시점을 보관합니다
사람이 확인한 라벨, 모델의 의사 라벨, 미채택 사례를 다른 필드로 관리합니다. 클래스별 추가 수와 검토한 오류, 기본 분류기·설정·종료 상태를 함께 저장합니다. 의사 라벨을 그대로 정답으로 되돌려 채점하지 말고 확인된 평가 정답과 대조합니다.
실전 팁: 기준 모델·라벨 출처·채택 반복·확률 점검·독립 평가를 같은 실험 기록으로 묶어 두세요.
사용할 때 무엇을 주의해야 하나요?
첫째, 확신이 높은 오답도 훈련 자료가 됩니다. 모델이 한 클래스를 지나치게 자신 있게 예측한다면 그 실수가 반복 학습에 들어갑니다. 임계값을 높였다는 사실만으로 오류 확대를 막았다고 보고하지 않습니다.
둘째, 너무 쉬운 사례와 다수 클래스만 늘어날 수 있습니다. 드문 클래스의 확인 자료가 부족하면 추가 라벨도 한쪽으로 쏠릴 수 있습니다. 클래스별 추가 수와 실제 검수 결과를 따로 보고, 모델에 없는 클래스를 자동 발견하는 도구라고 생각하지 않습니다.
셋째, 미라벨 자료의 분포와 사용 권한을 점검합니다. 다른 시기·장비·업무에서 온 자료는 출발 모델에 맞지 않을 수 있습니다. 개인정보가 섞인 원문은 허용된 목적과 접근 범위에서만 처리하며 예측 라벨과 검토 이력의 보존 기준도 정합니다.
넷째, 채택하지 않은 라벨과 예측 불가능을 혼동하지 않습니다. 앞의 예시처럼 transduction_에 -1이 남아도 마지막 분류기는 새 입력을 예측할 수 있습니다. 라벨 채택 기준을 통과하지 못한 것과 클래스 예측 기능이 없는 것은 다릅니다.
주의: 모든 라벨이 채워졌거나 반복이 종료됐다는 사실은 정답률의 보증이 아닙니다. 평가 정답을 의사 라벨로 대체하지 마세요.
자주 묻는 질문
Q1. 정답 라벨이 하나도 없어도 시작할 수 있나요?
여기서 설명한 반지도 자기 학습은 알려진 라벨로 기본 분류기를 먼저 훈련합니다. 정답이 없는 자료에서 클래스를 자동으로 발견하고 이름까지 만드는 비지도 방법으로 설명하지 않습니다.
Q2. 미라벨이면 입력 특징도 -1로 바꾸나요?
아닙니다. 이 구현의 정수 -1 표시는 라벨 배열 y에 둡니다. 입력 X에는 원래 특징을 넣습니다. 특징에 음수가 있어도 그것 자체가 미라벨이라는 뜻은 아닙니다.
Q3. 확률 0.75면 75%가 반드시 맞나요?
확률은 모델의 추정치입니다. 잘 보정됐는지 실제 확인 라벨로 점검해야 해당 구간의 정답 비율과 연결해 읽을 수 있습니다. 개별 사례의 정답을 보증하는 수치가 아닙니다.
Q4. 모든 사례에 의사 라벨이 붙어야 성공인가요?
그렇지 않습니다. 임계값을 통과한 후보가 없으면 미라벨이 남아도 종료합니다. 자동 라벨 수보다 별도 평가에서 분류 품질이 좋아졌는지를 확인합니다.
Q5. 선택한 의사 라벨은 매번 자동 수정되나요?
여기서 확인한 scikit-learn 구현은 이미 채택한 라벨을 매 반복 다시 예측해 덮어쓰지 않습니다. 잘못된 값은 이후 학습에 남을 수 있어 별도 검수와 수정 정책이 필요합니다.
Q6. 라벨 전파보다 항상 좋은 방법인가요?
아닙니다. 기본 분류기와 확률 품질, 그래프 관계의 타당성, 출발 라벨과 데이터 분포가 다릅니다. 같은 평가 자료에서 기준 모델과 함께 비교해야 합니다.
출처
마무리
자기 학습은 일부 확인 라벨로 만든 분류기의 예측을 골라 훈련 자료에 추가하고 다시 학습하는 반지도 방법입니다. 의사 라벨은 사람이 검수한 정답과 다르며, 확률 기준과 상위 개수 기준도 서로 다른 선택 정책입니다.
처음 적용한다면 확인 라벨만 쓰는 기준 모델부터 보관하세요. 그다음 확률의 신뢰성, 클래스별 추가 사례와 종료 상태를 기록하고 보지 않은 평가 자료에서 비교합니다. 라벨을 얼마나 많이 채웠는지보다 그 라벨이 다음 분류에 실제로 도움이 됐는지가 판단 기준입니다.
