용어집
용어집
장마다 나온 용어를 한곳에 모았습니다. 위의 찾기 칸에 낱말을 넣으면 그 줄만 남습니다.
1장 · 준비 수학과 Transformer 개요
| 용어 | 설명 |
|---|---|
벡터(vector) | 숫자를 한 줄로 늘어놓은 것입니다. 성적표에서 학생 한 명의 한 행과 같습니다. NumPy 에서는 shape 가 (6,) 처럼 숫자 하나로 나옵니다. |
차원(dimension) | 벡터에 든 숫자의 개수입니다. Transformer 에서는 낱말 하나를 나타내는 숫자 개수를 d_model 이라고 부릅니다. |
행렬(matrix) | 숫자를 행(row)과 열(column)로 놓은 표입니다. 벡터를 여러 줄 쌓으면 행렬이 됩니다. 엑셀 표 한 장이나 숫자만 든 DataFrame 과 같습니다. |
shape | 배열의 모양입니다. 행렬은 (행 수, 열 수) 로 적습니다. 문장 하나는 (낱말 수, 차원) 행렬입니다. |
행렬곱(matrix multiplication) | 앞 행렬의 행과 뒤 행렬의 열을 짝지어 곱하고 더하는 계산입니다. 점수표에 가중치표를 곱해 총점을 내는 일과 같습니다. 파이썬에서는 np.matmul(A, B) 나 A @ B 로 씁니다. |
내적(dot product) | 길이가 같은 두 벡터에서 같은 자리 숫자끼리 곱해 모두 더한 값입니다. 두 사람 취향이 얼마나 같은 쪽인지 재는 점수입니다. |
가중치(weight) | 신경망이 학습으로 정하는 숫자들입니다. 총점을 낼 때 과목마다 곱하는 비중과 같습니다. |
신경망(neural network) | 입력에 가중치를 곱하고 더하는 층을 여러 번 쌓아 답을 내는 계산 모형입니다. 이 과정의 Transformer 도 신경망입니다. |
점수(logit) | 신경망이 마지막에 내놓는 날것의 점수입니다. 음수일 수도 있고 합이 1이 아니라서 아직 확률이 아닙니다. |
Softmax | 점수를 합이 1인 비율(확률)로 바꾸는 계산입니다. 득표수를 투표 비율(합 100%)로 바꾸는 일과 같습니다. |
순서 데이터(sequence data) | 차례가 뜻을 정하는 데이터입니다. 문장, 센서 값, 주가처럼 앞뒤를 바꾸면 뜻이 달라집니다. |
토큰(token) | 모델이 문장을 자른 한 조각입니다. 이 장에서는 낱말 하나라고 보면 됩니다. 2장에서 자세히 봅니다. |
RNN(Recurrent Neural Network) | 문장을 앞에서부터 한 칸씩 읽으며 기억을 고쳐 쓰는 신경망입니다. recurrent 는 "되풀이되는"이라는 뜻입니다. |
기울기 소실(vanishing gradient) | 학습 신호가 여러 칸을 거꾸로 거치며 점점 작아져, 앞쪽 칸이 거의 배우지 못하는 일입니다. |
장거리 의존성(long-range dependency) | 멀리 떨어진 낱말끼리의 관계입니다. "그 회의에서 ... 말한 사람은 그였다"의 "그"가 누구인지 같은 것입니다. |
Seq2Seq(Sequence to Sequence) | 문장(순서 데이터)을 받아 다른 문장을 내는 모델입니다. 읽는 RNN(Encoder)과 쓰는 RNN(Decoder)을 따로 둡니다. |
Encoder | 입력 문장을 읽어 뜻을 숫자로 담는 부분입니다. encode 는 "부호로 바꾸다"라는 뜻입니다. |
Decoder | Encoder 가 넘긴 숫자를 보고 출력 문장을 한 낱말씩 쓰는 부분입니다. decode 는 "부호를 풀다"라는 뜻입니다. |
context vector | Encoder 가 Decoder 에게 넘기는 요약 벡터입니다. 긴 회의를 쪽지 한 장에 요약해 넘기는 것과 같습니다. |
Attention | Decoder 가 낱말을 하나 쓸 때마다 입력의 어느 자리를 얼마나 볼지 정해 다시 들춰 보는 방법입니다. attention 은 "주의, 집중"이라는 뜻입니다. |
병렬 처리(parallel processing) | 여러 계산을 한꺼번에 하는 것입니다. GPU 는 병렬 처리에 강한 계산 장치입니다. |
Transformer | 2017년 논문 "Attention Is All You Need"에서 나온 구조입니다. RNN 없이 Attention 만으로 모든 낱말 쌍의 관계를 한 번에 계산합니다. |
BLEU | 기계 번역이 사람 번역과 얼마나 겹치는지 재는 점수입니다. 높을수록 번역이 낫다고 봅니다. |
2장 · Transformer 입력 표현
| 용어 | 설명 |
|---|---|
토큰(token) | 모델이 읽는 텍스트의 기본 조각입니다. 단어 하나일 수도, 단어의 일부나 글자 하나의 일부(바이트)일 수도 있습니다. 문장을 쪼갠 레고 블록입니다. |
토큰화(tokenization) | 문장을 토큰으로 나누는 일입니다. |
토크나이저(tokenizer) | 토큰화를 하고, 토큰을 번호로 바꾸고, 번호를 다시 글자로 되돌리는 도구입니다. 모델마다 짝이 정해져 있습니다. |
사전(vocabulary, vocab) | 토크나이저가 아는 토큰을 모두 모아 번호를 매긴 목록입니다. Qwen 은 151,665개, BERT 는 30,522개입니다. |
토큰 ID(token ID) | 사전에서 토큰에 매긴 정수 번호입니다. 레고 블록마다 붙은 상품 번호입니다. |
input_ids | 토크나이저가 돌려주는 토큰 ID 리스트의 이름입니다. 모델에 들어가는 "상품 번호 열"입니다. |
서브워드(subword) | 단어보다 작은 조각입니다. 자주 쓰는 단어는 통째로, 드문 단어는 조각으로 나눕니다. |
OOV(Out-Of-Vocabulary) | 사전에 없는 낱말입니다. 단어 단위로 자르면 처음 보는 낱말을 읽지 못합니다. |
BPE(Byte Pair Encoding) | 자주 붙어 나오는 두 조각을 하나로 합치는 일을 되풀이해 사전을 만드는 방법입니다. GPT, Llama 3, Qwen 이 씁니다. |
Byte-level BPE | 글자 대신 바이트(byte)부터 합치는 BPE 입니다. 어떤 언어든 바이트로는 쪼갤 수 있으므로 사전에 없는 글자가 생기지 않습니다. |
WordPiece | 합쳤을 때 말뭉치의 가능도가 가장 커지는 쌍을 합치는 방법입니다. BERT 가 쓰며, 앞 조각에 이어 붙는 조각에 ## 을 붙입니다. |
SentencePiece | 띄어쓰기까지 하나의 문자로 보고 원문에서 바로 사전을 만드는 도구입니다. T5, Llama 2 가 씁니다. |
특수 토큰(special token) | 문장의 시작과 끝 같은 표시용 토큰입니다. BERT 의 [CLS](101), [SEP](102)가 그 예입니다. |
UTF-8 | 글자를 바이트로 저장하는 방식입니다. 영어 글자는 1바이트, 한글 한 글자는 3바이트입니다. |
디코딩(decoding) | 토큰 ID 를 다시 사람이 읽는 글자로 되돌리는 일입니다. decode 라는 이름으로 부릅니다. |
컨텍스트 길이(context length) | 모델이 한 번에 볼 수 있는 최대 토큰 수입니다. Qwen2.5-0.5B-Instruct 는 32,768(32K)입니다. |
임베딩(embedding) | 토큰 ID 를 뜻을 담을 수 있는 실수 벡터로 바꾸는 일, 또는 그 벡터입니다. 상품 번호를 성격표로 바꾸는 일입니다. |
임베딩 층(embedding layer) | (사전 크기, d_model) 모양의 큰 표입니다. 토큰 ID 번째 행을 꺼내 줍니다. |
d_model | 토큰 하나를 나타내는 벡터의 길이(숫자 개수)입니다. 원 논문은 512, Qwen2.5-0.5B 는 896, BERT-base 는 768입니다. |
조회(lookup) | 계산하지 않고 번호로 표의 행을 바로 꺼내는 일입니다. pandas 의 df.iloc[번호] 와 같습니다. |
위치 정보(positional information) | 토큰이 문장에서 몇 번째에 있는지 알려 주는 값입니다. |
위치 인코딩(positional encoding) | 위치 정보를 벡터로 만들어 임베딩에 더하는 방법입니다. 블록에 붙이는 번호표입니다. |
3장 · Attention과 Encoder
| 용어 | 설명 |
|---|---|
Attention(어텐션) | 여러 정보 가운데 지금 필요한 것에 더 많은 비중을 두어 섞는 계산입니다. attention 은 "주의, 주목"이라는 뜻입니다. |
Self-Attention(셀프 어텐션) | 한 문장 안의 낱말들이 서로를 참고하는 Attention 입니다. 회의에서 같은 회의실 사람들의 발언을 참고하는 것과 같습니다. |
Encoder(인코더) | 입력 문장을 읽어 문맥이 담긴 벡터들로 바꾸는 부분입니다. encode 는 "부호로 바꾸다"라는 뜻입니다. |
문맥 임베딩(contextual embedding) | 문장에 따라 달라지는 낱말 벡터입니다. "배를 타다"의 배와 "배가 고프다"의 배가 서로 다른 벡터가 됩니다. |
Query(쿼리, Q) | 이 낱말이 문장에서 무엇을 찾고 있는지 나타내는 벡터입니다. 도서관 검색창에 넣는 검색어입니다. |
Key(키, K) | 이 낱말이 어떤 정보를 가졌는지 알리는 이름표 벡터입니다. 책등에 붙은 제목표입니다. |
Value(밸류, V) | 이 낱말이 다른 낱말에게 실제로 넘겨 줄 내용 벡터입니다. 책의 본문입니다. |
가중치 행렬(weight matrix) | 입력에 곱해 모양과 값을 바꾸는 숫자 표입니다. W_Q, W_K, W_V 가 학습으로 정해지는 대상입니다. |
내적(dot product) | 두 벡터의 같은 자리끼리 곱해 모두 더한 값입니다. 1×4 + 2×5 + 3×6 = 32 처럼 계산하고, 두 벡터가 같은 쪽을 볼수록 커집니다. |
점수(score) | Query 와 Key 의 내적입니다. 두 낱말이 얼마나 관련 있는지 매긴 값입니다. |
Softmax(소프트맥스) | 점수들을 합이 1 인 비율로 바꾸는 함수입니다. 점수를 투표 비율(합 100%)로 바꾸는 일입니다. |
Attention 가중치(attention weight) | softmax 를 거친 참고 비율입니다. 행마다 합이 1 인 표가 됩니다. |
Scaled Dot-Product Attention | 내적 점수를 √d_k 로 나눈(scaled) 뒤 softmax 를 쓰는 Attention 입니다. 식은 softmax(QKᵀ / √d_k) V 입니다. |
d_model | 낱말 하나를 나타내는 벡터의 길이입니다. 원 논문 base 모델은 512 입니다. |
d_k | Query 와 Key 벡터 하나의 길이입니다. 원 논문은 64 이므로 √d_k = 8 로 나눕니다. |
shape(모양) | 숫자 배열의 크기입니다. (10, 512) 는 낱말 10개를 각각 숫자 512개로 나타낸다는 뜻입니다. |
전치(transpose, ᵀ) | 행렬의 행과 열을 맞바꾸는 일입니다. (10, 64) 의 K 를 전치하면 (64, 10) 이 됩니다. |
그래디언트(gradient) | 학습할 때 가중치를 어느 쪽으로 얼마나 고칠지 알려 주는 값입니다. 0 에 가까우면 학습이 멈춘 듯 느려집니다. |
Multi-Head Attention(멀티 헤드 어텐션) | 벡터를 여러 조각(head)으로 나눠 Attention 을 따로 계산한 뒤 합치는 방법입니다. 여러 전문가가 각자 관점으로 보고 의견을 합치는 일입니다. |
head(헤드) | Multi-Head Attention 에서 한 관점을 맡은 Attention 하나입니다. |
Concat(이어 붙이기) | concatenate 의 줄임말입니다. 여러 head 의 결과를 옆으로 나란히 붙입니다. |
잔차 연결(residual connection, Add) | 층의 입력을 층의 출력에 더하는 일입니다. 원본을 옆에 붙여 두어 정보가 사라지지 않게 합니다. |
층 정규화(Layer Normalization, Norm) | 벡터 하나의 숫자들을 평균 0, 표준편차 1 근처로 맞추는 일입니다. 눈금 맞추기입니다. |
FFN(Feed Forward Network, 피드 포워드 신경망) | 낱말 벡터마다 따로 통과시키는 작은 신경망입니다. 낱말마다 따로 받는 개인 과외입니다. |
4장 · Transformer Decoder와 작은 번역기
| 용어 | 설명 |
|---|---|
Decoder(디코더) | 출력 문장을 한 토큰씩 만드는 Transformer 의 오른쪽 부분입니다. decode 는 "암호를 풀어 글로 옮기다"라는 뜻입니다. |
Encoder(인코더) | 입력 문장을 읽어 토큰마다 문맥이 담긴 벡터를 만드는 왼쪽 부분입니다. 3장에서 보았습니다. |
시작 토큰(start token, <sos>) | Decoder 에게 "이제 쓰기 시작해"라고 알리는 맨 앞 토큰입니다. 이 장의 토크나이저에서는 [CLS](ID 2)가 이 일을 합니다. |
종료 토큰(end token, <eos>) | 문장이 끝났다는 표시입니다. 이 장의 토크나이저에서는 [SEP](ID 3)입니다. |
패딩 토큰(pad token) | 길이가 다른 문장을 한 묶음으로 만들 때 빈자리를 채우는 토큰입니다. 이 장에서는 [PAD](ID 0)입니다. |
Teacher Forcing(교사 강요) | 학습할 때 모델이 앞에서 무엇을 예측했든, 정답 토큰을 다음 입력으로 넣어 주는 방법입니다. 받아쓰기 연습에서 앞 낱말의 정답을 보여 주는 것과 같습니다. |
shifted right(오른쪽으로 한 칸 밀기) | 정답 문장 맨 앞에 시작 토큰을 넣고 맨 끝 하나를 빼서 Decoder 입력을 만드는 일입니다. |
Masked Self-Attention | 각 위치가 자기와 앞쪽 토큰만 보도록 뒤쪽을 가린 Self-Attention 입니다. 시험 중 뒷장을 가리고 푸는 것과 같습니다. |
Causal Mask(인과 마스크) | Attention 점수 표의 위쪽 삼각형(미래 자리)을 -inf 로 채우는 가림판입니다. causal 은 "원인이 결과보다 앞선다"는 뜻입니다. |
-inf(음의 무한대) | 어떤 수보다도 작은 값입니다. e 의 -inf 제곱은 0 이라서 Softmax 를 거치면 가중치가 0 이 됩니다. |
자기회귀(auto-regressive) | 자기가 방금 만든 출력을 다음 입력으로 다시 넣으며 이어 가는 방식입니다. GPT 같은 생성형 LLM 의 기본 원리입니다. |
Cross-Attention(교차 어텐션) | Query 는 Decoder 에서, Key 와 Value 는 Encoder 출력에서 가져오는 Attention 입니다. 번역문을 쓰며 원문을 흘끗 보는 일입니다. |
Decoder 블록(Decoder block) | Masked Self-Attention, Cross-Attention, Feed Forward 세 층과 각 층 뒤의 Add & Norm 으로 된 묶음입니다. 이 묶음을 N번 쌓습니다. |
Linear(선형층) | 벡터에 가중치 행렬을 곱해 다른 크기의 벡터로 바꾸는 층입니다. 여기서는 256칸 벡터를 사전 크기(61,790칸)의 점수로 바꿉니다. |
로짓(logit) | Softmax 를 거치기 전의 점수입니다. 음수도, 1 보다 큰 수도 될 수 있습니다. |
어휘 크기(vocabulary size) | 토크나이저 사전에 든 토큰의 개수입니다. tunib/electra-ko-en-small 은 61,790개입니다. |
학습(Training)과 추론(Inference) | 학습은 정답을 보며 가중치를 고치는 단계, 추론은 다 배운 모델로 새 입력에 답을 만드는 단계입니다. |
generate | 한 토큰씩 고르고 입력 뒤에 붙이기를 반복해 문장을 만드는 함수입니다. 이어 쓰기 담당입니다. |
epoch(에폭) | 학습 데이터 전체를 한 바퀴 도는 것입니다. 문제집 한 바퀴와 같습니다. |
손실(loss) | 정답과의 거리, 곧 벌점입니다. 이 장에서는 정답 토큰에 준 확률이 낮을수록 커지는 교차 엔트로피(cross entropy)를 씁니다. |
검증 데이터(validation) | 학습 중에 실력을 확인하는 모의고사입니다. 가중치를 고치는 데는 쓰지 않습니다. |
Seq2SeqTrainer | sequence-to-sequence trainer, 곧 "문장을 받아 문장을 내는 모델"의 학습 반복을 대신 돌려 주는 도구입니다. |
5장 · Decoder-only LLM과 학습 단계
| 용어 | 설명 |
|---|---|
LLM(Large Language Model) | 파라미터가 수억~수천억 개인 큰 언어 모델입니다. 글을 읽고 이어지는 글을 씁니다. |
Decoder-only | Transformer 에서 Decoder 블록만 쌓은 구조입니다. Encoder 도, Cross-Attention 도 없습니다. GPT, Qwen, Llama 가 이 구조입니다. |
다음 토큰 예측(Next Token Prediction) | 앞 토큰들을 보고 바로 다음 토큰을 맞히는 과제입니다. GPT 가 배우는 단 하나의 과제입니다. |
자기지도학습(Self-supervised Learning) | 사람이 정답을 달지 않고, 데이터 자체에서 정답을 만들어 배우는 방식입니다. 문장의 다음 토큰이 곧 정답입니다. |
사전학습(Pre-training) | 웹, 책, 코드 같은 아주 많은 텍스트로 다음 토큰 예측을 시키는 첫 단계입니다. 도서관 책을 다 읽은 수습생이 됩니다. |
Base 모델 | 사전학습만 마친 모델입니다. 아는 것은 많지만 대화 형식에는 서툽니다. |
Instruct 모델 | Base 모델에 SFT 를 더해 지시를 따르도록 다듬은 모델입니다. 이름 끝의 Instruct 가 이 뜻입니다. |
파라미터(Parameter) | 모델이 학습으로 정하는 숫자, 곧 가중치입니다. Qwen2.5-0.5B 는 약 4.9억 개입니다. B 는 billion(10억)입니다. |
Scaling Law | 모델 크기, 데이터 양, 계산량을 늘리면 손실이 예측 가능한 비율로 꾸준히 줄어든다는 관찰입니다. |
In-context Learning | 학습 없이 프롬프트 안의 예시 몇 개만 보고 새 작업을 해내는 능력입니다. 예시를 몇 개 주는 것을 few-shot 이라고 합니다. |
Chinchilla 법칙 | 같은 계산 예산이면 파라미터 1개당 약 20토큰의 데이터로 학습하는 편이 효율적이라는 관찰입니다. |
RoPE(Rotary Position Embedding) | 위치 정보를 벡터를 돌리는 각도로 넣는 방법입니다. print(model) 에서는 rotary_emb 로 보입니다. |
SwiGLU | FFN 의 한 방식입니다. gate_proj 가 SiLU 를 거쳐 문지기처럼 up_proj 의 값을 얼마나 통과시킬지 정합니다. |
SiLU(Sigmoid Linear Unit) | x × sigmoid(x) 로 계산하는 활성화 함수입니다. 음수는 0 근처로 줄이고 양수는 거의 그대로 둡니다. |
GQA(Grouped-Query Attention) | Query 머리 여러 개가 Key·Value 머리 하나를 나눠 쓰는 Attention 입니다. Qwen 은 Query 14개가 Key·Value 2개를 7개씩 나눠 씁니다. |
lm_head(language model head) | 마지막 층의 896칸 벡터를 어휘 151,936개 각각의 점수로 바꾸는 선형층입니다. 다음 토큰 점수표를 만듭니다. |
SFT(Supervised Fine-Tuning) | (지시, 모범 답변) 쌍으로 모범 답변을 따라 쓰게 하는 지도 미세조정입니다. 2일차에 직접 합니다. |
선호도 정렬(Preference Alignment) | 같은 질문의 두 답 중 사람이 더 좋아한 쪽의 확률을 높이는 학습입니다. RLHF, DPO 가 대표적입니다. |
Prompt Engineering | 모델은 그대로 두고 지시문을 잘 써서 원하는 답을 끌어내는 방법입니다. |
RAG(Retrieval-Augmented Generation) | 질문과 관련된 문서를 검색해 프롬프트에 함께 넣어 답하게 하는 방법입니다. |
Fine-tuning(미세조정) | 우리 데이터로 모델의 가중치를 조금 더 학습시키는 방법입니다. PEFT, LoRA 는 이것을 적은 비용으로 하는 기법입니다. |
BF16(bfloat16) | 숫자 하나를 2바이트(16비트)로 저장하는 형식입니다. FP32(4바이트)의 절반 메모리를 씁니다. |
6장 · Qwen 모델 준비와 텍스트 생성
| 용어 | 설명 |
|---|---|
Qwen2.5-0.5B-Instruct | 알리바바가 공개한 LLM 입니다. 0.5B 는 파라미터가 약 5억(0.5 billion) 개라는 뜻이고, Instruct 는 질문에 답하도록 SFT 까지 마친 모델이라는 뜻입니다. |
파라미터(parameter) | 모델 안에서 학습으로 정해지는 숫자 하나하나입니다. 가중치(weight)라고도 합니다. 이 모델에는 494,032,768 개가 있습니다. |
GPU(Graphics Processing Unit) | 계산을 한꺼번에 많이 하는 연산 장치입니다. 원래 그래픽용이지만 딥러닝 계산에 씁니다. 이 교안의 실행 결과는 RTX 3080(10GB)에서 얻었습니다. |
VRAM(Video RAM) | GPU 에 붙은 메모리입니다. 모델의 가중치와 계산 중간값이 여기에 올라갑니다. 책상 넓이와 같습니다. |
CUDA | NVIDIA GPU 에 일을 시키는 방법입니다. 코드에서 device = "cuda" 는 "GPU 에서 계산하라"는 뜻입니다. |
from_pretrained | 이미 학습된(pretrained) 가중치를 모델 이름으로 내려받아 불러오는 함수입니다. |
AutoTokenizer | 모델 이름만 주면 그 모델에 맞는 토크나이저를 골라 주는 도구입니다. |
AutoModelForCausalLM | 다음 낱말 맞히기(causal language model)용 모델을 불러오는 도구입니다. |
정밀도(precision, dtype) | 숫자 하나를 몇 바이트로 저장하는지입니다. FP32 는 4바이트, BF16 과 FP16 은 2바이트입니다. |
BF16(bfloat16) | 2바이트짜리 숫자 형식입니다. FP16 보다 아주 큰 수와 아주 작은 수를 잘 담아 LLM 에 많이 씁니다. RTX 30 이후 GPU 가 지원합니다. |
양자화(quantization) | 숫자를 더 적은 바이트로 줄여 저장하는 일입니다. 고화질 사진을 작은 용량으로 저장하는 것과 같습니다. 9장의 QLoRA 에서 씁니다. |
generate | 다음 토큰을 하나 고르고 입력 뒤에 붙이기를 되풀이하며 글을 이어 쓰는 함수입니다. |
pipeline | 토크나이저, 모델, 후처리를 한 줄로 묶어 주는 Hugging Face 의 간편 도구입니다. |
로짓(logit) | 모델이 다음 토큰 후보마다 매긴 날것의 점수입니다. Softmax 를 거쳐야 합이 1 인 확률이 됩니다. |
디코딩(decoding) | 확률 표에서 실제로 어떤 토큰을 고를지 정하는 방식입니다. |
Greedy(탐욕적) 디코딩 | 매번 확률이 가장 높은 토큰 하나만 고르는 방식입니다. do_sample=False 입니다. |
샘플링(sampling) | 확률에 따라 제비뽑기로 고르는 방식입니다. do_sample=True 입니다. 실행할 때마다 결과가 달라집니다. |
temperature | 로짓을 나누는 값입니다. 모험심 다이얼과 같습니다. 낮으면 1등 후보에 몰리고, 높으면 고르게 퍼집니다. |
top-k | 확률이 높은 후보 k 개만 남기는 예선입니다. |
top-p(nucleus sampling) | 확률이 높은 순서로 누적 확률이 p 가 될 때까지만 남기는 결선입니다. |
repetition_penalty | 이미 나온 토큰의 점수를 깎아 같은 말을 되풀이하지 않게 하는 값입니다. 1.2 면 1.2 배만큼 불리하게 합니다. |
씨앗(seed) | 제비뽑기의 출발점 번호입니다. torch.manual_seed(42) 처럼 같은 씨앗을 주면 같은 뽑기 결과가 나옵니다. |
SFT(Supervised Fine-Tuning) | (지시, 모범 답변) 쌍으로 모델을 더 가르치는 일입니다. 모범 답안으로 상담 연습을 시키는 것과 같습니다. |
Chat Template | <|im_start|>user 처럼 누가 말하는지 표시하는 대본 양식입니다. 7장에서 자세히 봅니다. |
선호도 정렬(preference alignment) | 같은 질문의 두 답 가운데 사람이 더 좋아한 쪽을 높이도록 가르치는 일입니다. RLHF, DPO 가 대표 방법입니다. |
7장 · SFT 데이터 구성과 Chat Template
| 용어 | 설명 |
|---|---|
SFT(Supervised Fine-Tuning) | 질문과 모범 답변의 쌍을 보여 주며 모델을 조금 더 가르치는 일입니다. supervised 는 "정답을 보여 주며", fine-tuning 은 "미세하게 다듬기"라는 뜻입니다. 모범 답안으로 상담 연습을 시키는 것과 같습니다. |
SFT 데이터(SFT data) | (사용자 요청, 모범 답변) 쌍의 모음입니다. 표로 치면 질문 열과 답변 열이 있는 DataFrame 입니다. |
페르소나(persona) | 모델이 연기하는 인물의 성격과 말투입니다. 이 장의 데이터는 "냉소적인 절대 군주" 페르소나입니다. |
환각(hallucination) | 모델이 모르는 내용을 사실처럼 지어내는 일입니다. |
RAG(Retrieval-Augmented Generation) | 검색한 문서를 질문과 함께 넣어 답하게 하는 방법입니다. 참고서를 쥐여 주는 것과 같습니다. |
JSONL(JSON Lines) | 한 줄에 JSON 예시 하나씩 적는 파일 형식입니다. 표의 한 행이 파일의 한 줄입니다. |
Instruction 형식 | instruction(지시), input(입력), output(답) 칸에 나눠 적는 형식입니다. Alpaca 데이터가 쓴 꼴이라 Alpaca 스타일이라고도 합니다. |
messages 형식(conversational) | role(누가)과 content(무엇을 말했나)를 담은 사전의 목록입니다. 대화형 모델의 표준 형식입니다. |
role | 말한 사람의 역할입니다. system(규칙을 적는 자리), user(사용자), assistant(모델) 셋이 있습니다. |
prompt-completion 형식 | 질문(prompt)과 답(completion)을 따로 담는 형식입니다. completion 은 "채워 넣을 나머지"라는 뜻입니다. |
Dataset, DatasetDict | Hugging Face datasets 라이브러리의 표 객체입니다. Dataset 은 표 하나, DatasetDict 는 train, valid, test 처럼 이름 붙인 표 여러 개를 담은 사전입니다. |
학습 데이터(train) | 모델의 가중치를 고치는 데 쓰는 데이터입니다. 문제집입니다. |
검증 데이터(valid, validation) | 학습 중에 과적합을 살피고 설정을 견주는 데이터입니다. 모의고사입니다. |
평가 데이터(test) | 모든 설정을 정한 뒤 마지막에 한 번 보는 데이터입니다. 실전 시험입니다. |
과적합(overfitting) | 학습 데이터만 외워서 새 질문에 약해지는 일입니다. 문제집 답만 외운 학생과 같습니다. |
Chat Template | messages 를 모델이 학습 때 본 문자열 모양으로 바꾸는 규칙입니다. 누가 말하는지 머리표를 붙이는 대본 양식입니다. |
ChatML | Qwen 이 쓰는 대본 양식의 이름입니다. <|im_start|>역할 로 시작하고 <|im_end|> 로 끝냅니다. |
특수 토큰(special token) | 글자가 아니라 표시를 위해 정해 둔 토큰입니다. <|im_start|>(ID 151644), <|im_end|>(151645), <|endoftext|>(151643)가 있습니다. |
add_generation_prompt | 문자열 끝에 <|im_start|>assistant 머리표를 붙일지 정하는 옵션입니다. 답을 생성시킬 때 켭니다. |
input_ids | 템플릿을 입힌 대화 전체를 토큰 ID 로 바꾼 숫자 목록입니다. 상품 번호 열과 같습니다. |
attention_mask | 실제 토큰은 1, 패딩은 0 으로 적은 목록입니다. "이 칸은 보지 마라"는 표시입니다. |
labels | 각 위치에서 맞혀야 할 정답 토큰 목록입니다. -100 인 칸은 손실 계산에서 뺍니다. 채점에서 빼는 문제입니다. |
패딩(padding) | 길이가 다른 예시를 한 묶음으로 계산하려고 짧은 쪽에 채우는 빈칸입니다. |
배치(batch) | GPU 가 한 번에 계산하는 예시 묶음입니다. |
8장 · PEFT와 LoRA 학습
| 용어 | 설명 |
|---|---|
Full Fine-tuning(전체 미세 조정) | 모델의 모든 파라미터를 학습하는 방법입니다. 건물 전체 리모델링과 같습니다. |
파라미터(parameter) | 모델 안에서 학습으로 정해지는 숫자 하나하나입니다. Qwen2.5-0.5B 에는 494,032,768 개가 있습니다. |
가중치(weight) | 파라미터를 모은 표(행렬)입니다. q_proj 의 가중치는 896×896 표입니다. |
그래디언트(gradient) | 손실을 줄이려면 가중치를 어느 쪽으로 얼마나 바꿔야 하는지 알려 주는 값입니다. 내리막길의 기울기와 같습니다. |
옵티마이저(optimizer) | 그래디언트를 보고 가중치를 실제로 고치는 담당입니다. 자주 쓰는 Adam(AdamW)은 가중치마다 지난 기록을 숫자 두 개로 기억합니다. |
옵티마이저 상태(optimizer state) | 옵티마이저가 가중치마다 기억해 두는 숫자들입니다. FP32 로 두 개면 8바이트입니다. |
activation(활성값) | 학습 중 층마다 나온 중간 계산 결과입니다. 역전파 때 다시 쓰려고 메모리에 잠시 둡니다. |
역전파(backpropagation) | 손실에서 거꾸로 거슬러 올라가며 가중치마다 그래디언트를 구하는 계산입니다. |
PEFT(Parameter-Efficient Fine-Tuning) | 파라미터를 효율적으로(적게) 쓰는 미세 조정 방법들의 총칭입니다. 대부분은 얼리고 일부만 학습합니다. |
동결(freeze) | 가중치를 학습 대상에서 빼는 일입니다. 계산에는 쓰지만 값은 바뀌지 않습니다. |
어댑터(adapter) | PEFT 로 학습한 작은 결과물입니다. 기반 모델에 갈아 끼우는 렌즈와 같습니다. |
LoRA(Low-Rank Adaptation) | 가중치의 변화량을 작은 행렬 두 개(A, B)의 곱으로 나타내 학습하는 방법입니다. 원본 위의 얇은 투명 필름입니다. |
랭크(rank, r) | A 와 B 사이의 중간 차원입니다. 필름의 두께라고 보면 됩니다. 작을수록 학습할 숫자가 적습니다. |
lora_alpha | LoRA 길의 결과에 곱하는 배율을 정하는 값입니다. 실제 배율은 alpha ÷ r 입니다. |
lora_dropout | 학습 중 LoRA 길의 값 일부를 일부러 끄는 비율입니다. 답만 외우는 것을 막는 장치입니다. |
target_modules | LoRA 를 붙일 층의 이름 목록입니다. Qwen 에서는 q_proj, k_proj 같은 선형층 이름을 적습니다. |
병합(merge) | 학습한 A·B 를 원래 W 에 더해 한 장으로 합치는 일입니다. 필름을 원본에 코팅해 붙이는 것과 같습니다. |
SFTConfig | SFT 학습의 설정표입니다. 배치 크기, 학습률, epoch 같은 값을 담습니다. |
SFTTrainer | supervised fine-tuning trainer, 모범 답안 학습 담당입니다. 템플릿 적용, 토큰화, labels 마스킹, 학습 반복을 한 번에 처리합니다. |
학습률(learning rate) | 한 번 고칠 때의 보폭입니다. LoRA 는 2e-4(0.0002) 안팎을 많이 씁니다. |
그래디언트 누적(gradient accumulation) | 작은 배치 여러 번의 그래디언트를 모았다가 한 번에 가중치를 고치는 방법입니다. 동전을 모아 지폐로 바꾸는 것과 같습니다. |
cosine 스케줄러(cosine scheduler) | 학습률을 처음에는 크게, 끝으로 갈수록 코사인 곡선 모양으로 천천히 줄이는 방식입니다. |
epoch(에포크) | 학습 데이터를 한 바퀴 다 보는 단위입니다. 문제집 한 바퀴입니다. |
과적합(overfitting) | 학습 데이터는 점점 잘 맞히는데 처음 보는 데이터는 오히려 못 맞히는 상태입니다. 문제집 답만 외운 학생입니다. |
9장 · 모델 평가와 활용, QLoRA
| 용어 | 설명 |
|---|---|
평가(evaluation) | 학습이 끝난 모델이 원하는 대로 바뀌었는지 확인하는 일입니다. 연수를 마친 운전자의 면허 시험입니다. |
손실(loss) | 모델의 예측이 정답과 얼마나 먼지 나타내는 벌점입니다. 낮을수록 정답 토큰을 잘 맞힌 것입니다. |
test 손실(test loss) | 학습에도, 검증에도 쓰지 않은 평가 데이터로 잰 손실입니다. 처음 보는 실전 시험의 점수입니다. |
정량 평가(quantitative evaluation) | 손실, 정확도처럼 숫자로 재는 평가입니다. |
정성 평가(qualitative evaluation) | 답변을 사람이 직접 읽고 판단하는 평가입니다. |
규칙 기반 채점(rule-based scoring) | "세 줄 형식을 지켰나", "존댓말을 썼나"처럼 코드로 검사할 수 있는 규칙으로 점수를 매기는 일입니다. |
LLM-as-a-Judge | 더 큰 LLM 에게 답변을 읽히고 채점을 맡기는 방법입니다. 선배 상담원이 신입의 답을 채점하는 것과 같습니다. |
부작용(side effect) | 학습 목표와 상관없는 질문에서 모델이 나빠지는 일입니다. 연수 중에 생긴 나쁜 버릇입니다. |
labels -100 | 손실 계산에서 빼라는 표시입니다. 시험지의 문제 부분을 채점에서 빼는 것과 같습니다. |
가중 평균(weighted average) | 배치마다 토큰 수가 다를 때, 토큰 수만큼 무게를 주어 내는 평균입니다. |
어댑터(adapter) | LoRA 가 학습한 A, B 행렬만 담은 작은 파일 묶음입니다. 갈아 끼우는 렌즈입니다. |
PeftModel.from_pretrained | 저장한 어댑터를 기반 모델에 붙여 불러오는 함수입니다. 렌즈를 카메라에 끼우기입니다. |
disable_adapter() | with 블록 안에서만 어댑터를 잠시 끄는 도구입니다. 블록을 나오면 다시 켜집니다. |
병합(merge) | LoRA 의 변화량을 기반 가중치에 더해 하나의 모델로 만드는 일입니다. 필름을 원본에 코팅해 붙이기입니다. |
merge_and_unload() | merge(합치기) + unload(LoRA 껍데기 떼어 내기)입니다. 결과는 보통의 Qwen2ForCausalLM 입니다. |
양자화(quantization) | 실수 값을 더 적은 비트로 어림해 저장하는 기술입니다. 고화질 사진을 작은 용량으로 저장하기입니다. |
정밀도(precision) | 숫자 하나를 몇 비트로 저장하는지입니다. FP32 는 4바이트, BF16 은 2바이트, 4비트는 0.5바이트입니다. |
NF4(4-bit NormalFloat) | QLoRA 가 쓰는 4비트 형식입니다. 0 근처에 몰린 가중치 분포에 맞춰 16개의 눈금을 배치합니다. |
Double Quantization | 양자화에 쓰는 눈금 크기(스케일) 값들까지 한 번 더 양자화해 메모리를 더 줄이는 방법입니다. |
역양자화(dequantization) | 계산할 때 4비트 값을 BF16 으로 잠깐 되돌리는 일입니다. 압축 파일을 잠깐 풀어 쓰는 것과 같습니다. |
QLoRA(Quantized LoRA) | 4비트로 줄인 기반 모델에 LoRA 를 붙여 학습하는 방법입니다. |
BitsAndBytesConfig | bitsandbytes 라이브러리로 모델을 4비트로 읽을 때 쓰는 설정표입니다. |
get_memory_footprint() | 모델 가중치가 차지하는 메모리(발자국, footprint)를 바이트로 돌려주는 함수입니다. |
prepare_model_for_kbit_training | k비트(여기서는 4비트)로 줄인 모델을 학습할 수 있게 준비하는 함수입니다. |
GGUF | llama.cpp, Ollama 같은 도구가 내 PC 에서 모델을 돌릴 때 쓰는 파일 형식입니다. |