Attention Is All You Need (Transformer)

홍선재·2025년 4월 1일


논문 Attention Is All you need는 자연어 처리 분야에서 엄청난 변화를 일으킨 Transformer 모델을 소개한 논문이에요. 여기서 제안된 Transformer 모델은 기존에 주로 사용되던 RNN이나 CNN을 완전히 제거하고, 오직 Attention 메커니즘만을 사용해서 시퀀스 데이터를 처리한다.


핵심 개념 요약

  1. 문제점
    • 기존의 RNN, LSTM 등은 시퀀스를 순차적으로 처리해야 하므로 병렬화가 어려움
    • 긴 문장에서는 장기 의존성(long-term dependency)를 학습하기 어려움
  2. Transformer의 핵심 아이디어
    • Self-Attention을 통해 문장 내 단어들 간의 관계를 한 번에 계산할 수 있음.
    • 덕분에 모든 위치 간의 의존성을 한 번에 처리할 수 있고 ,병렬 연산 가능.
    • 이 구조는 인코더(입력 처리)와 디코더(출력 생성)로 구성됨
  3. Self-Attention 메커니즘
    • Query, Key, Value 세 가지 벡터를 사용해서 단어들 간의 유사도를 계산함
    • 유사도 (Attention score)에 따라 단어들 간 영향을 가중합으로 반영
  4. Multi-Head Attention
    • Attention을 여러 개의 Head(머리)로 나눠서 병렬로 학습함
    • 다양한 의미 공간에서의 관계를 포착할 수 있음
  5. 포지셔녈 인코딩(Positional Encoding)
    • Transformer는 RNN처럼 순서를 고려하지 않기 때문에, 단어 순서 정보를 사인/코사인 함수로 인코딩해서 추가함
  6. 장점
    • 속도 : 병렬처리 가능 → 학습이 빠름
    • 성능 : 기존 모델보다 BLEU 점수가 높음
    • 범용성 : 기계 번역뿐만 아니라 문장 파싱 등 다른 작업에도 잘 작동함

Abstract

기존의 시퀀스 변환 모델들은 보통 복잡한 RNN이나 CNN 기반이며 인코더와 디코더 구조를 포함하고 있따. 성능이 좋은 모델들은 인코더와 디코더 사이에 어텐션 메커니즘을 추가로 사용한다.

이 논문에서는 Transfomer라는 새로운 구조를 제안하는데 이 모델은 오직 어텐션만을 기반으로 하고 RNN이나 CNN을 전혀 사용하지 않는다.

두 가지 기계 번역 과제에서 실험한 결과 이 모델은 기존보다 더 좋은 성능을 내고 별렬처리가 쉬우며 학습 속도도 훨씬 빠르다.

우리 모델은 WMT-2014 영어-독일어 번역에서 BLUE 점수 28.4를 기록했는데, 이는 기존 최고 성능(앙상블 포함)보다 2점 이상 높다

또한 영어-프랑스어 번역에서는 BLUE 41.8로 단일 모델 기준 최고 성능을 기록했다. 이 모델은 GPU 8대로 3.5일만에 학습되었는데, 기존 모델보다 훨씬 적은 비용으로 학습이 가능했다.

마지막으로 Transformer는 영어 구문 분석 같은 다른 작업에도 잘 적용되며 많은 데이터가 있을 때나 적을 때나 모두 좋은 성능을 보인다.


1. Introduction

지금까지 시퀀스 데이터를 처리하는 데에는 주로 RNN, LSTM, GRU(게이트 순환 유닛)같은 모델들이 사용되어 왔고, 이들은 언어 모델링이나 기계 번역 같은 작업에서 최고의 성능을 보여왔다. 이런 구조는 보통 인코더-디코더 형태로 되어 있으며, 수많은 연구들이 이 모델들의 성능을 개선해왔다.

하지만 RNN기반 모델들은 입력과 출력을 시간 순서대로 차례차례 계산해야 한다. 즉, 이전 단계의 결과를 이용해서 다음 단계를 계산하는 방식이라, 계산을 병렬로 처리할 수 없다는 단점이 있다.

시퀀스가 길어질수록 이 문제는 더움 심각해지고, 학습 속도도 느려진다.

물론 최근에는 계산을 더 빠르게 하기 위한 다양한 기술들이 제안되었고, 성능도 많이 좋아졌지만, 순차적으로 처리해야 한다는 근본적인 문제는 여전히 남아 있다. 한편 어텐션 메커니즘은 입력과 추력 사이의 거리와 상관없이 관련 정보를 연결할 수 있는 장점 덕분에, 시퀀스 처리 모델에서 점점 더 중요해지고 있다.

하지만 대부분 모델들은 여전히 어텐션을 RNN과 함께 사용하는 방식이다.

이에 우리는 Transformer라는 새로운 모델 구조를 제안한다.

이 모델은 순환 구조를 완전히 없애고 오직 어텐션만을 사용해서 입력과 출력 사이의 전역적인 관계를 학습한다.

이 구조 덕분에 계산을 훨씬 더 병렬적으로 처리할 수 있고 8개의 GRU로 단 12시간만 학습해도 번역 작업에서 최고 성능을 낼 수 있다.


2. Background

순차적인 계산을 줄이려는 시도는 예전부터 있었고,

예를 들어 Extended Neural GPU, ByteNet, ConvS2S 같은 모델들은 CNN을 기본 구조로 사용해서, 입력과 출력의 모든 위치에 대해 병렬로 계산할 수 있도록 했다.

하지만 이런 모델들은 멀리 떨어진 위치들 사이의 정보를 연결하려면 계산량이 커지는 문제가 있었다. 예를 들어 ConvS2S 거리에 비례해서 계산량이 늘어나고 ByteNet은 거리의 로그만큼 증가한다.

이런 구조에서는 멀리 떨어진 단어들 사이의 관계를 학습하는 게 어렵다.

반면에 Transformer는 어떤 위치든 관계없이 고정된 계산 횟수로 연결할 수 있다. 물론 이렇게 하면 어텐션의 결과가 평균화되면서 정보가 뭉개질 수 있는 단점이 생기는데, 이 문제는 뒤에서 설명할 멀티-헤드 어텐션(Multi-Head Attention)으로 보완된다.

또한, Self-Attention(Intra-Attention)은 한 문장 안에서 단어들끼리 서로 영향을 주고받도록 하는 메커니즘이다.

이 방식은 독해, 요약, 문장 관계 판단, 문장 임베딩 생성 같은 다양한 작업에서 이미 좋은 성과를 보여줬다.

그리고 End-to-End Memory Network처럼 순서대로 처리하는 RNN 없이 어텐션만으로 동작하는 구조도 있었다. 이런 구조는 간단한 질문-응답이나 언어 모델링에서 꽤 괜찮은 성능을 보였다.

하지만 우리가 아는 한 Transformer는 처음으로 RNN이나 CNN 없이, 입력과 출력을 전부 self-attention만으로 처리하는 시퀀스 변환 모델이다.


3. Model Architecture

대부분의 강력한 시퀀스 변환 모델은 인코더-디코더 구조를 갖고 있다. 여기서 인코더는 입력 시퀀스 (x1,...,xn)을 받아서, 이를 연속적인 표현 벡터 (z1, …, zn)로 변환한다.

그 다음 디코더는 이 z를 바탕으로 출력 시퀀스(y1, …, ym)을 하나씩 차례로 생성한다. 이때 모델을 auto-regressive 방식으로 동작하는데, 이전에 생성한 토큰들을 다음 토큰을 만들 때 입력으로 함께 사용한다.

image.png

Transformer도 기본적으로 인코더-디코더 구조를 따르지만 인코더와 디코더 모두에서 여러 층의 Self-Attention과 point-wise, fully connected layers(즉, 위치 별로 독립적인 MLP)을 층층이 쌓아 구성되어 있다. 이 구조는 Figure 1의 왼쪽이 인코더, 오른쪽이 디코더에 해당한다.


3.1 Encoder and Decoder Stacks

인코더는 총 6개의 동일한 층으로 쌓여 있다.

각 층은 두 개의 하위 구성 요소로 이루어져 있는데 하나는 multi-head self-Attention, 다른 하나는 위치별로 독립적인 완전 연결 피드포워드 네트워크이다.

각 sub-layer는 residual connetcion을 적용하고 그 다음에 layer normalization을 수행한다.

즉, 각 서브레이어의 출력은 다음과 같은 형태로 계산된다.

LayerNorm(x + Sublayer(x))

(여기서 Sublayer(x)는 해당 서브레이어의 실제 계산 함수)

잔차 연결이 제대로 작동하려면, 모든 서브레이어와 임베딩 층의 출력 차원이 같아야 해서, 모델 전체 차원은 d_model = 512로 고정되어있다.

디코더도 마찬가지로 6개의 동일한 층으로 구성하지만

디코더의 각 층에는 인코더와는 달리 세 번째 sub-layer가 추가되어있는데 이 sub-layer는 인코더의 출력에 대해 multi-head Attention을 수행한다.

디코더도 마찬가지로 각 서브레이어마다 잔차 연결_ 레이어 정규화를 적용한다.

추가로 디코더의 셀프 어텐션 서브레이어는 미래 위치를 보지 못하는 masking을 적용한다. 이 마스킹과 함께 출력 임베딩이 한 칸씩 밀려 있는 구조 덕분에 디코던 현재 위치 i예측을 할 때 i 이전의 위치의 출력 정보만 참고 할 수 있게 된다.


3.2 Attention

image.png

  • Query 하나와
  • key - value 쌍 여러 개를 받아서
  • 아웃풋을 만들어내는 함수이다.

여기서 쿼리, 키, 값, 출력은 모두 벡터 형태다.

출력은 여러 개의 값(Value)을 가중합(weighted sum)으로 계산하는데 각 값에 얼마만큼 가중치를 줄지는 쿼리와 해당 키 간의 유사도를 계산해서 정한다.

쉽게 말해서 쿼리가 어떤 키와 가장 잘 맞는지를 판단해서 그에 해당하는 값들을 가중치를 줘서 조합하는 구조이다.


3.2.1 Scaled Dot-producct Attention

어텐션은 5개의 단계에 따른다.

  1. 입력으로는 쿼리Q, 키 K, 값 V 세 가지 벡터가 주어진다.

    • 쿼리, 키 : d_k 차원
    • 값 : d_v 차원
  2. 먼저 Query와 key 사이의 유사도(dot product)를 계산한다.

    이 값이 클 수록 해당 키가 쿼리와 잘 맞는다는 뜻이다.

  3. 그런데 d_k 값이 커지면 dot product 결과 값이 커져서 softmax 함수의 gradient가 너무 작아지는 문제가 생기기 때문에 점곱 결과를 √d_k로 나눠서 스케일링 해준다.

  4. 이렇게 구현 값들에 sofmax를 적용해서 각각의 값(Value)에 얼마맠늠의 가중치를 줄지를 정한다.

  5. 마지막으로 이 가중치들과 값(Value)들을 곱해서 weighted sum을 계산하면 최종 출력이 나온다.

image.png


3.2.2 Multi-Head Attention (다중 헤드 어텐션)

단일 어텐션만 쓰면, 정보가 한 방향으로만 집중돼서 다양한 관계를 동시에 보는 데는 한계가 있다. 그래서 Transformer는 어텐션을 한 번만 계산하지 않고, 여러 개의 헤드로 나눠서 병렬로 계산한다.

  1. 입력 Q,K,V를 각각 여러 개의 다른 방향으로 선형 변환한다.

    (ex : 8개의 헤드가 있다면 8개의 서로 다른 가중치로 Q,K,V를 만든다는 뜻.)

  2. 이렇게 만든 여러 쌍의 Q,K,V에 대해 각 헤드마다 Scaled Dot-Product Attention을 따로 계산해

  3. 각각의 헤드가 구한 결과 벡터들을 전부 이어 붙이고 (concat) 다시 한번 선형 변환을 해서 최종 출력으로 만든다.

이렇게 하면 각 헤드는 서로 다른 위치나 의미에 집중할 수 있다. 예를 들어 어떤 헤드는 문장의 구조 다른 헤드는 단어 의미에 집중할 수 있다.

다양한 관점을 동시에 반영할 수 있어서 모델 표현력이 좋아진다.

image.png

여러 개의 어텐션을 동시에 수행해서, 다양한 정보에 주의를 분산시키는 구조이다


3.2.3 Applications of Attention in our Model

Transformer는 3가지 종류의 어텐션을 사용한다.

  1. 인코더-디코더 어텐션 (Encoder-Decoder Attention)
  • 디코더 내부에서 사용
  • Query : 디코더의 출력
  • key, value : 인코더의 출력
  • 역할 : 디코더가 입력 문장의 모든 위치를 참고할 수 있도록 해줌 ⇒ 어떤 입력 단어에 주의를 집중해야 할지 결정함
  1. 인코더의 셀프 어텐션(Self-Attention in Encoder)
    • 인코더 내부에서 같은 문장 내의 단어들끼리 서로 정보를 주고 받음
    • 쿼리, 키, 값 전부 : 인코더의 이전 층 출력
    • 모든 단어가 서로를 자유롭게 참고할 수 있음 ⇒ 예 : 문장에서 “he”가 누구를 가리키는지 파악
  2. 디코더의 셀프 어텐션 (Self-attention in Decoder)
    • 디코더도 자기 내부에서 셀프 어텐션을 사용함
    • 단, 미래 단어를 못 보게 마스킹(masking) 처리함
    • 이렇게 해야 디코더가 한 글자씩 예측하는 auto-regressive 구조를 지킬 수 있다.

3.3 위치별 피드포워드 네트워크(Position-wise Feed-Forward Networks)

Transformer의 각 인코더와 디코더 층에는 어텐션 서브레이어 외에 위칠별로 독립적으로 작동하는 완전 연결(feed-forward) 네트워크가 하나씩 들어가 있다.

네트워크 구조

image.png

이걸 각 단어 위치마다 독립적으로 적용함

→ 즉 문장 전체를 한꺼번에 처리하는 게 아니라, 단어 하나하나에 같은 방식으로 적용된다.

  • 파라미터 구성(기본 모델 기준):
    • 입력/출력 차원 : d_model = 512
    • 중간(hidden)차원 : d_ff = 2048 → 중간에 차원을 확장했다가 다시 줄이는 구조

어텐션은 단어들 간의 관계를 잡아주는 역할이라면 이 FFN은 각 단어 표현을 더 복잡하게 변형하고 강화하는 역할

어텐션이 문맥을 주고받게 했다면 FFN은 그 결과를 잘 다듬는 필터


3.4 Embeddings과 softmax

Transformer도 다른 시퀀스 모델들과 마찬가지로 단어(토큰)들은 벡터로 바꾸는 임베딩 층과 디코더 출력을 단어 확률로 바꾸는 소프트맥스 층을 사용한다.

Embedding

  • 입력 단어들과 출력 단어들은 각각 고정된 차원 벡터로 변환된다.
  • 이 차원 모델 전체와 같은 d_model (보통 512)
  • 입력 임베딩과 출력 임베딩은 하나의 동일한 가중치 행렬을 공유함 → 이렇게 하면 파라미터 수를 줄일 수 있음 → 학습 효율도 좋아짐

출력층 : 선형 변환 + 소프트맥스

  • 디코더의 최종 출력 벡터는 선형 변환 → 소프트맥스 과정을 거쳐서 다음 단어가 무엇일지 확률 분포로 바뀜

임베딩 벡터 크기 보정

  • 임베딩 값을 사용할 때 벡터에 dmodel\sqrt{d_{\text{model}}}를 곱해줌 → 값이 너무 작아지지 않도록 크기를 맞추기 위한 보정

이 파트는 Transfomer가 문자 → 숫자, 숫자 → 확률로 변환하는 입출력 인터페이스이다.


3.5 Positional Encoding

Transfomer는 순서를 따로 처리하지 않기 때문에, 단어의 위치 정보를 따로 추가해줘야한다. 그래서 sin과 cos함수를 이용해 각 위치마다 고유한 패턴의 벡터를 만들어낸다. 이 위치 벡터는 단어 임베딩에 더해서 모델에 입력되며, 이를 Positional Encoding이라고 부른다.

고정된 방식이지만, 학습 가능한 방식과 성능이 비슷하고 긴 문장에도 잘 일반화된다는 장점이 있다.


4. why self-Attention

self-attention 장점:

  1. 계산 속도 : RNN은 순차적으로 계산해야하지만, self-attention은 한 번에 병렬로 처리 가능
  2. 경로 길이 : 멀리 떨어진 단어 간 관계도 한 단계만에 연결 가능(RNN은 길게 돌아야함)
  3. 복잡도 : 짧은 문장일 땐 Self-Attention이 RNN보다 계산량이 적고 빠름

결론적으로 self-attention은 병렬화가 쉽고 장기의존성도 잘 학습할 수 잇어서 sequence 처리에 매우 효율적이다.


5~7 요약 (학습, 결과, 결론)

Transformer는 큰 데이터셋에서 빠르고 효율적으로 학습되며,

기계 번역과 문장 분석에서 기존 최고 성능을 능가하는 BLEU 점수를 기록했다.

결론적으로, 어텐션 기반 모델은 RNN 없이도 더 좋은 성능과 효율성을 모두 잡을 수 있다

0개의 댓글