> ## Documentation Index
> Fetch the complete documentation index at: https://docs.sifi.life/llms.txt
> Use this file to discover all available pages before exploring further.

# Transformer 아키텍처

> 이 문서는 **[GenAI 개념](/blog/guides/genai-concepts/overview)** 섹션의 일부입니다.

[\< LLM 기초 목차로 돌아가기](overview)

***

2017년 Google의 "Attention Is All You Need" 논문에서 소개된 Transformer는 모든 현대 LLM의 기반 아키텍처입니다. Transformer가 왜 혁신적인지 이해하려면, 이전 NLP 기술들의 발전 과정을 아는 것이 중요합니다. 자세한 내용은 [NLP에서 LLM까지: 발전사](../nlp-evolution/README)를 참고하세요.

## 왜 Transformer가 혁신적인가?

Transformer 이전에는 RNN(순환 신경망)이 텍스트를 순차적으로 처리했습니다. "나는 오늘 회사에서 점심을 먹었다"라는 문장을 처리할 때 RNN은 "나는" → "오늘" → "회사에서" → ... 순서대로 읽어야 했습니다. 이 방식에는 두 가지 치명적 문제가 있었습니다:

1. **병렬 처리 불가**: 단어를 하나씩 순서대로 처리해야 해서 학습이 느림
2. **장거리 의존성 문제**: 문장이 길어지면 앞부분의 정보를 "잊어버림"

> **성공**
> **비유**: RNN은 책을 한 글자씩 읽으면서 앞 내용을 점점 잊어가는 독자와 같습니다. Transformer는 책 전체를 펼쳐놓고 어떤 부분이든 즉시 참조할 수 있는 독자입니다.

## Self-Attention: Transformer의 핵심 엔진

Self-Attention은 **"이 단어가 문장 내 다른 모든 단어와 얼마나 관련 있는지"** 를 수치로 계산하는 메커니즘입니다.

예를 들어, "그 개발자는 코드를 작성했고, **그는** 매우 만족했다"라는 문장에서 Self-Attention은 "그는"이 "개발자"와 높은 관련도를 가진다는 것을 계산합니다. 이를 통해 대명사, 문맥적 의미, 장거리 참조를 정확히 파악합니다.

**동작 과정 (직관적 설명)**:

1. 각 토큰은 세 가지 벡터를 생성: **Query**(질문), **Key**(열쇠), **Value**(값)
2. Query와 Key의 유사도를 계산 → Attention Score (어떤 단어에 주목할지)
3. Score에 따라 Value를 가중 합산 → 문맥을 반영한 새로운 표현 생성

| 구성 요소                | 역할     | 설명                                              |
| -------------------- | ------ | ----------------------------------------------- |
| Self-Attention       | 문맥 파악  | 입력 토큰 간 관계를 계산                                  |
| Multi-Head Attention | 다양한 관점 | 여러 Attention을 병렬 수행 (문법, 의미, 참조 등 각각 다른 패턴 학습)  |
| Feed-Forward Network | 변환     | 각 위치의 표현을 비선형 변환                                |
| Positional Encoding  | 순서 정보  | 토큰의 위치 정보를 부여 (Transformer는 순서를 모르므로 명시적 추가 필요) |
| Layer Normalization  | 안정화    | 학습 안정성을 위한 정규화                                  |

## Multi-Head Attention 심화: 왜 여러 개의 Head가 필요한가?

위 표에서 Multi-Head Attention이 "여러 Attention을 병렬 수행"한다고 설명했습니다. 그런데 **왜** 여러 개가 필요할까요? 하나의 Attention으로는 부족한 걸까요?

20년간 AI 시스템을 구축하면서 깨달은 직관이 있습니다: **언어에는 동시에 존재하는 여러 겹의 관계가 있습니다.** 하나의 Attention Head는 한 번에 한 종류의 관계만 잘 포착합니다.

**각 Head가 학습하는 패턴 예시**(GPT 계열 모델의 실제 분석 결과):

| Head   | 학습하는 패턴                 | 예시                                                 |
| ------ | ----------------------- | -------------------------------------------------- |
| Head 1 | **문법적 관계**(주어-동사)       | "개발자\*\* 가**코드** 를**작성** 했다\*\*" → 주어-동사 연결        |
| Head 2 | **의미적 유사성**             | "Python은 AI에 적합한 **언어** 다" → "언어"와 "Python"의 의미 연결 |
| Head 3 | **대명사 참조**(Coreference) | "김 부장은 보고서를 작성했고, **그는** 만족했다" → "그"→"김 부장"        |
| Head 4 | **인접 토큰 관계**            | 바로 옆 단어와의 관계 (구문 분석)                               |
| Head 5 | **장거리 의존성**             | 문장 시작과 끝의 논리적 연결                                   |
| Head 6 | **구분자/구조 패턴**           | 괄호, 따옴표, 목록 구조 인식                                  |

**사고 실험: "만약 Head가 1개라면?"**

"김 대리는 어제 서버 장애를 해결했고, 그의 팀장은 그를 칭찬했다"라는 문장을 처리한다고 가정합시다.

* **문법 관계**: "팀장은" → "칭찬했다" (주어-동사)
* **대명사 해석**: "그의" → "김 대리의", "그를" → "김 대리를"
* **시간 관계**: "어제" → "해결했고" / "칭찬했다"
* **인과 관계**: "해결했고" → "칭찬했다" (원인-결과)

Head가 1개라면, 이 4가지 관계를 **하나의 Attention Score로 동시에 표현** 해야 합니다. 이는 마치 한 장의 사진으로 빛의 색상, 밝기, 깊이를 모두 표현하려는 것과 같습니다. Multi-Head는 각각의 관계를 **독립적인 채널** 에서 포착한 뒤 합성합니다.

> **참고**
> **실무 인사이트**: GPT-4 계열 모델은 약 96\~128개의 Head를 사용합니다. Head 수를 줄이면 모델이 작아지고 빨라지지만, 복잡한 문장에서의 이해력이 떨어집니다. 이것이 소형 모델이 "간단한 질문은 잘 답하지만 복잡한 문맥에서 실수"하는 핵심 원인 중 하나입니다.

## Positional Encoding 심화: 왜 위치 정보가 필요한가?

RNN은 단어를 순서대로 처리하므로 **위치 정보가 자연스럽게 내재** 되어 있습니다. "나는 밥을 먹었다"에서 "나는"이 첫 번째, "밥을"이 두 번째라는 것을 처리 순서 자체가 알려줍니다.

그러나 Transformer의 Self-Attention은 **모든 토큰을 동시에 병렬 처리** 합니다. 이 말은 "나는 밥을 먹었다"와 "먹었다 밥을 나는"이 Attention 계산에서 **동일한 결과** 를 낸다는 뜻입니다. 순서가 사라지는 것이죠. 따라서 위치 정보를 **명시적으로 주입** 해야 합니다.

**Positional Encoding 방식 비교**:

| 방식                 | 사용 모델                    | 원리                            | 장점                      | 단점                       |
| ------------------ | ------------------------ | ----------------------------- | ----------------------- | ------------------------ |
| **Sinusoidal**(고정) | 원래 Transformer (2017)    | sin/cos 함수로 위치별 고유 벡터 생성      | 학습 불필요, 이론적으로 무한 길이 일반화 | 실제로는 긴 시퀀스에서 성능 저하       |
| **Learned**(학습)    | BERT, GPT-2              | 위치별 벡터를 학습 파라미터로 설정           | 데이터에 최적화된 위치 표현         | 학습 시 본 최대 길이를 초과하면 작동 불가 |
| **RoPE**(Rotary)   | Llama, Mistral, GPT-NeoX | 토큰 임베딩을 위치에 따라 "회전"           | 상대적 위치 인코딩, 긴 컨텍스트에 유리  | 구현 복잡도 약간 높음             |
| **ALiBi**          | BLOOM, MPT               | Attention Score에 위치 기반 패널티 추가 | 추가 파라미터 없음, 길이 일반화 우수   | RoPE 대비 채택률 낮음           |

**RoPE가 긴 컨텍스트에 필수인 이유**:

현대 LLM의 128K\~1M 토큰 컨텍스트 윈도우를 가능하게 한 핵심 기술이 RoPE입니다. RoPE는 **절대 위치가 아닌 상대적 위치** 를 인코딩합니다. "3번째 토큰"이 아니라 "두 토큰 앞에 있는 것"으로 관계를 표현합니다.

이것이 왜 중요할까요? Learned Positional Encoding으로 학습된 모델은 학습 시 본 최대 길이(예: 2048 토큰)를 넘어서면 위치 정보가 없어서 성능이 급격히 떨어집니다. 반면 RoPE는 **상대적 거리만 중요하므로**, 학습 시 보지 못한 더 긴 시퀀스에서도 위치 관계를 합리적으로 추론할 수 있습니다. Llama 모델이 8K로 학습한 후 RoPE 스케일링으로 128K까지 확장한 것이 대표적 사례입니다.

## Encoder vs Decoder 구조: 왜 GPT는 Decoder-only인가?

원래 Transformer 논문(2017)은 **Encoder-Decoder** 구조를 제안했습니다. 하지만 현재 대부분의 LLM은 **Decoder-only** 구조를 사용합니다. 이 차이를 이해하면 모델 선택에 큰 도움이 됩니다.

**세 가지 구조 비교**:

| 구조                  | 대표 모델                    | Attention 방식                             | 최적 용도            |
| ------------------- | ------------------------ | ---------------------------------------- | ---------------- |
| **Encoder-only**    | BERT, RoBERTa            | 양방향 (전체 문맥 참조)                           | 분류, 감성분석, 유사도 계산 |
| **Decoder-only**    | GPT, Llama, Claude       | 단방향 (왼쪽→오른쪽, 미래 토큰 차단)                   | 텍스트 생성, 대화, 범용   |
| **Encoder-Decoder** | T5, BART, 원래 Transformer | Encoder=양방향, Decoder=단방향+Cross-Attention | 번역, 요약, 입력→출력 변환 |

**Masked Self-Attention의 원리 (Decoder)**:

Decoder에서는 텍스트를 왼쪽에서 오른쪽으로 생성합니다. "나는 오늘 점심을"이라는 텍스트를 생성 중이라면, "점심을" 다음 토큰을 예측할 때 **아직 생성하지 않은 미래 토큰을 볼 수 없어야** 합니다. 이것이 **Masked Self-Attention** 입니다.

학습 시에는 정답 전체 문장이 주어지지만, 미래 토큰 위치의 Attention Score를 **-무한대(마스킹)** 로 설정하여 정보가 흐르지 않게 합니다. 이렇게 하면 학습과 추론의 동작이 일관되면서도, 학습 시에는 모든 위치를 **병렬로** 처리할 수 있습니다.

**Cross-Attention (Encoder-Decoder 모델)**:

번역 모델처럼 입력과 출력이 다른 구조(예: 영어→한국어)에서는 Decoder가 Encoder의 출력을 참조해야 합니다. 이때 **Cross-Attention** 이 사용됩니다. Decoder의 Query가 Encoder의 Key-Value를 참조하는 방식입니다.

**"왜 GPT는 Decoder-only인가?"에 대한 직관적 설명**:

GPT의 핵심 목표는 **"다음 토큰 예측"** 입니다. 이 과제는 본질적으로 단방향입니다 — 이전 토큰들을 보고 다음을 예측하는 것이지, 미래 토큰을 보고 예측하는 것이 아닙니다. Decoder-only 구조는 이 과제에 **가장 자연스러운 아키텍처** 입니다.

반면 BERT의 목표는 **"빈칸 채우기(Masked Language Modeling)"** 입니다. "나는 \[MASK] 먹었다"에서 \[MASK]를 예측할 때 "나는"도, "먹었다"도 참조해야 합니다. 따라서 양방향 Attention이 필요하고, Encoder-only 구조가 적합합니다.

> **주의**
> **실무 모델 선택 가이드**: 텍스트 분류, 감성 분석, 유사도 계산에는 BERT 계열(Encoder-only)이 더 효율적이고 저렴합니다. "모든 것을 GPT-4로" 접근하지 마세요. 단순 분류 작업에 GPT-4를 쓰는 것은 F1 카레이서에게 출퇴근 운전을 시키는 것과 같습니다.

***

[다음: 핵심 개념 >](core-concepts)
