Transformer 완전 처음부터 배우기
Transformer란?
자연어처리를 공부하다 보면 꼭 등장하는 용어가 있습니다. 바로 Transformer입니다. 저도 처음엔 "이게 대체 뭐지?"라는 의문을 가지고 시작했지만, 학습하면서 점차 구조와 원리를 이해하게 되었습니다. 오늘은 Transformer의 핵심 요소 중 하나인 Self-Attention을 중심으로 간단히 정리해보려 합니다.
기존 방식의 한계: RNN과 LSTM
기존의 자연어 처리 모델인 RNN과 LSTM은 단어를 시간 순서대로 하나씩 처리하는 직렬 연산(Sequential Processing) 구조였습니다. 이 구조는 시간 정보는 보존되지만, 병렬 연산이 불가능해 학습 속도가 느리고 긴 문장을 처리할수록 성능이 저하되는 한계가 있었습니다.
Transformer의 강점
Transformer는 이러한 한계를 극복하기 위해 병렬 연산(Parallel Processing) 구조를 도입한 모델입니다. 이 구조 덕분에 학습 속도가 빠르고 성능도 우수해, 현재 GPT, BERT 등 대부분의 최신 언어 모델들이 Transformer 기반으로 설계되고 있습니다.
Transformer의 기본 구조
Transformer는 크게 Encoder와 Decoder로 나뉩니다.
- Encoder: 자연어(문장)를 숫자(Tensor)로 인코딩
- Decoder: 숫자를 다시 자연어로 디코딩
이 과정을 통해 기계가 인간의 언어를 이해하고 생성할 수 있게 됩니다.
주요 구성 요소
1. Embedding
자연어는 아날로그(문자)이기 때문에, 딥러닝 모델이 처리할 수 있도록 디지털(숫자) 형태로 변환해야 합니다. 이를 **임베딩(Embedding)**이라고 하며, 각 단어를 고정된 차원의 벡터로 변환합니다.
2. Positional Encoding
Transformer는 문장 전체를 동시에 처리하지만, 이로 인해 단어의 순서 정보가 사라지는 문제가 발생합니다. 이를 보완하기 위해 사용되는 것이 Positional Encoding입니다.
예를 들어,
- Kim hits the ball
- The ball hits Kim
문장에 등장하는 단어는 같지만, 순서에 따라 의미가 완전히 달라집니다. Positional Encoding은 이러한 위치 정보를 임베딩 벡터에 추가해 모델이 단어의 순서를 인식할 수 있게 도와줍니다.
특징:
- 사인(sin)과 코사인(cos) 함수를 이용해 벡터 생성
- 범위가 -1~1로 안정적이며, 주기적인 특성으로 긴 문장에도 적용 가능
3. Multi-Head Attention
Transformer의 핵심은 바로 Attention 메커니즘입니다. 사람은 문장을 읽으며 자연스럽게 앞뒤 문맥을 파악하지만, 기계는 그렇지 못합니다. Attention은 모델이 중요한 단어에 더 집중할 수 있도록 도와주는 기법입니다.
Self-Attention이란?
Self-Attention은 한 문장의 단어들 간의 관계를 자기 자신 내부에서 계산하는 방식입니다. 이를 통해 문장 내 단어들 사이의 상호작용을 파악할 수 있습니다.
Self-Attention은 세 가지 요소로 구성됩니다:
- Query (질문)
- Key (질문에 대한 후보)
- Value (실제 정보)
같은 문장 내에서 Query, Key, Value를 각각 만들어내어 서로의 관계를 계산합니다.
Multi-Head Attention이란?
Attention을 한 번만 계산하는 것이 아니라, 여러 개의 Head를 만들어 다양한 관점에서 Attention을 계산한 후 그 결과를 합치는 방식입니다. 이로써 모델은 더 풍부하고 다차원적인 문맥 정보를 학습할 수 있습니다.
Masked Multi-Head Attention이란?
Decoder에서는 아직 생성되지 않은 단어에 대해 정보를 보지 못하게 Masking 처리를 합니다. 이를 통해 모델이 순차적으로 문장을 생성하는 데 도움을 줍니다.
4. Residual Connection
깊은 신경망 구조에서는 기울기 소실(Vanishing Gradient) 문제가 발생할 수 있습니다. 예를 들어,
- 1 × 0.9² = 0.81
- 1 × 0.9⁴ = 0.65
계산이 반복될수록 값이 점점 작아져 학습이 제대로 되지 않습니다.
이를 해결하기 위해 도입된 것이 Residual Connection입니다. 입력값을 그대로 다음 층에 더해주는 방식입니다.
예: output = F(x) + x
즉, 원래의 입력 x를 그대로 더해줌으로써 정보 손실 없이 학습 가능
Residual Connection은 학습을 안정화시키고, 깊은 구조에서도 효과적으로 작동하게 만들어 줍니다.