5장. Decoder-only LLM과 학습 단계
용어 짚고 가기
LLM(Large Language Model): 파라미터가 수억~수천억 개인 큰 언어 모델입니다. 글을 읽고 이어지는 글을 씁니다.Decoder-only: Transformer 에서 Decoder 블록만 쌓은 구조입니다. Encoder 도, Cross-Attention 도 없습니다. GPT, Qwen, Llama 가 이 구조입니다.GPT(Generative Pre-trained Transformer): 2018년 OpenAI 가 내놓은 Decoder-only 모델입니다. 생성(Generative)하는, 미리 학습된(Pre-trained) Transformer 라는 뜻입니다.다음 토큰 예측(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토큰의 데이터로 학습하는 편이 효율적이라는 관찰입니다.RMSNorm(Root Mean Square Normalization): 숫자들의 제곱 평균의 제곱근(RMS)으로 나눠 눈금을 맞추는 정규화입니다. LayerNorm 보다 계산이 간단합니다.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바이트)의 절반 메모리를 씁니다.