Week 2

Pre-training

Decoder-only LLM은 앞부분을 보고 다음 토큰을 예측하는 방식으로 학습할 수 있다. 그렇다면 모델을 학습시킬 때 어떤 문서를 사용해야 할까? 웹 문서·책·코드 중 무엇을 얼마나 섞을지, 문서를 어떤 길이의 학습 샘플로 만들지에 따라 모델이 접하는 문맥이 달라진다. 이 노트에서는 Zhao 등의 LLM 서베이1를 참고해 pre-training의 데이터 구성과 학습 목표, 학습 설정을 살펴본다.

1. LLM 학습 과정

우리가 사용하는 대화 모델(chat model)은 대규모 텍스트 모음인 말뭉치로 학습한 직후의 기본 모델(base model)과 구분할 필요가 있다. 대표적인 개발 흐름은 다음과 같다. 모든 모델이 같은 단계나 순서를 따르는 것은 아니며, 데이터를 보강하고 평가하면서 여러 번 반복하기도 한다.

구분대표적인 데이터학습에서 바꾸려는 것
Pre-training문서·코드 등 대규모 말뭉치다양한 문맥의 다음 토큰을 예측하는 기반 능력
Post-training: SFT(supervised fine-tuning)지시와 응답, 대화 예시원하는 입력 형식에서 적절한 응답을 생성하는 행동
Post-training: 선호도 학습(preference learning)응답 선호도, 검증 가능한 보상, 상호작용 결과여러 가능한 응답 중 목적에 더 맞는 행동을 강화

위 표는 목적에 따른 큰 구분이다. 실제 개발에서는 각 구간을 더 잘게 나누고, 모델 크기에 따라 서로 다른 경로를 사용하기도 한다. Qwen3는 pre-training에서 일반적인 지식을 익힌 뒤 수학·코드 등의 데이터 비중을 높인다. 마지막에는 긴 문서로 구성한 학습 데이터를 사용하고, 학습 시퀀스 길이를 4,096에서 32,768 토큰으로 늘려 긴 문맥을 다루도록 추가 학습한다. 이때 토큰의 위치 정보를 반영하는 RoPE(rotary position embedding)의 설정도 긴 문맥에 맞게 함께 조정한다.2 Post-training에서는 대형 모델을 여러 단계로 개선하고, 그 모델을 teacher로 활용해 소형 student 모델에 능력을 전달한다. 이를 distillation(지식 증류)이라고 한다.2

Qwen3의 전체 학습 흐름. 일반 지식, 추론 중심 데이터, 긴 문맥의 세 단계로 pre-training한 base model에서 출발한다. 대형 모델은 추론 예시 학습, reasoning RL, thinking mode fusion, general RL을 거친다. 소형 모델은 대형 teacher의 응답을 사용하는 off-policy distillation과 student 자신의 생성 결과를 사용하는 on-policy distillation을 거친다.
Qwen3의 학습 과정. Pre-training으로 만든 base model에서 모델 규모에 따라 post-training 경로가 갈라진다. 화살표는 단계 진행과 teacher의 지도 신호를 구분한다. (출처: Qwen Team (2025), Qwen3 Technical Report.)

그림의 위쪽이 이 노트에서 살펴볼 pre-training이다. 아래쪽의 RL과 distillation은 post-training의 세부 방법이다. 특히 on-policy distillation에서는 student가 직접 생성한 응답의 각 문맥에서 teacher의 다음 토큰 확률 분포를 따라가도록 학습한다. Teacher가 만들어 둔 응답을 학습하는 off-policy 단계와, 누가 학습에 사용할 응답을 생성하는가에서 차이가 난다.

지금은 각 방법을 모두 이해하기보다, pre-training과 post-training 각각에 여러 단계와 데이터 선택이 들어간다는 점을 보자.

2. Objective function

2-1. 세 구조의 사전학습

1주차에서 본 구조와 대표적인 학습 목표를 정리하면 다음과 같다. 구조와 목적함수는 설계상 별개이므로 아래 연결이 가능한 조합의 전부는 아니다.

구조문맥을 읽는 방식대표적인 사전학습 objective function
Encoder-only양방향으로 참조BERT의 MLM(masked language modeling)
Decoder-only현재 위치와 이전 위치 참조GPT의 NTP(next token prediction)
Encoder-decoder입력을 양방향으로 읽고 출력은 순차 생성T5의 span corruption

2-2. 입력과 정답

이제 decoder-only의 NTP(next-token prediction)에 집중한다. 가상 토큰열 (학습 문서) [BOS, 부산, 항구, EOS]를 보자. BOS(beginning of sequence)와 EOS(end of sequence)는 문서 시작·종료를 표시하는 special token이다. 입력을 한 칸 오른쪽의 정답과 짝지으면 다음과 같다.

위치입력 토큰참조 가능한 문맥정답
0BOSBOS부산
1부산BOS, 부산항구
2항구BOS, 부산, 항구EOS

학습할 때는 모델이 생성한 토큰 대신 문서의 실제 앞부분을 입력으로 사용하는 teacher forcing으로 세 위치의 예측을 함께 계산한다. 이후에는 어느 정답을 채점하고, 몇 개의 정답으로 평균할 것인가를 정한다. 위 예제에서 세 정답을 모두 채점한다면, 세 위치의 loss를 더해 3으로 나눈다.

2-3. NTP 목적함수

데이터의 토큰열을 t1,,tTt_1,\ldots,t_T라고 하면 각 위치에서 앞선 토큰들을 조건으로 다음 토큰에 확률을 준다.

pθ(t1:T)=pθ(t1)i=2Tpθ(tit<i)p_\theta(t_{1:T})=p_\theta(t_1)\prod_{i=2}^{T}p_\theta(t_i\mid t_{<i})

이 식은 결합확률(joint probability)을 조건부 확률의 곱으로 표현하는 확률의 연쇄법칙(chain rule)이다. 앞선 토큰에 따라 다음 토큰의 확률이 달라지므로 문맥을 조건으로 남겨 둔다.

위의 [BOS, 부산, 항구, EOS] 예시에 적용해 보자.

pθ(BOS)×pθ(부산BOS)×pθ(항구BOS,부산)×pθ(EOSBOS,부산,항구)\begin{aligned} p_\theta(\mathrm{BOS})\times p_\theta(\text{부산}\mid\mathrm{BOS})\times p_\theta(\text{항구}\mid\mathrm{BOS},\text{부산})\times p_\theta(\mathrm{EOS}\mid\mathrm{BOS},\text{부산},\text{항구}) \end{aligned}

우리는 관측된 문서(학습 데이터)들을 잘 설명하는 확률 모델을 찾는 것을 학습 기준으로 삼는다. 여기서 관측한 토큰열 t1:Tt_{1:T}는 고정하고, 가중치 θ\theta를 바꾸어 가며 pθ(t1:T)p_\theta(t_{1:T})를 비교한다. 이처럼 주어진 데이터를 얼마나 잘 설명하는지를 본 값이 우도(likelihood)다. 이를 크게 만드는 모델 가중치(weight, parameter)를 찾는 방법이 최대우도추정(maximum likelihood estimation, MLE)이다.

예를 들어 BOS, 부산 다음에 실제로 항구가 관측되었다면, 다른 조건이 같을 때 항구에 0.1보다 0.4의 확률을 주는 모델이 이 관측을 더 잘 설명한다. 다만 이 한 문장만의 확률을 높이는 것이 목적은 아니다. 전체 학습 문서에 대한 log likelihood의 합을 최대화해 여러 문맥을 함께 설명하도록 모델 가중치를 조정한다.

최적화에서는 보통 최소화할 loss를 사용하므로 우도에 음의 로그(negative log likelihood)를 취한다. 로그는 확률의 크기 순서를 유지하고, 음수 부호는 최대화 문제를 최소화 문제로 바꾼다. 또한 위의 조건부 확률들의 곱이 로그의 합으로 바뀌므로, 결국 각 위치에서 관측된 다음 토큰의 음의 로그 확률을 더하게 된다. 이를 유효한 정답 토큰 수로 평균하면 다음 목적함수를 얻는다.

L=1imiimilogpθ(tit<i)\mathcal{L}=-\frac{1}{\sum_i m_i}\sum_i m_i\log p_\theta(t_i\mid t_{<i})

mim_i는 해당 정답 위치를 loss에 포함하면 1, 제외하면 0인 mask다. 위 결합확률에는 BOS의 확률도 포함되지만, 2-2의 학습 예제에서는 BOS를 주어진 시작 입력으로 사용하므로 BOS 자체의 예측은 loss에서 제외한다. 이 식은 데이터에 실제로 나타난 토큰에 낮은 확률을 줄수록 큰 벌점을 준다. 여러 문서나 배치를 합칠 때도 loss의 합과 유효 정답 수를 각각 합친 뒤 나누어야 한다.

NTP의 정답은 문서 자체에서 얻는다. 사람이 문장마다 별도 라벨을 붙일 필요가 없어 대규모 말뭉치를 활용하기에 유리하다. 동시에 데이터의 오류·반복·편향도 학습 신호가 될 수 있으므로, 데이터의 품질을 높이는 과정이 중요하다.

3. 학습 데이터

실제 모델의 데이터 구성에서 출발해 수집한 문서를 선별하고, 학습할 비율을 정하고, 입력 시퀀스로 만드는 과정을 살펴보자.

3-1. 데이터 구성과 분포

먼저 실제 공개 말뭉치를 보자. Allen AI의 OLMo 2의 기본 pre-training 데이터인 OLMo Mix 1124는 웹 문서에 코드·논문·수학·백과 자료를 더한 구성이다. 아래는 공식 데이터 카드가 공개한 데이터 풀의 규모다. B는 10억 (1,000,000,000), T는 1조 (1,000,000,000,000) 토큰을 뜻한다.45

데이터 출처주요 내용데이터 풀의 토큰 수
DCLM-Baseline웹 문서3.70T
StarCoder코드83.0B
peS2o / arXiv학술 문서58.6B / 20.8B
OpenWebMath / Algebraic Stack수학 관련 웹 문서·코드12.2B / 11.8B
Wiki백과 자료3.66B

큰 웹 말뭉치가 다양한 문맥을 제공하고, 별도의 출처가 코드·수학·학술 내용을 보강하는 모습을 볼 수 있다. 다만 데이터 풀에 저장된 양과 학습 중 읽히는 양은 다를 수 있다 (3-3절 참고). 일부 자료를 더 자주 선택하거나 후반에 구성을 바꿀 수 있기 때문이다. OLMo 2도 후반 학습에는 별도의 혼합 비율을 사용한다.4

이 영어 중심 구성을 한국어 모델에 그대로 적용할 수는 없다. 카카오의 Kanana는 영어·한국어 웹, 학술 문서, 코드, 백과사전, instruction 자료를 구분해 구성했다. 다만, 한국어 능력을 목표로 한다고 영어 자료의 비중을 무조건 줄일 필요는 없다. Kanana Technical Report는 한국어 데이터 조건을 유지하면서 영어 데이터의 품질을 높였을 때 한국어 benchmark 점수도 개선되었다.6

자료를 모을 때는 출처, 수집 시점, 이용 조건, 처리 이력을 함께 기록한다. 그래야 모델의 성능 변화가 어느 데이터 선택과 연결되는지 추적할 수 있다.

3-2. 추출·필터링·중복 제거

수집한 웹 페이지에는 본문뿐 아니라 메뉴·광고·반복 문구가 섞여 있다. 코드도 복제본이나 자동 생성 파일을 포함할 수 있다. FineWeb은 이런 웹 데이터를 pre-training 말뭉치로 만드는 추출·필터링·중복 제거 선택을 실험으로 비교한 자료다.7 이 절에서는 FineWeb의 관점에 실제 모델 개발 사례를 연결한다.

본문 추출은 메뉴와 본문을 구분하고, 표나 코드의 구조를 얼마나 보존할지 정해야 한다. 줄바꿈을 모두 없애면 일반 산문은 읽을 수 있어도 코드의 의미가 달라질 수 있다.

Llama 3는 수학·코드의 구조를 보존하는 추출 방식을 사용하고, 해당 영역에 맞는 필터를 따로 구성했다.8 Qwen3는 Qwen2.5-VL로 PDF 형태 문서에서 텍스트를 추출하고 Qwen2.5로 정제했다.2 같은 내용을 담은 자료라도 HTML, PDF, 소스 파일 중 어떤 형태인지에 따라 추출 방법이 달라진다.

품질 필터링은 문서 길이, 반복 비율, 언어 판별 점수나 학습된 분류기 등을 사용할 수 있다. 기준을 강하게 하면 잡음을 줄일 수 있지만, 짧은 질의응답이나 소수 언어의 정상 문서를 제거할 수도 있다. 필터 통과율만 보지 말고 빠진 문서의 표본을 직접 읽어야 한다.

Kanana는 영어와 한국어에 서로 다른 품질 필터를 적용했고, 한국어에는 교육적 품질 분류기를 별도로 만들었다.6 SmolLM2의 Stack-Edu는 코드의 교육적 품질을 기준으로 선별하되 프로그래밍 언어별 분류기를 사용한다. 실제 비교에서 Java는 다른 언어들과 다른 임계값이 유리했다.9 품질 점수는 하나의 보편적인 기준이라기보다, 어떤 자료를 남겨 어떤 능력을 키울지에 관한 선택이다.

중복 제거(deduplication)는 같은 문서의 여러 URL, 조금씩 바뀐 복제 페이지, 문서 내부의 긴 반복 구간을 다룬다. 완전 일치(exact duplicate)와 내용이 조금씩 다른 근접 중복(near duplicate)은 다른 문제다. Lee 등의 연구는 중복 제거를 암기된 텍스트 생성 및 train–test 중복과 연결해 분석한다.10 Llama 3는 URL·문서·줄 수준에서 중복을 제거한다.8 동일한 예제가 많이 수집되었다고 해서 새로운 학습 내용이 그만큼 늘어난 것은 아니다.

평가 데이터 오염(benchmark contamination)은 학습 데이터에 benchmark 문제나 해설이 들어 있는 경우다. 문자열 일치로 찾을 수 있는 중복도 있지만 번역·의역된 유출은 더 어렵다. “검사에서 발견하지 못했다”는 결과만으로 오염이 없다고 단정하지 않는다.

EXAONE 3.5는 평가 자료를 정규화하고 부분 문자열을 대조하는 오염 제거 과정을 공개했다.11 예를 들어 코드 평가 문제와 그 풀이를 학습 데이터에 넣으면, 테스트를 통과한 이유가 새로운 문제 해결 능력인지 익숙한 풀이의 재현인지 구분하기 어려워진다. 일반적인 중복 제거와 평가 자료에 대한 별도 대조가 모두 필요한 이유다.

선별 후 부족한 자료는 모델로 생성하는 합성 데이터(synthetic data)로 보완할 수도 있다. Qwen3는 기존 모델들로 교재·질의응답·코드 조각 등을 생성했다.2 생성한 자료에도 품질 검증과 중복·오염 검사가 필요하다.

추출·필터링·중복 제거가 결과에 미치는 영향은 FineWeb 공식 해설의 실험 그림에서 확인할 수 있다. 동일한 모델과 학습 토큰 수를 사용해 데이터 처리 선택의 효과를 비교한다.7

3-3. 데이터 혼합과 반복 노출

문서가 저장된 비율과 학습에서 선택하는 비율은 다를 수 있다. 여러 출처의 데이터를 섞는 데이터 혼합(data mixing)을 말뭉치의 문서 수 대신 모델이 소비하는 토큰의 비율로 설명하면 계산 예산과 연결하기 쉽다. 예를 들어, 중복 제거 후 데이터가 15M, 5M 토큰인 묶음이 있다고 하자. M은 100만 토큰을 뜻한다. 각 데이터 묶음에 대해 15M 토큰을 소비한다면, 평균적으로 약 한 번, 세 번 반복 노출이 된다.

SmolLM2의 두 번째 학습 단계는 영어 웹 75%, 코드 20%, 수학 5%로 구성된다. 그중 영어 웹 내부에서는 FineWeb-Edu와 DCLM을 60:40으로 섞었다.9

혼합 비율은 어떻게 선택할까? Llama 3는 학습 중간에 후보 데이터 30%와 기존 혼합 70%를 넣어 짧은 후반 학습 실험을 했다.8 SmolLM2도 웹 데이터 비율과 코드 데이터 교체를 비교했다.9 처음부터 전체 학습을 반복하기 전에 후보 구성이 목표 능력을 개선하는지 작은 규모로 확인하는 것이다.

혼합은 학습 도중에도 바뀔 수 있다. EXAONE 3.0은 일반 영역 중심의 6T 토큰 학습 이후 전문 영역의 비중을 높여 2T 토큰을 추가 학습했다.12 다만 반복 노출이 늘고 다른 능력이 약해질 수 있으므로, 개선 목표 영역뿐 아니라 일반 영역의 평가도 함께 유지해야 한다.

아래 SmolLM2의 원문 그림에서는 가로축이 누적 학습 토큰 수, 세로 방향의 비율이 각 단계의 데이터 혼합을 나타낸다. 학습 후반으로 갈수록 웹·코드·수학·교재의 비중이 어떻게 달라지는지 보자.9

SmolLM2의 네 pre-training 단계별 데이터 혼합. Stage 1은 웹 90%, 코드 10%; Stage 2는 웹 75%, 코드 20%, 수학 5%; Stage 3은 웹 74%, 코드 16%, 수학 10%; Stage 4는 웹 58%, 코드 24%, 수학 14%, 교재 4%다. 가로축은 누적 학습량 0부터 11T 토큰까지다.
SmolLM2의 단계별 데이터 mixture. 각 구간의 폭은 해당 단계의 학습 토큰 수를 나타낸다. (출처: Ben Allal et al. (2025), SmolLM2, Figure 2. CC BY 4.0. 원본 그대로 사용.)

3-4. 학습 시퀀스와 문서 경계

선별과 혼합이 끝나면 문서를 토큰화하고 입력과 정답을 구성해 실제 모델 입력으로 만들어야 한다. 가장 단순한 출발점은 문서 하나를 학습 샘플 하나로 만드는 것이다. 다만 문서마다 길이가 다르고, 학습 시에는 한 입력 시퀀스에 담을 최대 문맥 길이(context length)가 정해져 있다. 문서 하나를 그대로 넣을 수 있는지, 남는 공간은 어떻게 사용할지에 따라 다음 처리가 필요하다.

문서가 너무 길면, 최대 길이 이하의 조각으로 나누어 각각 학습에 사용하거나, 데이터 구성 방침에 따라 해당 문서를 학습 데이터에서 제외할 수 있다. 예를 들어 특수 토큰을 생략하면, 10,000토큰 문서를 4,096·4,096·1,808토큰으로 나눌 수 있다. 내용을 모두 사용하더라도 서로 다른 학습 시퀀스로 나뉜 조각 사이에는 attention이 연결되지 않으므로, 문서 앞뒤의 관계를 함께 학습하는 데 한계가 있다. Best-fit Packing도 최대 길이를 넘는 문서를 먼저 나누고, 이후에는 각 조각을 더 자르지 않고 배치하는 방법을 사용한다.13

문서가 짧으면, 하나씩 처리할 때 남는 공간을 padding으로 채울 수 있다. 이 빈 공간을 줄이기 위해 여러 짧은 문서나 조각을 한 입력 시퀀스에 이어 붙이는 방법이 packing이다. 예를 들어 1,000토큰 문서와 2,000토큰 문서는 하나의 4,096토큰 시퀀스에 함께 담을 수 있다.

Packing을 할 때는 함께 담은 문서 사이의 attention을 허용할지도 정해야 한다. 서로 독립적인 문서를 각각 학습한다는 의미를 유지하려면, 문서별로 attention을 분리해 자기 문서의 앞선 토큰만 보도록 하는 것이 기본적인 구성이다. EOS는 문서 종료를 표시할 뿐, attention을 자동으로 차단하지는 않는다.

독립적인 문서를 학습하려면 입력·정답도 문서별로 맞춘다. 위쪽 네 행은 같은 위치의 입력·정답·위치 번호·loss mask이고, 아래 행렬은 그 입력 위치들 사이의 attention 허용 범위다.

문서 A 입력은 BOS·부산·항구, 정답은 부산·항구·EOS다. 문서 B 입력은 BOS·코드·실행·완료, 정답은 코드·실행·완료·EOS다. 위치 번호는 0,1,2,0,1,2,3이고 loss mask는 모두 1이다. Attention은 각 문서 안에서만 현재·이전 위치를 허용하는 두 삼각형으로 나뉜다.
두 문서의 모든 정답을 채점하므로 loss mask는 모두 1이지만, B가 A를 읽는 것은 차단한다.

A의 마지막 입력 항구는 EOS를 예측하고, B의 첫 입력 BOS는 코드를 예측한다. 배열을 붙여 저장해도 A의 마지막 정답은 그대로 EOS다. 문서별 attention을 분리하고 위치 번호도 문서마다 다시 시작하는 구성을 택했다.

4. 학습과 평가

4-1. 최적화와 학습 안정화

입력과 정답이 준비되면 forward로 loss를 계산하고, backward로 gradient를 구한 뒤 optimizer로 가중치를 갱신한다. 이 과정에서 사용하는 다음 기법들은 딥러닝 전반에 공통으로 쓰이며, 대규모 LLM 학습에서도 수렴과 안정성에 영향을 준다.

Optimizer는 gradient를 이용해 가중치를 어떻게 갱신할지 정한다. LLM pre-training에서는 AdamW가 널리 사용되며, gradient의 과거 정보를 활용해 갱신을 조절한다.14 최근에는 Muon도 사용된다. 예를 들어 Moonlight는 Muon을 적용해 학습한 모델이다.15 Muon은 주로 은닉층의 행렬 가중치에 적용하고, embedding이나 다른 파라미터에는 AdamW 등을 함께 사용할 수 있다.16

Adam · AdamW · Muon 간단 비교
Optimizer갱신 방식의 핵심구분할 점
AdamGradient와 gradient 제곱의 이동평균을 이용해 파라미터별 갱신을 조절Loss에 L2 정규화를 더하면 그 항도 gradient 통계에 포함됨17
AdamWAdam의 적응적 갱신과 weight decay를 분리가중치를 줄이는 처리를 gradient 통계와 별도로 적용14
MuonMomentum으로 만든 행렬 갱신 방향을 근사적으로 직교화주로 은닉층의 행렬에 적용하며, embedding·벡터 등에는 AdamW 등을 함께 사용16

Optimizer를 선택한 뒤에는 다음 설정을 함께 정한다.

기법역할주요 설정
Weight decay가중치를 0 방향으로 줄이는 정규화로, 크기가 과도하게 커지는 것을 억제Decay 계수, 적용할 파라미터
Learning rate scheduler학습 진행에 따라 learning rate를 바꾸어 갱신 크기를 조절최대 learning rate, warmup 길이, 이후 감소 방식
Gradient clippingGradient norm이 임계값을 넘으면 같은 방향으로 축소해 큰 gradient로 인한 불안정을 완화Clipping 임계값

Warmup은 학습 초기에 learning rate를 낮게 시작해 점차 높이는 구간이다. 초기부터 큰 갱신이 일어나는 것을 완화하며, 이후에는 일정하게 유지하거나 학습 후반에 낮추는 등의 schedule을 사용한다.

Gradient clipping은 학습 진행 단계가 아니라 현재 gradient의 크기를 기준으로 적용한다. AdamW처럼 과거 상태를 이용하는 optimizer에서는 clipping 임계값이 최종 가중치 변화량의 직접적인 상한을 뜻하지는 않는다.

실제 DeepSeek-V3는 AdamW, weight decay, learning rate warmup과 후반 감소, gradient clipping을 함께 사용한다.18 기술 보고서를 읽을 때에는 개별 기법의 이름뿐 아니라 전체 학습량과 batch 크기에 맞춰 어떤 값을 사용했는지도 함께 살펴보면 된다.

4-2. 검증 지표

Pre-training을 마친 base model은 텍스트를 이어 쓰도록 학습한 모델이며, 대화 형식의 지시를 따르도록 충분히 조정된 상태는 아니다. 따라서 채팅에 얼마나 자연스럽게 응답하는지만으로 기반 능력을 판단하기 어렵다. 학습 중에는 training loss를 추적하고, 학습에 사용하지 않은 데이터에서 다음 세 관점을 함께 살펴본다.

Perplexity(PPL)는 평가 텍스트의 다음 토큰을 얼마나 잘 예측하는지 보는 지표다. 유효한 정답 토큰에 대한 평균 음의 로그 우도, 즉 평균 NTP loss를 지수화한 값으로, PPL=exp(Leval)\mathrm{PPL}=\exp(\mathcal{L}_{\mathrm{eval}})이다. 같은 평가 조건에서 낮을수록 실제 정답 토큰에 높은 확률을 준다는 뜻이다. 한국어 문서와 코드의 PPL을 각각 추적하면 학습 중 어느 영역의 예측이 개선되는지도 볼 수 있다. 다만 서로 다른 tokenizer의 토큰 단위 PPL은 직접 비교하면 안 된다. Vocabulary 크기뿐 아니라 한 토큰이 나타내는 내용과 평균을 내는 토큰 수가 달라지기 때문이다. 같은 vocabulary 크기라도 분할 방식이 다르면 문제가 남는다. 예를 들어 같은 표현을 한 토큰으로 예측하는 경우와 세 토큰으로 나누어 예측하는 경우는 토큰당 평균의 단위가 다르다. 평가 텍스트와 제공하는 문맥, 채점할 위치도 맞춰야 한다.19

Downstream 과제의 정확도는 언어 예측 능력이 실제 문제 해결로 이어지는지 확인한다. 대화 응답을 생성하게 하지 않고도, 문제를 조건으로 각 정답 후보의 conditional log likelihood를 계산해 가장 높은 후보를 선택할 수 있다. 예를 들어 대한민국의 수도는 뒤에 이어질 후보 서울부산 중 어느 쪽에 더 높은 점수를 주는지 보는 방식이다. 후보가 여러 토큰이면 후보 전체의 조건부 로그 확률을 합산하며, 길이 정규화를 사용하는지는 해당 평가 규칙에 따른다. 이때 모델 간에 비교하는 것은 raw likelihood 값 자체가 아니라 동일한 문제에서 정답을 선택한 비율이다. 문제·선택지·prompt 형식·예시 개수·채점 규칙을 통일해 비교한다.20

생성 예시의 정성적 검토도 필요하다. 한국어 문단의 앞부분이나 함수 설명과 코드의 시작 부분을 주고 이어 쓰게 하면, 문맥의 일관성, 불필요한 반복, 문법·코드 오류 등을 직접 확인할 수 있다. Base model에는 대화식 요청보다 이러한 이어 쓰기 형식이 학습 목표와 잘 맞는다. 같은 입력과 생성 설정으로 여러 사례를 비교하되, 몇 개의 좋은 출력만으로 전체 성능을 판단하지 않는다. 정량 지표에서 드러나지 않은 실패 양상을 찾는 보완 수단으로 사용한다.

5. 영상으로 복습하기

Andrej Karpathy의 영상은 데이터에서 base model까지의 흐름을 화면 설명과 시연으로 연결한다.

Andrej Karpathy (2025), Deep Dive into LLMs like ChatGPT.
  • 01:00 : 데이터 수집
  • 14:27 : 모델 입력과 출력
  • 31:09 : GPT-2 학습과 추론
  • 42:52 : base model 생성 시연

이 노트에 해당하는 pre-training 설명은 59:23까지이며, 이후에는 post-training으로 넘어간다.

Footnotes

  1. Zhao, W. X., et al. (2025). A Survey of Large Language Models. arXiv:2303.18223v16.

  2. Qwen Team. (2025). Qwen3 Technical Report. arXiv:2505.09388v1. 2 3 4

  3. Ma, W., et al. (2026). MOPD: Multi-Teacher On-Policy Distillation for Capability Integration in LLM Post-Training. arXiv:2606.30406.

  4. OLMo Team. (2025). 2 OLMo 2 Furious. arXiv:2501.00656v1. 2

  5. Allen Institute for AI. (2024). OLMo Mix 1124. 데이터 카드.

  6. Kanana LLM Team. (2025). Kanana: Compute-efficient Bilingual Language Models. arXiv:2502.18934v1. 2

  7. Penedo, G., et al. (2024). The FineWeb Datasets: Decanting the Web for the Finest Text Data at Scale. NeurIPS 2024 Datasets and Benchmarks. arXiv:2406.17557v2. 2

  8. Dubey, A., et al. (2024). The Llama 3 Herd of Models. arXiv:2407.21783v1. 2 3

  9. Ben Allal, L., et al. (2025). SmolLM2: When Smol Goes Big — Data-Centric Training of a Small Language Model. arXiv:2502.02737v1. 2 3 4

  10. Lee, K., et al. (2022). Deduplicating Training Data Makes Language Models Better. ACL 2022, pp. 8424–8445. arXiv:2107.06499v2.

  11. LG AI Research. (2024). EXAONE 3.5: Series of Large Language Models for Real-world Use Cases. arXiv:2412.04862v1.

  12. LG AI Research. (2024). EXAONE 3.0 7.8B Instruction Tuned Language Model. arXiv:2408.03541v1.

  13. Ding, H., et al. (2024). Fewer Truncations Improve Language Modeling. arXiv:2404.10830v1.

  14. Loshchilov, I., & Hutter, F. (2019). Decoupled Weight Decay Regularization. ICLR 2019. arXiv:1711.05101. 2

  15. Liu, J., et al. (2025). Muon is Scalable for LLM Training. arXiv:2502.16982v1.

  16. Jordan, K. (2024). Muon: An optimizer for hidden layers in neural networks. 저자 설명. 2

  17. Kingma, D. P., & Ba, J. (2015). Adam: A Method for Stochastic Optimization. ICLR 2015. arXiv:1412.6980.

  18. DeepSeek-AI. (2024). DeepSeek-V3 Technical Report. arXiv:2412.19437v1.

  19. Hugging Face. Perplexity of fixed-length models. Transformers 공식 문서.

  20. EleutherAI. Language Model Evaluation Harness: Task Configuration. 공식 문서.