Level 7: Transformer & LLM 원리
🤖

Level 7

LLM 학습과 활용

Pre-training, Fine-tuning, RLHF, 프롬프트 엔지니어링, Scaling Laws

45분
LLM 학습과 활용 강의 영상
강의 영상 보기 (새 탭에서 재생)YouTube

📓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단계

비유: 사람의 교육 과정

  1. 기초 교육 (Pre-training): 초중고에서 국어, 수학, 과학 등 기초를 배움
  2. 전문 교육 (Fine-tuning): 대학/대학원에서 전공을 깊이 배움
  3. 인성 교육 (RLHF): 사회에서 예의, 소통 방법을 배움

LLM 학습 3단계 파이프라인:

단계이름내용
1️⃣Pre-training수조 개의 텍스트로 언어의 기본 패턴 학습 = "다음 단어 예측" 수십억 번 반복
⬇️
2️⃣SFT사람이 작성한 고품질 대화 데이터로 미세 조정 = 질문-답변 형식을 학습
⬇️
3️⃣RLHF사람의 선호도를 반영하여 응답 품질 향상 = 더 도움이 되고, 안전한 답변을 학습
⬇️
🎯완성된 LLMChatGPT, 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 데이터 규모 시각화

python
import 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는 모델을 더 "도움이 되면서도 안전하게" 만듭니다.

실행해보기: 보상 모델 개념 시뮬레이션

python
import 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)은 세 가지에 의해 예측 가능하게 개선됩니다:

  1. 모델 크기 (N): 파라미터 수
  2. 데이터 크기 (D): 학습 토큰 수
  3. 컴퓨팅 (C): 학습에 투입한 연산량

L(N, D) sim a/N^{alpha} + b/D^{eta} + c

핵심 통찰:

  • 세 요소를 동시에 늘려야 효과적
  • 모델만 키우고 데이터가 부족하면 비효율
  • 데이터만 많고 모델이 작으면 한계
  • 로그 스케일에서 거의 직선적으로 개선

실행해보기: Scaling Law 시각화

python
import 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 형식으로 결과를 출력하세요."

실행해보기: 프롬프트 설계의 차이

python
import 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-4oOpenAI멀티모달, 강력한 추론
Claude 3.5Anthropic안전성 중시, 긴 컨텍스트
Gemini 1.5Google100만 토큰 컨텍스트, 멀티모달
LLaMA 3Meta오픈소스, 연구용
MistralMistral AI효율적 소형 모델
Command R+Cohere검색 증강 생성(RAG) 특화

LLM의 공통 구조

거의 모든 현대 LLM은 동일한 기본 구조를 공유합니다:

  1. Decoder-only Transformer (GPT 스타일)
  2. Next Token Prediction으로 Pre-training
  3. 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 발전 타임라인

python
import 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 등을 실행할 수 있습니다.