Transformer는 자연어 처리(NLP) 분야에서 가장 널리 사용되는 모델 중 하나다.
특히 번역, 문장 생성, 요약 같은 작업에서 뛰어난 성능을 보여주면서 많은 주목을 받았다.
Transformer의 등장은 단순히 NLP 성능 향상을 넘어, 대규모 언어 모델(LLM)의 기반 구조로 이어졌다.
이 글에서는 Transformer의 기본 구조인 Encoder와 Decoder를 중심으로,
각 구성 요소가 어떻게 동작하는지 하나씩 정리해본다.
Transformer란?
Transformer는 기존 RNN이나 CNN과는 다르게, 입력 데이터를 병렬로 처리할 수 있는 구조를 갖고 있다.
이 덕분에 더 빠르게 학습이 가능하고, 긴 문장이나 복잡한 문맥도 잘 처리할 수 있다.
Transformer는 크게 두 부분으로 나뉜다:
- Encoder: 입력 문장을 이해하는 역할
- Decoder: 이해한 내용을 바탕으로 출력 문장을 생성
Encoder
Encoder는 다음 두 개의 주요 레이어로 구성되어 있다:
- Self-Attention Layer
- Feed Forward Layer
이 외에도 Multi-Head Attention, Positional Encoding,
Residual Connection + Layer Normalization 같은 보조 구조들이 함께 작동한다.
Self-Attention Layer
Self-Attention은 문장 내 다른 단어들과의 관계를 고려해
현재 단어를 더 잘 이해하도록 도와주는 핵심 메커니즘이다.
동작 방식
- Query, Key, Value 벡터 생성
각 단어 임베딩에 가중치 행렬을 곱해 Q, K, V 벡터를 만든다.- Query: 지금 단어가 어떤 문맥을 찾고 싶은지
- Key: 각 단어가 어떤 특성을 갖고 있는지
- Value: 실제로 그 단어가 담고 있는 정보
- 유사도 점수 계산
현재 단어의 Query와 모든 단어의 Key를 내적해서, 관련도를 점수로 계산한다. - 스케일링
점수가 너무 커지면 softmax에서 확률이 극단적으로 치우칠 수 있기 때문에,
Key 벡터의 차원 수의 제곱근으로 나눠준다. → 안정적인 학습을 위해 꼭 필요한 과정이다. - Softmax 정규화
점수들을 확률로 바꿔, 어떤 단어에 주의를 얼마나 줄지를 정한다. - Value 가중합 계산
각 단어의 Value에 softmax 점수를 곱해 가중합을 만든다.
→ 관련성이 높은 단어일수록 정보가 더 많이 반영된다. - 최종 출력 생성
이 가중합이 곧 Self-Attention의 출력이 되고, 다음 레이어로 전달된다.
Multi-Head Attention
Self-Attention을 여러 개의 시선으로 동시에 수행하는 구조다.
보통 8개의 head를 사용하며, 각 head마다 다른 Q/K/V 가중치 세트를 갖는다.
장점
- 자기 자신에만 주의를 집중하는 현상 완화
- 다양한 문맥 표현 가능 → 같은 단어라도 다양한 관점에서 해석
흐름 요약
- 여러 개의 Self-Attention을 병렬로 수행
- 각 head의 출력을 concat
- 마지막으로 출력 가중치 행렬을 곱해서 하나의 벡터로 결합
Positional Encoding
Transformer는 입력 순서를 따로 인식하지 않기 때문에,
단어의 위치 정보를 별도로 더해줘야 한다.
왜 위치 정보가 필요할까?
Transformer는 문장을 한 번에 바라보는 구조다.
그래서 “내가 몇 번째 단어인지”를 알려주는 위치 정보가 없으면, 문맥을 정확히 이해하기 어렵다.
구성 방식
- sin, cos 함수를 기반으로 한 주기적인 수학 패턴 사용
- 각 단어 임베딩에 이 위치 벡터를 더해서, 상대적인 거리나 순서를 반영
Feed Forward Layer
Self-Attention이 문맥을 파악하는 단계라면,
Feed Forward는 각 단어의 표현을 독립적으로 다듬는 단계다.
구조
- 모든 단어 위치에 대해 동일한 네트워크를 독립적으로 적용
- 비선형 변환이 포함돼 있어 모델의 표현력을 높여준다
Residual Connection & Layer Normalization
Transformer의 핵심 레이어들은 모두 다음의 구조를 따른다:
Residual Connection | 정보 손실 없이 입력을 더해주고, 역전파도 안정적으로 만듦 |
Layer Normalization | 출력 분포를 정규화해 학습을 더 안정적으로 진행할 수 있도록 함 |
이 구조 덕분에 Transformer는 레이어가 깊어져도 학습이 잘 된다.
Decoder 구조
Decoder는 인코더의 출력과 이전 시점까지의 디코더 출력을 바탕으로
다음 단어를 예측하는 구조다.
구성 요소는 다음과 같다:
- Masked Self-Attention
- Encoder-Decoder Attention
- Feed Forward Layer
모든 레이어는 Encoder와 마찬가지로
Residual Connection + Layer Normalization으로 감싸져 있다.
Masked Self-Attention
디코더에서 사용하는 Self-Attention은 미래 단어를 볼 수 없도록 마스킹이 적용된다.
문장을 왼쪽부터 순서대로 생성하려면, 아직 생성되지 않은 단어는 참조할 수 없어야 하기 때문이다.
마스킹 방식
- softmax 계산 전에 미래 위치를 -∞로 설정
- 해당 위치는 attention 점수가 0이 되므로, 이전 단어까지만 참조 가능
Encoder-Decoder Attention
이 레이어는 인코더의 출력 결과를 참고할 수 있도록 도와준다.
디코더는 이를 통해 입력 문장의 어떤 부분을 주목할지를 결정한다.
- Query: 디코더 내부에서 가져옴
- Key, Value: 인코더의 최종 출력에서 가져옴
Feed Forward Layer
구조와 역할은 인코더의 Feed Forward와 동일하다.
- 두 개의 선형 변환 + ReLU
- 단어 위치마다 독립적으로 적용
- 이후 Residual + LayerNorm 처리
최종 출력: Linear + Softmax
디코더의 마지막 출력은 아직 단어가 아니라 벡터 형태다.
이를 실제 단어로 바꾸려면 다음 두 단계를 거친다:
- Linear Layer: 벡터를 단어 수만큼의 차원으로 확장 (logits 생성)
- Softmax Layer: 확률 분포로 변환하고, 가장 높은 확률의 단어 선택
학습 과정
Transformer는 학습 중, 예측 결과와 실제 정답 간의 오차를 바탕으로 학습한다.
예시
입력: "merci"
정답: "thanks"
- 초기에는 모델 출력이 엉뚱하게 나온다
- 예측된 확률 분포와 실제 정답의 one-hot 벡터를 비교
- Cross-Entropy Loss를 계산해 역전파로 가중치를 조정
번역 결과 생성 방식
문장을 생성할 때 Transformer는 한 단어씩 순차적으로 예측한다.
이때 다음 단어를 고르는 방식은 다음과 같다:
1. Greedy Decoding
- 매 스텝마다 확률이 가장 높은 단어 하나만 선택
- 단순하고 빠르지만, 항상 최적의 결과를 보장하진 않는다
2. Beam Search
- 여러 후보 경로를 동시에 탐색
- 예: beam size=2 → 가장 가능성 높은 2개의 문장을 계속 유지하면서 확장
- 정확도는 높지만 속도는 느려질 수 있음
Beam size, top-k 등은 하이퍼파라미터로 조절 가능하다
마무리
Transformer는 단어 간의 관계를 정교하게 계산하는 Self-Attention 구조를 기반으로,
복잡한 문맥도 효과적으로 이해할 수 있도록 설계된 모델이다.
이러한 구조 덕분에 딥러닝 모델이 길고 복잡한 문장에서도 뛰어난 성능을 낼 수 있는 LLM이 나오게 되었다.
Transformer의 Encoder-Decoder 구조와 각 구성 요소의 원리에 대해 알게되면서,
단순한 번역이나 문장 생성뿐 아니라 더 복잡한 AI 모델의 작동 방식도 이해할 수 있게 되었다.
Self-Attention에 대해서도 더 깊이 이해해보아야겠다.
참고자료: https://nlpinkorean.github.io/illustrated-transformer/
The Illustrated Transformer
저번 글에서 다뤘던 attention seq2seq 모델에 이어, attention 을 활용한 또 다른 모델인 Transformer 모델에 대해 얘기해보려 합니다. 2017 NIPS에서 Google이 소개했던 Transformer는 NLP 학계에서 정말 큰 주목을
nlpinkorean.github.io
'SKALA' 카테고리의 다른 글
[SKALA] 쿠버네티스 실습 - ArgoCD, Jenkins (0) | 2025.05.07 |
---|---|
[SKALA] DB Query 작성 및 튜닝 기초 실습 (2) (0) | 2025.04.21 |
[SKALA] DB Query 작성 및 튜닝 기초 실습(1) (0) | 2025.04.17 |
[SKALA] AI Agent 두번째 실습 - LangChain, RAG (0) | 2025.04.08 |
[SKALA] AI Agent 개념 및 실습 (0) | 2025.04.06 |