트랜스포머의 발전
Attention is All You Need, 그 이후 — 특수 토큰부터 RMSNorm까지
트랜스포머 & 어텐션 복습
2017년 "Attention is All You Need" (Vaswani et al.) 논문에서 제안된 딥러닝 모델입니다. 제목 그대로, 어텐션(Attention)을 이해하면 트랜스포머의 핵심을 이해한 것이나 다름없습니다.
- 입력 토큰들 사이의 관계성을 데이터로부터 자동 학습 — 사람이 규칙을 명시할 필요 없음
- 모든 토큰이 서로 얼마나 관련되는지를 Attention Score로 계산
- 병렬 처리 가능 (RNN과 달리 순서에 의존하지 않음)
- 인코더-디코더 구조로 구성
입력으로 Key(K), Query(Q), Value(V) 세 가지 벡터를 사용합니다. Self-Attention에서는 같은 문장이 K·Q·V 모두에 해당합니다.
이 과정을 h번 독립적으로 반복하는 것이 Multi-Head Attention입니다. 각 헤드가 서로 다른 관점(문맥)에서 관계를 학습하도록 합니다.
💡 어텐션의 핵심 장점: 몇 개의 레이어를 쌓더라도 항상 토큰 단위 해석이 가능하며, 입력 시퀀스가 바뀌면 가중치가 동적으로 변해 문맥을 반영합니다 (동적 임베딩).
인코더 (Encoder)
완전한 문장 전체를 한 번에 입력받아 중간 표현 벡터(Representation)를 생성합니다. 예: 한국어 전체 문장 입력
디코더 (Decoder)
인코더의 표현 벡터를 받아 토큰을 하나씩 순차 생성합니다. 이전 출력이 다시 입력으로 들어갑니다. 예: 영어 번역문 순차 생성
자연어 처리에서 트랜스포머의 활용
자연어(텍스트)는 기계가 바로 처리할 수 없으므로 숫자로 변환하는 과정이 필수입니다.
전처리가 완료된 단어들을 어휘집(Vocabulary)에서 찾아 벡터로 변환합니다. 주요 모델들의 규모는 다음과 같습니다:
| 모델 | Vocabulary Size | Embedding 차원 | 임베딩 행렬 크기 |
|---|---|---|---|
| BERT Base | 30,522 | 768 | ≈ 23.5M |
| BERT Large | 30,522 | 1,024 | ≈ 31.3M |
| GPT-2 Small | 50,257 | 768 | ≈ 38.6M |
| GPT-3 (175B) | 50,257 | 12,288 | ≈ 617M |
| LLaMA-2 7B | 32,000 | 4,096 | ≈ 131M |
분류 문제
스팸 여부(0/1), 뉴스 카테고리(Food·Sports·Politics) 등을 One-Hot 벡터로 출력
생성 문제
어휘집 내 모든 토큰에 대한 확률값을 계산해 다음 단어를 순차적으로 예측
트랜스포머의 발전 방향 (6가지)
2017년 기본 Transformer(vanilla self-attention)는 훌륭했지만 몇 가지 한계가 있었고, 이를 해결하기 위한 다양한 기법이 제안되었습니다.
문장 구조·경계·의미를 표현하는 기능적 토큰 추가
상대적 거리 기반 위치 정보를 어텐션 연산에 반영
FFN 모듈을 고도화하여 더 좋은 벡터 표현 학습
n² → n으로 어텐션 연산량을 줄이는 방법
정규화(Normalization)를 통해 깊은 네트워크의 학습을 안정화
① 특수 토큰의 사용
문제 인식: 기본 Transformer는 모든 토큰을 동등하게 처리합니다. 그렇다면 "전체 문장의 의미"는 어떤 벡터로 표현할까요? "빈칸"은? 가변 길이 입력은? 여러 문장의 경계는?
자연어 문장을 모델이 이해할 수 있도록 구조화하기 위해 인위적으로 추가하는 기호형 토큰입니다. 단어 자체의 의미는 없지만, 입력 시퀀스의 역할·경계·상황을 명시적으로 알려주는 기능을 수행합니다.
| 토큰 | 역할 | 사용 모델 |
|---|---|---|
[CLS] | 전체 시퀀스의 의미를 요약하는 벡터 — 항상 입력 맨 앞에 위치. 분류 문제에서 이 위치의 출력을 사용 | BERT 계열 |
[MASK] | 빈칸을 나타내는 토큰. 사용자가 직접 삽입하며, MLM(Masked Language Modeling) 학습에 활용 | BERT 계열 |
[PAD] | 가변 길이 입력을 동일한 차원으로 맞추기 위한 패딩 토큰 (의미 없음) | 공통 |
[SEP] | 문장과 문장의 경계를 구분하는 토큰 | BERT 계열 |
[BOS] | 시퀀스 시작(Beginning of Sequence) 신호 | GPT 계열 |
[EOS] | 시퀀스 종료(End of Sequence) 신호 — EOS가 나오면 생성 중단 | GPT 계열 |
입력: "I love transformers"
두 문장 입력: "A man is playing guitar" + "A person is playing music"
💡 토크나이저(BertTokenizer 등)가 [CLS], [SEP], [PAD]를 자동으로 추가해줍니다. [MASK]만 사용자가 원하는 위치에 직접 삽입합니다.
[MASK] 토큰 위치의 원래 단어를 맞추는 MLM(Masked LM) 방식으로 사전학습합니다.
[BOS]에서 시작해 다음 토큰을 순차적으로 예측하며 [EOS]가 나올 때까지 생성합니다.
② 위치 인코딩의 변형 — RoPE & ALiBi
문제 인식: 기본 Transformer는 sin/cos로 정의된 고정 위치 인코딩을 입력 단계에서 한 번만 더해줍니다. 하지만 Attention을 여러 번 쌓다 보면 이 효과가 너무 약해집니다. 또한 절대적 위치보다 두 단어 사이의 상대적 거리가 더 중요하지 않을까요?
BERT, GPT-1~3 초기 모델에서 사용된 방식입니다. sin/cos로 고정하는 대신 각 위치(1, 2, 3…)별 벡터를 경사하강법으로 학습합니다. 더 유연하게 위치 정보를 표현할 수 있지만 여전히 절대적 위치 기반입니다.
핵심 아이디어: "은행나무"처럼 두 단어가 붙어 있으면 유사도↑, 멀리 떨어지면 유사도↓"가 되도록 어텐션 계산 자체에 거리 정보를 반영합니다.
논문: Su et al., RoFormer, 2021
Q·K 벡터를 위치에 비례해 회전시킵니다. 두 단어가 멀어질수록 벡터 간 각도가 커져 내적(유사도)이 감소합니다.
- 위치별 고유 각도 θ를 상수로 사전 정의
- m번째 위치면 mθ 만큼 벡터를 회전
- 상대 거리 (m-n)이 클수록 각도 차이 커짐 → 유사도 감소
- 추가 학습 파라미터 없음
✅ LLaMA, PaLM, GPT-NeoX 등 최신 모델에서 기본 사용
논문: Press et al., ICLR, 2022
벡터 회전 대신, 유사도 계산 결과에서 거리에 비례한 값을 직접 빼주는 방식입니다.
- 거리 1칸 → -1점, 거리 4칸 → -4점 차감
- 헤드마다 감쇠율(m)을 다르게 설정
- 감쇠율 1.0 → 가까운 단어에만 집중
- 감쇠율 0.0039 → 먼 단어까지 골고루 주의
✅ LLaMA-2 등에서 사용. RoPE보다 단순하지만 효과적
📌 공통점: 두 방법 모두 추가 학습 파라미터 없이, 사람이 정의한 상수(각도 θ, 감쇠율 m)만으로 상대적 거리 정보를 어텐션에 반영합니다. 기존 sin/cos 방식은 현재 거의 사용되지 않습니다.
③ 표현력 강화 — FFN 개선
문제 인식: 기본 Transformer의 Feed Forward Network(FFN)는 ReLU를 쓰는 단순한 2층 MLP입니다. 더 복잡한 모듈로 표현력을 높일 수 있지 않을까요?
각 토큰별로 독립적으로 비선형 변환 + 차원 변경을 수행합니다.
ReLU 대신 더 복잡한 곡선형 활성함수를 사용합니다:
- GELU — Gaussian Error Linear Unit
- SwiGLU — Swish + Gated Linear Unit
- GeGLU — GELU + Gated Linear Unit
FFN의 중간 차원을 매우 크게 설정하거나, 여러 FFN을 병렬로 두어 Mixture-of-Experts(MoE) 구조를 활용합니다.
④ 연산 효율성 향상
문제 인식: 기본 Self-Attention은 시퀀스 길이 n에 대해 O(n²)의 연산이 필요합니다. 시퀀스가 길어질수록 연산량이 폭발적으로 증가합니다.
모든 토큰 쌍을 보지 않고 주변 토큰만 선택적으로 어텐션합니다.
- Window size를 사전 정의하여 그 범위 내에서만 연산
- CNN의 필터 크기와 비슷한 개념
- Longformer, BigBird에서 사용
⚠️ 성능은 소폭 하락하지만, 긴 시퀀스를 처리할 수 있게 됩니다.
수식 자체를 변형하여 O(n²) → O(n)으로 줄입니다.
- Linformer(2020): K, V를 저차원으로 선형 투영하여 연산량 감소
- Performer(2021): Softmax를 Random Feature Mapping으로 근사
⚠️ 연산 효율성을 위해 어텐션을 변형하면 정보 손실이 발생하여 정확도가 소폭 하락합니다. 속도·메모리가 중요한 환경(모바일, 실시간 응답)에서 활용합니다.
⑤ 학습 안정성 향상 — 정규화
문제 인식: Attention 모듈을 20~30개씩 쌓으면 역전파 과정에서 기울기 소실(Vanishing Gradient) 또는 기울기 폭발(Exploding Gradient)이 발생하기 쉽습니다. 각 층을 거칠 때마다 출력값의 분포가 달라지는 Internal Covariate Shift 문제도 생깁니다.
각 레이어의 출력값 분포를 평균 0, 분산 1로 일정하게 유지시켜 학습을 안정화합니다. 기본 Transformer의 Add & Norm 블록이 이에 해당합니다.
기본 Transformer에서 사용되는 방법입니다. 임베딩 차원을 기준으로 정규화합니다.
- 각 토큰·샘플별 임베딩 차원에 대해 평균=0, 분산=1
- 다른 토큰·샘플과 무관하게 독립적으로 정규화
⚠️ 평균과 분산 계산이 필요하여 완전한 병렬화가 어렵습니다.
최근 대부분의 언어 모델에서 사용됩니다. 평균을 빼지 않고 RMS(제곱평균제곱근)로만 나눠 벡터의 크기만 정규화합니다.
- 평균 제거 없이 벡터의 크기(길이)만 정규화
- 분산 계산 불필요 → 연산 속도 빠름
- 병렬화 용이
✅ LLaMA, Mistral 등 최신 LLM의 기본 설정
| 구분 | Layer Normalization | RMSNorm |
|---|---|---|
| 정규화 기준 | 임베딩 차원 (채널 단위) | 임베딩 차원 (채널 단위) |
| 평균 제거 | O (중앙 이동) | X (그대로) |
| 분산 계산 | O | X (RMS만 사용) |
| 연산 속도 | 상대적으로 느림 | 빠름 |
| 대표 사용 모델 | 기본 Transformer, BERT | LLaMA, Mistral, GPT-NeoX |
최근 트랜스포머 기반 언어 모델 정리
| 발전 방향 | 기본 Transformer (2017) | 최신 모델 (2022~) |
|---|---|---|
| 특수 토큰 | 없음 | [CLS], [SEP], [MASK], [BOS], [EOS] 등 사용 |
| 위치 인코딩 | 고정 sin/cos, 입력에 1회 더함 | RoPE 또는 ALiBi — 어텐션 계산 시 반복 반영 |
| 표현력 | ReLU + 2층 FFN | GELU/SwiGLU + 차원 확장 / MoE |
| 연산 효율 | O(n²) 전체 어텐션 | Local Attention 또는 Linear Attention (필요시) |
| 학습 안정성 | Layer Normalization | RMSNorm (더 빠르고 병렬화 용이) |
🗺️ 트랜스포머의 발전 흐름
모든 태스크에 적용 가능한지 검증 → 효율화 → 안정화 → 스케일 확장의 순서로 발전해왔습니다.
2017, 기본 구조
연산량 최적화
학습 안정화
GPT-3, LLaMA 등
'인하대학교 공학대학원(인공지능융합전공) > 심층신경망' 카테고리의 다른 글
| 심층신경망_생성 모델 (Generative Model)VAE · GAN · Diffusion (0) | 2026.05.21 |
|---|---|
| 심층신경망_자기주도학습 (0) | 2026.05.14 |
| 심층신경망_Transformer (0) | 2026.05.02 |
| 심층신경망_CNN부터 RNN까지: 시계열 데이터와 순환신경망 완전 정리 (1) | 2026.04.17 |
| 심층신경망 - CNN (0) | 2026.04.11 |