
제4장: AI 데이터 플라이휠과 지속적 학습 루프
요약
AI 시스템의 지속적 발전을 위한 데이터 플라이휠 설계 이론과 구현 기법을 다룹니다. 데이터 수집, 액티브 러닝을 통한 고가치 데이터 선별, 지속적 배포(CD) 게이트 구축 등 자기 강화형 루프를 만드는 핵심 요소를 해설합니다.
핵심 포인트
- 데이터 플라이휠은 데이터 축적-모델 강화-UX 향상이 순환하는 자기 강화 구조임
- 모든 로그를 학습하는 대신 액티브 러닝을 통해 고가치 데이터만 선별해야 함
- 불확실성 샘플링, 인간의 수정 데이터, 다양성 샘플링이 핵심 필터링 전략임
- 수집된 데이터는 익명화 및 필터링을 거쳐 지속적 파이프라인으로 전달되어야 함
AI 시스템을 구축·배포한 시점은 시스템의 완성이 아니라 「진화의 시작」에 불과합니다. 운영 환경에서 사용자가 AI를 이용하는 프로세스로부터 발생하는 데이터를 축적하고, 모델의 재학습으로 피드백하는 순환 구조를 **「데이터 플라이휠 (Data Flywheel)」**이라고 부릅니다.
본 장에서는 데이터 플라이휠의 설계 이론, 불필요한 노이즈를 배제하고 「가치 있는 데이터」만을 수집하는 액티브 러닝 (Active Learning), 사용자 피드백을 활용한 미세 조정 (SFT/DPO), 그리고 이들을 자동으로 감시·측정하는 「LLM-as-a-Judge」를 통한 자동 평가 루프의 구현 기법에 대해 자세히 해설합니다.
데이터 플라이휠이란, 사용자의 이용에 따라 데이터가 축적되고, 그 데이터를 사용하여 모델이 강화되며, 그로 인해 사용자 경험 (UX)이 향상되어 더욱 많은 사용자와 데이터가 모이는 **「자기 강화형 루프」**입니다.
데이터 플라이휠을 설계할 때, 단순히 「로그를 저장하는 것」만으로는 루프가 돌아가지 않습니다. 다음과 같은 요소를 시스템으로서 통합해야 합니다.
암묵적·명시적 피드백의 수집:-
명시적 (Explicit): 사용자가 버튼으로 누르는 「Good / Bad」, 수동에 의한 「텍스트 수정 (HITL에서의 Correct 액션)」. -
암묵적 (Implicit): AI가 제안한 코드가 「실제로 컴파일을 통과했는지」, 제안한 메일이 「복사 & 붙여넣기 되었는지」, 또는 화면의 「체류 시간」.
지속적 데이터 파이프라인 (Continuous Ingestion):-
수집한 데이터 로그를 익명화·필터링한 후, 어노테이션 (Labeling)이나 평가 큐(Queue)로 자동 전달하는 메커니즘.
지속적 배포 (CD) 게이트:-
새로운 데이터로 미세 조정된 모델을 자동 테스트하고, 기존 모델 (Shadow Model)과 비교하여 성능이 향상된 경우에만 운영 환경에 반영하는 게이트 관리.
운영이 시작되면 매일 방대한 사용자 로그가 생성됩니다. 하지만, 「모든 로그를 학습 데이터에 집어넣는 것」은 최악의 접근 방식입니다.
비용 낭비: 대량의 중복 데이터나 가치 없는 인사말 등의 로그를 학습시키는 것은 API 비용이나 계산 리소스의 낭비로 이어진다. -
모델의 저하: 노이즈가 많은 데이터나 모델이 이미 완벽하게 정답을 맞힐 수 있는 쉬운 데이터를 과도하게 학습시키면, 과적합 (Overfitting)이나 할루시네이션 (Hallucination)의 악화를 초래한다.
이를 방지하는 것이 **액티브 러닝 (Active Learning, 능동 학습)**의 사고방식을 도입한 「고가치 데이터」의 선택적 샘플링입니다.
시스템에서 필터링해야 할 데이터는 주로 다음 3가지 카테고리로 분류됩니다.
[방대한 사용자 로그] ──(필터링)──> [고가치 데이터 (전체의 5~10%)] ──> [학습 데이터 풀]
│
├─① 저확신도 데이터 (LLM의 출력 확률 Logprobs가 낮은 것)
...
불확실성 샘플링 (Uncertainty Sampling):-
LLM이 출력한 토큰의 확률 (Logprobs) 평균값이 낮거나, 「망설임 (자기 수정의 빈도)」이 관찰된 로그. 이는 「모델이 자신감을 갖지 못하고 생성한 경계선상의 데이터」이며, 재학습 효과가 가장 높다.
인간에 의한 수정 차분 (Correction Matches):-
제3장에서 해설한 HITL 루프에서 인간이 「수정 (Correct)」하여 확정한 데이터.
**「AI의 잘못된 초기 출력 ➔ 인간의 올바른 최종 출력」**의 쌍은 매우 고품질의 교사 데이터 (SFT)가 된다.
- 제3장에서 해설한 HITL 루프에서 인간이 「수정 (Correct)」하여 확정한 데이터.
다양성 샘플링 (Diversity Sampling / Clustering):-
기존 학습용 데이터셋과 의미적으로 중복되지 않는 데이터. 로그를 임베딩 벡터 (Embedding)로 변환하고, 기존 데이터와 코사인 유사도를 비교하여 유사도가 낮은 (신규성이 높은) 질문을 샘플링한다.
코사인 유사도의 수식 표현은 다음과 같다:
$$
\text{Similarity}(\mathbf{A}, \mathbf{B}) = \frac{\mathbf{A} \cdot \mathbf{B}}{|\mathbf{A}| |\mathbf{B}|} = \frac{\sum_{i=1}^{n} A_i B_i}{\sqrt{\sum_{i=1}^{n} A_i^2} \sqrt{\sum_{i=1}^{n} B_i^2}}
$
($\text{※ } \mathbf{A}, \mathbf{B}$는 각각 임베딩 벡터 (Embedding Vector), $\cdot$은 내적 (Dot Product), $|\cdot|$은 벡터의 노름 (Norm)을 나타냅니다. 유사도는 $-1$에서 $1$ 사이의 값을 가지며, 값이 $1$에 가까울수록 벡터의 방향(의미)이 유사하다고 판단됩니다.)
다음은 사용자 로그로부터 "불확실성이 높고", "사용자로부터 Bad 평가를 받았으며", "의미적 중복이 적은" 데이터를 자동으로 선별하는 파이프라인 코드의 예시입니다.
import numpy as np
from typing import List, Dict, Any
# 유사 코사인 유사도 계산 함수
...
수집된 데이터는 모델의 미세 조정 (Fine-tuning) 단계로 전달됩니다. 여기에는 크게 두 가지 학습 접근 방식이 있습니다.
접근 방식: 사용자가 수정한 "최종 결과물"이나 평가자가 작성한 "완벽한 답변"을 정답 데이터 (Ground Truth)로 직접 학습시킵니다.
데이터 포맷 (JSONL): {"messages": [{"role": "user", "content": "사용자의 질문"}, {"role": "assistant", "content": "수정된 올바른 답변"}]}
현재 주류를 이루고 있는 것은 DPO 등의 선호도 학습 (Preference Learning) 알고리즘입니다. 사용자의 선택 (A/B 테스트) 또는 Good/Bad 로그로부터 "선호하는 답변 (Chosen)"과 "선호하지 않는 답변 (Rejected)"의 쌍 (Pair) 데이터를 생성하여, 모델의 출력 경향을 인간의 선호도에 맞게 정렬 (Alignment) 시킵니다.
데이터 포맷 (DPO용 JSONL): 이 쌍 데이터를 모델에 입력하여, "{ "prompt": "외부 고객용 사과 메일을 작성해줘.", "chosen": "불편을 끼쳐드려 대단히 죄송합니다. 즉시 조사하여 금일 중으로 대체품을 발송하겠습니다. (정중하고 성실함)", "rejected": "죄송합니다, 버그 때문에 발송이 늦어졌습니다. 내일 보낼게요. (간결하고 무례함)" }와 같이, chosen을 출력할 확률은 높이고 rejected를 출력할 확률은 낮추도록 최적화를 수행합니다.
데이터 플라이휠 (Data Flywheel)을 지속적이고 안전하게 회전시키기 위해서는 배포된 모델의 품질 변화를 실시간으로 평가하는 메커니즘이 필요합니다. 하지만 사람이 모든 출력을 수동으로 평가하는 것은 확장성 (Scalability) 관점에서 불가능합니다.
이에 등장한 것이, 더 강력하고 추론 능력이 높은 LLM (GPT-4나 Gemini 1.5 Pro 등)을 "평가자"로 사용하는 LLM-as-a-Judge 아키텍처입니다.
LLM에게 평가를 맡길 때는 단순히 "1점에서 5점 사이로 점수를 매겨줘"라고 요청하는 것이 아니라, 엄격한 "루브릭 (Rubric, 평가 기준)"을 프롬프트로 정의해야 합니다.
Answer Relevance (답변 적합성): 사용자의 질문에 대해 정확하게 답변하고 있는가.
Groundedness (근거성 / 할루시네이션 검출): 생성된 답변이 주어진 참고 텍스트 (RAG의 문맥 등)에만 기반하고 있는가.
Helpfulness (유용성): 단순히 정답인 것을 넘어, 사용자가 원하는 목표를 달성할 수 있는 내용인가.
다음은 사용자의 질문, RAG로 가져온 참고 컨텍스트, 그리고 AI가 생성한 실제 답변을 입력으로 받아 할루시네이션 (근거가 부족한 답변)이 발생했는지 여부를 자동으로 평가하는 구현 샘플입니다.
import json
import os
from typing import Dict, Any
...
- 평가자와 피평가자를 다른 모델로 설정하기: 실제 환경(Production)에서 구동되는 경량 모델(예: Llama-3-8B)에 대해, 평가자로는 더 지능이 높은 모델(예: GPT-4o, Gemini 1.5 Pro)을 할당함으로써 평가의 타당성을 유지합니다.
- 점수의 "변동성"을 방지하기 위한 원샷(One-shot) 예시(Few-shot) 추가: 프롬프트 내에 "점수 5의 예시", "점수 1의 예시"를 미리 정의해 둠으로써, LLM-as-a-Judge의 판정 기준이 흔들리는 것을 최소화할 수 있습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Qiita AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기