Transformer 완전 해부 — Encoder, Decoder, 그리고 LLM의 구조
“Attention Is All You Need”: 한 편의 논문이 바꾼 것
2017년, Google Brain과 Google Research 소속 연구자 8명이 NeurIPS(당시 NIPS)에 한 편의 논문을 발표했다. “Attention Is All You Need”1. 제목 그대로였다. 이 논문은 순환 구조도, 합성곱도 없이 어텐션(Attention) 메커니즘만으로 시퀀스를 처리하는 아키텍처를 제안했고, 그것이 바로 Transformer였다.
발표 당시 기계 번역 벤치마크에서 기존 최고 성능을 뛰어넘은 것에 그치지 않았다. 이후 등장한 BERT, GPT, T5, LLaMA — 현대 AI 언어 모델의 거의 전부가 이 아키텍처 위에 세워졌다. 2017년의 그 논문 하나가 자연어 처리의 판도를 완전히 뒤집었다고 해도 과언이 아니었다.
Transformer 이전의 세계: RNN과 LSTM의 한계
Transformer가 등장하기 전, 시퀀스 데이터를 다루는 표준 아키텍처는 RNN(Recurrent Neural Network)과 그 변형인 LSTM(Long Short-Term Memory)2이었다. 이들은 단어를 하나씩 순서대로 읽으며 이전 단어의 정보를 은닉 상태(hidden state)에 누적했다. 비유하자면, 한 사람이 긴 소설을 처음부터 한 글자씩 소리 내어 읽으면서, 읽은 내용을 머릿속에 요약해 나가는 방식이었다.
문제는 크게 두 가지였다.
첫째, 순차 처리였다. 단어를 하나씩 순서대로 처리해야 했기 때문에 병렬화가 불가능했다. 100명이 동시에 일할 수 있는 공장인데 컨베이어 벨트가 한 줄이라 한 명씩만 작업할 수 있는 상황과 같았다. GPU의 병렬 연산 능력을 제대로 활용할 수 없었고, 학습 속도가 느렸다.
둘째, 장거리 의존성(long-range dependency) 문제였다. 문장이 길어질수록 앞쪽 단어의 정보가 뒤쪽까지 전달되기 어려웠다. 전화기 없던 시절의 전언 게임과 비슷했다 — 첫 번째 사람이 한 말이 열 번째 사람에게 도달할 때쯤이면 원래 내용이 상당히 왜곡되어 있었다. LSTM이 이 문제를 완화하긴 했지만 근본적인 해결은 아니었다. 수백 토큰만 넘어가도 초기 정보는 희미해졌다.
Transformer는 이 두 가지 한계를 동시에 해결했다. 순서대로 읽는 대신, 시퀀스 전체를 한 번에 보며 각 위치 간의 관계를 직접 계산했다. 소설을 한 글자씩 읽는 대신, 페이지 전체를 한눈에 펼쳐놓고 어떤 단어가 어떤 단어와 관련 있는지를 한꺼번에 파악하는 방식이었다. 그 핵심이 바로 Self-Attention이었다.
Self-Attention: 핵심 메커니즘
Self-Attention의 아이디어는 단순했다. 시퀀스 내 모든 위치가 다른 모든 위치를 참조하여 “어디에 주목할지”를 스스로 결정하는 것이었다.
예를 들어 “나는 배가 아파서 병원에 갔다”라는 문장에서, “배”가 먹는 과일인지, 신체 부위인지, 타는 선박인지는 뒤에 오는 “아파서”와 “병원”을 봐야 알 수 있다. Self-Attention은 “배”라는 단어가 문장 내 다른 모든 단어를 살펴보고, “아파서”와 “병원”에 높은 가중치를 부여하여 스스로 문맥을 파악하는 메커니즘이었다. “배”라는 글자 하나만 보면 의미가 세 가지지만, 주변 단어들과의 관계를 보면 답은 하나로 좁혀진다. 사람이 문장을 읽을 때 무의식적으로 하는 이 과정 — 관련 있는 단어끼리 연결 짓는 것 — 을 수학적으로 구현한 셈이었다.
구체적인 계산 과정은 다음과 같았다.
Self-Attention 계산 단계
입력: X (시퀀스의 각 토큰 임베딩)
│
├─→ Q = X × W_Q (Query: "나는 무엇을 찾고 있는가?")
├─→ K = X × W_K (Key: "나는 어떤 정보를 갖고 있는가?")
└─→ V = X × W_V (Value: "내가 전달할 실제 정보")
│
│ Q, K, V를 도서관에 비유하면:
│ Q = 찾고 싶은 주제 (검색어)
│ K = 각 책의 제목/색인 (검색 대상)
│ V = 책의 실제 내용 (가져올 정보)
│
▼
Score = Q × K^T (Query와 Key의 내적 → 유사도 점수)
│
▼
Score / √d_k (스케일링 → 값이 너무 커지는 것을 방지)
│
▼
Softmax(Score) (확률 분포로 변환 → Attention Weight)
│
▼
Output = Attention Weight × V (가중합으로 최종 출력)
수식으로 표현하면 다음과 같았다.
Attention(Q, K, V) = softmax(QK^T / √d_k) V
여기서 d_k는 Key 벡터의 차원이었다. √d_k로 나누는 이유는 직관적이었다 — 벡터의 차원이 클수록 내적 값이 커지는데, 값이 너무 커지면 Softmax가 거의 0 아니면 1에 가까운 극단적인 분포를 만들어 학습이 불안정해지기 때문이었다.
이 계산의 시간 복잡도는 O(n²·d)였다3. n은 시퀀스 길이, d는 임베딩 차원이다. 모든 토큰 쌍의 유사도를 계산하기 때문에 시퀀스 길이에 대해 이차(quadratic) 복잡도를 가졌다. 문장이 1,000 토큰이면 1,000 × 1,000 = 100만 번의 비교가 필요하고, 10,000 토큰이면 1억 번이 필요했다. 이것이 긴 시퀀스를 처리할 때 Transformer의 병목이 되는 지점이었다.
| 단계 | 연산 | 의미 |
|---|---|---|
| 1. 선형 변환 | Q, K, V = XW_Q, XW_K, XW_V | 입력을 세 가지 역할로 분리 |
| 2. 유사도 계산 | Score = QK^T | 각 토큰 쌍의 관련도 측정 |
| 3. 스케일링 | Score / √d_k | Softmax 안정화 |
| 4. 정규화 | Softmax(Score) | 확률 분포 변환 |
| 5. 가중합 | Output = Weight × V | 중요한 정보에 집중한 표현 생성 |
Multi-Head Attention과 Positional Encoding
Self-Attention 하나만으로는 부족했다. 단일 어텐션은 하나의 관점에서만 관계를 포착했기 때문이었다. Transformer는 이를 확장하여 Multi-Head Attention을 도입했다.
Multi-Head Attention은 동일한 Self-Attention을 여러 “헤드”(head)에서 병렬로 수행한 뒤 결과를 합치는 방식이었다. 원 논문에서는 8개의 헤드를 사용했다. 하나의 문장을 8명의 분석가가 각자 다른 관점에서 동시에 읽는 것과 비슷했다. 한 분석가는 “누가 누구에게 했는가”(문법적 관계)에 집중하고, 다른 분석가는 “이 단어가 어떤 감정인가”(의미적 관계)에 집중하는 식이었다. 이 8가지 분석 결과를 합치면 단일 관점보다 훨씬 풍부한 이해가 가능했다.
한편 Transformer는 순환 구조를 제거했기 때문에 토큰의 위치 정보를 별도로 주입해야 했다. RNN은 단어를 순서대로 읽었기 때문에 “첫 번째 단어”, “두 번째 단어”라는 순서가 자연스럽게 내장되어 있었지만, Transformer는 모든 단어를 동시에 보기 때문에 “나는 밥을 먹었다”와 “밥을 나는 먹었다”를 구분할 수 없었다. 이것이 Positional Encoding이었다. 원 논문에서는 사인(sin)과 코사인(cos) 함수를 사용한 고정 위치 인코딩을 사용했다. 이후 BERT는 학습 가능한 위치 임베딩을, GPT 계열과 LLaMA는 RoPE(Rotary Position Embedding)4를 채택하는 등 다양한 변형이 등장했다.
Encoder: 입력을 이해하는 구조
Transformer의 Encoder는 입력 시퀀스 전체를 읽고 각 토큰의 문맥적 표현(contextual representation)을 생성하는 구조였다. 원 논문에서는 6개의 동일한 레이어를 쌓았고, 각 레이어는 두 개의 하위 구성 요소로 이루어졌다.
- Multi-Head Self-Attention — 모든 토큰이 다른 모든 토큰을 참조 (양방향)
- Feed-Forward Network(FFN) — 각 위치에 독립적으로 적용되는 2층 신경망
각 하위 구성 요소에는 잔차 연결(residual connection)과 레이어 정규화(layer normalization)가 적용되었다. 잔차 연결은 각 레이어의 입력을 출력에 더해주는 단순한 기법인데, 이것이 없으면 레이어를 깊게 쌓을수록 학습 신호가 사라지는 문제(기울기 소실)가 발생했다. 원본 정보를 “지름길”로 전달하여 수십 개의 레이어를 안정적으로 학습할 수 있게 만든 것이었다.
핵심은 양방향(bidirectional) 어텐션이었다. Encoder의 Self-Attention에서는 모든 토큰이 시퀀스 내 모든 위치를 자유롭게 참조할 수 있었다. “The cat sat on the mat”이라는 문장에서 “sat”은 앞의 “cat”과 뒤의 “mat” 모두를 동시에 볼 수 있었다. 이 양방향 문맥 이해가 Encoder의 강점이었다.
Decoder: 출력을 생성하는 구조
Decoder는 출력 시퀀스를 한 토큰씩 자기회귀적(autoregressive)으로 생성하는 구조였다. “자기회귀적”이라는 말은 자신이 방금 생성한 출력을 다음 입력으로 사용한다는 뜻이었다. “오늘” → “날씨가” → “좋다”처럼, 이전에 쓴 단어들을 보고 다음 단어를 결정하는 방식이었다. Encoder와 마찬가지로 6개 레이어를 쌓았지만, 각 레이어에는 세 개의 하위 구성 요소가 있었다.
- Masked Multi-Head Self-Attention — 미래 토큰을 볼 수 없도록 마스킹
- Cross-Attention — Encoder 출력을 참조 (Encoder-Decoder 구조에서만)
- Feed-Forward Network
마스킹이 Decoder의 핵심 차이였다. 텍스트를 생성할 때 아직 생성하지 않은 미래 토큰을 참조하면 “정답을 베끼는” 것과 같았기 때문에, 현재 위치 이후의 토큰에 대한 어텐션을 -∞로 마스킹하여 차단했다. 이를 인과적 마스킹(causal masking)이라 불렀다. 시험 문제를 풀 때 다음 문제의 답을 미리 볼 수 없도록 가림판을 세우는 것과 같았다. 모델이 “다음 단어를 예측하는 능력”을 제대로 학습하려면 미래 정보를 차단해야 했다.
| 구분 | Encoder | Decoder |
|---|---|---|
| 어텐션 방향 | 양방향 (전체 참조) | 단방향 (과거만 참조) |
| 마스킹 | 없음 | 인과적 마스킹 적용 |
| 주요 목적 | 입력 이해·표현 | 출력 생성 |
| Cross-Attention | 없음 | Encoder 출력 참조 (원 구조) |
| 대표 용도 | 분류, 유사도 측정 | 번역, 텍스트 생성 |
세 가지 아키텍처 변형
원 Transformer 이후, 연구자들은 Encoder와 Decoder를 선택적으로 사용하여 세 가지 변형을 만들어냈다.
| 구분 | Encoder-only | Decoder-only | Encoder-Decoder |
|---|---|---|---|
| 대표 모델 | BERT, RoBERTa, ELECTRA | GPT 시리즈, LLaMA, Claude | T5, BART, mT5 |
| 어텐션 방향 | 양방향 | 단방향 (인과적) | Encoder 양방향 + Decoder 단방향 |
| 주요 용도 | 텍스트 분류, NER, 유사도 | 텍스트 생성, 대화, 코드 | 번역, 요약, 질의응답 |
| 장점 | 깊은 문맥 이해 | 범용 생성, 스케일링 용이 | 입력-출력 구조가 명확 |
| 단점 | 생성 능력 제한적 | 입력 이해가 상대적으로 약함 | 구조 복잡, 파라미터 2배 |
| 학습 방식 | MLM(Masked Language Model) | 다음 토큰 예측(NTP) | Span corruption 등 |
Encoder-only 모델의 대표격인 BERT5는 2018년 Google이 발표했다. 입력 텍스트의 일부를 마스킹하고 이를 예측하는 방식(MLM)으로 학습했다. “오늘 [MASK]가 좋다”에서 빈칸에 들어갈 단어를 맞추는 빈칸 채우기 문제를 대규모로 푼 셈이었다. 양방향 문맥을 완전히 활용할 수 있어 텍스트 분류, 개체명 인식 등 이해(understanding) 과제에서 뛰어난 성능을 보였다.
Decoder-only 모델은 OpenAI의 GPT 시리즈6가 대표적이었다. 주어진 토큰들로부터 다음 토큰을 예측하는 단순한 목표로 학습했다. “오늘 날씨가”까지 읽고 다음에 올 단어를 예측하는 것이었다. BERT가 빈칸 채우기라면 GPT는 문장 이어쓰기에 가까웠다. 이 단순함이 오히려 강점이 되었다 — 뒤에서 자세히 다룬다.
Encoder-Decoder 모델은 Google의 T57가 대표적이었다. 모든 NLP 과제를 “텍스트를 입력받아 텍스트를 출력하는” 형태로 통일했다. 번역, 요약, 질의응답 등 입력과 출력이 모두 시퀀스인 과제에 자연스러웠다.
모델 계보
| 모델 | 구조 | 파라미터 | 출시 연도 | 특징 |
|---|---|---|---|---|
| Transformer | Encoder-Decoder | 65M | 2017 | 원 논문, 기계 번역 |
| GPT-1 | Decoder-only | 117M | 2018 | 생성적 사전학습의 시작 |
| BERT | Encoder-only | 340M(Large) | 2018 | 양방향 사전학습, MLM |
| GPT-2 | Decoder-only | 1.5B | 2019 | ”너무 위험해서 공개 못 함” |
| T5 | Encoder-Decoder | 11B(XXL) | 2019 | 모든 과제를 텍스트로 통일 |
| GPT-3 | Decoder-only | 175B | 2020 | Few-shot 학습, 스케일링 |
| LLaMA 1 | Decoder-only | 7B–65B | 2023 | 오픈소스 LLM의 시작 |
| GPT-4 | Decoder-only(MoE 추정) | ~1.76T(추정) | 2023 | 멀티모달, MoE 구조 추정 |
| LLaMA 2 | Decoder-only | 7B–70B | 2023 | RLHF 적용, 상용 라이선스 |
| Mixtral 8x7B | Decoder-only(MoE) | 46.7B(활성 12.9B) | 2023 | 오픈소스 MoE |
| LLaMA 3 | Decoder-only | 8B–70B | 2024 | 15T 토큰 학습 |
| LLaMA 3.1 | Decoder-only | 8B–405B | 2024 | 128K 컨텍스트, 최초 오픈소스 프론티어 |
왜 Decoder-only가 승리했는가
2024–2025년 기준, 주요 LLM은 거의 모두 Decoder-only 아키텍처를 채택했다. GPT-4, Claude, LLaMA, Gemini, Mistral — 모두 Decoder-only였다. 그 이유는 여러 가지였다.
첫째, 학습 목표의 단순함이었다. Decoder-only 모델은 “다음 토큰 예측”(Next Token Prediction)이라는 하나의 목표만 가졌다. 이 단순한 목표가 언어의 모든 측면 — 문법, 의미, 추론, 세계 지식 — 을 학습하기에 놀랍도록 효과적이었다.
둘째, 스케일링 효율성이었다. Encoder-Decoder 구조에서는 같은 파라미터 수를 Encoder와 Decoder에 나누어 할당해야 했다. 동일한 총 파라미터에서 Decoder-only가 생성 능력에 더 많은 용량을 집중할 수 있었다.
셋째, 범용성이었다. 이해 과제든 생성 과제든, 프롬프트를 적절히 설계하면 Decoder-only 모델 하나로 처리할 수 있었다. BERT는 텍스트 분류에 특화되어 있었지만, GPT 계열은 분류도, 번역도, 요약도, 코드 생성도 모두 “다음에 올 텍스트를 생성하는” 방식으로 처리했다.
넷째, In-context Learning의 발견이었다. GPT-3에서 발견된 이 능력8은 Decoder-only 아키텍처의 결정적 강점이었다. 별도의 미세조정 없이 프롬프트에 예시를 넣는 것만으로 새로운 과제를 수행할 수 있었다. 이것은 “다음 토큰 예측”이라는 학습 목표와 자연스럽게 연결되었다.
Scaling Laws와 LLM의 탄생
Transformer 아키텍처가 있다고 해서 자동으로 강력한 AI가 탄생한 것은 아니었다. 결정적인 발견은 스케일링 법칙(Scaling Laws)이었다.
2020년, OpenAI의 Kaplan 등은 언어 모델의 성능이 모델 크기, 데이터 양, 연산량의 멱법칙(power law)을 따라 예측 가능하게 향상된다는 것을 보였다9. 멱법칙이란, 투입을 10배로 늘렸을 때 성능이 일정한 비율로 향상되는 패턴을 말한다. 핵심은 “예측 가능”하다는 것이었다 — 모델을 얼마나 크게 만들면 어느 정도 성능이 나올지 미리 추정할 수 있었다. 더 크게 만들면 더 좋아진다는 것이 수학적으로 확인된 셈이었다.
2022년에는 DeepMind의 Hoffmann 등이 “Chinchilla” 논문10에서 이를 보정했다. 기존 모델들이 파라미터 수에 비해 학습 데이터가 부족하다는 것을 보이며, 70B 파라미터 모델에는 약 1.4T 토큰의 데이터가 필요하다고 제안했다. 이 발견은 이후 LLaMA를 비롯한 효율적 LLM 설계에 큰 영향을 미쳤다.
스케일링 법칙의 핵심 메시지는 명확했다. 아키텍처를 복잡하게 설계하는 것보다, 단순한 아키텍처를 크게 키우는 것이 더 효과적이었다. 그리고 “단순하게 키우기” 가장 쉬운 구조가 바로 Decoder-only Transformer였다.
현재와 미래: MoE, SSM, 긴 컨텍스트
Transformer가 지배적 아키텍처로 자리잡았지만, 그 한계를 극복하려는 시도도 활발했다.
Mixture of Experts(MoE)는 모델의 전체 파라미터 중 일부만 활성화하여 연산 효율을 높이는 기법이었다. 종합병원에 100명의 전문의가 있지만 환자 한 명을 볼 때는 관련 과의 2–3명만 진료하는 것과 비슷했다. 전체 지식은 방대하지만 매번 전부를 동원하지는 않는 것이었다. GPT-4가 MoE 구조를 사용한 것으로 추정되었고, Mistral의 Mixtral 8x7B11는 총 46.7B 파라미터 중 추론 시 12.9B만 활성화하여 7B 모델 수준의 연산량으로 훨씬 높은 성능을 달성했다.
State Space Models(SSM)는 Transformer의 O(n²) 어텐션 복잡도를 근본적으로 우회하려는 시도였다. Transformer가 모든 단어 쌍을 일일이 비교하는 “전수조사” 방식이라면, SSM은 시퀀스를 흘러가는 신호로 보고 상태를 효율적으로 갱신하는 “요약 방식”에 가까웠다. 특히 Mamba12는 선택적 SSM(Selective State Space Model)을 제안하여 시퀀스 길이에 대해 선형(O(n)) 복잡도로 처리하면서도 Transformer에 근접한 성능을 보였다. MoE와 SSM을 결합한 MoE-Mamba 같은 하이브리드 아키텍처도 등장했다.
긴 컨텍스트 처리 역시 주요 연구 방향이었다. LLaMA 3.1은 128K 토큰, Claude는 200K 토큰, Gemini는 100만 토큰 이상의 컨텍스트 윈도우를 지원했다. Ring Attention, 희소 어텐션(Sparse Attention) 등 O(n²) 복잡도를 실질적으로 낮추는 기법들이 적용되었다.
Transformer가 곧 대체될 것이라는 전망도 있었지만, 현실은 달랐다. SSM과 Transformer를 혼합한 하이브리드 아키텍처가 더 유력한 방향으로 보였고, Transformer 자체의 효율성을 개선하는 연구도 계속되었다. 핵심 원리인 어텐션 메커니즘은 어떤 형태로든 살아남을 가능성이 높았다.
개인적인 생각
Transformer를 공부하면서 가장 인상적이었던 것은 아키텍처 자체의 “단순함”이었다. Self-Attention, Feed-Forward Network, 잔차 연결, 레이어 정규화 — 개별 구성 요소는 이미 존재하던 것들이었다. Vaswani 등이 한 것은 이들을 RNN 없이 조합한 것이었다. 그 조합이 이렇게까지 강력할 줄은 아무도 예상하지 못했다.
또 하나 흥미로운 점은, “좋은 아키텍처”의 정의가 시대에 따라 변했다는 것이었다. 2018년에는 양방향 문맥을 이해하는 BERT가 혁명이었다. 2020년 이후에는 단방향이지만 거대하게 스케일링한 GPT-3가 판도를 뒤집었다. 아키텍처의 정교함보다 스케일이 승리한 것이었다.
앞으로 Transformer가 어떤 형태로 진화할지는 알 수 없다. 하지만 한 가지는 확실했다 — 2017년의 그 논문이 제안한 “어텐션만으로 충분하다”는 직관은, 7년이 넘게 지난 지금도 여전히 유효했다.
Footnotes
-
Vaswani, A., Shazeer, N., Parmar, N., Uszkoreit, J., Jones, L., Gomez, A. N., Kaiser, Ł., & Polosukhin, I. (2017). Attention Is All You Need. Advances in Neural Information Processing Systems 30 (NeurIPS 2017). https://arxiv.org/abs/1706.03762 ↩
-
Hochreiter, S., & Schmidhuber, J. (1997). Long Short-Term Memory. Neural Computation, 9(8), 1735–1780. ↩
-
시퀀스 길이 n에 대해 모든 토큰 쌍의 내적을 계산하므로 O(n²·d)의 시간 복잡도를 가진다. 원 논문 Section 3.5 참조. ↩
-
Su, J., Lu, Y., Pan, S., Murtadha, A., Wen, B., & Liu, Y. (2021). RoFormer: Enhanced Transformer with Rotary Position Embedding. https://arxiv.org/abs/2104.09864 ↩
-
Devlin, J., Chang, M.-W., Lee, K., & Toutanova, K. (2018). BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding. https://arxiv.org/abs/1810.04805 ↩
-
Radford, A., Narasimhan, K., Salimans, T., & Sutskever, I. (2018). Improving Language Understanding by Generative Pre-Training. OpenAI. https://cdn.openai.com/research-covers/language-unsupervised/language_understanding_paper.pdf ↩
-
Raffel, C., Shazeer, N., Roberts, A., Lee, K., Narang, S., Matena, M., Zhou, Y., Li, W., & Liu, P. J. (2020). Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer. JMLR, 21(140), 1–67. https://arxiv.org/abs/1910.10683 ↩
-
Brown, T. B., Mann, B., Ryder, N., Subbiah, M., et al. (2020). Language Models are Few-Shot Learners. NeurIPS 2020. https://arxiv.org/abs/2005.14165 ↩
-
Kaplan, J., McCandlish, S., Henighan, T., Brown, T. B., Chess, B., Child, R., Gray, S., Radford, A., Wu, J., & Amodei, D. (2020). Scaling Laws for Neural Language Models. https://arxiv.org/abs/2001.08361 ↩
-
Hoffmann, J., Borgeaud, S., Mensch, A., Buchatskaya, E., et al. (2022). Training Compute-Optimal Large Language Models. https://arxiv.org/abs/2203.15556 ↩
-
Jiang, A. Q., Sablayrolles, A., Roux, A., et al. (2024). Mixtral of Experts. https://arxiv.org/abs/2401.04088 ↩
-
Gu, A., & Dao, T. (2023). Mamba: Linear-Time Sequence Modeling with Selective State Spaces. https://arxiv.org/abs/2312.00752 ↩
댓글