Pretrained LM은 어떻게 '언어를 이해'하게 되었나
Context-independent한 고정 벡터의 한계부터 Bi-LSTM, 3단계 fine-tuning recipe, Transformer의 병렬 self-attention까지 — 사전학습 언어모델 진화의 핵심 흐름을 추적한다.
- 01 Pretrained LM은 어떻게 '언어를 이해'하게 되었나
- 02 BERT는 어떻게 언어를 '이해'하는가
- 03 GPT에서 LLaMA까지: Decoder-Only LLM의 설계 철학
- 04 T5는 왜 모든 NLP task를 text-to-text로 통일했는가
- 05 사전학습 모델을 어떻게 내 task에 맞게 바꾸는가
- 06 In-Context Learning은 어떻게 작동하는가
- 07 Instruction에서 Reasoning까지 — LLM은 어떻게 생각을 배우는가
“bank”라는 단어 하나에 단 하나의 벡터를 할당하면 어떤 일이 생기는가? Word2Vec과 GloVe는 그 질문을 수십 년간 회피했고, ELMo와 ULMFiT와 Transformer가 차례로 그 빚을 갚았다. 이 글은 그 상환 과정의 설계 결정들을 추적한다.
Static Embedding이 틀린 이유
Word2Vec의 objective는 단순하다. Corpus 전체의 co-occurrence 통계를 바탕으로 각 단어 에 고정 벡터 를 할당한다.
문제는 이 함수가 “bank”를 몇 번 보았든, 어떤 문장에서 등장했든 단 하나의 벡터로만 표현한다는 것이다.
Static embedding 에서 다의어 의 context-wise variance는 정의상 0이다. 따라서 “bank (river)“와 “bank (financial)“를 서로 다른 벡터로 분리할 수 없다.
Static embedding은 , 즉 모든 context 에서 동일한 벡터를 반환한다. Ideal representation이라면 이어야 하지만, 단일 벡터 는 두 sense의 통계적 평균 근방에 수렴한다. 결과적으로 nearest neighbors에 “river”와 “account”가 동시에 등장한다.
GloVe도 global co-occurrence matrix 를 least-squares로 분해하는 방식이라 동일한 한계를 갖는다. Objective 형태가 달라도 “하나의 단어 = 하나의 벡터”라는 전제가 유지되는 한 polysemy 분리는 불가능하다.
ELMo — 문맥이 벡터를 결정하다
ELMo (Peters et al., 2018)의 핵심 아이디어는 Language Model의 중간 hidden state를 embedding으로 사용한다는 것이다. Bi-LSTM을 forward/backward 방향으로 독립 학습한 뒤 각 layer의 출력을 가중합한다.
“The river bank was beautiful”에서의 bank와 “I opened a bank account”에서의 bank는 이제 서로 다른 를 가진다. LSTM이 각각 다른 left/right context를 보기 때문이다.
주목할 설계 결정이 두 가지다. 첫째, character-CNN으로 초기 임베딩을 구성해 OOV 단어도 형태론적 패턴으로 처리한다. “bankify”는 [b,a,n,k] 패턴을 공유하므로 “banking”과 유사한 초기 표현을 얻는다. 둘째, task별로 layer weight 을 학습한다. POS tagging은 lower layer를, semantic role labeling은 upper layer를 더 크게 활용한다 — 각 layer가 서로 다른 수준의 추상화를 표현하기 때문이다.
Bi-LSTM은 forward와 backward를 독립적으로 학습한 뒤 concatenate한다. Self-attention처럼 임의의 두 position이 직접 상호작용하지 않으므로, 학습이 sequential하고 병렬화가 어렵다. 또한 pretrained LM 전체가 frozen된 채로 downstream task에 embedding을 주입하는 feature-based transfer만 지원한다.
ULMFiT — Fine-tuning을 하나의 Recipe로
Howard & Ruder (2018)는 ELMo의 frozen 전략을 정면으로 거부했다. Pretrained LM의 파라미터를 downstream task에 맞게 직접 업데이트하는 3단계 fine-tuning recipe를 제안한다.
- General LM pretraining (Wikipedia)
- Target-domain LM fine-tuning (e.g., IMDb)
- Task classifier fine-tuning
여기서 catastrophic forgetting — 기존에 학습한 지식이 새 학습으로 덮어씌워지는 현상 — 을 막기 위해 두 가지 기법을 도입한다.
Discriminative Learning Rates: 각 layer 에 다른 학습률을 부여한다.
Lower layer는 일반적 언어 지식을 담고 있으므로 작은 LR로 천천히 조정하고, upper layer는 task-specific하므로 큰 LR로 빠르게 적응시킨다. 상수 2.6은 grid search의 경험적 결과다.
Gradual Unfreezing: Top layer부터 epoch마다 한 층씩 해동한다. Task signal이 먼저 상위 layer에 정착한 뒤 점진적으로 하위 layer까지 전파되므로, 하위 layer의 일반 지식이 과도한 noise에 노출되지 않는다.
Transformer — Sequential 처리의 구조적 한계를 끊다
ELMo와 ULMFiT는 LSTM이라는 공통 기반을 공유한다. 그리고 LSTM은 근본적으로 sequential하다. Position 의 hidden state 를 계산하려면 이 필요하므로 GPU 병렬화가 불가능하다.
더 심각한 문제는 gradient flow다. Position 1의 정보가 position 의 loss에 도달하려면 번의 chain rule을 통과해야 한다.
이고 LSTM gate의 gradient norm이 0.9라면 이 값은 수준으로 소실된다.
Vaswani et al. (2017)의 self-attention은 이 구조를 완전히 바꾼다.
Position 에서 position 로의 연결은 한 번의 행렬 곱셈으로 완성된다. Gradient chain 길이가 에서 상수로 줄고, 행렬 연산은 GPU에서 완전히 병렬화된다. Sequence length 기준으로 Transformer는 LSTM 대비 학습 속도가 수십 배 빠르다.
Transformer의 또 다른 결정은 causal mask다. Position 가 future position 를 볼 수 없도록 attention score에 를 채운다. 이 단순한 선택이 GPT 계열(decoder-only, autoregressive)과 BERT 계열(encoder-only, bidirectional)이라는 두 갈래를 만든다.
같은 self-attention block에서 mask 전략과 objective만 바뀌었을 뿐인데, 한쪽은 생성에 강하고 다른 쪽은 이해에 강한 모델이 탄생한다.
트레이드오프
이 네 세대 — Static embedding, ELMo, ULMFiT, Transformer — 는 각각 다른 제약 조건 아래서 작동한다.
Static embedding: lookup, polysemy 불가. ELMo: context-dependent하지만 sequential LSTM, feature-based만 지원. ULMFiT: full fine-tuning 가능, 하지만 3단계 recipe의 hyperparameter(2.6, warmup 비율) 가 domain마다 다를 수 있음. Transformer: memory — sequence가 길어질수록 attention matrix가 폭발한다. Sparse attention, RoPE, GQA 등이 이를 완화하지만 근본 복잡도는 유지된다.
한 가지 더: BERT(bidirectional)는 생성 task에 구조적으로 불리하다. Training 시 양방향을 모두 보도록 학습되었으므로, autoregressive generation을 위해 causal mask를 나중에 강제하면 distribution shift가 심각하다. 반대로 GPT는 분류 task에 사용할 수 있지만, bidirectional context를 단일 forward pass에서 온전히 활용하는 BERT만큼 효율적이지 않다.
정리
- Static embedding의 실패는 단어 수준이 아니라 문장 수준의 의미를 학습하지 못했기 때문이다.
- ELMo는 LM hidden state를 embedding으로 재활용함으로써 context-dependence를 얻었고, ULMFiT는 그 위에서 전체 네트워크를 fine-tuning할 수 있음을 보였다.
- Transformer는 sequential 처리를 병렬 self-attention으로 대체해 스케일의 문제를 열었다.
- BERT와 GPT는 같은 블록에서 masking 전략 하나의 차이로 분기한다 — 구조적 결정이 모델의 운명을 결정한다.
다음 글에서는 BERT의 내부 구조와 Masked Language Modeling objective가 어떻게 bidirectional representation을 만들어내는지 추적한다.