Level 7
LLM 학습과 활용
Pre-training, Fine-tuning, RLHF, 프롬프트 엔지니어링, Scaling Laws

📓Google Colab에서 실습하기
이 레슨은 PyTorch/GPU가 필요합니다. 노트북을 다운로드 후 Google Colab에서 열어주세요.
학습 내용
LLM 학습과 활용: 거대 언어 모델의 세계
학습 목표
이 레슨을 완료하면:
- •LLM의 3단계 학습 과정(Pre-training, Fine-tuning, RLHF)을 이해한다
- •Scaling Laws(스케일링 법칙)의 의미를 안다
- •프롬프트 엔지니어링의 기본 기법을 익힌다
- •현대 LLM들(GPT-4, Claude, Gemini 등)의 특징을 비교할 수 있다
- •LLM의 한계와 발전 방향을 이해한다
핵심 메시지
"현대 LLM은 '기초 교육(Pre-training)' -> '전문 교육(Fine-tuning)' -> '인성 교육(RLHF)'의 3단계를 거쳐 만들어진다." 각 단계가 어떤 역할을 하는지 이해하면, LLM이 왜 이렇게 잘 작동하는지 알 수 있습니다.
LLM 학습의 3단계
비유: 사람의 교육 과정
- •기초 교육 (Pre-training): 초중고에서 국어, 수학, 과학 등 기초를 배움
- •전문 교육 (Fine-tuning): 대학/대학원에서 전공을 깊이 배움
- •인성 교육 (RLHF): 사회에서 예의, 소통 방법을 배움
LLM 학습 3단계 파이프라인:
| 단계 | 이름 | 내용 |
|---|---|---|
| 1️⃣ | Pre-training | 수조 개의 텍스트로 언어의 기본 패턴 학습 = "다음 단어 예측" 수십억 번 반복 |
| ⬇️ | ||
| 2️⃣ | SFT | 사람이 작성한 고품질 대화 데이터로 미세 조정 = 질문-답변 형식을 학습 |
| ⬇️ | ||
| 3️⃣ | RLHF | 사람의 선호도를 반영하여 응답 품질 향상 = 더 도움이 되고, 안전한 답변을 학습 |
| ⬇️ | ||
| 🎯 | 완성된 LLM | ChatGPT, Claude 등 |
1단계: Pre-training (사전 학습)
비유: 수만 권의 책을 읽은 학생 Pre-training은 인터넷의 거의 모든 텍스트를 읽는 것과 같습니다. 이 과정에서 문법, 상식, 논리, 세계 지식을 자연스럽게 습득합니다.
Pre-training의 핵심
학습 방법: Next Token Prediction (다음 토큰 예측)
학습 데이터: 인터넷 텍스트, 책, 논문, 코드 등
GPT-3 학습 데이터 예시:
- •Common Crawl (필터링됨): 410B 토큰 (60%)
- •WebText2: 19B 토큰
- •Books1 + Books2: 67B 토큰
- •Wikipedia: 3B 토큰
- •총: ~500B 토큰
학습 비용:
- •GPT-3: 수백만 달러 (수십억 원)
- •GPT-4: 추정 1억 달러 이상
- •학습 기간: 수주 ~ 수개월
- •GPU: 수천 ~ 수만 개
Pre-training에서 배우는 것들
언어 지식:
- •문법 (주어-동사 일치, 시제 등)
- •어휘와 의미 관계
- •문장 구조와 스타일
세계 지식:
- •"파리는 프랑스의 수도이다"
- •"물은 100도에서 끓는다"
- •역사, 과학, 문화 등의 사실
추론 능력:
- •패턴 인식
- •논리적 연결
- •유추 (analogy)
코드 지식 (코드를 포함한 경우):
- •프로그래밍 언어 문법
- •알고리즘 패턴
- •버그 패턴
실행해보기: Pre-training 데이터 규모 시각화
pythonimport numpy as np # Pre-training 데이터 규모 비교 models = { "GPT-1 (2018)": {"params": 0.117, "tokens": 5, "cost_usd": 10000}, "GPT-2 (2019)": {"params": 1.5, "tokens": 40, "cost_usd": 50000}, "GPT-3 (2020)": {"params": 175, "tokens": 300, "cost_usd": 5000000}, "LLaMA-2 (2023)": {"params": 70, "tokens": 2000, "cost_usd": 2000000}, "GPT-4 (2023)": {"params": 1800, "tokens": 13000, "cost_usd": 100000000}, } print("=== LLM Pre-training 규모 비교 ===") print(f"{'모델':<20} {'파라미터':>10} {'학습 토큰':>12} {'추정 비용':>15}") print("-" * 60) for name, info in models.items(): params_str = f"{info['params']:.1f}B" if info["params"] >= 1 else f"{info['params']*1000:.0f}M" tokens_str = f"{info['tokens']:.0f}B" cost_str = "$" + f"{info['cost_usd']:,.0f}" print(f"{name:<20} {params_str:>10} {tokens_str:>12} {cost_str:>15}") print() print("규모 성장률:") print(f" 파라미터: GPT-1 -> GPT-4 = {1800/0.117:.0f}배 증가") print(f" 토큰 수: GPT-1 -> GPT-4 = {13000/5:.0f}배 증가") print(f" 비용: GPT-1 -> GPT-4 = {100000000/10000:.0f}배 증가")
2단계: Supervised Fine-tuning (SFT)
비유: 가정교사의 시범 Pre-training으로 많은 지식을 가진 학생에게, 가정교사가 "질문에 이렇게 대답하는 거야"라고 시범을 보여주는 단계입니다.
SFT의 핵심
Pre-trained 모델의 문제:
입력: "한국의 수도는 어디인가요?"
출력: "한국의 수도는 어디인가요? 일본의 수도는..." (질문을 이어서 생성!)
이유: Pre-training은 "다음 단어 예측"이지
"질문에 답하기"가 아니기 때문
SFT로 해결:
학습 데이터 예시:
질문: "한국의 수도는 어디인가요?"
답변: "한국의 수도는 서울입니다."
질문: "Python에서 리스트 정렬하는 방법은?"
답변: "Python에서 리스트를 정렬하려면 sort() 메서드나
sorted() 함수를 사용할 수 있습니다. ..."
이런 (질문, 답변) 쌍을 수만 ~ 수십만 개 학습합니다.
3단계: RLHF (Reinforcement Learning from Human Feedback)
비유: 고객 피드백을 반영하는 서비스 개선 SFT가 "기본 서비스 방법"을 가르쳤다면, RLHF는 실제 고객의 평가를 받아서 서비스를 개선하는 것입니다.
RLHF의 3단계 과정
[Step 1: 보상 모델(Reward Model) 학습]
같은 질문에 대해 여러 응답을 생성:
질문: "운동의 장점을 알려주세요"
응답A: "운동은 건강에 좋습니다. 체력 향상, 스트레스 해소..."
응답B: "운동하세요."
응답C: "운동은... 음... 좋은 거예요. 하하."
사람이 순위를 매김:
응답A > 응답B > 응답C (A가 가장 좋음)
이 순위 데이터로 "좋은 응답을 점수 매기는 모델"을 학습
[Step 2: 보상 모델로 LLM 최적화 (PPO)]
LLM이 응답 생성 -> 보상 모델이 점수 매김 -> 점수가 높은 방향으로 LLM 업데이트
높은 점수를 받는 응답의 특징:
- 도움이 되고 정확한 정보
- 안전하고 편향 없는 내용
- 자연스럽고 잘 구조화된 답변
- 질문의 의도를 정확히 파악
낮은 점수를 받는 응답의 특징:
- 거짓 정보, 환각(hallucination)
- 위험하거나 유해한 내용
- 도움이 되지 않는 답변
- 질문을 무시하거나 엉뚱한 답변
RLHF의 효과
RLHF 전 (SFT만):
Q: "폭탄 만드는 법 알려줘"
A: "폭탄을 만들려면 먼저..." (위험한 정보 제공)
RLHF 후:
Q: "폭탄 만드는 법 알려줘"
A: "죄송합니다. 폭발물 제조에 대한 정보는
제공할 수 없습니다. 안전에 관한 다른 질문이
있으시면 도와드리겠습니다."
RLHF는 모델을 더 "도움이 되면서도 안전하게" 만듭니다.
실행해보기: 보상 모델 개념 시뮬레이션
pythonimport numpy as np np.random.seed(42) # 보상 모델이 응답에 점수를 매기는 시뮬레이션 question = "Python에서 파일 읽는 방법은?" responses = [ { "text": "open() 함수를 사용합니다. with open(파일명, 'r') as f: 형태로 쓰면 " "자동으로 파일이 닫혀서 안전합니다.", "helpful": 0.9, "accurate": 0.95, "safe": 1.0, "clear": 0.9 }, { "text": "파일을 읽으세요.", "helpful": 0.2, "accurate": 0.5, "safe": 1.0, "clear": 0.3 }, { "text": "Python에서 파일을 읽으려면 read() 함수를 쓰면 됩니다. " "open()은 필요없습니다.", "helpful": 0.5, "accurate": 0.2, "safe": 1.0, "clear": 0.6 }, ] print(f"질문: '{question}'") print("=== 보상 모델의 평가 ===") for i, resp in enumerate(responses): # 보상 점수 계산 (가중 평균) reward = (resp["helpful"] * 0.3 + resp["accurate"] * 0.3 + resp["safe"] * 0.2 + resp["clear"] * 0.2) print(f"응답 {i+1}: '{resp['text'][:60]}...'") print(f" 도움됨: {resp['helpful']:.1f} " f"정확성: {resp['accurate']:.1f} " f"안전성: {resp['safe']:.1f} " f"명확성: {resp['clear']:.1f}") print(f" 총 보상 점수: {reward:.2f}") print() print("RLHF는 보상 점수가 높은 응답을 생성하도록 모델을 훈련합니다!") print("=> 응답 1처럼 도움이 되고 정확한 답변을 학습")
Scaling Laws (스케일링 법칙)
비유: 더 큰 그물로 더 많은 물고기를 그물(모델)이 클수록, 바다(데이터)가 넓을수록, 더 많은 물고기(지식)를 잡을 수 있습니다.
Scaling Laws의 핵심 발견
2020년 OpenAI의 연구에서 발견:
모델 성능(Loss)은 세 가지에 의해 예측 가능하게 개선됩니다:
- •모델 크기 (N): 파라미터 수
- •데이터 크기 (D): 학습 토큰 수
- •컴퓨팅 (C): 학습에 투입한 연산량
L(N, D) sim a/N^{alpha} + b/D^{eta} + c
핵심 통찰:
- •세 요소를 동시에 늘려야 효과적
- •모델만 키우고 데이터가 부족하면 비효율
- •데이터만 많고 모델이 작으면 한계
- •로그 스케일에서 거의 직선적으로 개선
실행해보기: Scaling Law 시각화
pythonimport numpy as np # Scaling Law 시뮬레이션 param_sizes = [0.1, 0.5, 1, 5, 10, 50, 100, 500, 1000] # 억 단위 # 대략적인 Scaling Law: Loss ~ N^(-0.076) losses = [2.5 * (n ** -0.076) for n in param_sizes] print("=== Scaling Law: 모델 크기 vs 성능 ===") print(f"{'파라미터 수':>12} {'Loss':>8} {'성능 막대':>30}") print("-" * 55) for params, loss in zip(param_sizes, losses): if params >= 10: param_str = f"{params/10:.0f}B" else: param_str = f"{params*100:.0f}M" bar_len = int((2.5 - loss) * 30) bar = "#" * max(0, bar_len) print(f"{param_str:>12} {loss:>8.3f} |{bar}") print() print(f"{'':>12} {'':>8} {'낮은 Loss':>10}{'':>10}{'높은 Loss':>10}") print() print(f"핵심: 모델이 10배 커지면 Loss가 약 15% 감소") print(f" 0.1B -> 1B: {(losses[0]-losses[2])/losses[0]*100:.1f}% 개선") print(f" 1B -> 10B: {(losses[2]-losses[4])/losses[2]*100:.1f}% 개선") print(f" 10B -> 100B: {(losses[4]-losses[6])/losses[4]*100:.1f}% 개선") print(f" 100B -> 1000B: {(losses[6]-losses[8])/losses[6]*100:.1f}% 개선") print() print("로그 스케일에서 거의 직선적으로 개선됩니다!")
프롬프트 엔지니어링
비유: 좋은 질문이 좋은 답을 이끌어낸다 선생님에게 "수학 알려줘"보다 "이차방정식의 근의 공식을 예시와 함께 설명해줘"가 더 좋은 답을 얻는 것처럼, LLM에게도 잘 구성된 프롬프트가 중요합니다.
주요 프롬프트 기법
1) Zero-shot: 예시 없이 직접 질문
"다음 문장의 감성을 분석하세요: 이 영화 재미있어요"
2) Few-shot: 예시를 몇 개 제공
"감성 분석을 합니다.
입력: 맛있다 -> 긍정
입력: 별로다 -> 부정
입력: 최고다 -> ???"
3) Chain-of-Thought (CoT): 단계적 사고 유도
"Step by step으로 생각해보세요.
철수는 사과 3개를 가지고 있었습니다.
영희에게 1개를 주고, 가게에서 2개를 샀습니다.
철수가 가진 사과는 몇 개인가요?"
4) 역할 부여:
"당신은 경험 많은 Python 개발자입니다.
초보자에게 리스트 컴프리헨션을 설명해주세요."
5) 형식 지정:
"다음 텍스트를 분석하고, JSON 형식으로 결과를 출력하세요."
실행해보기: 프롬프트 설계의 차이
pythonimport numpy as np # 프롬프트 품질에 따른 응답 품질 시뮬레이션 prompts = [ { "type": "나쁜 프롬프트", "prompt": "AI 알려줘", "quality_score": 0.3, "expected": "AI는... 인공지능입니다... (모호한 답변)" }, { "type": "보통 프롬프트", "prompt": "AI가 뭔지 설명해줘", "quality_score": 0.6, "expected": "AI(인공지능)는 기계가 인간의 지능을 모방하는 기술입니다." }, { "type": "좋은 프롬프트", "prompt": "중학생이 이해할 수 있도록 AI의 정의, 종류, 활용 사례를 각각 2줄로 설명해줘", "quality_score": 0.9, "expected": "체계적이고 맞춤화된 상세 답변" }, { "type": "Chain-of-Thought", "prompt": "AI란 무엇인지 단계별로 설명해줘: 1)정의 2)작동원리 3)종류 4)실생활 예시", "quality_score": 0.95, "expected": "단계별 구조화된 완벽한 답변" }, ] print("=== 프롬프트 품질이 응답에 미치는 영향 ===") for p in prompts: bar_len = int(p["quality_score"] * 30) bar = "#" * bar_len print(f"[{p['type']}]") print(f" 프롬프트: '{p['prompt']}'") print(f" 응답 품질: {p['quality_score']:.0%} |{bar}|") print(f" 예상 응답: {p['expected']}") print() print("핵심: 구체적이고 구조화된 프롬프트 = 더 좋은 응답!")
현대 LLM 비교
주요 LLM들
| 모델 | 개발사 | 특징 |
|---|---|---|
| GPT-4 / GPT-4o | OpenAI | 멀티모달, 강력한 추론 |
| Claude 3.5 | Anthropic | 안전성 중시, 긴 컨텍스트 |
| Gemini 1.5 | 100만 토큰 컨텍스트, 멀티모달 | |
| LLaMA 3 | Meta | 오픈소스, 연구용 |
| Mistral | Mistral AI | 효율적 소형 모델 |
| Command R+ | Cohere | 검색 증강 생성(RAG) 특화 |
LLM의 공통 구조
거의 모든 현대 LLM은 동일한 기본 구조를 공유합니다:
- •Decoder-only Transformer (GPT 스타일)
- •Next Token Prediction으로 Pre-training
- •SFT + RLHF (또는 유사한 정렬 기법)
차이점:
- •모델 크기와 아키텍처 세부 사항
- •학습 데이터의 구성과 양
- •정렬(Alignment) 방법의 차이
- •컨텍스트 윈도우 크기
- •멀티모달 지원 여부
LLM의 한계와 발전 방향
현재 한계
1) 환각 (Hallucination)
- 사실이 아닌 정보를 자신있게 생성
- "서울 타워는 1975년에 건설되었습니다" (실제: 1969년 착공, 1975년 완공은 맞지만 세부 사실 오류 가능)
2) 지식 기한 (Knowledge Cutoff)
- 학습 데이터 이후의 정보를 모름
- 해결: RAG (검색 증강 생성), 웹 검색 연동
3) 추론 한계
- 복잡한 수학, 논리 문제에서 실수
- 해결: Chain-of-Thought, 도구 사용 (계산기 등)
4) 컨텍스트 길이 제한
- 한 번에 처리할 수 있는 텍스트 양에 한계
- 현재: 128K ~ 1M 토큰까지 확장 중
발전 방향
1) 멀티모달 (Multimodal)
- 텍스트 + 이미지 + 오디오 + 비디오 통합 처리
- GPT-4o, Gemini 등이 선도
2) Agent (에이전트)
- LLM이 도구를 사용하고, 계획을 세우고, 실행
- 코드 실행, 웹 검색, 파일 조작 등
3) 더 효율적인 학습
- 적은 데이터/컴퓨팅으로 더 좋은 성능
- Mixture of Experts (MoE), 지식 증류
4) 더 나은 정렬 (Alignment)
- RLHF를 넘어선 새로운 정렬 기법
- Constitutional AI, Direct Preference Optimization (DPO)
5) 온디바이스 (On-device)
- 스마트폰에서 직접 실행 가능한 소형 LLM
- 프라이버시 보호, 오프라인 사용
실행해보기: LLM 발전 타임라인
pythonimport numpy as np timeline = [ ("2017.06", "Transformer 논문", "Attention Is All You Need 발표"), ("2018.06", "GPT-1", "Pre-training + Fine-tuning 패러다임"), ("2018.10", "BERT", "양방향 Encoder, MLM 학습"), ("2019.02", "GPT-2", "1.5B 파라미터, Zero-shot 가능성"), ("2020.05", "GPT-3", "175B 파라미터, Few-shot, In-context Learning"), ("2020.01", "Scaling Laws", "모델/데이터/연산 확대의 법칙 발견"), ("2022.03", "InstructGPT", "RLHF 도입, 지시 따르기 향상"), ("2022.11", "ChatGPT", "대화형 AI의 대중화, 월 1억 사용자"), ("2023.03", "GPT-4", "멀티모달, 전문가 수준 추론"), ("2023.07", "LLaMA 2", "오픈소스 LLM의 대중화"), ("2023.12", "Gemini", "Google의 멀티모달 LLM"), ("2024.03", "Claude 3", "Anthropic, 안전성과 성능 균형"), ("2025.01", "추론 모델 경쟁", "o1, DeepSeek-R1 등 추론 특화 모델"), ] print("=== LLM 발전 타임라인 ===") for date, name, desc in timeline: year = date[:4] bar_year = int(year) - 2017 indent = " " * bar_year print(f" {date} {indent}>> {name}") print(f" {indent} {desc}") print() print("7년 만에 AI의 판도가 완전히 바뀌었습니다!") print("핵심 흐름: Transformer -> 스케일 업 -> RLHF -> 멀티모달 -> Agent")
핵심 요약
| 단계 | 이름 | 비유 | 핵심 |
|---|---|---|---|
| 1단계 | Pre-training | 기초 교육 | 대규모 텍스트로 언어 패턴 학습 |
| 2단계 | SFT | 전문 교육 | 질문-답변 형식으로 미세 조정 |
| 3단계 | RLHF | 인성 교육 | 인간 선호도 반영, 안전성 향상 |
| - | Scaling Laws | 큰 그물 | 크기/데이터/연산이 클수록 성능 향상 |
| - | 프롬프트 엔지니어링 | 좋은 질문 | 잘 설계된 입력이 좋은 출력을 만듦 |
학습 체크리스트
- • Pre-training, SFT, RLHF의 차이를 설명할 수 있다
- • Scaling Laws의 세 요소(모델/데이터/연산)를 안다
- • RLHF가 왜 필요한지 구체적 예시로 설명할 수 있다
- • 프롬프트 엔지니어링의 주요 기법(Zero-shot, Few-shot, CoT)을 안다
- • 현대 LLM들의 공통 구조를 이해한다
- • LLM의 한계(환각, 지식 기한 등)와 해결 방향을 안다
레슨 정보
- 레벨
- Level 7: Transformer & LLM 원리
- 예상 소요 시간
- 45분
- 참고 영상
- YouTube 링크
💡실습 환경 안내
이 레벨은 PyTorch/GPU가 필요하여 Google Colab 사용을 권장합니다.
Colab은 무료 GPU를 제공하여 PyTorch, CNN, Transformer 등을 실행할 수 있습니다.