ai theory
꼭 알았어야만 했던 기본 개념들
Junyoung Park · 2026-08-06 · 65 min
몇 차례의 회사 인터뷰와 기술 면접을 거치면서 반복해서 등장하는 질문들이 있었다. 조금 민망하게 말하면, 이 목록은 여러 면접에 멋지게 합격하면서 모은 모범 답안이라기보다 떨어질 때마다 한 줄씩 늘어난 오답 노트에 가깝다. 어떤 회사는 수식 전개를 요구했고, 어떤 회사는 구현과 시스템 관점의 Trade-off를 물었으며, 또 어떤 회사는 같은 개념을 비전과 언어 모델에 연결해서 설명해보라고 했다.
분명 알고 있다고 생각했던 내용도 면접관 앞에서 설명하려니 정의부터 꼬였고, 비슷한 용어를 한꺼번에 꺼냈다가 정작 차이를 제대로 말하지 못한 적도 있었다. 집에 돌아오는 길에는 뒤늦게 답이 생각났고, 탈락 연락을 받고 나면 그제야 논문과 코드를 다시 찾아보게 되었다. 사람은 역시 합격의 기쁨보다 탈락의 민망함에서 더 성실해지는 모양이다.
그 과정에서 느낀 것은 면접에서 중요한 것이 용어를 많이 말하는 일은 아니라는 점이었다. 왜 이 방법이 필요했고, 어떤 문제를 해결하며, 그 대가로 무엇을 잃는지를 논리적으로 설명하는 것이 중요하다. 예를 들어 FlashAttention을 단순히 “Attention을 빠르게 만드는 방법”이라고 답하면 부족하다. Memory complexity와 Compute complexity를 구분하고, 정확한 Attention을 유지한 채 HBM I/O와 중간 행렬 저장을 줄인다는 점까지 설명해야 한다.
물론 이 글을 쓴다고 해서 이제 모든 질문에 완벽하게 답할 수 있게 되었다는 뜻은 아니다. 오히려 면접을 볼수록 내가 정확히 모르는 부분이 얼마나 많은지 확인하게 되었다. 다만 같은 질문 앞에서 두 번 연속 아무 말도 못 하는 일은 줄여보고 싶었다. 이 글에서는 그렇게 떨어지고 복기하는 과정에서 만난 필수 주제 30개를 하나로 정리하였다. 각 문항은 먼저 원리를 설명하고, 마지막에 실제 면접에서 30초에서 1분 정도로 말하기 좋은 형태의 답변을 붙였다. 짧은 답변만 외우기보다 앞의 논리를 이해한 뒤 자신의 언어로 다시 말해보는 것을 권한다.
면접 답변의 기본 구조: 정의를 한 문장으로 말하고, 동작 원리와 수식을 설명한 뒤, 장점과 한계 또는 비교 대상까지 언급한다. 시스템 질문이라면 마지막에 어떤 조건에서 선택할 것인지까지 말하면 좋다.
1. Classification에서 Cross-Entropy Loss를 사용하는 이유와 MLE 관점의 유도
Classification 모델은 입력 가 주어졌을 때 각 Class 가 정답일 조건부 확률 를 예측한다. Logit을 라고 하면 Multi-class classification에서는 일반적으로 Softmax로 확률을 만든다.
Dataset 의 Sample이 독립적으로 관측되었다고 가정하면 전체 Likelihood는 다음과 같다.
Maximum Likelihood Estimation은 이 관측 데이터가 나타날 확률을 가장 크게 만드는 파라미터를 찾는다.
곱셈은 수치적으로 불안정하고 미분도 불편하므로 Log를 취한다. Log는 단조 증가 함수이기 때문에 최댓값의 위치를 바꾸지 않는다.
학습 코드는 목적 함수를 최소화하는 형태로 작성하는 경우가 많으므로 부호를 바꾸어 Negative Log-Likelihood를 얻는다.
정답을 One-hot vector 로 표현하면 다음과 같이 다시 쓸 수 있다.
이 식이 바로 Categorical Cross-Entropy다. 즉 Cross-Entropy는 Classification에서 경험적으로 잘 작동해서 임의로 선택한 Loss라기보다, Categorical distribution을 가정한 MLE의 Negative Log-Likelihood다.
분포 관점에서도 같은 결론을 얻을 수 있다.
정답 분포 가 고정되어 있으므로 는 모델 파라미터와 무관하다. 따라서 Cross-Entropy를 줄이는 것은 경험적 정답 분포와 모델 분포 사이의 KL divergence를 줄이는 것과 같다. 또한 Logit에 대한 Gradient가 로 단순하게 정리되어, 틀린 Class의 확률은 낮추고 정답 Class의 확률은 높이는 안정적인 신호를 준다.
Binary classification도 같은 논리다. 을 Bernoulli distribution으로 두면 Negative Log-Likelihood가 Binary Cross-Entropy가 된다.
면접 답변: Classification 모델의 출력은 Categorical distribution의 파라미터로 볼 수 있습니다. Dataset의 Likelihood는 정답 Class 확률의 곱이고, MLE는 이를 최대화합니다. Log를 취하면 확률의 곱이 Log probability의 합이 되고, 최소화 문제로 바꾸기 위해 음수를 붙이면 가 됩니다. 정답을 One-hot으로 표현하면 이것이 정확히 Cross-Entropy입니다. 따라서 Cross-Entropy 최소화는 Categorical MLE와 동치이고, 정답 분포와 예측 분포 사이의 KL divergence를 줄이는 것으로도 해석할 수 있습니다.
2. LLM의 정의와 Pre-training, SFT, RLHF를 포함한 전체 학습 과정
LLM은 대규모 Text corpus와 많은 Parameter를 이용해 Token sequence의 확률 분포를 학습한 Language Model이다. “Large”를 나누는 절대적인 Parameter 기준은 없으며, 규모 자체보다 대규모 데이터와 계산으로 학습되어 다양한 Task에 전이될 수 있는 범용 언어 표현과 생성 능력을 가진다는 점이 중요하다.
Decoder-only LLM의 기본 목적은 앞의 Token이 주어졌을 때 다음 Token을 예측하는 것이다.
전체 Pipeline은 다음처럼 구분할 수 있다.
1. 데이터와 Tokenizer 준비
Web, Book, Code, 논문, 대화 등에서 데이터를 수집하고 Deduplication, 품질 필터링, 개인정보와 유해 데이터 제거, Domain mixture 조정 등을 수행한다. 이후 BPE, WordPiece, Unigram과 같은 Subword tokenizer를 학습한다. Dataset의 구성은 모델이 무엇을 알고 어떤 언어와 관점을 더 잘 표현하는지에 직접 영향을 준다.
2. Pre-training
무라벨 대규모 corpus에서 Next-token prediction을 수행한다. Teacher forcing을 사용하므로 한 Sequence의 모든 위치에 대한 Loss를 병렬로 계산할 수 있다. 이 단계에서 문법, 의미, 사실 지식, Code pattern과 일부 추론 능력이 Parameter에 압축된다. 특정 Domain을 강화하기 위해 Base model에 Domain data를 추가 학습하는 Continued Pre-training 또는 Mid-training을 둘 수도 있다.
3. Supervised Fine-Tuning
Pre-trained model은 다음 Token을 잘 예측하지만 사용자의 지시를 반드시 잘 따르는 것은 아니다. SFT에서는 쌍으로 학습해 질문에 답하고 형식을 지키는 행동을 가르친다.
보통 User prompt 위치는 Loss에서 Mask하고 Assistant response에만 Loss를 적용한다. SFT는 안정적이고 구현이 단순하지만, 정답 Demonstration을 그대로 모방하므로 데이터에 없는 더 나은 답을 스스로 탐색하기 어렵고 Annotation style에 과적합될 수 있다.
4. Preference data와 Reward Model
같은 Prompt에 여러 답을 생성한 뒤 사람이 더 좋은 답을 선택한다. 선택된 답을 , 선택되지 않은 답을 이라고 하면 Reward Model은 Bradley-Terry 형태로 학습할 수 있다.
Reward Model은 사람이 선호할 법한 답변에 더 높은 Scalar score를 주는 평가 모델이다.
5. RLHF 또는 Preference Optimization
고전적인 RLHF에서는 Language Model을 Policy로 보고 PPO 등으로 Reward를 높인다. Reward hacking과 과도한 Policy drift를 막기 위해 SFT 또는 Reference model과의 KL penalty를 사용한다.
DPO는 별도의 Reward Model 학습과 On-policy RL rollout 없이 Preference pair로 Policy를 직접 최적화한다. 최근 Reasoning model에서는 사람이 평가하기보다 정답 판정기, Code test, 수식 검증기처럼 자동으로 확인 가능한 Reward를 사용하는 RLVR도 중요해졌다.
6. Distillation, 평가와 배포
큰 Teacher가 생성한 응답이나 확률 분포를 작은 Student가 학습하도록 하여 비용을 줄인다. 그 뒤 지식, 추론, 안전성, 편향, 장문 처리, Tool use, 실제 Serving latency를 평가한다. Quantization, KV Cache, Speculative Decoding과 같은 최적화는 학습된 능력을 실제 서비스 비용 안에서 제공하기 위한 단계다.
모든 LLM이 위 단계를 전부 사용하는 것은 아니다. Base model은 Pre-training까지만 수행할 수 있고, Instruct model은 SFT와 DPO만 사용할 수도 있다. 중요한 것은 PT가 언어 분포와 지식, SFT가 지시 수행 형식, Preference/RL 단계가 선호와 탐색 방향을 담당한다는 구분이다. 더 자세한 내용은 LLM은 어떻게 학습되는가에서 별도로 정리하였다.
면접 답변: LLM은 대규모 corpus에서 Token sequence의 확률 분포를 학습한 범용 Language Model입니다. Pre-training에서는 Next-token prediction으로 언어와 지식을 학습하고, SFT에서는 고품질 Instruction-response pair를 이용해 지시를 따르는 형식을 가르칩니다. 이후 RLHF에서는 사람의 비교 데이터를 학습한 Reward Model을 만들고 PPO로 Reward를 높이되 Reference model과의 KL penalty로 과도한 변화를 막습니다. DPO처럼 Preference pair를 직접 학습하는 방법이나, 수학 정답과 Unit test처럼 자동 검증 가능한 Reward를 쓰는 RLVR도 있습니다. 마지막으로 Distillation, 안전성 평가, Quantization과 Serving 최적화를 거쳐 배포합니다.
3. Transformer 블록의 전체 구조와 각 구성 요소의 역할
Transformer block의 입력을 라고 하자. 현대 LLM에서 흔한 Pre-LayerNorm block은 다음처럼 표현할 수 있다.
즉 하나의 Block은 크게 Token 사이에서 정보를 섞는 Attention과 각 Token 내부의 Channel을 변환하는 FFN으로 구성되고, 각 Sub-layer 바깥을 Residual connection이 감싼다.
Self-Attention
같은 입력에서 Query, Key, Value를 만든다.
는 각 Token이 다른 Token을 얼마나 참고할지 나타내고, 는 실제로 가져올 정보다. 로 나누는 이유는 Dimension이 커질수록 내적의 분산이 커져 Softmax가 포화되는 것을 막기 위해서다. 에는 Padding mask나 미래 Token을 막는 Causal mask가 들어간다.
Multi-Head Attention은 차원 공간을 여러 Head로 나누어 서로 다른 관계를 병렬로 학습한다.
각 Head가 반드시 문법, 위치, 대명사처럼 사람이 해석 가능한 하나의 역할로 분리되는 것은 아니지만, 하나의 Attention map보다 다양한 Subspace의 관계를 표현할 수 있다.
Feed-Forward Network
FFN은 Token별로 독립적으로 적용되는 두 개의 Linear projection과 비선형 함수다.
일반적으로 Hidden dimension 를 더 큰 로 확장한 뒤 다시 줄인다. GELU, ReLU 외에 현대 LLM은 SwiGLU와 같은 Gated FFN을 많이 사용한다.
Attention이 Token 간 정보 전달을 담당한다면 FFN은 전달된 정보를 각 위치에서 비선형적으로 가공하고 새로운 Feature를 만든다.
Residual Connection
Sub-layer의 출력을 입력에 더한다.
Residual path는 깊은 Network에서도 Gradient가 지나갈 직접 경로를 제공하고, 각 Block이 전체 표현을 새로 만드는 대신 기존 표현에 필요한 변화량만 학습하게 한다. Attention이나 FFN이 일시적으로 좋지 않은 출력을 만들어도 Identity path가 정보를 보존한다.
LayerNorm
각 Token의 Hidden dimension을 기준으로 평균과 분산을 정규화한다.
Batch의 다른 Sample에 의존하지 않으므로 가변 길이 Sequence와 작은 Batch에서도 안정적이다. 원래 Transformer는 형태의 Post-LN을 사용했지만, 깊은 모델에서는 인 Pre-LN이 Gradient 안정성 때문에 널리 쓰인다. 다만 Pre-LN과 Post-LN은 표현과 최종 Normalization 위치에 차이가 있어 완전히 같은 구조는 아니다.
Positional information과 구조별 추가 Block
Self-Attention만으로는 순서를 알 수 없으므로 Absolute position embedding, Relative bias, RoPE 등을 사용한다. Encoder block은 일반적으로 Bidirectional self-attention을 사용한다. Decoder-only LLM은 Causal self-attention을 사용한다. Encoder-Decoder Transformer의 Decoder에는 Self-Attention과 FFN 사이에 Encoder output을 K, V로 받는 Cross-Attention이 하나 더 들어간다.
면접 답변: Transformer block은 크게 Attention과 FFN 두 Sub-layer로 구성됩니다. Self-Attention은 로 Token 사이의 관계를 계산하고 Value를 가중합해 Sequence 방향으로 정보를 섞습니다. Multi-head 구조는 여러 Subspace의 관계를 병렬로 표현합니다. FFN은 각 Token에 독립적으로 적용되어 Hidden channel을 비선형 변환합니다. Residual connection은 정보와 Gradient의 직접 경로를 만들고, LayerNorm은 Token별 Hidden dimension의 Scale을 안정화합니다. 현대 LLM은 보통 Pre-LN 구조를 사용하고, Decoder에서는 미래 Token을 가리는 Causal mask를 추가합니다.
4. Attention을 메모리와 연산량 관점에서 효율화하는 방법
길이 , Head dimension 인 Full Attention에서 의 Shape은 이다. 따라서 대략적인 Compute는 이고, Attention score와 probability를 저장하는 Memory는 다. 여기서 메모리를 줄이는 방법과 총 연산량을 줄이는 방법은 같지 않다.
메모리와 I/O를 줄이는 대표적인 방법: FlashAttention
일반적인 구현은 , 와 같은 큰 중간 행렬을 GPU HBM에 쓰고 다시 읽는다. FlashAttention은 Q, K, V를 Tile로 나누어 SRAM에 올리고, Online softmax를 이용해 Block 단위로 결과를 누적한다.
- Q의 일부 Block과 K, V Block을 SRAM으로 가져온다.
- 작은 Block을 계산한다.
- 행별 Maximum과 Normalization sum을 Online으로 갱신한다.
- 정규화된 Value 합을 누적하고 큰 행렬은 HBM에 Materialize하지 않는다.
- Backward에서는 저장하지 않은 중간값을 일부 Recompute한다.
이 방법은 정확한 Softmax Attention을 유지하면서 HBM read/write와 Activation memory를 크게 줄인다. 그러나 Full Attention의 Pair를 여전히 계산하므로 이론적인 Compute complexity는 로 남는다. FlashAttention-2는 Work partition과 GPU occupancy를 더 개선한 방법이다.
Gradient Checkpointing도 Attention을 포함한 Block의 Activation을 저장하지 않고 Backward에서 재계산하여 메모리를 줄인다. Sequence Parallelism이나 Context Parallelism은 Sequence를 여러 GPU에 나누어 장치당 메모리를 낮추지만 전체 Cluster가 수행하는 총 FLOPs를 자동으로 줄이는 것은 아니다.
총 연산량을 줄이는 대표적인 방법
Sparse Attention: 모든 Token pair를 보지 않고 Local window, Dilated pattern, Block-sparse pattern, 일부 Global token만 계산한다. Longformer는 Local sliding window와 Global attention을 결합해 수준으로 줄인다. 긴 문서에서 가까운 Token 관계가 중요하다는 Inductive bias를 활용하지만, Sparse pattern 밖의 장거리 관계를 놓칠 수 있다.
Low-rank와 Kernel Attention: 행렬을 직접 만들지 않도록 Attention을 저차원으로 투영하거나 Kernel feature map으로 결합 순서를 바꾼다. Performer는 Softmax kernel을 Random feature로 근사해 대략 선형 시간과 메모리를 목표로 한다.
이 경우 전체를 만들지 않지만 근사 오차, 학습 안정성, 실제 Kernel 효율과 품질 Trade-off가 존재한다.
Latent bottleneck: Perceiver류처럼 긴 입력을 소수의 Latent query로 Cross-Attention하여 이후 연산 길이를 줄인다. 입력의 모든 정보를 제한된 Latent에 압축해야 하므로 Bottleneck이 생길 수 있다.
Autoregressive decoding의 메모리 최적화
Inference에서는 Attention matrix보다 KV Cache의 크기와 Memory bandwidth가 더 큰 문제가 될 수 있다. MQA는 모든 Query head가 하나의 K/V head를 공유하고, GQA는 여러 Query head가 K/V head Group을 공유한다. 이는 KV Cache를 비율로 줄이지만, 이미 학습된 일반 MHA의 Training compute를 단순히 없애는 방법은 아니다. KV Quantization, PagedAttention, Sliding-window cache도 이 관점의 최적화다.
| 방법 | 메모리 | 총 Attention FLOPs | 정확한 Full Attention | 주요 Trade-off |
|---|---|---|---|---|
| FlashAttention | 크게 감소 | 여전히 | 예 | 구현과 Hardware 제약 |
| Gradient Checkpointing | 감소 | 증가 | 예 | Backward Recompute |
| Sparse/Window Attention | 감소 | 아니오 | 먼 관계 손실 가능 | |
| Linear/Kernel Attention | 감소 | 대략 | 보통 근사 | 품질과 Kernel 효율 |
| Context Parallelism | 장치당 감소 | 전체는 유사 | 예 | GPU 간 통신 |
| MQA/GQA | KV Cache 감소 | Decode bandwidth 감소 | 구조 변경 | K/V 표현력 Trade-off |
면접 답변: Full Attention은 score 때문에 Compute가 이고 중간 Memory가 입니다. 메모리 관점의 대표 방법인 FlashAttention은 Tiling과 Online softmax로 Attention matrix를 HBM에 저장하지 않아 I/O와 Activation memory를 줄이지만, 모든 Token pair를 계산하므로 총 FLOPs는 여전히 이차입니다. Compute까지 줄이려면 Sliding-window나 Block-sparse Attention으로 계산할 Pair를 제한하거나, Performer 같은 Kernel Attention으로 결합 순서를 바꾸어 선형 근사를 사용해야 합니다. Autoregressive inference에서는 MQA/GQA, KV Quantization, PagedAttention으로 KV Cache와 Memory bandwidth를 줄입니다.
5. Reinforcement Learning의 On-policy와 Off-policy, 그리고 Distillation과의 관계
Policy를 라고 할 때 핵심 차이는 학습에 사용하는 경험을 어떤 Policy가 생성했는가다.
On-policy
현재 학습 중인 Policy 가 직접 수집한 Trajectory로 그 Policy를 업데이트한다. Policy Gradient, A2C, PPO가 대표적이다.
현재 Policy의 State-action distribution과 학습 데이터 분포가 맞아 Bias가 비교적 작다. 반면 Policy가 바뀌면 오래된 데이터의 유효성이 떨어지므로 계속 새 Rollout을 만들어야 하고 Sample efficiency가 낮다. LLM PPO에서도 현재 Policy가 응답을 생성하고 Reward와 Advantage를 계산한 뒤 몇 차례 Update하면 다시 응답을 생성한다.
Off-policy
과거 Policy, 다른 Behavior policy , 사람 또는 Replay buffer가 만든 경험으로 Target policy 를 학습한다. DQN, DDPG, TD3, SAC가 대표적이다. 데이터를 재사용할 수 있어 Sample efficiency가 높지만, 와 의 분포가 크게 달라지면 Bias와 불안정성이 생긴다. Importance sampling으로 일부 보정할 수 있다.
PPO는 엄밀히 현재 Policy에서 모은 Batch를 사용하는 On-policy 계열이지만, 한 Batch를 여러 Epoch 재사용하고 Old policy ratio를 Clipping하므로 완전히 한 번만 사용하는 Vanilla policy gradient와는 다르다.
Distillation은 On-policy인가 Off-policy인가
Distillation은 RL 알고리즘 자체가 아니다. Teacher의 확률 분포, Hidden representation 또는 생성 Sequence를 Student가 모방하는 학습 원리다.
다만 어떤 입력과 상태에서 Teacher signal을 받는가에 따라 On/Off-policy와 비슷한 관점으로 볼 수 있다.
- 고정된 Teacher-generated dataset으로 Student를 학습하면 Student의 현재 분포와 무관한 Offline 또는 Off-policy behavior cloning에 가깝다.
- Ground-truth prefix에서 Teacher token distribution을 따라가는 Token-level KD는 학습이 쉽지만 Student가 실제 생성 중 방문하는 오류 상태를 보지 못한다.
- Student가 직접 생성한 prefix나 Trajectory에서 Teacher의 분포와 피드백을 다시 받는 Online distillation은 Student-induced state distribution을 학습하므로 Distribution shift와 Exposure bias를 줄일 수 있다.
- RL로 학습된 큰 Reasoning teacher의 답과 추론 과정을 작은 Student에 SFT하는 것은 RL의 탐색 결과를 저렴한 모델로 전달하는 Sequence-level distillation이다.
대표 사례로 DeepSeek-R1은 큰 Reasoning model이 생성한 데이터를 Qwen과 Llama 계열의 작은 모델에 Distillation하였다. 이때 Student 자체는 RL을 수행하지 않아도 Teacher가 찾은 Reasoning pattern을 모방할 수 있다. 반대로 Policy distillation은 여러 RL expert policy를 하나의 Student policy로 압축하거나, 큰 RL policy를 작은 Serving policy로 옮길 때 사용한다.
면접 답변: On-policy는 현재 Policy가 만든 Trajectory로 현재 Policy를 학습하는 방식이고 PPO가 대표적입니다. 분포가 일치해 안정적이지만 새 Rollout이 계속 필요해 Sample efficiency가 낮습니다. Off-policy는 과거 Policy나 다른 Behavior policy의 데이터를 재사용하며 DQN과 SAC가 대표적입니다. 효율은 높지만 Distribution mismatch를 관리해야 합니다. Distillation은 그 자체로 On/Off-policy RL은 아닙니다. 고정된 Teacher data를 모방하면 Offline 또는 Off-policy에 가깝고, Student가 실제 방문한 상태에서 Teacher signal을 받는 Online distillation은 On-policy distribution에 더 가깝습니다. RL teacher의 추론 결과를 작은 모델에 SFT하는 방식도 중요한 활용 사례입니다.
6. CLIP의 학습 원리, Contrastive Learning의 한계와 후속 연구
CLIP은 Image encoder 와 Text encoder 를 별도로 두고, 같은 Image-text pair의 Embedding은 가깝게, 다른 Pair는 멀게 만드는 Dual-encoder 구조다.
Batch에 개의 Image-text pair가 있을 때 L2 normalization한 Embedding을 다음처럼 둔다.
Cosine similarity와 학습 가능한 Temperature 로 Logit을 만든다.
정답은 같은 Index의 pair다. Image가 Text를 찾는 Loss와 Text가 Image를 찾는 Loss를 대칭으로 계산한다.
학습 후 Class name을 “a photo of a {class}”와 같은 Prompt로 바꾸고 Image와 Text embedding의 유사도를 비교하면 별도의 Classifier 학습 없이 Zero-shot classification을 할 수 있다. 자연어가 고정된 Label space를 대신한다는 점이 CLIP의 가장 큰 변화였다.
Contrastive Learning 기반 학습의 한계
False negative: Batch의 다른 Sample을 모두 Negative로 취급하지만 실제로는 같은 개념일 수 있다. 강아지 사진 두 장이나 의미가 같은 Caption을 억지로 멀게 만들 수 있다.
Batch size 의존성: In-batch negative가 많을수록 어려운 비교가 가능하지만 큰 Batch와 많은 Device가 필요하다. Negative의 수보다 품질이 더 중요한 경우도 있다.
Global representation의 한계: Image와 Text를 각각 하나의 Vector로 압축하므로 객체와 단어 사이의 Fine-grained correspondence, 위치, 수량, 관계와 조합적 의미를 놓칠 수 있다. “개가 고양이를 쫓는다”와 “고양이가 개를 쫓는다”가 비슷한 Global concept으로 가까워질 수 있다.
Noisy Web pair와 Shortcut: Alt-text가 Image 전체를 설명하지 않거나 편향된 상관관계를 포함한다. Model은 시각적 근거보다 Text frequency, Background, Watermark 같은 Shortcut을 사용할 수 있다.
Understanding과 Generation의 간극: Dual encoder는 Retrieval과 Zero-shot classification에 효율적이지만 Token-level fusion과 Text generation을 직접 학습하지 않는다. VQA, Captioning, Grounding을 위해서는 추가 구조와 Objective가 필요하다.
SigLIP: Global Softmax를 Pairwise Sigmoid로 바꾸기
SigLIP은 CLIP의 Dual encoder와 Image-Text alignment 자체는 유지하되, Batch 전체에 Softmax를 적용하는 InfoNCE 대신 각 Image-Text pair를 독립적인 이진 분류 문제로 학습한다. 같은 Index의 Pair에는 , 나머지 Pair에는 을 부여한다. 를 학습 가능한 Logit scale, 를 학습 가능한 Bias라고 하면 Loss는 다음과 같이 쓸 수 있다.
CLIP의 Softmax loss에서는 한 Pair의 확률을 구하려면 같은 행이나 열의 모든 유사도가 정규화에 함께 들어간다. 반면 SigLIP은 각 Pair의 Loss가 분리되어 있으므로 전역 정규화 값이 필요하지 않다. 분산 학습에서도 전체 Logit 행렬을 한 번에 만들거나 모든 Embedding을 All-gather하는 대신, Device 사이에서 Text embedding block을 순환시키며 작은 Logit block의 Loss를 누적할 수 있다. 이 때문에 메모리와 통신 부담이 줄고, 논문에서는 특히 보다 작은 Batch에서 Softmax loss보다 좋은 성능을 보였으며 Batch를 계속 키울 때의 이득은 빠르게 포화된다고 보고했다.
다만 SigLIP이 CLIP의 모든 한계를 해결하는 것은 아니다. 기본 설정에서는 여전히 인 Pair를 Negative로 간주하므로 False negative가 남고, Global embedding 기반 Dual encoder이므로 Fine-grained grounding과 Generation 문제도 별도로 보완해야 한다. 정확히는 Large batch와 Global softmax normalization에 묶인 학습 Objective를 더 단순하고 확장 가능하게 만든 연구로 보는 것이 좋다.
그 밖의 일반적인 해결 방향
- False negative 완화: 하나의 Image에 의미가 비슷한 Caption을 여러 Positive로 허용하거나, Hard label 대신 유사도 기반 Soft target을 사용한다. Batch의 모든 비매칭 Pair를 똑같은 Negative로 밀어내는 대신 Hard negative mining과 Debiased contrastive loss를 적용할 수도 있다.
- Fine-grained alignment: Image 전체와 문장 전체만 비교하지 않고 Region 또는 Patch와 Word 또는 Phrase 사이의 대응을 학습한다. Phrase grounding, Object detection, Semantic segmentation 같은 지역 단위 Task가 여기에 해당한다.
- Data quality 개선: 중복과 저품질 Pair를 제거하고, Caption을 다시 생성하거나 Filtering하여 Image를 제대로 설명하는 Pair의 비율을 높인다. Negative의 개수만 늘리기보다 학습 신호의 품질을 높이는 접근이다.
- Fusion과 Generation 추가: Cross-Attention으로 Image token과 Text token을 직접 결합하고, Image-Text Matching, Masked Language Modeling, Captioning 같은 Objective를 함께 사용한다. Retrieval에서 VQA, Caption generation과 Multimodal reasoning으로 범위를 넓힌다.
CLIP 이후에는 Contrastive objective를 버리기보다, SigLIP처럼 Alignment loss 자체를 효율화하거나 Global alignment 위에 Token-level fusion, Generation, Grounding과 Data bootstrapping을 추가하는 방향으로 발전했다.
면접 답변: CLIP은 Image encoder와 Text encoder가 만든 L2-normalized embedding의 Cosine similarity를 계산하고, 같은 Pair는 Positive, Batch의 다른 Pair는 Negative로 두는 대칭 InfoNCE loss를 사용합니다. 덕분에 자연어 Prompt를 Classifier처럼 사용하는 Zero-shot transfer가 가능합니다. 한계는 False negative, 큰 Batch와 전역 Softmax 정규화의 부담, Global vector로 인한 Fine-grained grounding 부족, Noisy web caption과 생성 능력의 부재입니다. SigLIP은 각 Image-Text pair에 독립적인 Sigmoid loss를 적용해 전역 정규화 없이 더 효율적으로 학습하지만 False negative와 Global representation의 한계까지 없애지는 않습니다. 나머지 한계는 Multi-positive 또는 Soft target, Patch-token alignment와 Grounding task, Data filtering과 Recaptioning, Cross-Attention과 Captioning objective를 통해 보완할 수 있습니다.
7. CLIP 이후 대표적인 Vision-Language 모델과 Representation Learning의 변화
CLIP 이후 Vision-Language 연구는 하나의 공동 Embedding 공간을 만드는 단계에서, 두 Modality를 세밀하게 결합하고 Language Model의 생성 능력까지 활용하는 방향으로 발전했다.
ALBEF: Align before Fuse
ALBEF는 Image encoder와 Text encoder의 Global representation을 Image-Text Contrastive loss로 먼저 Align한다. 이후 Multimodal encoder의 Cross-Attention으로 두 Token sequence를 Fuse하고 Image-Text Matching과 Masked Language Modeling을 수행한다. Momentum teacher의 Soft target을 이용해 Web data의 하나뿐인 Caption을 절대적인 정답으로 취급하는 문제도 줄였다.
Representation 관점에서는 검색에 적합한 분리된 Unimodal space와 VQA와 추론에 필요한 Fused space를 함께 얻었다는 의미가 있다.
BLIP: Understanding과 Generation의 통합
BLIP의 MED(Mixture of Encoder-Decoder)는 같은 Transformer를 Text encoder, Image-grounded text encoder, Image-grounded text decoder로 동작시킨다. ITC는 Global alignment, ITM은 Pair-level fusion, LM loss는 Caption generation을 담당한다. Captioner가 Web image의 Caption을 만들고 Filter가 Noisy pair를 제거하는 CapFilt도 사용한다.
Representation이 단순한 유사도 공간을 넘어 양방향 이해와 Autoregressive generation을 모두 지원하는 형태로 확장되었다.
CoCa: Contrastive와 Captioning의 단일 Graph 결합
CoCa는 Decoder의 앞부분에서는 Cross-Attention을 사용하지 않아 Text의 Unimodal representation을 만들고, 뒷부분에서는 Image feature에 Cross-Attention하여 Caption을 생성한다. Image와 Unimodal text embedding에는 Contrastive loss를, Multimodal decoder에는 Captioning loss를 적용한다.
Contrastive objective의 Transferability와 Captioning objective의 세밀한 Token supervision을 동시에 사용하여 Recognition, Retrieval, VQA, Captioning에 전이 가능한 representation을 만들었다.
Flamingo: Frozen LM에 시각적 In-context Learning 추가
Flamingo는 Pre-trained vision encoder와 Language Model을 대부분 고정하고, Perceiver Resampler로 가변 길이 Visual token을 고정 개수 Latent로 압축한 뒤 Gated Cross-Attention layer를 Language Model 사이에 삽입한다. Image와 Text가 섞인 Sequence를 Next-token prediction으로 학습한다.
이 구조의 의미는 Vision representation을 새로 전부 학습하기보다, 강한 Visual representation을 LLM의 In-context learning space에 연결했다는 점이다. 하나의 Model이 Few-shot example을 Prompt로 받아 여러 Vision-language Task를 수행할 수 있게 되었다.
BLIP-2: Q-Former라는 Representation Bridge
BLIP-2는 Frozen image encoder와 Frozen LLM 사이에 작은 Q-Former를 둔다. 첫 단계에서는 Learnable query가 Image feature에서 Text와 관련된 정보를 추출하도록 ITC, ITM, Image-grounded text generation을 수행한다. 두 번째 단계에서는 Q-Former output을 LLM embedding space로 Projection하고, Frozen LLM이 Image condition으로 Text를 생성하게 한다.
Q-Former는 고차원 Visual token을 소수의 Query representation으로 압축하는 Bottleneck이자 Modality adapter다. 이미 잘 학습된 Vision과 Language representation을 유지하면서 적은 Trainable parameter로 두 공간을 연결할 수 있음을 보여주었다.
LLaVA: Visual Instruction Tuning
LLaVA는 CLIP vision encoder의 Output을 Linear 또는 MLP projector로 LLM token space에 연결한다. Image-caption pair로 Feature alignment를 수행한 뒤 GPT가 생성한 Multimodal instruction data와 VQA data로 Instruction tuning한다.
Representation의 목적이 Retrieval과 Captioning을 넘어 사용자의 질의에 맞춰 시각 정보를 선택하고 언어로 답하는 Instruction-following representation으로 이동했다. 다만 LLM의 강한 언어 Prior가 Image evidence를 덮어 Hallucination을 만들 수 있고, Spatial detail이나 OCR 정보가 Vision encoder와 Projector에서 손실될 수 있다.
모델별 차이는 아래와 같다.
| 모델 | 핵심 학습 | Representation에 준 영향 |
|---|---|---|
| CLIP | Global contrastive | 공유 Semantic space, Zero-shot transfer |
| SigLIP | Pairwise sigmoid contrastive | Global softmax 없이 확장 가능한 Dual-encoder alignment |
| ALBEF | ITC + Fusion + MLM/ITM | Unimodal alignment와 Multimodal interaction 결합 |
| BLIP | ITC + ITM + LM, CapFilt | 이해와 생성 표현 통합, Noise 완화 |
| CoCa | Contrastive + Captioning | Global transfer와 Token-level generation 동시 강화 |
| Flamingo | Interleaved next-token LM | Visual in-context learning |
| BLIP-2 | Q-Former 2-stage bridge | Frozen foundation model의 효율적 연결 |
| LLaVA | Feature alignment + Visual instruction tuning | 대화와 Task 지향 Multimodal representation |
면접 답변: CLIP 이후에는 Global image-text alignment만으로 부족한 Fine-grained interaction과 generation을 추가하는 방향으로 발전했습니다. ALBEF는 먼저 Align하고 Cross-Attention으로 Fuse했으며, BLIP과 CoCa는 Contrastive, Matching, Captioning objective를 결합해 이해와 생성을 함께 지원했습니다. Flamingo는 Frozen vision encoder와 LM 사이에 Perceiver와 Gated Cross-Attention을 넣어 Visual in-context learning을 가능하게 했고, BLIP-2는 Q-Former로 두 Frozen model을 효율적으로 연결했습니다. LLaVA는 Visual feature alignment 뒤 Instruction tuning을 수행해 Representation을 검색용 공간에서 대화와 문제 해결용 공간으로 확장했습니다.
8. Positional Encoding의 종류와 장단점
Self-Attention은 입력 Token의 순서를 함께 바꾸면 출력 순서도 같이 바뀌는 Permutation-equivariant 연산이다. Token의 위치를 별도로 주지 않으면 “Dog bites man”과 “Man bites dog”의 순서 차이를 이해할 근거가 없다.
Absolute Positional Encoding
각 위치 에 Position vector 를 부여하고 Token embedding에 더한다.
Learned absolute embedding은 위치별 Vector를 Parameter로 학습한다. 구현이 가장 단순하고 학습 길이 안에서는 표현력이 좋지만, 학습하지 않은 더 긴 위치에는 Embedding이 없거나 Out-of-distribution이 된다.
Sinusoidal encoding은 위치와 Dimension에 따라 Sin/Cos 값을 계산한다.
추가 Parameter가 없고 임의 길이의 값을 계산할 수 있지만, 단순히 더 긴 위치를 계산할 수 있다는 것이 그 길이에서 학습 없이 잘 일반화된다는 뜻은 아니다. 또한 Content와 Position 정보가 입력 단계에서 더해져 섞인다.
Relative Positional Encoding과 Relative Bias
Attention score에 와 의 절대 위치보다 상대 거리 를 반영한다.
T5의 Relative position bias처럼 거리를 Bucket으로 묶으면 먼 거리에 필요한 Parameter 수를 제한할 수 있다. 문장이 전체적으로 이동해도 Token 사이의 거리는 같으므로 관계를 일반화하기 쉽다. 반면 Pair별 Bias 또는 Relative embedding을 처리해야 하고, 구현과 Cache 관리가 복잡해질 수 있다.
ALiBi는 학습된 Table 대신 Head별 기울기로 거리에 선형 Penalty를 준다.
추가 Embedding이 거의 없고 길이 외삽이 비교적 단순하지만, 위치 관계를 선형 Bias로 제한하므로 표현력이 제한될 수 있다.
Rotary Positional Embedding
RoPE는 Position vector를 더하지 않고 Query와 Key의 2차원 Subspace를 위치에 비례하는 각도로 회전시킨다.
내적은 다음처럼 상대 위치에 의존하게 된다.
각 Token에는 절대 위치에 따른 회전을 적용하지만 Attention score에는 자연스럽게 상대 거리 가 나타난다. 추가 Position table이 필요하지 않고 KV Cache와 결합하기 쉬워 LLaMA, Qwen, Gemma 등 많은 Decoder-only LLM에서 사용한다.
한계도 있다. 학습 길이를 크게 넘어가면 회전 각도의 주파수와 분포가 달라져 성능이 떨어진다. Position interpolation, NTK-aware scaling, YaRN과 같은 Context extension 기법이 제안된 이유다. RoPE를 사용했다고 Long-context extrapolation이 자동으로 해결되는 것은 아니다.
| 방식 | 장점 | 단점 |
|---|---|---|
| Learned Absolute | 단순하고 학습 구간 표현력 높음 | 최대 길이 고정, 외삽 취약 |
| Sinusoidal | Parameter 없음, 임의 위치 계산 가능 | 긴 길이 일반화 보장 없음, Content와 합산 |
| Relative Bias/Embedding | 거리와 방향을 직접 표현 | Pair 처리와 구현 복잡성 |
| ALiBi | 단순, 추가 메모리 작음 | 선형 거리 Bias의 표현력 제약 |
| RoPE | 절대 회전으로 상대 위치 내적 구현, LLM에 효율적 | 장문 외삽 시 Scaling 필요 |
더 자세한 수식은 Attention 구조의 논리에서 출발하는 Positional Embedding에 정리하였다.
면접 답변: Absolute encoding은 위치별 Vector를 Token embedding에 더하며 단순하지만 학습 길이 밖의 외삽에 약합니다. Relative encoding은 Attention score에 의 거리 Bias를 넣어 위치 이동에 더 잘 일반화하지만 Pair별 처리가 필요합니다. RoPE는 Query와 Key를 위치별 각도로 회전시키고, 성질로 내적에 상대 위치를 반영합니다. 추가 Table이 없고 KV Cache와 잘 맞아 현대 LLM에서 널리 쓰이지만, 학습 길이를 크게 넘으면 주파수 분포가 달라져 Position interpolation이나 RoPE scaling이 필요합니다.
9. 길이가 다른 Token sequence를 효율적으로 Batch로 구성하는 방법
Batch의 Sequence 길이를 라고 하고 최대 길이를 라고 하자. Dense batch는 Shape을 가지며 Padding token 수는 다음과 같다.
Padding을 Attention mask와 Label ignore index로 올바르게 제거했다면 주된 문제는 학습 노이즈가 아니라 불필요한 연산과 Activation memory다.
Dynamic Padding과 Length Bucketing
Dataset 전체의 최대 길이가 아니라 현재 Batch의 최대 길이까지만 Padding한다. 여기에 길이가 비슷한 Sample끼리 Bucket으로 묶으면 긴 Outlier 하나 때문에 전체 Batch가 길어지는 문제를 줄일 수 있다. 구현과 호환성이 좋아 일반적인 Fine-tuning의 기본 선택이다.
Tensor Core가 선호하는 Shape을 위해 8이나 16의 배수까지 약간 Padding하는 것이 실제 처리 속도에는 더 좋을 수 있다. Padding token 수를 최소화하는 것과 Wall-clock time을 최소화하는 것이 항상 같지는 않다.
Token-budget Batching
Sample 개수 대신 Batch의 총 Token 수를 제한한다.
짧은 Sample은 많이, 긴 Sample은 적게 넣어 Memory 사용량을 안정화한다. 다만 Attention compute는 에 비례하므로 같은 Token 수가 반드시 같은 Step time을 뜻하지 않는다. Loss normalization과 Gradient accumulation도 유효 Token 수 기준으로 맞추는 것이 중요하다.
Sequence Packing
여러 짧은 Sample을 하나의 고정 길이 Row에 채워 Padding을 제거한다.
[ A A A A A | B B B | C C C C ]
서로 독립인 Sample 사이에 Attention이 넘어가지 않도록 Block-diagonal mask 또는 Sequence boundary를 사용해야 한다.
Position ID를 Sample마다 다시 시작할지, EOS와 첫 Token의 Label을 어떻게 처리할지도 확인해야 한다. Pre-training에서는 문서를 EOS로 연결하고 고정 길이로 자르는 Concatenate-then-split을 많이 사용하지만, 독립된 SFT sample에 경계 Mask 없이 적용하면 Cross-contamination이 생길 수 있다.
Best-Fit Decreasing 같은 Bin-packing algorithm은 긴 Sample부터 남은 공간에 배치해 활용률을 높인다. Streaming 환경에서는 Greedy 또는 First-fit이 단순하다.
Padding-free Variable-length Attention
실제 Token만 하나의 Tensor로 펼친다.
그리고 와 같은 경계 정보를 Variable-length FlashAttention kernel에 전달한다. Kernel은 경계를 넘지 않으면서 실제 Token만 계산한다. 단순히 FlashAttention을 켠 것만으로 Padding이 사라지는 것은 아니며, Varlen interface를 실제로 사용해야 한다.
Nested Tensor나 Ragged Tensor는 가변 길이를 Tensor 표현 수준에서 유지하는 방향이다. 지원 Operator와 Model이 제한될 수 있고 중간에 Dense tensor로 변환하면 Padding 비용이 다시 생긴다.
실무적인 발전 순서는 다음처럼 볼 수 있다.
상세한 구현과 Trade-off는 Transformer에서 Variable-length Batch를 효율적으로 구성하는 방법에 별도로 정리하였다.
면접 답변: 가장 기본적인 방법은 Batch 안의 최대 길이까지만 Dynamic padding하고, 길이가 비슷한 Sample을 Bucketing하는 것입니다. 길이 분포가 넓으면 Sample 수 대신 총 Token 수로 Batch를 구성합니다. 더 높은 효율이 필요하면 여러 Sample을 하나의 Row에 Packing하되 Block-diagonal mask, Position ID, EOS와 Label boundary를 정확히 처리해야 합니다. 가장 효율적인 실행은 Input을 실제 Token만 남도록 Flatten하고 를 Variable-length FlashAttention에 전달하는 Padding-free 방식입니다. 일반 Fine-tuning의 안전한 Baseline은 Dynamic padding과 Length bucketing이고, 대규모 LLM 학습에서는 Packing과 Varlen kernel을 함께 사용합니다.
10. 최근에 읽었던 논문: EAGLE-3
최근 읽은 논문으로 EAGLE-3: Scaling up Inference Acceleration of Large Language Models via Training-Time Test를 소개할 수 있다. 이 논문을 읽은 이유는 LLM Serving에서 Autoregressive decoding의 순차적 Bottleneck을 모델 품질 저하 없이 줄이는 방법에 관심이 있었기 때문이다. KV Cache가 이전 Token의 K, V 재계산은 없애주지만, 다음 Token 하나마다 거대한 Target model을 다시 통과해야 한다는 문제는 남는다.
Speculative Decoding은 작은 Draft model이 여러 미래 Token을 먼저 제안하고, 큰 Target model이 한 번의 Forward로 여러 위치를 검증한다. Target distribution을 기준으로 Rejection sampling과 보정을 수행하면 최종 출력 분포를 바꾸지 않는 Lossless acceleration이 가능하다.
기존 EAGLE은 Target model의 Top-layer feature를 작은 Draft model에 제공하고, 다음 Feature를 Autoregressive하게 예측했다. EAGLE-3의 핵심은 우리가 정말 원하는 것이 Target feature 자체가 아니라 Target이 Accept할 Token이라는 문제 재정의다.
첫째, Feature regression constraint를 제거하고 Token을 직접 예측한다. 여러 Hidden vector가 같은 Token distribution을 만들 수 있는데 하나의 Target feature 좌표를 그대로 맞추도록 강제하면 Draft의 표현력이 불필요하게 제한될 수 있다.
둘째, Feature loss를 제거하면 Training 중 정답 Feature만 보다가 추론에서 자기 Output을 입력받는 Distribution shift가 커진다. EAGLE-3는 Training-time Test로 Draft output을 다시 입력하는 Multi-step rollout을 학습 중에 노출해 이 문제를 해결한다. 이름과 달리 Test time에 Gradient update를 하는 방법은 아니다.
셋째, Target의 Top-layer 하나만 쓰지 않고 Low-, Middle-, High-level feature를 Fusion한다. Top-layer는 바로 다음 Token에 강하게 맞춰져 있을 수 있으므로, 여러 깊이의 Feature를 결합해 미래 Drafting에 유용한 정보를 넓힌다.
논문의 Contribution은 아래 세 가지다.
- Feature prediction에서 Direct token prediction으로 목적을 바꾸었다.
- Training-time Test로 Multi-step Draft의 Exposure bias를 줄였다.
- Multi-layer feature fusion으로 Draft input의 정보를 강화했다.
- Data scaling의 이득이 Draft model에도 나타나도록 만들었다.
- Target model의 출력 분포를 유지하면서 최대 6.5배 Speedup을 보고했고, Serving framework의 Batch 환경에서도 이득을 검증했다.
다만 Draft 학습 비용과 Target별 종속성이 있고, Acceptance rate, Batch size, Kernel과 Hardware에 따라 항상 같은 Speedup을 보장하는 것은 아니다. 이 논문을 흥미롭게 본 가장 큰 이유는 기존 Feature prediction을 더 정교하게 만드는 대신 최종 목적과 무관한 Constraint 자체를 버린 모델링 판단에 있다. 자세한 내용은 EAGLE-3의 Speculative Decoding은 어떻게 성능 저하 없이 LLM을 빠르게 만들까?에 정리하였다.
면접 답변: 최근에는 EAGLE-3를 읽었습니다. LLM의 Token-by-token decoding이 Memory-bound이고 순차적이라는 문제를, Target model의 출력 분포를 바꾸지 않는 Speculative Decoding으로 해결하는 논문입니다. 기존 EAGLE은 다음 Hidden feature를 맞혔지만 EAGLE-3는 최종 목표가 Token acceptance라는 점에 집중해 Feature regression을 제거하고 Token을 직접 예측합니다. 이때 생기는 Multi-step distribution shift는 Training-time Test로 자기 출력을 다시 입력하며 학습해 해결하고, Target의 여러 Layer feature를 Fusion합니다. 불필요한 Intermediate constraint를 제거해 Draft accuracy와 Data scaling을 개선했다는 점이 가장 인상적이었습니다.
11. Transformer에서 FFN의 역할과 필요한 이유
Self-Attention이 있기 때문에 FFN은 단순한 부속 Layer처럼 보이지만, 두 연산이 담당하는 축은 다르다. Attention은 Sequence dimension을 따라 Token 사이의 정보를 섞는다. 반면 FFN은 각 Token 위치에 동일한 함수를 독립적으로 적용하여 Hidden channel을 변환한다.
첫 Linear layer는 을 더 큰 로 확장한다. 원래 Transformer는 대략 4배 확장을 사용했고, 현대 LLM의 Gated FFN은 Parameter와 FLOPs를 맞추기 위해 다른 비율을 사용한다. 확장된 공간에서 GELU, SiLU와 같은 비선형 함수를 적용한 뒤 다시 로 Projection한다.
FFN이 필요한 첫 번째 이유는 비선형성이다. Softmax가 Attention weight에 비선형성을 제공하기는 하지만, Value aggregation 자체는 가중합이다. FFN은 Attention이 모은 Context를 조건으로 Feature를 새롭게 조합하고 복잡한 함수 근사를 가능하게 한다.
두 번째는 Channel mixing이다. Attention은 “어느 Token에서 정보를 가져올 것인가”를 정하고, FFN은 “가져온 정보를 현재 Token의 어떤 Feature로 바꿀 것인가”를 결정한다. CNN에서 Spatial mixing과 Channel mixing을 구분하는 것과 비슷하다.
세 번째는 Model capacity다. LLM Parameter의 큰 비중이 FFN에 존재한다. 연구에 따라 FFN을 Key-value memory처럼 해석하기도 한다. 입력 Pattern에 특정 Intermediate neuron이 활성화되고, Output projection이 관련 Feature를 Residual stream에 기록하는 관점이다. 다만 지식이 FFN에만 저장된다고 단정하면 안 되며 Attention, Embedding과 전체 Layer에 분산된다.
현대 LLM에서는 Gated activation이 많이 사용된다.
Gate가 입력에 따라 통과시킬 Feature를 선택하므로 일반적인 2-layer MLP보다 표현력이 좋아질 수 있다. MoE는 바로 이 Dense FFN을 여러 Expert FFN으로 바꾸고 Token마다 일부만 선택하는 구조다.
면접 답변: Attention과 FFN은 서로 다른 축을 처리합니다. Attention은 Token 간 정보를 섞어 Context를 수집하고, FFN은 각 Token에 독립적으로 적용되어 Hidden channel을 비선형 변환합니다. 보통 Dimension을 확장하고 GELU나 SwiGLU를 적용한 뒤 다시 줄이는데, 이 과정이 Channel mixing과 높은 함수 근사 능력을 제공합니다. LLM Parameter의 큰 비중도 FFN에 있기 때문에 Model capacity와 지식 표현에 중요합니다. Attention만 반복하면 Context의 가중합은 가능하지만, 수집한 정보를 충분히 비선형적으로 가공하는 능력이 부족합니다.
12. Mixture of Experts의 구조, 동작 원리와 Dense 모델 대비 효과
Dense Transformer에서는 모든 Token이 모든 FFN Parameter를 통과한다. Sparse Mixture of Experts는 Transformer block의 Dense FFN sub-layer를 여러 Expert FFN과 Router로 교체한다. Attention 전체를 Expert로 복제하는 것이 일반적인 기본형은 아니다.
Token representation 에 대해 Router가 Expert score를 계산한다.
Top- Expert만 선택하면 Output은 다음과 같다.
각 는 독립적인 FFN이다. Switch Transformer는 Top-1 routing을 사용했고, Mixtral은 각 Token을 8개 Expert 중 2개로 보낸다.
동작 과정은 다음과 같다.
- Router가 Batch의 각 Token에 대해 Expert probability를 계산한다.
- Top- Expert index와 weight를 선택한다.
- Token을 선택된 Expert가 있는 GPU로 All-to-All 통신하여 Dispatch한다.
- 각 Expert가 자신에게 온 Token을 FFN으로 처리한다.
- 결과를 원래 GPU와 Token 순서로 다시 모으고 Routing weight로 합친다.
MoE의 핵심 효과는 총 Parameter 수와 Token당 활성 Parameter 수를 분리하는 것이다. Expert 수를 늘려 Model capacity는 크게 만들면서 각 Token은 개 Expert만 계산하므로 Dense model처럼 모든 Parameter를 활성화하지 않는다. 같은 FLOPs budget에서 더 큰 Capacity를 사용할 수 있고, 언어, Domain, Token pattern에 따라 Expert specialization이 나타날 수 있다.
그러나 “Parameter가 많지만 Compute가 완전히 공짜”는 아니다.
- 모든 Expert weight를 Memory 또는 여러 GPU에 보관해야 한다.
- Token dispatch와 combine에 All-to-All communication이 필요하다.
- 특정 Expert에 Token이 몰리면 다른 Expert는 놀고 해당 Expert는 Capacity를 넘는 Load imbalance가 발생한다.
- Router가 일부 Expert만 선택하고 나머지를 거의 사용하지 않는 Expert collapse가 생길 수 있다.
- 작은 Batch에서는 Expert별 Token 수가 적어 GEMM 효율이 나빠질 수 있다.
이를 완화하기 위해 Expert별 Token 비율과 평균 Routing probability를 균형 있게 만드는 Auxiliary load-balancing loss, Expert capacity factor, Token dropping 또는 Dropless routing, Router z-loss 등을 사용한다.
여기서 는 Expert 로 실제 Routing된 Token 비율, 는 평균 Router probability다.
면접 답변: Sparse MoE는 보통 Transformer의 Dense FFN을 여러 Expert FFN과 Router로 교체합니다. Router가 Token마다 Top- Expert를 고르고, 선택된 Expert의 Output을 가중합합니다. 따라서 총 Parameter 수는 크게 늘리면서 Token당 활성 Parameter와 FLOPs는 제한할 수 있어 같은 Compute에서 Model capacity를 높입니다. 반면 Expert weight를 모두 저장해야 하고, 분산 환경의 All-to-All 통신, Load imbalance, Expert collapse와 작은 Expert batch의 낮은 효율이 문제입니다. 그래서 Load-balancing loss와 Capacity 관리가 중요합니다.
13. RLVR의 정의와 기존 RLHF와의 차이
RLVR(Reinforcement Learning with Verifiable Rewards)는 Model output을 사람이 매번 평가하거나 Learned reward model로 점수화하는 대신, 자동으로 정답 여부를 검증할 수 있는 Reward로 Policy를 학습하는 방법이다. Tulu 3은 이 이름을 Post-training recipe의 한 단계로 명시했고, 수학과 Code Reasoning에서 널리 사용되는 방식이 되었다.
예를 들면 다음과 같다.
- 수학: 최종 답이 Ground truth와 같은지 Symbolic 또는 Rule-based checker로 확인한다.
- Code: 생성된 Program이 Unit test를 통과하는지 실행한다.
- Formal proof: Proof assistant가 증명을 Accept하는지 확인한다.
- Structured output: JSON schema, compiler, constraint validator를 통과하는지 확인한다.
Prompt 에 대해 답변 를 Sampling하고 Verifier 가 Reward를 반환한다.
그 뒤 PPO, GRPO, REINFORCE 계열 알고리즘으로 기대 Reward를 최대화한다.
RLHF와 가장 큰 차이는 Reward의 출처다.
| 구분 | RLHF | RLVR |
|---|---|---|
| Feedback | 사람의 선호 비교 | 자동 검증 가능한 결과 |
| Reward | 주로 학습된 Reward Model | Rule, Test, Exact checker |
| Scale | Human annotation 비용 큼 | 검증이 싸다면 대규모 Sampling 가능 |
| 오차 | 주관성, Annotator disagreement, RM approximation | Verifier bug, Reward specification |
| 적합 Task | 도움됨, 무해함, 문체, 대화 품질 | 수학, Code, 논리, 형식 제약 |
RLVR의 장점은 Reward가 객관적이고 반복 Sampling을 싸게 평가할 수 있으며, Reward Model의 Proxy error를 줄인다는 점이다. 모델에 정답에 이르는 하나의 Human reasoning trace를 강제하지 않고 여러 풀이를 탐색하게 할 수도 있다. DeepSeek-R1은 Rule-based accuracy와 Format reward를 포함한 RL을 이용해 Reasoning behavior가 강화될 수 있음을 보여주었다.
한계는 검증 가능한 것만 최적화하기 쉽다는 점이다. 창의성, 정중함, 사실의 미묘한 품질은 단일 Checker로 판단하기 어렵다. Outcome reward가 마지막에만 주어지면 어떤 Reasoning step이 기여했는지 Credit assignment가 어렵고, 정답 Format을 속이거나 Test의 허점을 이용하는 Reward hacking도 가능하다. Verifier가 불완전하면 정확한 Reward라는 가정도 깨진다.
실제 Pipeline에서는 RLHF와 RLVR을 배타적으로 선택하기보다, Verifiable task에는 Rule reward를 사용하고 일반 대화와 안전성에는 Human 또는 Model-based preference reward를 혼합할 수 있다.
면접 답변: RLVR은 수학 정답, Unit test, Proof checker처럼 자동으로 검증 가능한 Reward로 Language Model을 강화학습하는 방법입니다. RLHF가 사람의 비교 데이터를 Reward Model로 근사해 주관적 선호를 최적화한다면, RLVR은 결과의 정오를 직접 판정하므로 Reward Model 오차와 Annotation 비용을 줄이고 대규모 Sampling이 가능합니다. 대신 수학과 Code처럼 검증기가 있는 Task에 주로 제한되고, Terminal reward의 Credit assignment와 Verifier hacking 문제가 있습니다. 따라서 일반 대화 품질에는 RLHF 계열을, 정답 검증이 가능한 Reasoning에는 RLVR을 결합하는 식으로 사용할 수 있습니다.
14. Distributed Data Parallel의 동작 원리, 한계와 개선 기법
Distributed Data Parallel은 각 GPU에 동일한 Model replica를 두고 서로 다른 Mini-batch shard를 처리한다. World size를 라고 하자.
- 초기 Model parameter를 모든 Rank에 동일하게 Broadcast한다.
- Distributed sampler가 Global batch를 Rank별로 나눈다.
- 각 Rank가 독립적으로 Forward와 Backward를 수행해 Local gradient 를 계산한다.
- Gradient bucket이 준비되는 즉시 Ring All-Reduce를 수행한다.
- 모든 Rank가 평균 Gradient를 얻고 같은 Optimizer update를 적용한다.
모든 Rank의 초기 Parameter와 평균 Gradient가 같으므로 Update 후에도 Model replica가 동일하게 유지된다. PyTorch DDP는 Parameter gradient를 Bucket으로 묶고 Backward 중 준비된 Bucket부터 비동기 All-Reduce하여 Compute와 Communication을 겹친다.
DDP의 장점은 구현이 단순하고, Model 하나가 GPU에 들어간다면 GPU 수에 따라 Throughput을 비교적 잘 늘릴 수 있다는 것이다. 그러나 명확한 한계가 있다.
Model state의 완전 복제
각 GPU가 Parameter, Gradient, Optimizer state 전체를 가진다. GPU 수를 늘려도 Model state의 장치당 Memory는 줄지 않는다. Adam FP32 학습이라면 대략 Parameter당 16 Bytes가 필요하고 Activation까지 더해지므로 큰 Model은 한 GPU에 들어가지 않는다.
Gradient synchronization 비용
Backward마다 Model 크기에 비례한 Gradient를 All-Reduce한다. GPU가 늘거나 Node 사이 Network가 느리면 통신이 병목이 된다. Bucket 크기와 순서가 적절하지 않으면 Compute-Communication overlap도 줄어든다.
Global batch와 Straggler
GPU 수를 늘리면 같은 Per-device batch에서 Global batch가 커진다. Learning rate와 Optimization 특성을 다시 조정해야 하며 무한히 Scale하지 않는다. 또한 가장 느린 Rank가 끝날 때까지 Collective가 진행되지 않으므로 긴 Sequence나 Data loading 편차가 Straggler를 만든다.
해결과 확장 방향
- Gradient accumulation은 통신 빈도를 줄이고 큰 Effective batch를 만들지만 Activation memory와 Step latency를 고려해야 한다.
- Mixed precision과 Gradient compression은 통신량을 줄인다.
- ZeRO Stage 1~3와 FSDP는 Optimizer state, Gradient, Parameter의 복제를 순차적으로 제거한다.
- Tensor Parallelism은 한 Layer의 Matrix를 여러 GPU에 나누어 Model 자체가 한 GPU에 들어가지 않는 문제를 해결한다.
- Pipeline Parallelism은 Layer를 Stage로 나누고 Micro-batch pipeline으로 실행한다.
- Sequence 또는 Context Parallelism은 긴 Sequence의 Activation과 Attention을 나눈다.
- 3D Parallelism은 Data, Tensor, Pipeline parallelism을 함께 사용한다.
DDP는 Model은 한 GPU에 들어가지만 데이터와 학습량이 큰 경우의 우선 선택이고, Model state 또는 Activation이 한 GPU를 넘으면 Sharding이나 Model parallelism이 필요하다.
면접 답변: DDP는 각 GPU에 같은 Model을 복제하고 서로 다른 Data shard로 Forward와 Backward를 수행한 뒤, Gradient를 All-Reduce해 평균내고 같은 Optimizer update를 적용합니다. Gradient를 Bucket으로 묶어 Backward와 통신을 겹칠 수 있어 Model이 한 GPU에 들어가면 효율적인 Throughput scaling 방법입니다. 한계는 모든 GPU가 Parameter, Gradient, Optimizer state를 완전히 복제해 장치당 Model memory가 줄지 않고, 매 Step Gradient All-Reduce와 Straggler가 발생한다는 점입니다. 이를 해결하기 위해 ZeRO/FSDP로 Model state를 Sharding하고, Tensor·Pipeline·Context Parallelism으로 Model과 Activation 계산을 나눕니다.
15. FSDP와 ZeRO Stage 1~3의 원리 및 차이
일반적인 Data Parallel training에서 GPU마다 중복되는 Model state는 크게 세 종류다.
- Parameter
- Gradient
- Optimizer state : Adam의 First/Second moment와 구성에 따른 FP32 master weight
ZeRO는 Data Parallel rank 사이에서 이 중복을 단계적으로 제거한다.
ZeRO Stage 1
Optimizer state만 Rank별로 Sharding한다. 각 Rank는 전체 Parameter와 전체 Gradient를 가지지만 자신의 Partition에 해당하는 Optimizer state만 보관하고 해당 Parameter shard를 Update한다. Update된 Parameter shard를 All-Gather하여 모든 Rank가 다시 전체 Parameter를 갖는다.
ZeRO Stage 2
Optimizer state와 Gradient를 Sharding한다. Gradient All-Reduce 대신 Reduce-Scatter를 사용해 각 Rank가 Update할 Parameter에 해당하는 Gradient shard만 남긴다.
ZeRO Stage 3
Optimizer state, Gradient, Parameter를 모두 Sharding한다. Layer를 계산하기 직전에 필요한 Parameter shard를 All-Gather하고, 계산이 끝나면 Full parameter를 해제한다. Backward 후 Gradient는 Reduce-Scatter한다.
실제로는 현재 계산 중인 Layer의 Full parameter, Communication bucket, Activation과 Fragmentation 때문에 정확히 이 값만 사용하지는 않는다. Stage가 높아질수록 Memory 절약은 커지지만 Parameter All-Gather가 추가되어 Communication과 구현 복잡성이 증가한다.
FSDP
PyTorch FSDP는 ZeRO-3와 같은 Full sharding 원리를 PyTorch Module 단위로 제공하는 구현이다. FSDP unit의 Forward 직전에 Parameter를 All-Gather하고, Forward 후 다시 Reshard한다. Backward에서도 필요한 Parameter를 Gather하고 Gradient를 Reduce-Scatter한다. Nested wrapping이나 Auto-wrap policy를 사용하면 Transformer block 단위로 Full parameter의 생존 범위를 제한할 수 있다.
PyTorch FSDP2는 Parameter를 Flat parameter 중심으로 감추는 FSDP1과 달리 Per-parameter DTensor 기반 Sharding과 개선된 Composability를 제공한다. 다만 면접에서 핵심은 API 세대보다 FSDP가 Parameter, Gradient, Optimizer state를 모두 Shard하며 계산 시점에 Parameter를 Gather한다는 점이다.
차이 정리
| 방식 | Parameter | Gradient | Optimizer state | 통신 특성 |
|---|---|---|---|---|
| DDP | 복제 | 복제 후 All-Reduce | 복제 | Gradient All-Reduce |
| ZeRO-1 | 복제 | 복제 | Shard | Update 후 Parameter 동기화 |
| ZeRO-2 | 복제 | Shard | Shard | Gradient Reduce-Scatter |
| ZeRO-3 | Shard | Shard | Shard | Layer별 Parameter All-Gather + Reduce-Scatter |
| FSDP Full shard | Shard | Shard | Shard | ZeRO-3와 유사, PyTorch Module/DTensor 통합 |
ZeRO는 DeepSpeed의 단계적 Optimizer/Model-state redundancy 제거 개념과 구현을 가리키고, FSDP는 PyTorch 생태계의 Fully sharded 구현이다. ZeRO-3와 FSDP는 알고리즘적 목표가 매우 유사하지만, Wrap unit, Parameter representation, Prefetch, Offload, Checkpoint API와 Runtime integration이 다르다.
면접 답변: ZeRO는 Data Parallel에서 중복 저장되는 Model state를 단계적으로 Shard합니다. Stage 1은 Optimizer state, Stage 2는 Optimizer state와 Gradient, Stage 3는 Parameter까지 모두 Shard합니다. Stage 3에서는 Layer 계산 직전에 Parameter를 All-Gather하고 Backward gradient는 Reduce-Scatter합니다. FSDP도 알고리즘적으로 ZeRO-3와 유사하게 Parameter, Gradient, Optimizer state를 모두 Shard하지만 PyTorch Module과 DTensor에 통합된 구현입니다. 높은 Stage일수록 Memory는 줄지만 Parameter Gather 통신과 Runtime 복잡성이 증가합니다.
16. Optimizer의 종류, Adam의 원리와 Parameter 수에 따른 VRAM 계산
대표적인 Optimizer는 다음과 같다.
- SGD는 현재 Gradient 방향으로 Update하며 단순하고 일반화가 좋지만 Learning rate와 Scale에 민감하다.
- Momentum은 Gradient의 이동 평균을 사용해 일관된 방향을 가속하고 진동을 줄인다.
- AdaGrad는 Parameter별 누적 제곱 Gradient로 Learning rate를 조정하지만 계속 감소할 수 있다.
- RMSProp은 제곱 Gradient의 지수 이동 평균을 사용해 AdaGrad의 과도한 감소를 완화한다.
- Adam은 Momentum에 해당하는 First moment와 RMSProp에 해당하는 Second moment를 함께 사용한다.
- AdamW는 Weight decay를 Gradient에 섞지 않고 Parameter update에 Decoupled하게 적용한다.
- Adafactor는 Second moment를 Factorization하여 큰 Matrix의 Optimizer memory를 줄인다.
- LAMB는 Layer-wise scaling으로 매우 큰 Batch training을 돕는다.
- Lion은 부호 기반 Update와 하나의 Momentum state를 사용해 Adam보다 Optimizer state를 줄일 수 있다.
Adam은 Step 의 Gradient 에 대해 First moment와 Second raw moment를 계산한다.
초기 때문에 초반 추정치가 0에 치우치므로 Bias correction을 적용한다.
First moment는 Gradient 방향을 평활화하고, Second moment는 최근 Gradient scale이 큰 Parameter의 Step을 줄이는 Parameter-wise adaptive learning rate 역할을 한다.
Parameter 수가 일 때 Adam memory
먼저 정밀도와 구현 가정을 말해야 정확한 답이 된다. Activation, Temporary buffer, CUDA context와 Memory fragmentation은 제외하고 Model state만 계산하자.
FP32 training에서는 다음이 필요하다.
| State | Parameter당 Memory |
|---|---|
| FP32 Parameter | 4 Bytes |
| FP32 Gradient | 4 Bytes |
| FP32 First moment | 4 Bytes |
| FP32 Second moment | 4 Bytes |
| 합계 | 16 Bytes |
예를 들어 이면 Decimal 기준 112 GB, Binary GiB 기준 약 104.3 GiB다. 이 값에는 Activation과 통신 Buffer가 없으므로 실제 필요 VRAM은 더 크다.
전통적인 FP16 Mixed Precision에서 FP16 Parameter 2 Bytes, FP16 Gradient 2 Bytes, FP32 Master parameter 4 Bytes, FP32 8 Bytes를 두면 역시 16 Bytes/parameter다.
BF16 Parameter와 Gradient를 사용하면서 별도의 FP32 Master weight를 두지 않는 구현은 Bytes/parameter가 될 수 있다. 반대로 FP32 Gradient buffer나 Master weight를 추가로 유지하면 16 Bytes 이상이 된다. 따라서 “Adam은 무조건 몇 Byte”라고 답하기보다 FP32 기본은 16N Bytes이고 Mixed precision은 Master weight와 Gradient dtype에 따라 12~16N 이상이라고 가정을 붙이는 것이 정확하다.
ZeRO/FSDP는 이 Model state를 Data Parallel world size로 Shard하고, 8-bit optimizer는 를 저정밀도로 저장해 Memory를 더 줄인다.
면접 답변: Adam은 Gradient의 First moment 와 제곱 Gradient의 Second moment 를 지수 이동 평균으로 추정하고, Bias correction 뒤 로 Parameter별 Step을 조절합니다. FP32 기준으로 Parameter, Gradient, First moment, Second moment가 각각 4 Bytes이므로 Parameter가 개면 Model state만 약 Bytes입니다. 전통적인 FP16 Mixed Precision도 FP16 weight와 gradient 4 Bytes에 FP32 master weight 4 Bytes, Adam state 8 Bytes를 더해 16N Bytes입니다. 다만 BF16에서 Master weight를 두지 않는 구현은 12N Bytes가 될 수 있으므로 가정을 먼저 밝혀야 하며, Activation과 Buffer는 별도입니다.
17. KV Cache를 사용하는 이유와 효율적인 관리·최적화 방법
Decoder-only LLM이 다음 Token을 생성할 때 현재까지의 모든 Token을 입력으로 다시 넣는다. Cache가 없다면 과거 Token의 K와 V를 매 Step마다 다시 계산한다.
Layer 에서 과거 Token의 Key와 Value를 저장하면 새 Token 에 대해서는 만 Projection하고, 를 기존 Cache 뒤에 붙이면 된다.
이렇게 과거 Token의 Projection과 이전 Layer 연산을 반복하지 않는다. Attention이 과거 Cache 전체를 읽으므로 Token당 Attention 비용은 Context 길이에 따라 증가하지만, 전체 Prefix를 매번 다시 Forward하는 훨씬 큰 중복은 없어진다.
KV Cache Memory는 대략 다음과 같다.
2는 K와 V, 는 동시 Sequence 수다. 긴 Context와 큰 Batch에서 Weight 다음으로 큰 Memory가 될 수 있다.
대표적인 최적화
MQA와 GQA: MHA는 Query head마다 K/V head를 둔다. MQA는 하나의 K/V head를 모든 Query head가 공유하고, GQA는 Query head Group마다 K/V head 하나를 공유한다. Cache와 Decode bandwidth를 크게 줄이며 GQA는 MHA의 품질과 MQA의 효율 사이를 절충한다.
PagedAttention: Request마다 연속된 최대 길이 Buffer를 미리 할당하면 Internal fragmentation과 길이 예측 오류가 생긴다. PagedAttention은 KV Cache를 고정 크기 Block으로 나누고 Logical block을 Non-contiguous physical block에 Mapping한다. 필요한 만큼만 Block을 할당하고, Beam 또는 공통 Prefix는 Copy-on-write 방식으로 Block을 공유할 수 있어 Serving batch를 키운다.
Continuous batching: Request가 끝날 때까지 고정 Batch를 유지하지 않고 완료된 Slot을 새 Request로 채운다. KV block allocator와 결합하면 GPU utilization이 높아진다.
KV Cache Quantization: K와 V를 FP8, INT8, 더 낮은 Bit로 저장한다. Memory와 Bandwidth를 줄이지만 Layer, Head, Token별 Scale과 Outlier를 잘 처리하지 않으면 품질이 떨어진다.
Sliding-window와 Eviction: Local attention model은 최근 Token만 Cache한다. H2O류는 중요도가 높은 Heavy hitter token을 남기고 덜 중요한 Cache를 제거한다. Memory는 줄지만 Full-context Attention과 정확히 같지 않다.
Prefix caching: System prompt, 문서 Prefix처럼 여러 Request가 공유하는 Prefix의 KV를 한 번 계산해 재사용한다. Prompt cache hit가 높을수록 Time-to-first-token과 Prefill 비용을 줄인다. Cache invalidation과 Model/Adapter별 구분이 필요하다.
Offloading과 Distributed KV: GPU가 부족하면 일부 KV를 CPU, Host memory 또는 다른 GPU로 이동한다. Capacity는 늘지만 PCIe와 Network bandwidth 때문에 Latency가 증가할 수 있다.
면접 답변: KV Cache는 Autoregressive decoding에서 과거 Token의 Key와 Value를 Layer별로 저장해 매 Step 과거 Prefix의 Projection과 Forward를 다시 계산하지 않기 위해 사용합니다. 대신 Cache는 Layer 수, Sequence 길이, KV head 수, Batch에 비례해 커지고 매 Token마다 읽어야 해 Memory capacity와 bandwidth 병목이 됩니다. MQA/GQA는 K/V head를 공유해 Cache 크기를 줄이고, PagedAttention은 KV를 Block 단위로 할당해 Fragmentation과 공유를 개선합니다. 여기에 KV Quantization, Prefix caching, Continuous batching, Sliding-window/Eviction과 CPU offload를 사용할 수 있습니다.
18. Diffusion Model에 Reinforcement Learning을 적용하기 어려운 이유
Diffusion model의 Reverse process를 RL로 보면 State는 현재 Noisy latent , Action은 다음 latent , Policy는 Denoising transition 다. 최종 Image 에 대해 Reward를 받는다.
이 정식화는 가능하지만 Language Model보다 몇 가지 어려움이 크다.
긴 고비용 Trajectory와 Sparse reward
한 Sample을 만들기 위해 수십 번의 U-Net 또는 DiT Forward가 필요하다. Reward는 주로 최종 Image에서만 얻으므로 어느 Denoising step과 Spatial decision이 결과에 기여했는지 Credit assignment가 어렵다. 동일한 Prompt에 여러 Trajectory를 Sampling하는 비용도 매우 크다.
고차원 Continuous action
LM의 Action은 Vocabulary의 Discrete token이지만 Diffusion의 Action은 Image latent 전체에 가까운 고차원 Continuous variable이다. Transition log-probability와 Importance ratio를 계산할 수 있어도 분산이 커지고, 작은 Policy 변화가 전체 Image trajectory에 복잡하게 누적된다. DDIM처럼 Deterministic한 Sampler는 확률적 Policy로 다루기 위한 별도 설계가 필요하다.
Backpropagation memory와 Policy gradient variance
Reward가 미분 가능하면 전체 Sampling chain을 통해 Backpropagation할 수 있지만 모든 Denoising step의 Activation을 저장해야 해 Memory가 매우 크다. Recompute와 Truncated backprop을 사용하면 비용 또는 Bias가 늘어난다. Reward가 미분 불가능하면 Policy gradient를 사용해야 하는데 Terminal reward로 인한 Gradient variance와 Sample inefficiency가 커진다.
Reward의 불완전성과 Diversity collapse
Aesthetic score, CLIP similarity, Human preference model은 실제 사람이 원하는 품질의 Proxy다. Model이 Watermark, 과포화, 특정 구도처럼 Reward Model의 Shortcut을 이용할 수 있다. 하나의 Reward를 지나치게 높이면 Image diversity와 원래의 생성 능력이 줄어드는 Overoptimization이 발생한다. Base diffusion policy와 KL regularization을 정의하고 효율적으로 계산하는 일도 LLM만큼 단순하지 않다.
대표적인 접근
DDPO는 Denoising을 Multi-step MDP로 보고 Policy gradient와 PPO 형태로 전체 Denoising transition의 Log probability를 최적화한다. DPOK는 KL regularization을 포함한 Online RL을 사용한다. AlignProp/DRaFT 계열은 미분 가능한 Reward를 Sampling chain으로 직접 Backpropagate하고, Diffusion-DPO 계열은 Preference pair를 직접 최적화한다.
적용 자체는 가능하다. 다만 Sample 생성이 길고 비싸며, 최종 Reward가 고차원 Denoising trajectory에 Sparse하게 주어진다는 점이 어렵다.
면접 답변: Diffusion의 Reverse process는 각 Denoising step을 Action으로 보는 MDP로 만들 수 있지만, 한 Image에 수십 번의 Forward가 필요하고 Reward는 대부분 최종 Image에만 주어져 Credit assignment가 어렵습니다. Action이 고차원 Continuous latent라 Policy gradient 분산이 크고, Sampling chain 전체를 미분하면 Activation memory가 매우 큽니다. 또한 Aesthetic이나 CLIP Reward의 허점을 최적화해 Diversity가 줄거나 Reward hacking이 생길 수 있습니다. DDPO는 Denoising transition의 Log probability에 Policy gradient를 적용하고, AlignProp 계열은 미분 가능한 Reward를 Sampling chain으로 직접 Backpropagate하는 방식으로 이를 다룹니다.
19. BatchNorm, LayerNorm, GroupNorm의 차이와 정규화 Dimension
입력이 Image feature 라고 하자. 세 방법의 본질적인 차이는 평균과 분산을 계산하는 축이다.
일반적인 정규화는 다음 형태를 가진다.
Batch Normalization
각 Channel 에 대해 Batch와 Spatial dimension 를 사용한다.
Train에서는 현재 Batch statistics를 사용하고 Running mean/variance를 갱신한다. Inference에서는 Running statistics를 사용한다. Batch 간 Noise가 Regularization처럼 작동하고 CNN에서 효율적이지만 작은 Batch, Batch distribution 변화, Sequence length와 Distributed setting에 민감하다. Multi-GPU에서 SyncBatchNorm은 Rank 간 Statistics를 동기화하지만 통신이 추가된다.
Layer Normalization
각 Sample의 한 Token 또는 한 위치에서 Feature dimension 전체를 정규화한다. Transformer 입력 라면 각 에 대해 축으로 계산한다.
Batch의 다른 Sample에 의존하지 않고 Train과 Inference 계산이 같아 Transformer와 Autoregressive model에 적합하다. 다만 Feature 전체의 평균과 분산을 묶는 것이 모든 구조에 항상 최적인 것은 아니다. RMSNorm은 평균을 빼지 않고 RMS로 Scale만 정규화하여 계산을 단순화한다.
Group Normalization
각 Sample 안에서 Channel을 개 Group으로 나누고, 같은 Group의 Channel과 Spatial dimension을 함께 정규화한다. Group 의 Channel 집합을 라고 하자.
분산도 같은 축에서 계산한다. Batch size에 의존하지 않아 Detection, Segmentation과 Diffusion U-Net처럼 고해상도 때문에 Batch가 작은 Vision model에 적합하다. 이면 Channel과 Spatial을 함께 정규화하는 LayerNorm과 유사하고, 이면 Channel별 Spatial을 정규화하는 InstanceNorm과 유사하다. 다만 정확한 동치 여부는 Tensor layout과 Normalized shape 정의에 달려 있다.
| 방법 | Statistics 축 | Batch 의존 | 대표 사용 |
|---|---|---|---|
| BatchNorm | , Channel별 | 예 | 큰 Batch CNN |
| LayerNorm | 각 Token의 | 아니오 | Transformer, LLM |
| GroupNorm | 각 Sample의 Group channel과 | 아니오 | 작은 Batch Vision, Diffusion U-Net |
면접 답변: 기준 BatchNorm은 Channel별로 축의 평균과 분산을 사용하고, Train의 Batch 통계와 Inference의 Running 통계가 다릅니다. LayerNorm은 각 Sample 또는 Token의 Hidden dimension 를 정규화해 Batch와 무관하므로 Transformer에 적합합니다. GroupNorm은 한 Sample의 Channel을 Group으로 나누고 각 Group의 Channel과 Spatial 축을 정규화해 작은 Batch의 Vision model에서 안정적입니다. 따라서 큰 Batch CNN에는 BatchNorm, Transformer에는 LayerNorm, 작은 Batch Detection이나 Diffusion U-Net에는 GroupNorm이 흔합니다.
20. Causal Attention과 Bidirectional Attention의 차이와 사용 모델
Self-Attention score에 Mask 을 더한다고 하자.
Causal Attention
위치 가 미래 위치 를 보지 못하도록 Upper triangular 영역을 로 Mask한다.
따라서 의 예측은 에만 의존하며 Autoregressive factorization을 만족한다.
GPT, LLaMA, Qwen과 같은 Decoder-only Language Model에 사용한다. 학습에서는 모든 위치의 Next-token loss를 병렬로 계산할 수 있지만, 추론에서는 앞 Token이 결정되어야 다음 Token을 생성할 수 있어 순차적이다.
Bidirectional Attention
Padding을 제외하면 각 Token이 왼쪽과 오른쪽의 모든 Token을 볼 수 있다. BERT, RoBERTa와 같은 Encoder-only model과 ViT의 Patch self-attention이 대표적이다. 문장 전체가 주어진 Classification, Token classification, Retrieval embedding과 Image understanding에 유리하다.
BERT는 정답 Token까지 그대로 보면 복원 Task가 trivial해지므로 일부 Token을 Mask하고 주변 양방향 Context로 예측하는 Masked Language Modeling을 사용한다.
Encoder-Decoder Transformer에서는 Encoder가 Bidirectional self-attention으로 Source 전체를 이해하고, Decoder는 Causal self-attention으로 Target을 생성한다. Decoder의 Cross-Attention은 현재 생성 위치가 Encoder output 전체를 볼 수 있다.
Mask의 차이는 “학습 때 미래를 사용하느냐”뿐 아니라 사용할 수 있는 Task의 Factorization을 결정한다. Causal model은 생성에 자연스럽지만 한 Token의 표현이 오른쪽 Context를 직접 포함하지 않는다. Bidirectional model은 입력 전체의 표현에 강하지만 별도의 Autoregressive decoder 없이 왼쪽부터 Text를 생성하기는 어렵다.
면접 답변: Causal Attention은 위치 가 인 미래 Token을 보지 못하도록 Upper triangular mask를 사용하고, 인 Autoregressive generation을 가능하게 합니다. GPT와 LLaMA 같은 Decoder-only model이 사용합니다. Bidirectional Attention은 각 Token이 양쪽 Context 전체를 볼 수 있어 BERT 같은 Encoder와 ViT의 이해·표현 학습에 적합합니다. Encoder-Decoder에서는 Encoder가 Bidirectional, Decoder가 Causal self-attention을 사용하고 Decoder는 Cross-Attention으로 Source 전체를 참고합니다.
21. Teacher Forcing의 정의, 장점과 Exposure Bias
Teacher Forcing은 Autoregressive model을 학습할 때 이전 Step에서 Model이 생성한 Token이 아니라 Ground-truth 이전 Token을 다음 입력으로 사용하는 방법이다.
정답 Sequence가 라면 학습 Loss는 다음과 같다.
각 위치의 Prefix 를 이미 알고 있으므로 Causal mask를 사용한 하나의 Forward pass에서 모든 위치의 Prediction과 Loss를 병렬로 계산할 수 있다. 반대로 Model output을 다음 입력으로 넣으면 Token을 하나씩 Sampling해야 해 학습이 매우 느려지고, 초기의 무작위 오류가 이후 입력을 계속 오염시킨다.
Teacher Forcing의 장점은 다음과 같다.
- Ground-truth context에서 명확하고 안정적인 Supervision을 준다.
- Sequence의 모든 위치를 병렬 학습할 수 있다.
- 초기 Model이 틀린 Token을 반복 입력받아 학습이 붕괴하는 문제를 막는다.
- MLE의 Next-token likelihood를 직접 최적화한다.
하지만 Train과 Inference의 조건이 다르다. Train에서는 항상 올바른 Prefix를 보지만, Inference에서는 자신의 Prediction을 다음 입력으로 사용한다. 한 번 잘못 생성하면 학습 중 본 적 없는 Prefix에 들어가고, 오류가 누적될 수 있다. 이를 Exposure Bias라고 한다.
또 하나의 문제는 Token-level likelihood와 Sequence-level 품질의 불일치다. Cross-Entropy가 낮아도 전체 답변의 사실성, 일관성, BLEU, 사람의 선호가 반드시 좋아지는 것은 아니다.
Scheduled Sampling은 학습이 진행될수록 일부 Ground truth를 Model prediction으로 바꾸지만, Objective의 일관성과 Sampling bias 문제가 있다. Sequence-level training, Professor Forcing, Data augmentation, DAgger식 On-policy data collection, RLHF/RLVR와 Online distillation은 실제 Model이 방문하는 Sequence에 대한 Feedback을 추가하는 방향이다.
다만 Exposure bias가 존재한다고 Teacher Forcing을 버리는 것이 일반적인 해결은 아니다. 대규모 Language Model의 Pre-training과 SFT에서는 여전히 효율적이고 안정적인 기본 방법이며, On-policy Post-training을 추가해 Sequence-level behavior를 보완한다.
면접 답변: Teacher Forcing은 Autoregressive model 학습에서 이전 Model prediction 대신 Ground-truth token을 다음 입력으로 사용하는 방식입니다. 모든 위치의 Next-token loss를 한 번에 병렬 계산할 수 있고 초기 오류 누적 없이 안정적으로 MLE를 수행할 수 있습니다. 반면 학습에서는 정답 Prefix만 보고 추론에서는 자기 출력을 입력받아 Distribution mismatch가 생기는데 이것이 Exposure bias입니다. 오류가 한 번 발생하면 학습 중 보지 못한 상태에서 계속 생성해 오류가 누적될 수 있습니다. Scheduled sampling, Online distillation, Sequence-level RL 등으로 보완하지만 Teacher Forcing은 여전히 PT와 SFT의 기본 학습법입니다.
22. Stable Diffusion에서 Text Conditioning이 이루어지는 과정
Stable Diffusion은 Pixel이 아니라 VAE latent space에서 Denoising하는 Latent Diffusion Model이다. Text prompt는 Denoising U-Net이 어떤 Image를 복원할지 결정하는 Condition으로 들어간다.
1. Text tokenization과 Encoding
Prompt를 CLIP tokenizer로 Tokenize하고 Text encoder에 넣는다. Text encoder는 각 Token의 Contextual embedding을 만든다.
Text encoder는 U-Net의 Cross-Attention이 “red”, “cat”, “on the table” 같은 Token별 조건을 참조할 수 있도록 Sequence representation을 제공한다. 최종 문장 하나의 Vector만 만드는 역할이 아니다.
2. Latent 생성과 Denoising
Training에서는 Image를 VAE encoder로 압축한 에 Noise를 더해 를 만들고, U-Net이 Noise 또는 다른 Parameterization target을 예측한다. Inference에서는 Gaussian noise 에서 시작해 Scheduler에 따라 반복적으로 Noise를 제거한다.
3. Cross-Attention으로 Text 주입
U-Net의 Intermediate spatial feature를 Query로, Text embedding을 Key와 Value로 사용한다.
각 Spatial latent 위치가 어떤 Text token을 참고할지 학습한다. Latent Diffusion이 Cross-Attention으로 Text, Bounding box 등 다양한 Condition을 주입한 핵심 원리다.
4. Classifier-Free Guidance
학습 중 일정 확률로 Text condition을 비워 Conditional과 Unconditional prediction을 하나의 Model이 배우게 한다. Inference에서는 두 Noise prediction의 차이를 확대한다.
가 크면 Prompt alignment가 강해질 수 있지만 지나치면 색이 과포화되고 다양성과 자연스러움이 떨어질 수 있다. Negative prompt는 Unconditional branch의 빈 Text 대신 피하고 싶은 Text embedding을 넣는 방식으로 이해할 수 있다.
Stable Diffusion 버전별 Text encoder
- Stable Diffusion v1 계열은 Frozen OpenAI CLIP ViT-L/14 Text encoder를 사용한다.
- Stable Diffusion v2 계열은 OpenCLIP ViT-H/14 Text encoder를 사용한다.
- SDXL은 CLIP ViT-L/14와 OpenCLIP ViT-bigG/14 두 Text encoder를 사용한다. 두 Token embedding을 결합해 넓은 Cross-Attention context를 만들고, Pooled text embedding도 Size, Crop과 같은 Micro-conditioning과 함께 사용한다.
Text encoder는 Prompt의 언어적 의미를 Denoiser가 사용할 Representation으로 바꾸지만, Tokenizer 길이 제한, Text encoder의 Concept bias, Cross-Attention의 Binding 실패 때문에 수량, 공간 관계와 긴 Prompt를 완벽하게 따르지는 못한다.
면접 답변: Stable Diffusion은 Prompt를 CLIP tokenizer와 Frozen text encoder로 Token-level embedding으로 바꿉니다. U-Net의 Spatial latent feature가 Query가 되고 Text embedding이 Key와 Value가 되는 Cross-Attention을 통해 매 Denoising step에 Text condition이 주입됩니다. Classifier-Free Guidance는 Conditional과 Unconditional noise prediction의 차이를 Scale해 Prompt 반영을 강화합니다. SD v1은 CLIP ViT-L/14, v2는 OpenCLIP ViT-H/14를 사용하고, SDXL은 CLIP ViT-L과 OpenCLIP ViT-bigG 두 Encoder의 Token embedding과 Pooled embedding을 함께 사용합니다.
23. Gradient Checkpointing의 원리와 Trade-off
Backpropagation은 Chain rule을 계산하기 위해 Forward의 Intermediate activation을 저장한다. Transformer가 깊거나 Sequence가 길면 Parameter보다 Activation memory가 더 커질 수 있다.
일반적인 Layer sequence를 다음처럼 쓰자.
모든 을 저장하면 Backward에서 바로 사용할 수 있지만 Memory가 Layer 수에 비례한다. Gradient Checkpointing 또는 Activation Checkpointing은 일부 지점의 Activation만 저장하고 나머지는 버린다. Backward가 해당 구간에 도달하면 저장된 Checkpoint에서 Forward를 다시 실행해 필요한 Activation을 복원한다.
예를 들어 12개 Block 중 0, 4, 8, 12번째 Output만 저장하면, Backward 시 812, 48, 0~4 구간을 순서대로 Recompute한다. Memory와 Compute의 교환이다.
이론적으로 개 Layer를 크기의 Segment로 나누면 저장 Activation을 에서 대략 수준으로 낮추는 고전적인 구성이 가능하다. 실제 Memory는 Attention tensor, Segment 경계, Framework 구현에 따라 다르다.
장점은 Model parameter나 학습 결과를 근사하지 않고 Activation memory를 크게 줄여 더 긴 Sequence, 더 큰 Batch와 Model을 학습할 수 있다는 것이다. 단점은 Forward 일부를 다시 계산하므로 Training time이 늘고, Recompute 구간 선택과 RNG state 관리가 필요하다는 점이다.
Dropout처럼 Random 연산이 있다면 Recompute 때 같은 Mask를 재현해야 Gradient가 원래 Forward와 일치한다. Framework는 RNG state를 보존해 이를 처리하지만 추가 비용이 있다. Stateful layer나 외부 Side effect가 있는 함수는 Checkpoint 구간에 넣을 때 주의해야 한다.
FlashAttention도 Backward에 필요한 큰 Attention matrix를 저장하지 않고 일부를 Recompute한다는 점에서 같은 Memory-Compute trade-off를 활용하지만, Gradient Checkpointing은 더 일반적인 Module 구간 수준의 기법이다.
면접 답변: Gradient Checkpointing은 Forward의 모든 Activation을 저장하지 않고 일부 경계만 Checkpoint로 남긴 뒤, Backward에서 필요한 구간의 Forward를 다시 계산하는 방법입니다. 따라서 Activation memory를 크게 줄여 더 긴 Sequence나 큰 Batch를 사용할 수 있지만 Recompute 때문에 Training 시간이 증가합니다. Model state memory는 줄이지 않으므로 Adam state에는 ZeRO/FSDP가 별도로 필요합니다. Dropout이 있다면 Recompute 시 같은 Random state를 복원해야 하며, 어떤 Block을 Checkpoint할지에 따라 Memory와 Compute의 Trade-off가 달라집니다.
24. Speculative Decoding의 동작 원리와 빨라지는 이유
Autoregressive LLM은 다음 Token이 결정되어야 그다음 Token을 계산할 수 있다. 길이 를 생성하려면 큰 Target model을 적어도 번 순차 호출한다. Speculative Decoding은 작은 Draft model 가 여러 Token을 먼저 제안하고 Target model 가 한 번에 검증하여 Target 호출당 확정 Token 수를 늘린다.
1. Draft
Draft model이 현재 Prefix 뒤의 개 Token을 빠르게 생성한다.
2. Verification
Target model에 Prefix와 Draft token 전체를 넣는다. Causal Transformer는 각 Draft 위치의 Next-token distribution을 한 번의 Forward에서 병렬로 계산할 수 있다.
3. Accept와 Correct
앞 Token부터 Draft proposal을 확인한다. Sampling에서 Draft가 제안한 Token 의 Acceptance probability는 다음과 같다.
Reject되면 남은 확률 질량에서 보정 Sampling한다.
이 과정을 정확히 적용하면 최종 Sample distribution은 Target 와 동일하다. Greedy decoding에서는 Draft와 Target의 Argmax가 같은 동안 Accept하고 처음 다른 위치에서 Target token을 사용한다.
빨라지는 이유
Token-by-token Decode는 작은 Matrix multiplication을 반복하며 매 Token마다 거대한 Weight를 HBM에서 읽기 때문에 작은 Batch에서 Memory-bandwidth bound인 경우가 많다. Verification은 여러 Token 위치를 더 큰 Matrix multiplication으로 묶는다.
- 한 번 읽은 Target weight로 여러 위치를 계산한다.
- Target model의 순차 호출 횟수를 줄인다.
- GPU의 병렬 Compute를 더 잘 사용한다.
- Draft가 정확하면 한 Cycle에서 여러 Token을 Commit한다.
속도 이득은 대략 Acceptance length가 Draft 비용과 Verification 비용보다 얼마나 큰지에 달려 있다.
Draft가 너무 크면 제안 비용이 비싸고, 너무 작거나 분포가 다르면 Reject가 많다. Batch가 이미 커서 Target GEMM이 Compute-bound이면 Verification의 여유가 적어 Speedup이 작아질 수 있다. EAGLE-3, Medusa, Lookahead decoding 등은 Draft의 정확도나 Candidate tree 구성 방식을 개선한다.
면접 답변: Speculative Decoding은 작은 Draft model이 미래 Token 여러 개를 먼저 생성하고 큰 Target model이 한 번의 Forward로 각 위치를 병렬 검증합니다. Draft token은 확률로 Accept하고 Reject 시 의 Residual distribution에서 보정해 최종 출력 분포를 Target과 동일하게 유지할 수 있습니다. 작은 Batch의 Decode는 매 Token마다 큰 Weight를 읽는 Memory-bound 연산인데, Verification은 한 번 읽은 Weight로 여러 Token을 큰 GEMM에서 계산해 Target의 순차 호출 횟수를 줄입니다. 실제 이득은 Draft 비용과 Acceptance rate, Batch size에 따라 달라집니다.
25. Contrastive Learning의 Positive와 Negative Sample 정의 및 역할
Contrastive Learning은 어떤 두 View를 같은 의미로 볼 것인지가 학습의 핵심이다. Anchor , Positive , Negative 집합 에 대한 InfoNCE는 다음처럼 쓸 수 있다.
Positive Sample
학습에서 같은 의미나 Identity를 공유한다고 정의한 Pair다.
- SimCLR: 같은 Image에 서로 다른 Augmentation을 적용한 두 View
- Supervised contrastive learning: 같은 Class의 다른 Sample
- CLIP: 같은 원본 Pair의 Image와 Caption
- Speaker recognition: 같은 화자의 서로 다른 발화
- Temporal learning: 같은 Video의 가까운 시점 또는 같은 Track
Positive는 Representation에 어떤 변화가 생겨도 같은 것으로 유지해야 하는지, 즉 Invariance를 정의한다. 강한 Crop과 Color jitter를 Positive로 두면 색과 일부 위치가 달라도 객체 의미는 유지하도록 학습한다. 그러나 Task에 필요한 정보까지 Augmentation으로 지우면 잘못된 Invariance를 배운다. 예를 들어 색상이 Class를 결정하는 Task에서 Color removal은 나쁜 Positive를 만든다.
Negative Sample
다른 의미로 구분해야 한다고 정의한 Sample이다. Representation collapse를 막고 Embedding space에서 서로 다른 Instance와 Concept 사이에 Separation 또는 Uniformity를 만든다. 가까운 Hard negative는 결정 경계를 정교하게 하지만 실제 Positive를 Negative로 잘못 취급하는 False negative 위험이 크다.
Negative는 In-batch sample, Memory bank, Momentum queue, Hard-negative mining으로 구성할 수 있다. Batch를 키우면 Negative 수는 늘지만 모두 유익하지는 않으며, 너무 쉬운 Negative는 Gradient가 거의 없다. Temperature 가 낮으면 가장 유사한 Negative에 더 집중한다.
Representation Learning에 미치는 공동 효과
Positive alignment만 사용하면 모든 Sample을 같은 Vector로 보내는 Collapse가 가능하다. Negative separation만 강조하면 같은 의미의 Variation을 묶지 못한다. 좋은 Contrastive learning은 같은 Semantic의 View를 모으는 Alignment와 전체 Embedding을 충분히 펼치는 Uniformity의 균형을 만든다.
BYOL, SimSiam, DINO 같은 Non-contrastive 또는 Self-distillation 방식은 명시적인 Negative 없이도 Stop-gradient, Predictor, Centering과 Sharpening 등으로 Collapse를 막는다. 따라서 Negative가 Representation Learning의 유일한 해법은 아니지만, 어떤 Sample을 구분할지 직접 정의하는 강력한 수단이다.
면접 답변: Positive sample은 같은 의미로 가까워져야 하는 Pair이고, Negative sample은 구분되어 멀어져야 하는 Pair입니다. SimCLR에서는 같은 Image의 두 Augmentation이 Positive이고 다른 Image가 Negative이며, CLIP에서는 같은 Image-caption pair가 Positive입니다. Positive는 Model이 어떤 변화에 Invariant해야 하는지 정의하고, Negative는 Collapse를 막고 Embedding space의 구분력과 Uniformity를 만듭니다. Hard negative는 경계를 정교하게 하지만 실제로 같은 개념인 False negative를 밀어낼 수 있습니다. 결국 Positive와 Negative의 정의 자체가 Model이 보존하고 버릴 정보를 결정합니다.
26. PPO, DPO, GRPO의 학습 방식과 목적 비교
세 방법은 모두 Language Model의 Post-training에 사용되지만 필요한 Model과 Data, On/Offline 특성이 다르다.
PPO
PPO는 현재 Policy가 생성한 응답으로 Reward를 최대화하는 On-policy RL 알고리즘이다. Old policy와 New policy의 Probability ratio를 사용한다.
Clip은 한 Update에서 Policy가 너무 크게 바뀌는 것을 막는다. LLM RLHF에서는 Policy, Reference model, Reward model과 Advantage를 추정하는 Value/Critic model이 필요하다. 실제 Reward에는 Reference와의 KL penalty도 포함한다.
장점은 현재 Policy가 실제 생성한 답을 탐색하며 Sequence-level reward를 직접 최적화한다는 것이다. 단점은 Rollout 비용, 여러 Model의 Memory, Critic 학습과 높은 구현 복잡성이다.
DPO
DPO는 고정된 Preference dataset 에서 선택된 답의 상대 확률을 높인다.
KL-regularized RLHF의 최적 Policy와 Reward 사이 관계를 이용해 Reward Model과 RL loop를 Binary classification 형태로 대체한다. Offline data만으로 안정적이고 단순하지만 현재 Policy가 새 답을 탐색하지 않으며 Preference dataset의 Coverage와 품질에 크게 의존한다.
GRPO
GRPO는 PPO에서 별도의 Value model을 제거하고, 같은 Prompt에 대해 생성한 응답 Group의 Reward를 기준으로 상대 Advantage를 만든다.
Prompt 에서 개 응답 를 Sampling하고 Reward를 정규화한다.
그 뒤 PPO와 유사한 Clipped ratio와 KL regularization으로 각 응답의 Token probability를 업데이트한다. Critic memory를 줄이고 Verifiable reward가 있는 수학과 Code에 적합하다. 그러나 같은 Prompt에서 여러 응답을 생성해야 하며, Group reward가 모두 같으면 Advantage signal이 약해진다. Group-relative normalization은 Prompt별 난이도 차이를 상쇄하지만 Reward scale과 Batch 구성에 민감하다.
| 구분 | PPO | DPO | GRPO |
|---|---|---|---|
| 학습 형태 | On-policy RL | Offline preference optimization | On-policy Group-relative RL |
| Data | 현재 Policy rollout + Reward | 고정 chosen/rejected pair | Prompt별 여러 Rollout + Reward |
| Reward Model | 주로 필요 | 명시적으로 불필요 | Rule/RM 등 Reward 필요 |
| Critic | 필요 | 불필요 | 불필요 |
| 장점 | 탐색, 임의 Sequence reward | 단순, 안정, 저렴 | Critic Memory 절약, Reasoning에 적합 |
| 단점 | 비싸고 복잡 | Dataset coverage, Online exploration 없음 | 여러 Sampling 비용, Group signal 의존 |
더 자세한 수식은 DPO와 DeepSeek-R1에 대한 고찰과 PPO, GRPO에서 정리하였다.
면접 답변: PPO는 현재 Policy의 Rollout에 Reward와 Critic이 추정한 Advantage를 적용하고 Probability ratio를 Clipping하는 On-policy RL입니다. 탐색과 Sequence reward 최적화가 가능하지만 Policy, Reference, Reward, Value model이 필요해 비쌉니다. DPO는 고정된 Chosen-rejected pair에서 Reference 대비 선호 답의 Log probability를 직접 높여 Reward Model과 RL loop를 없앤 Offline 방법입니다. GRPO는 같은 Prompt에서 여러 답을 Sampling하고 Group reward의 평균과 표준편차로 Advantage를 만들어 PPO처럼 Update하므로 Critic이 필요 없습니다. 대신 Prompt별 여러 Rollout 비용과 Group reward 분산에 의존합니다.
27. Vision Transformer와 CNN의 구조적 차이, 장단점
CNN은 Local kernel을 Image 전체에 Sliding하며 Feature를 추출한다. Locality와 Translation equivariance가 구조에 내장되어 있다.
같은 Kernel을 모든 위치에서 공유하므로 Image resolution이 커져도 Parameter 수가 직접 늘지 않고, 가까운 Pixel 관계를 효율적으로 학습한다. Layer를 쌓을수록 Receptive field가 커져 Global context를 얻는다.
Vision Transformer는 Image를 Patch로 나누고 각 Patch를 Flatten해 Linear projection한다.
이 Token sequence를 일반 Transformer encoder에 넣고 Classification에는 CLS token 또는 평균 Pooling을 사용한다. Self-Attention 덕분에 첫 Layer부터 모든 Patch 사이의 관계를 직접 모델링할 수 있다.
구조적 차이
- CNN은 Local receptive field와 Weight sharing이 강한 Inductive bias다.
- ViT는 Patch token의 Global self-attention을 사용해 더 약한 Vision-specific bias를 가진다.
- CNN의 Spatial mixing은 Convolution, Channel mixing은 주로 Convolution/MLP가 담당한다.
- ViT의 Token mixing은 Attention, Channel mixing은 FFN이 담당한다.
- CNN compute는 대체로 Pixel 수에 선형적으로 증가하지만, Full ViT Attention은 Patch token 수에 이차로 증가한다.
ViT의 장점
Global context와 장거리 dependency를 초기 Layer부터 처리하고, Architecture가 Text와 Multimodal Transformer에 쉽게 통합된다. 대규모 Pre-training에서는 약한 Inductive bias가 Data로부터 더 유연한 표현을 학습하는 장점이 되고, Scaling 특성이 좋다. Attention map과 Token representation을 Detection, Segmentation, VLM에 재사용하기도 쉽다.
ViT의 단점
Data가 작으면 CNN의 Locality bias가 더 Sample-efficient할 수 있다. Patch size보다 작은 Detail이 Patch projection에서 손실될 수 있고, 고해상도에서는 Token 수 증가로 Attention 비용이 커진다. Absolute position embedding을 사용하면 다른 Resolution에 Interpolation이 필요하다.
Swin Transformer는 Local window와 Shifted window로 Hierarchical feature와 선형에 가까운 Image-size scaling을 도입했고, ConvNeXt는 CNN도 현대적 학습 recipe로 Transformer와 경쟁할 수 있음을 보여주었다. 따라서 비교는 “ViT가 CNN을 완전히 대체했다”보다 Data scale, Resolution, Latency와 Downstream 구조에 따른 선택 문제다.
면접 답변: CNN은 작은 Local kernel과 Weight sharing으로 Locality와 Translation equivariance가 내장되어 있어 적은 Data에서도 Sample-efficient합니다. ViT는 Image를 Patch token으로 만들고 Global self-attention과 FFN을 적용해 첫 Layer부터 장거리 관계를 모델링하며 대규모 Pre-training과 Multimodal 확장에 유리합니다. 반면 Vision-specific inductive bias가 약해 작은 Dataset에서 불리할 수 있고, 고해상도에서는 Patch 수에 대해 Attention 비용이 이차로 증가하며 작은 Detail을 놓칠 수 있습니다. Swin처럼 Local window를 쓰는 Hybrid 방향도 있습니다.
28. Decoder-only, Encoder-only, Encoder-Decoder Transformer 비교
Encoder-only
모든 Token이 서로를 볼 수 있는 Bidirectional self-attention을 사용한다. Input 전체의 Contextual representation을 만드는 데 집중한다. Pre-training은 Masked Language Modeling, Replaced token detection 등을 사용한다.
대표 모델은 BERT, RoBERTa, DeBERTa다. Text classification, NER, Extractive QA, Search embedding과 Reranking처럼 입력 이해와 표현 추출에 적합하다. Autoregressive decoder가 없으므로 자유로운 장문 생성의 기본 구조로는 부적합하다.
Decoder-only
Causal self-attention으로 이전 Token만 보고 다음 Token을 예측한다.
GPT, LLaMA, Qwen 계열이 대표적이다. Prompt와 Response를 하나의 Token stream으로 연결할 수 있어 Pre-training objective와 Generation 방식이 일치하고, In-context learning과 범용 Text generation에 유리하다. 반면 입력 전체를 양방향으로 Encoding하지 않으며 Token-by-token inference가 순차적이다.
Encoder-Decoder
Encoder는 Source sequence를 Bidirectional하게 Encoding하고, Decoder는 Target sequence에 Causal self-attention을 적용한다. Decoder의 Cross-Attention이 Encoder output 전체를 K와 V로 사용한다.
원래 Transformer, T5, BART가 대표적이다. 번역, 요약, 문서 기반 생성처럼 Input과 Output의 역할이 명확한 Sequence-to-sequence Task에 적합하다. Source는 한 번 Encoding하여 재사용할 수 있고, Decoder가 Source 전체를 직접 참고한다. 대신 Encoder와 Decoder 두 Stack을 관리해야 하고 범용 Causal LM보다 Architecture와 Serving이 복잡할 수 있다.
| 구조 | Attention | 강점 | 대표 Task/Model |
|---|---|---|---|
| Encoder-only | Bidirectional | 이해, Embedding | BERT, 분류, NER, Retrieval |
| Decoder-only | Causal | 생성, In-context learning | GPT/LLaMA, Chat, Code |
| Encoder-Decoder | Encoder 양방향 + Decoder Causal/Cross | 조건부 생성 | T5/BART, 번역, 요약 |
최근에는 Decoder-only가 하나의 Interface로 많은 Task를 통합해 가장 널리 보이지만, Low-latency embedding과 Classification에는 Encoder-only가 효율적이고, Source-target 구조가 명확한 Task에서는 Encoder-Decoder가 여전히 강한 선택이다.
면접 답변: Encoder-only는 Bidirectional Attention으로 입력 전체의 표현을 만들기 때문에 BERT처럼 분류, NER, Retrieval에 적합합니다. Decoder-only는 Causal Attention과 Next-token prediction을 사용해 GPT와 LLaMA처럼 생성, Chat, In-context learning에 적합합니다. Encoder-Decoder는 Source를 양방향 Encoding하고 Decoder가 Causal generation을 하면서 Cross-Attention으로 Source 전체를 참고하므로 T5, BART와 번역·요약에 적합합니다. 어느 구조가 항상 우월한 것이 아니라 입력 표현, 자유 생성, 조건부 생성 중 무엇이 중심인지에 따라 선택합니다.
29. Mixed Precision 학습과 Loss Scaling, BF16에서 일반적으로 필요하지 않은 이유
Mixed Precision training은 큰 Matrix multiplication과 Activation을 FP16 또는 BF16으로 계산해 Tensor Core throughput을 높이고 Memory와 통신량을 줄이면서, 수치적으로 민감한 연산과 Optimizer state는 FP32로 유지하는 방법이다.
대표적으로 다음을 혼합한다.
- GEMM, Convolution, Activation: FP16/BF16
- Reduction, Softmax의 일부, Normalization statistics: 필요에 따라 FP32 accumulation
- Adam first/second moment: 보통 FP32
- Parameter update: FP32 master weight를 사용하거나 BF16 parameter에 안정적으로 적용
FP16에서 Loss Scaling이 필요한 이유
FP16은 Exponent 5bit, Mantissa 10bit를 사용한다. 표현 가능한 최대값과 최소 Normal 값의 범위가 FP32보다 좁다. Backward에서 작은 Gradient가 FP16 범위 아래로 내려가면 0으로 Underflow한다.
Loss에 큰 Scale 를 곱하면 Gradient도 배 커진다.
Backward를 계산한 뒤 Optimizer step 전에 Gradient를 로 나누면 수학적으로 원래 Gradient와 같지만, 중간 Gradient가 FP16의 표현 범위 안에 남는다.
Static loss scaling은 고정 를 사용한다. Dynamic loss scaling은 Overflow가 없으면 Scale을 키우고 Inf/NaN이 발견되면 해당 Step을 건너뛰고 Scale을 줄인다. 너무 큰 Scale은 Overflow를 만들기 때문이다.
BF16에서 보통 Loss Scaling이 필요하지 않은 이유
BF16은 Exponent 8bit, Mantissa 7bit다. Mantissa precision은 FP16보다 낮지만 Exponent range가 FP32와 같아 매우 작은 Gradient와 큰 값을 표현할 수 있는 Dynamic range가 넓다. 따라서 FP16에서 주된 문제인 Gradient underflow를 피하기 위해 Loss를 확대할 필요가 일반적으로 없다.
| Format | Exponent | Mantissa | 특징 |
|---|---|---|---|
| FP32 | 8 | 23 | 넓은 범위와 높은 정밀도 |
| FP16 | 5 | 10 | 정밀도는 BF16보다 높지만 범위 좁음 |
| BF16 | 8 | 7 | FP32와 같은 범위, 정밀도 낮음 |
BF16이라고 모든 수치 문제가 사라지는 것은 아니다. 낮은 Mantissa 때문에 작은 Update가 큰 Parameter에 반영되지 않을 수 있고, Softmax와 Reduction은 FP32 accumulation이 필요할 수 있다. Loss scaling이 일반적으로 필요 없다는 뜻이지 FP32 state와 수치 안정성 처리가 불필요하다는 뜻은 아니다.
면접 답변: Mixed Precision은 GEMM과 Activation을 FP16/BF16으로 계산해 Tensor Core 속도와 Memory 효율을 얻고, Reduction이나 Adam state처럼 민감한 부분은 FP32로 유지합니다. FP16은 Exponent가 5bit라 작은 Gradient가 0으로 Underflow하기 쉽습니다. Loss에 를 곱해 Gradient를 표현 범위 안으로 키운 뒤 Update 전에 로 나누는 것이 Loss Scaling입니다. BF16은 Mantissa는 짧지만 Exponent가 FP32와 같은 8bit라 Dynamic range가 넓어 일반적으로 Loss Scaling이 필요하지 않습니다. 다만 FP32 accumulation과 Optimizer state는 여전히 중요합니다.
30. Data, Tensor, Pipeline Parallelism의 차이와 적용 사례
세 방법은 무엇을 복제하고 무엇을 나누는지가 다르다.
Data Parallelism
Model을 각 GPU에 복제하고 Data batch를 나눈다. 각 GPU가 Local gradient를 계산하고 All-Reduce한다.
구현이 단순하고 Model이 한 GPU에 들어갈 때 Throughput scaling이 좋다. 반면 Model state가 복제되고 Global batch가 커지며 Gradient 통신이 필요하다. DDP, ZeRO, FSDP가 이 축에 속한다. ZeRO/FSDP는 Data Parallel의 계산 의미를 유지하면서 State 복제를 줄인다.
Tensor Parallelism
한 Layer의 Tensor 연산을 여러 GPU에 나눈다. 예를 들어 Linear layer 에서 를 Column 방향으로 나누면 다음과 같다.
다음 연산 형태에 따라 All-Gather 또는 All-Reduce로 Partial result를 결합한다. Attention head, QKV projection, FFN의 Column/Row parallel을 조합하는 Megatron-LM이 대표적이다.
Layer weight와 계산을 나누므로 매우 넓은 Layer가 한 GPU에 들어가지 않는 문제를 해결하고, 모든 GPU가 동시에 같은 Layer를 계산해 Pipeline bubble이 없다. 반면 Transformer block마다 Collective가 자주 발생하므로 빠른 NVLink/NVSwitch 같은 Node 내부 Interconnect가 중요하다. TP degree가 너무 크면 GPU당 Matrix가 작아져 효율이 낮아진다.
Pipeline Parallelism
Layer를 연속된 Stage로 나누어 GPU마다 다른 구간을 둔다.
Mini-batch를 Micro-batch로 나누어 앞 Stage가 다음 Micro-batch를 계산하는 동안 뒤 Stage가 이전 Micro-batch를 처리한다. GPipe는 이런 Pipeline과 Activation recomputation을 사용한다.
Layer와 Activation을 Stage별로 나누어 깊은 Model을 여러 GPU/Node에 배치할 수 있고 Stage 사이에는 주로 Activation과 Gradient를 통신하므로 Node 간 연결에도 사용할 수 있다. 단점은 Pipeline fill과 drain 동안 GPU가 노는 Bubble, Stage별 연산량 불균형, Micro-batch schedule과 Activation 관리의 복잡성이다.
Pipeline efficiency는 대략 Micro-batch 수 이 Stage 수 보다 충분히 클수록 좋아진다. 단순 GPipe schedule의 Bubble fraction은 대략 형태로 줄어든다. 1F1B schedule은 Forward와 Backward를 교차해 Activation memory를 줄인다.
실제 대규모 학습의 조합
세 방법은 배타적이지 않다.
- Node 내부의 빠른 Link에는 Tensor Parallelism을 사용한다.
- 여러 Layer를 Node 또는 GPU group에 나누는 Pipeline Parallelism을 사용한다.
- 위 Model-parallel group 전체를 여러 개 복제해 Data Parallelism 또는 FSDP를 적용한다.
- 긴 Context는 Sequence/Context Parallelism을 추가한다.
이를 3D Parallelism 또는 더 넓게는 Multi-dimensional parallelism이라고 한다. 어떤 축을 얼마나 사용할지는 Model의 Layer width와 depth, Sequence length, GPU memory, Node topology, Network bandwidth와 Global batch 제약으로 결정한다.
| 방식 | 나누는 대상 | 장점 | 주요 통신/한계 |
|---|---|---|---|
| Data Parallel | Batch | 단순, Throughput scaling | Gradient All-Reduce, State 복제 |
| Tensor Parallel | Layer의 Matrix/Head | 넓은 Layer 분할, 동시 계산 | Layer마다 Collective, 빠른 Link 필요 |
| Pipeline Parallel | Layer/Stage | 깊은 Model 분할, Node 간 확장 | Bubble, Stage balance |
면접 답변: Data Parallelism은 Model을 복제하고 Batch를 나눈 뒤 Gradient를 All-Reduce하므로 Model이 한 GPU에 들어갈 때 Throughput 확장에 좋습니다. Tensor Parallelism은 한 Layer의 Weight matrix나 Attention head를 여러 GPU에 나누어 동시에 계산하므로 넓은 Layer를 분할할 수 있지만 Layer마다 Collective가 있어 빠른 GPU 간 연결이 필요합니다. Pipeline Parallelism은 Layer를 Stage로 나누고 Micro-batch를 흘려 깊은 Model을 배치하지만 Pipeline bubble과 Stage imbalance가 있습니다. 대규모 LLM은 보통 Node 내부 TP, Node 간 PP, 전체 Group 사이 DP/FSDP를 결합합니다.
마무리
30개의 질문은 서로 독립적으로 보이지만 실제로는 몇 개의 큰 축으로 연결된다.
첫 번째 축은 Objective와 학습 분포다. Cross-Entropy는 MLE로부터 나오고, Teacher Forcing은 그 Likelihood를 효율적으로 학습하게 하지만 Exposure bias를 만든다. SFT, DPO, PPO, GRPO, RLVR와 Distillation은 결국 어떤 데이터 분포에서 어떤 Reward와 Target을 줄 것인지의 차이다.
두 번째 축은 Representation과 Architecture다. Attention은 Token 사이의 정보를 섞고 FFN은 Token 내부 Feature를 변환한다. Positional Encoding은 순서를 주고, Residual과 Normalization은 깊은 Network를 학습 가능하게 만든다. CLIP 이후 Vision-Language model의 발전도 Global alignment에서 Fine-grained fusion, Generation과 Instruction following으로 Representation의 목적이 확장된 과정이다.
세 번째 축은 Memory, Compute와 Communication이다. FlashAttention, Gradient Checkpointing, KV Cache와 Mixed Precision은 같은 결과를 더 적은 Memory와 I/O로 계산하려는 방법이다. MoE, Speculative Decoding과 Sparse Attention은 활성 Compute 또는 순차 호출을 줄인다. DDP, FSDP, Tensor와 Pipeline Parallelism은 한 장치의 한계를 여러 장치의 Memory와 Compute로 옮기지만 통신이라는 새로운 비용을 만든다.
면접에서는 하나의 방법을 설명한 뒤 반드시 다음 질문을 스스로 던져보는 것이 좋다.
무엇을 줄였고, 대신 무엇이 늘어났는가? 정확한 결과를 유지하는가, 근사하는가? Training과 Inference 중 어디의 문제인가? 어떤 Hardware와 Data 조건에서 실제로 이득인가?
이 네 가지를 구분해서 답할 수 있다면 새로운 논문이나 시스템을 만나더라도 외운 이름이 아니라 원리로 설명할 수 있다.
아직도 면접이 끝나고 나서야 더 좋은 답이 떠오르는 경우가 많고, 이 글 안에도 내가 잘못 이해한 부분이 남아 있을 수 있다. 그래서 이 글은 “이 정도면 면접 준비가 끝났다”는 선언이라기보다, 적어도 내가 어디에서 막혔는지를 잊지 않기 위한 기록에 가깝다. 앞으로 또 떨어져서 새롭게 알게 되는 내용이 생긴다면 아마 31번째 질문이 조용히 추가될 것이다. 썩 유쾌한 업데이트 방식은 아니지만, 지금까지는 꽤 효과가 있었다.