Transformer는 2017년에 발표된 Attention Is All You Need 논문에서 제안된 sequence-to-sequence 모델이다. 지금은 LLM의 기본 구조처럼 이야기되지만, 출발점은 기계 번역이었다. 한 언어로 된 문장을 읽고, 다른 언어의 문장으로 바꾸는 작업에서 RNN과 CNN 없이 attention만으로 encoder-decoder를 구성한 것이 핵심이다.
Transformer를 이해할 때 가장 먼저 잡아야 하는 기준은 “문장을 순서대로 읽는 모델”에서 “문장 전체를 한 번에 놓고 관계를 계산하는 모델”로 넘어간 변화다. RNN은 단어를 왼쪽에서 오른쪽으로 차례대로 처리했다. Transformer는 모든 토큰을 동시에 펼쳐 놓고, 각 토큰이 다른 토큰을 얼마나 봐야 하는지 attention score로 계산한다.

그림 1. Transformer는 encoder와 decoder를 attention 중심으로 쌓은 구조다.
번역 문제에서 시작한다
기계 번역은 입력 문장과 출력 문장의 길이가 서로 다를 수 있는 문제다. 예를 들어 I love machine learning을 한국어로 옮기면 나는 머신러닝을 좋아한다처럼 단어 수와 어순이 달라진다. 모델은 입력 단어를 하나씩 대응시키는 수준이 아니라 문장 전체의 의미와 문법적 관계를 잡아야 한다.
초기의 신경망 번역 모델은 encoder-decoder 구조를 사용했다. Encoder는 원문 문장을 읽어 하나의 표현으로 압축하고, decoder는 그 표현을 바탕으로 번역문을 한 토큰씩 생성한다. Sequence to Sequence Learning with Neural Networks는 LSTM 기반 encoder-decoder로 번역 문제를 다룬 대표적인 연구다.
문제는 하나의 고정 길이 벡터에 문장 전체 정보를 담는 방식이 긴 문장에서 약해진다는 점이다. 문장이 길어질수록 앞부분 정보가 희미해지고, decoder가 특정 출력 단어를 만들 때 입력의 어느 부분을 봐야 하는지 직접 고르기 어렵다.
그림 2. 초기 신경망 번역은 encoder가 원문을 압축하고 decoder가 번역문을 생성하는 구조로 설명할 수 있다.
RNN은 왜 자연스럽게 시작점이 되었나
RNN은 순서가 있는 데이터를 처리하기 위해 만들어진 구조다. 문장은 단어의 나열이고, 앞 단어가 뒤 단어의 의미에 영향을 준다. 그래서 RNN은 문장을 왼쪽에서 오른쪽으로 읽으면서 hidden state를 갱신한다.
간단히 쓰면 RNN은 다음처럼 동작한다.
현재 토큰 + 이전 hidden state -> 새로운 hidden state
이 구조는 직관적이다. 나는을 읽고, 그 상태에서 밥을을 읽고, 다시 그 상태에서 먹었다를 읽는다. 사람이 문장을 읽는 흐름과 비슷해 보인다.
하지만 계산 관점에서는 큰 한계가 있다. RNN은 이전 단계 결과가 있어야 다음 단계를 계산할 수 있다. 따라서 문장 길이가 길어질수록 병렬화가 어렵다. GPU는 많은 계산을 한 번에 처리할 때 강한데, RNN은 시간축을 따라 순차적으로 기다려야 한다.
또 하나의 문제는 장거리 의존성이다. 문장 앞쪽의 정보가 뒤쪽에서 필요할 수 있는데, hidden state가 여러 단계를 거치며 계속 갱신되면 정보가 약해질 수 있다. LSTM과 GRU는 이 문제를 줄이기 위해 등장했지만, 순차 처리 구조 자체는 유지된다.

그림 3. RNN은 이전 hidden state를 다음 단계로 넘기며 순차적으로 문장을 처리한다.
Attention은 병목을 줄이는 장치였다
Attention은 decoder가 출력 토큰을 만들 때 encoder의 모든 hidden state를 다시 보게 만든다. 즉 입력 문장을 하나의 벡터로만 압축하지 않고, 출력 시점마다 입력의 어느 단어가 중요한지 가중치를 계산한다.
Neural Machine Translation by Jointly Learning to Align and Translate는 번역 과정에서 alignment와 translation을 함께 학습하는 attention 기반 접근을 제안했다. 여기서 alignment는 출력 단어가 입력 문장의 어느 부분과 강하게 연결되는지를 뜻한다.
예를 들어 I love machine learning을 번역할 때 좋아한다를 생성하는 순간에는 love가 중요하다. 머신러닝을 생성하는 순간에는 machine learning이 중요하다. Attention은 이런 대응 관계를 숫자로 만든다.
이 변화는 중요하다. 모델이 문장을 단순히 압축해서 넘기는 것이 아니라, 생성하는 순간마다 입력 문장을 다시 참조할 수 있게 되었기 때문이다.

그림 4. Attention은 decoder가 출력 토큰을 만들 때 입력 문장의 필요한 위치를 다시 보게 만든다.
Transformer의 핵심 전환
Transformer는 RNN을 제거하고 attention을 중심 구조로 올렸다. 논문 제목이 “Attention Is All You Need”인 이유도 여기에 있다. 기존 seq2seq 모델에서 attention은 RNN 위에 얹힌 보조 장치에 가까웠다. Transformer에서는 attention 자체가 문맥을 만드는 주된 계산이 된다.
Transformer는 encoder와 decoder로 나뉜다.
- Encoder는 원문 문장을 읽고 각 토큰의 문맥 표현을 만든다.
- Decoder는 이전에 생성한 번역 토큰들과 encoder 출력을 참고해 다음 토큰을 예측한다.
- Encoder와 decoder 모두 attention, feed-forward network, residual connection, layer normalization을 반복해서 쌓는다.
원래 Transformer는 번역 모델이다. 입력은 원문 문장이고 출력은 번역문이다. 학습할 때는 정답 번역문을 decoder에 한 칸 밀어서 넣고, 다음 토큰을 맞히도록 만든다.
입력 원문: I love machine learning
정답 번역: 나는 머신러닝을 좋아한다
Decoder 입력: <BOS> 나는 머신러닝을
예측 목표: 나는 머신러닝을 좋아한다
이 방식은 teacher forcing이다. 학습 중에는 모델이 직전에 틀린 단어를 냈더라도, 다음 입력으로 정답 토큰을 넣어 안정적으로 학습한다. 추론할 때는 정답이 없기 때문에 모델이 방금 생성한 토큰을 다시 입력으로 사용한다.

그림 5. 원래 Transformer는 번역을 위한 encoder-decoder 구조로 제안되었다.
Self-Attention은 문장 안의 관계를 계산한다
Self-attention은 같은 문장 안에서 토큰끼리 서로를 바라보게 하는 계산이다. 나는 사과를 먹었다라는 문장이 있을 때 먹었다는 나는과 사과를을 함께 참고해야 한다. Self-attention은 각 토큰이 다른 토큰을 얼마나 참고할지 점수로 만든다.
Transformer의 attention은 Query, Key, Value로 설명한다.
- Query는 “내가 지금 찾고 싶은 정보”다.
- Key는 “각 토큰이 가진 검색용 표지”다.
- Value는 “실제로 가져올 내용”이다.
한 토큰의 Query와 다른 토큰들의 Key를 비교해 attention score를 만든다. score가 크면 해당 토큰의 Value를 많이 가져온다. 최종적으로 각 토큰은 다른 토큰들의 정보를 가중합한 새 표현이 된다.
수식은 다음 형태다.
Attention(Q, K, V) = softmax(QK^T / sqrt(d_k))V
여기서 QK^T는 토큰 간 유사도를 계산한다. sqrt(d_k)로 나누는 이유는 차원이 커질 때 dot product 값이 너무 커져 softmax가 한쪽으로 치우치는 현상을 줄이기 위해서다.

그림 6. Query는 찾는 기준, Key는 비교 기준, Value는 실제로 가져오는 정보로 볼 수 있다.
Multi-Head Attention은 여러 관점을 동시에 본다
한 번의 attention만 쓰면 하나의 기준으로 관계를 본다. Multi-head attention은 attention을 여러 개 병렬로 수행한다. 각 head는 서로 다른 투영 공간에서 Query, Key, Value를 만들고, 다른 종류의 관계를 학습할 수 있다.
예를 들어 어떤 head는 주어와 동사의 관계를 강하게 볼 수 있고, 다른 head는 수식어와 명사의 관계를 볼 수 있다. 또 다른 head는 가까운 토큰 위주의 지역적 관계를 볼 수 있다. 실제 head가 사람이 붙인 문법 이름 그대로 역할을 나누는 것은 아니지만, 여러 관계를 병렬로 학습할 수 있다는 점이 중요하다.
Multi-head attention의 결과는 이어 붙인 뒤 다시 선형 변환된다. 이 구조 덕분에 Transformer는 문장 안의 관계를 여러 관점으로 동시에 계산한다.

그림 7. Multi-head attention은 여러 head의 attention 결과를 이어 붙이고 다시 변환한다.
Positional Encoding이 필요한 이유
Transformer는 RNN처럼 순서대로 토큰을 읽지 않는다. 모든 토큰을 한 번에 놓고 attention을 계산한다. 이 방식은 병렬화에 유리하지만, 단어 순서를 따로 알려주지 않으면 나는 밥을 먹었다와 밥은 나를 먹었다를 구분하기 어렵다.
그래서 Transformer 입력에는 token embedding과 positional encoding을 더한다.
Transformer 입력 = token embedding + positional encoding
Sinusoidal positional encoding은 위치마다 서로 다른 sine, cosine 값을 만들어 토큰 임베딩에 더하는 방식이다. 이 방식은 학습 파라미터 없이 위치 정보를 제공하며, 상대적 위치 관계를 attention이 활용하기 쉽게 만든다. 이 내용은 이전에 정리한 sinusoidal positional encoding 글과 바로 이어진다.

그림 8. Transformer 입력은 토큰 임베딩에 위치 정보를 더해서 만든다.
Encoder는 원문 전체를 문맥 표현으로 바꾼다
Encoder block은 크게 두 부분으로 구성된다.
- Multi-head self-attention
- Position-wise feed-forward network
Self-attention은 원문 문장 안의 토큰 관계를 계산한다. Feed-forward network는 각 위치의 표현을 비선형적으로 변환한다. 여기에 residual connection과 layer normalization이 붙어 깊은 네트워크가 안정적으로 학습되도록 한다.
Encoder의 출력은 입력 문장 각 토큰에 대한 문맥 표현이다. 단순한 단어 벡터가 아니라, 문장 안에서 주변 단어들과의 관계가 반영된 벡터다. 번역의 decoder는 이 encoder 출력을 참고해 목표 언어 문장을 생성한다.

그림 9. Encoder는 원문 토큰들 사이의 관계를 self-attention으로 계산한다.
Decoder는 번역문을 한 토큰씩 만든다
Decoder block은 encoder보다 한 단계가 더 있다.
- Masked multi-head self-attention
- Encoder-decoder attention
- Position-wise feed-forward network
Masked self-attention은 decoder가 지금 위치보다 미래의 정답 토큰을 보지 못하게 막는다. Encoder-decoder attention은 decoder의 현재 상태가 원문 encoder 출력 중 어느 부분을 봐야 하는지 계산한다.
번역 학습에서는 정답 문장 전체를 알고 있다. 하지만 모델이 좋아한다를 예측할 때 뒤에 있는 정답 토큰까지 미리 보면 학습이 성립하지 않는다. 그래서 causal mask를 적용해 현재 위치가 이전 위치까지만 보도록 제한한다.

그림 10. Decoder는 masked self-attention으로 미래 토큰을 보지 못하게 한 뒤 encoder 출력을 참조한다.
Mask는 무엇을 막는가
Transformer에서 mask는 attention score에 적용된다. Attention score 행렬은 각 토큰이 다른 토큰을 얼마나 볼지 나타내는 표다. 여기에 특정 위치를 볼 수 없도록 매우 작은 값을 넣으면 softmax 이후 해당 위치의 확률이 거의 0이 된다.
대표적인 mask는 두 가지다.
- Padding mask: 패딩 토큰을 보지 않게 한다.
- Causal mask 또는 look-ahead mask: decoder가 미래 토큰을 보지 않게 한다.
Padding mask는 문장 길이를 맞추기 위해 넣은 <PAD> 토큰을 무시하기 위한 장치다. 배치 학습에서는 여러 문장을 같은 길이로 맞춰야 하므로 짧은 문장 뒤에 padding을 붙인다. 이 토큰은 의미가 없기 때문에 attention 대상에서 제외한다.
Causal mask는 생성 모델에서 특히 중요하다. 나는 머신러닝을까지 보고 좋아한다를 예측해야 하는데, 정답 위치의 미래 단어를 미리 보면 문제를 푸는 것이 아니라 답안을 베끼는 구조가 된다.

그림 11. Causal mask는 현재 위치가 미래 토큰을 보지 못하도록 attention 행렬의 위쪽 삼각 영역을 막는다.
번역 학습에서 mask가 적용되는 흐름
Transformer 번역 학습은 다음 순서로 볼 수 있다.
- 원문 문장을 tokenizer로 토큰화한다.
- 번역 정답 문장도 tokenizer로 토큰화한다.
- 정답 문장을 한 칸 오른쪽으로 밀어 decoder 입력을 만든다.
- decoder 출력은 각 위치에서 다음 토큰 분포를 예측한다.
- 정답 토큰과 예측 분포 사이의 cross-entropy loss를 계산한다.
- padding 위치는 loss 계산과 attention에서 제외한다.
- decoder self-attention에는 causal mask를 넣어 미래 토큰을 가린다.
간단히 쓰면 decoder는 다음 문제를 반복해서 푼다.
<BOS> -> 나는
<BOS> 나는 -> 머신러닝을
<BOS> 나는 머신러닝을 -> 좋아한다
<BOS> 나는 머신러닝을 좋아한다 -> <EOS>
학습 중에는 위 입력을 병렬로 처리한다. RNN처럼 첫 번째 예측이 끝나야 두 번째 예측을 계산하는 방식이 아니다. 다만 causal mask가 있기 때문에 각 위치는 자기보다 앞의 정답 토큰만 볼 수 있다. 이 점이 Transformer 학습의 핵심이다.

그림 12. 번역 학습에서는 정답 문장을 오른쪽으로 밀어 decoder 입력을 만들고 다음 토큰을 예측한다.
Attention mask와 Masked Language Modeling은 다르다
mask라는 단어 때문에 두 개념이 자주 섞인다. Transformer 내부의 attention mask는 “어떤 토큰을 볼 수 있는지”를 제한하는 장치다. 반면 BERT의 masked language modeling은 입력 토큰 일부를 [MASK]로 바꾸고 원래 토큰을 맞히는 사전학습 목표다. BERT는 bidirectional encoder representation을 학습하기 위해 masked language model과 next sentence prediction을 사용했다.
GPT 계열의 causal language model은 미래 토큰을 보지 못하게 하는 causal mask를 사용해 다음 토큰 예측을 학습한다. Improving Language Understanding by Generative Pre-Training는 generative pre-training과 task-specific fine-tuning 흐름을 제시했다.
정리하면 다음과 같다.
- Attention mask: attention 계산에서 보지 말아야 할 위치를 막는다.
- Causal LM: causal mask를 사용해 다음 토큰 예측을 학습한다.
- Masked LM: 입력 일부를
[MASK]로 바꾸고 원래 토큰을 맞힌다. - 번역 Transformer: decoder에는 causal mask가 들어가고, encoder와 decoder에는 padding mask가 들어간다.

그림 13. Encoder-only, decoder-only, encoder-decoder 모델은 mask와 학습 목표가 다르다.
추론에서는 autoregressive하게 생성한다
학습 중에는 정답 번역문을 오른쪽으로 밀어 decoder에 넣는다. 하지만 실제 번역에서는 정답 문장이 없다. 그래서 모델은 한 토큰씩 생성한다.
1단계: <BOS> -> 나는
2단계: <BOS> 나는 -> 머신러닝을
3단계: <BOS> 나는 머신러닝을 -> 좋아한다
4단계: <BOS> 나는 머신러닝을 좋아한다 -> <EOS>
각 단계에서 encoder 출력은 그대로 유지된다. decoder는 지금까지 생성한 토큰을 보고 다음 토큰 확률을 계산한다. 가장 확률이 높은 토큰을 고르는 greedy decoding을 쓸 수도 있고, 여러 후보를 유지하는 beam search를 쓸 수도 있다.
번역 모델에서 beam search는 자주 사용된다. 한 번의 선택만으로 전체 문장 품질이 결정되면 초반 실수가 누적될 수 있기 때문이다. Beam search는 상위 후보 문장 여러 개를 유지하면서 전체 점수가 좋은 번역을 찾는다.

그림 14. Beam search는 여러 후보 문장을 동시에 확장하면서 높은 점수의 출력을 고른다.
Transformer가 RNN보다 강했던 이유
Transformer의 장점은 크게 세 가지로 정리된다.
첫째, 병렬화가 쉽다. RNN은 시간 순서대로 계산해야 하지만 Transformer는 문장 전체 토큰의 attention을 행렬 연산으로 계산한다. 이 구조는 GPU와 잘 맞는다.
둘째, 장거리 의존성을 직접 연결한다. RNN에서는 멀리 떨어진 단어 정보가 여러 hidden state를 거쳐야 한다. Self-attention에서는 모든 토큰 쌍의 관계를 직접 계산할 수 있다.
셋째, encoder-decoder 구조가 번역에 잘 맞는다. Encoder는 원문 전체를 문맥 표현으로 바꾸고, decoder는 목표 언어 문장을 순차적으로 생성한다. Attention은 decoder가 매 순간 원문 중 필요한 부분을 고르게 만든다.
다만 Transformer에도 비용이 있다. Self-attention은 토큰 수가 n일 때 attention score 행렬 크기가 n x n이 된다. 긴 문서에서는 계산량과 메모리 사용량이 커진다. 이후 Longformer, Reformer, FlashAttention 같은 연구들이 이 비용을 줄이기 위해 등장했다. FlashAttention은 attention을 IO-aware 방식으로 계산해 메모리 접근 비용을 줄이는 방향을 제시했다.

그림 15. RNN은 시간 순서에 따라 계산하고, Transformer는 토큰 관계를 병렬 행렬 연산으로 계산한다.
LLM으로 이어진 구조적 의미
Transformer가 번역에서 시작했지만, 핵심은 “토큰 사이의 관계를 attention으로 계산한다”는 범용 구조다. 입력과 출력이 모두 토큰 시퀀스라면 번역, 요약, 질의응답, 코드 생성, 대화 생성까지 같은 기본 틀로 다룰 수 있다.
Encoder 중심 모델은 문장을 이해하고 분류하는 작업에 강하다. Decoder 중심 모델은 다음 토큰을 생성하는 작업에 강하다. Encoder-decoder 모델은 입력 문장을 조건으로 출력 문장을 생성하는 작업에 잘 맞는다.
- Encoder-only: BERT 계열, 문장 이해와 분류에 자주 사용된다.
- Decoder-only: GPT 계열, 다음 토큰 생성에 자주 사용된다.
- Encoder-decoder: T5, 번역과 요약처럼 입력을 출력으로 변환하는 작업에 자주 사용된다.
T5는 여러 NLP 작업을 text-to-text format으로 통일해 encoder-decoder Transformer의 범용성을 보여준 대표적인 연구다.
Graph RAG와 탐색 문제에서 보는 Transformer
Transformer 자체가 Graph RAG 알고리듬은 아니지만, attention은 그래프적 관점으로 해석할 수 있다. 토큰을 노드로 보고, attention weight를 노드 사이의 가중 연결로 보면 각 layer는 토큰 간 정보 전달을 수행한다.
Graph RAG에서는 문서, 엔티티, 관계, 쿼리 사이를 탐색해 답변 근거를 구성한다. 이때 Transformer는 선택된 컨텍스트 안에서 토큰 수준의 관계를 계산한다. 몬테카를로 트리 서치나 르장드르 근사가 큰 탐색과 계산을 근사적으로 줄이는 방식이라면, Transformer의 attention은 주어진 토큰 집합 안에서 중요한 관계에 가중치를 두는 방식이다.
중요한 차이는 있다. MCTS는 후보 경로를 시뮬레이션하면서 탐색 예산을 배분한다. Transformer attention은 학습된 파라미터를 이용해 한 번의 forward pass에서 관계 가중치를 계산한다. 둘 다 “모든 것을 똑같이 보지 않는다”는 점에서는 연결되지만, 계산 절차와 학습 방식은 다르다.
전체 흐름 요약
Transformer는 번역 문제에서 출발했다. RNN 기반 seq2seq는 문장을 순차적으로 읽고 hidden state에 정보를 누적했다. Attention은 decoder가 입력 문장의 필요한 부분을 직접 보게 만들었다. Transformer는 여기서 더 나아가 RNN을 제거하고 attention을 중심 구조로 삼았다.
Encoder는 원문 전체를 문맥 표현으로 바꾼다. Decoder는 이전 출력 토큰과 encoder 출력을 참고해 다음 토큰을 예측한다. 학습 중에는 정답 문장을 한 칸 밀어 넣고 causal mask로 미래 토큰을 가린다. Padding mask는 의미 없는 패딩 토큰을 attention과 loss에서 제외한다.
결국 Transformer의 핵심은 단순하다. 문장을 순서대로 하나씩 기억하는 대신, 모든 토큰을 펼쳐 놓고 서로의 관계를 계산한다. 번역에서 시작된 이 구조가 오늘날 LLM의 기본 골격이 된 이유는 그 계산 방식이 병렬화, 장거리 의존성, 범용 sequence modeling에 모두 잘 맞았기 때문이다.