Attention Is All You Need 논문 리뷰

김준형·2025년 3월 29일

딥러닝 논문 리뷰

목록 보기
2/34

[논문리뷰] Attention Is All You Need
Ashish Vaswani, et al.

Abstract (초록)
기존의 주요 시퀀스 변환 모델은 Encoder와 Decoder를 포함하는 복잡한 순환 신경망 또는 합성곱 신경망에 기반하고 있다. 최고의 성능을 보이는 모델들도 Encoder와 Decoder를 어텐션 메커니즘을 통해 연결한다. 순환과 합성곱 구조를 완전히 배제하고 어텐션 메커니즘만을 기반으로 하는 새로운 간단한 네트워크 아키텍처인 Transformer를 제안한다. 이 모델은 더 우수한 품질을 보이는 동시에, 병렬 처리가 가능하여 학습 시간도 현저히 적게 든다.

Introduction (서론)
LSTM, GRU를 포함한 순환 신경망은 언어 모델링 및 기계 번역과 같은 시퀀스 모델링과 변환 문제에서 최고의 성능을 보여줬다. 이후 많은 연구들이 순환 언어 모델과 Encoder-Decoder 아키텍처를 계속해서 확장해왔다. 순환 모델은 일반적으로 입력 및 출력 시퀀스의 기호 위치에 따라 연산을 구성한다. 이전의 은닉 상태 h(t−1)와 위치 t의 입력을 바탕으로 은닉 상태 h(t)를 순차적으로 생성한다. 이러한 순차성 때문에 병렬 처리가 불가능하며, 이는 시퀀스 길이가 길어질수록 중요한 문제가 된다. 메모리 제약으로 인해 배치 처리에도 제한이 생긴다. 최근 연구에서는 계산 효율을 향상시키기 위해 인수분해 기법과 조건부 연산을 도입하여 성능을 개선하려는 시도가 있었지만 순차적 계산이라는 근본적인 제약은 남아 있다. 어텐션 메커니즘은 입력 및 출력 시퀀스 내의 거리와 무관하게 종속성을 모델링할 수 있도록 해줘 핵심 요소로 자리잡았다. 하지만 이러한 어텐션 메커니즘은 대부분 순환 신경망과 결합되어 사용되어 왔다.

본 논문에서는 순환 구조를 배제하고, 대신 입력과 출력 간의 전역 종속성을 포착하기 위해 전적으로 어텐션 메커니즘에 의존하는 새로운 모델 아키텍처인 Transformer를 제안한다. Transformer는 훨씬 더 높은 수준의 병렬화를 가능하게 하고 최고 성능을 달성한다.

Background(배경)
병렬 계산을 위해 CNN을 기본 구성 요소로 사용하여, 입력 및 출력의 모든 위치에 대해 은닉 표현을 병렬로 계산하는 시도가 있었다. 그러나 이러한 모델에서는, 임의의 두 입력 또는 출력 위치 간의 신호를 연결하는 데 필요한 연산 수가 그 거리와 함께 증가한다. 예를 들어 ConvS2S는 선형적으로, ByteNet은 로그 형태로 연산이 증가한다. 이러한 방식은 멀리 떨어진 위치 간의 종속성을 학습하는 것을 어렵게 만든다.

Transformer에서는 일정한 연산 수로 이를 해결한다. 이는 어텐션 가중치를 평균화하는 방식 때문에 유효 해상도가 줄어드는 단점이 있지만, 이를 다중 헤드 어텐션으로 보완한다.

셀프 어텐션은 단일 시퀀스 내의 서로 다른 위치 간의 관계를 모델링하여 그 시퀀스의 표현을 계산하는 메커니즘이다. 셀프 어텐션은 독해, 추상적 요약, 텍스트 함의 판단, 문장 표현 학습 등 다양한 작업에서 성공적으로 사용되었다.

Model Architecture(모델 구조)
대부분의 신경망 기반 시퀀스 변환 모델은 Encoder-Decoder 구조를 가진다. Encoder는 입력 기호 시퀀스를 받아 이를 연속적인 표현 벡터 시퀀스로 변환한다. 이후, 이를 바탕으로 Decoder는 출력 기호 시퀀스를 한 번에 하나씩 생성한다. 모델은 각 단계에서 auto-regressive 방식으로 작동한다. 이는 이전에 생성된 기호들을 다음 기호를 생성할 때 추가 입력으로 활용하는 방식이다. Transformer는 아래와 같은 Encoder-Decoder 구조를 따른다. Encoder와 Decoder 모두 셀프 어텐션과 포인트 와이즈, 완전 연결층을 사용한다.

ⓐ Encoder and Decoder Stacks
Encoder는 동일한 구조의 층 6개로 구성된다. 각 층은 두 개의 서브 레이어로 구성된다.
① 멀티-헤드 셀프 어텐션
② 위치별(포지션 와이즈) 완전 연결 신경망
각 서브 레이어에는 잔차 연결, 레이어 정규화가 이어진다. 각 서브 레이어의 출력은 다음과 같다.
LayerNorm(x + Sublayer(x)) (Sublayer(x)는 해당 서브 레이어의 연산)

Decoder도 마찬가지로 6개의 동일한 층(N=6)으로 구성된다.
Decoder는 Encoder의 두 서브 레이어 외에 Encoder 스택의 출력을 기반으로 멀티-헤드 어텐션을 수행하는 층을 가진다. 인코더와 마찬가지로, 각 서브 레이어에는 잔차 연결과 그 뒤를 잇는 레이어 정규화가 적용된다.
또한, Decoder의 셀프 어텐션은 현재 위치에서 이후 위치로의 어텐션을 방지한다. 출력 임베딩이 한 위치씩 오프셋되도록 설계된 것과 결합되어, 모델이 다음 토큰을 미리 보지 않고 생성한다.

ⓑ Attention
어텐션은 query, key, value → output 으로 매핑하는 함수다. 이들 모두 벡터다. 출력은 value의 가중합으로 계산된다. 각 값의 가중치는 해당 값의 key와 query 간의 유사도로 정해진다.

위 그림의 어텐션은 Scaled Dot-Product Attention이라 부른다. query와 key 간의 내적을 계산하고, 그 결과를 √dk로 나눈 후, 소프트맥스 함수를 적용하여 각 값에 대한 가중치를 얻는다. 실제 구현에서는, 여러 쿼리를 동시에 처리하기 위해 query를 행렬 Q에, key를 K에, value를 V 행렬에 담는다. 식은 다음과 같다.


멀티 헤드 어텐션은 query, key value를 각각 서로 다른 학습 가능한 선형 변환을 통해 각각의 차원으로 투영한다. 각 투영된 query, key, value 쌍에 대해 병렬로 어텐션 연산을 수행하여 출력을 생성한다. 이렇게 나온 h개의 출력을 연결한 후, 다시 선형 변환하여 최종 출력을 얻는다. 식으로는 아래와 같다.

Transformer는 멀티-헤드 어텐션을 다음 세 가지 방식으로 사용한다.
① Encoder-Decoder Attention
이 층에서는 Query가 Decoder의 이전 층에서 오고, Key와 Value은 Encoder의 출력에서 온다. 이를 통해 Decoder의 모든 위치가 입력 시퀀스의 모든 위치를 참조한다.
② Encoder 셀프 어텐션
모든 값이 Encoder의 이전 층의 출력에서 온다. Encoder 내의 각 위치는 자신을 포함한 모든 위치를 참조할 수 있다.
③ Decoder 셀프 어텐션
Decoder의 각 위치는 자기 자신을 포함한 그 이전 위치들까지만 참조한다. auto-regressive 성질을 유지하기 위해 Scaled Dot-Product Attention 내부에서 마스킹을 적용한다.

ⓒ Position-wise Feed-Forward Networks
Encoder와 Decoder의 각 레이어에는 완전 연결된 피드포워드 네트워크가 들어있다. 피드포워드 네트워크는 각 위치에 대해 독립적으로, 동일한 방식으로 적용된다. 구조는 Linear → ReLU → Linear.
선형 변환들은 시퀀스 내의 모든 위치에서 동일한 연산을 수행하지만,
레이어마다 다른 파라미터를 사용한다. 다른 관점에서, 이것은 커널 크기 1의 컨볼루션을 두 번 적용한 것과 같다.

ⓓ Embeddings and Softmax
다른 시퀀스 변환 모델들과 마찬가지로, 우리는 학습된 임베딩을 사용하여 입력 토큰과 출력 토큰을 벡터로 변환한다. 또한, Decoder의 출력을 다음 토큰의 확률 분포로 변환하기 위해 학습된 선형 변환과 소프트맥스 함수를 사용한다.
입력 임베딩 층, 출력 임베딩 층, 소프트맥스 이전의 선형 변환에 동일한 가중치를 공유한다.

ⓔ Positional Encoding
Transformer에는 RNN이나 CNN 구조가 없어서 순서 정보가 없다. 상대적 또는 절대적인 위치 정보를 모델에 주입하기 위해, 입력 임베딩에 포지셔널 인코딩을 더한다. 사인/코사인 함수 기반 고정 인코딩 함수를 사용한다. 이 방식은 상대적 위치 표현이 쉬워 Attention을 학습하기 쉬워진다.

Why Self-Attention(왜 셀프 어텐션인가?)
기존의 시퀀스 변환에서 자주 사용되는 RNN과 CNN 층과 셀프 어텐션 층을 비교한다. 셀프 어텐션을 사용하는 이유는 다음 3가지다.
① 레이어당 총 계산 복잡도
② 병렬화 가능한 연산의 양
③ 장거리 의존성 사이의 경로 길이 -> 최대 경로 길이
(장거리 의존성 학습은 시퀀스 변환 과제에서 중요한 도전 과제다. 입력과 출력 시퀀스의 어떤 두 위치 간이라도 경로가 짧을수록 학습이 쉬워진다.)
🔢 계산 복잡도는 모델이 입력을 처리하는 데 드는 연산량을 의미한다. 입력 길이 n, 벡터 차원 d, 커널 크기 k로 표현한다.

<비교 결과>
① 셀프 어텐션
모든 위치가 상수 시간 안에 연결된다. 순차 연산이 필요하지 않아 병렬화에 유리하다.
② 순환층
O(n)번의 순차 연산이 필요한 만큼 병렬화가 어렵다. 계산 복잡도는 낮지만 장거리 의존성 학습이 어렵다.
③ 합성곱층
커널 폭 k<n일 경우 한 층에서 모든 위치 간 직접 연결이 불가하다. 여러 층을 쌓거나 팽창 합성곱층을 사용하면 전체 연결이 가능하다.
④ 제한된 셀프 어텐션
긴 시퀀스에 대해 계산 효율을 높이기 위해, 셀프 어텐션을 주변 r개 토큰으로 제한한다. 이 경우 계산 복잡도가 줄고 최대 경로 길이가 증가한다.

Training(학습 방식)

ⓐ Training Data and Batching
WMT 2014 영어->독일어 데이터셋(약 450만 문장 쌍)을 사용하여 학습했다. 문장은 Byte-Pair Encoding 방식을 사용해 인코딩되었고, 소스와 타겟이 공유하는 약 37,000개 토큰의 단어 집합을 사용했다. 영어-프랑스어의 경우, 훨씬 더 큰 WMT 2014 영어->프랑스어 데이터셋(약 3,600만 문장 쌍)을 사용했고, 32,000개의 word-piece 단어 집합으로 토큰화했다. 각 학습 배치는 약 25,000개의 소스 토큰과 25,000개의 타겟 토큰으로 구성했다.

ⓑ Hardware and Schedule
우리는 NVIDIA P100 GPU 8개가 장착된 머신 한 대에서 모델을 학습했다. base 모델 기준으로, 1 스텝당 약 0.4초가 걸렸고, 총 100,000 스텝, 약 12시간 동안 학습했다.

ⓒ Optimizer
Adam 옵티마이저를 위에 따로 커스텀 학습률을 적용했다. 학습률은 아래 수식에 따라 변화한다. 초기 단계(step<4000)에서는 min() 함수는 2번째 항을 선택한다. 학습률이 선형적으로 증가하는 것이다. warmup_steps 이후(step>4000) min() 함수는 1번째 항을 선택한다. 학습률이 step의 역제곱근에 따라 감소하는 것이다.

ⓓ Regularization
학습 중 총 3가지 정규화 기법을 사용했다.

① 드롭아웃
각 서브 레이어의 출력에 해당 서브 레이어 입력과 잔차 연결되기 전에 드롭아웃을 거치도록 했다. Encoder와 Decoder 스택의 임베딩 + 포지셔널 인코딩 합에도 드롭아웃을 적용했다. base 모델의 경우, 드롭아웃 비율은 P(drop)=0.1을 사용했다.

② 라벨 스무딩
정답 클래스를 1로 확정하지 않고, 약간 분산시켜 모델이 덜 확신하게 학습시키는 기법이다. 이 기법은 모델의 확신을 방지하고 일반화 성능을 높인다. perplexity는 악화되지만 BLEU 점수와 정확도는 향상된다.

Results(결과)
ⓐ Machine Translation
WMT 2014 영어→독일어 번역 과제에서, Transformer의 big 모델은
기존에 보고된 최고 성능 모델들보다 BLEU 점수 2.0 이상 향상된
새로운 최고 점수인 28.4를 달성했다. base 모델조차도, 이전에 발표된 모든 모델보다 높은 성능을 보였고, 학습 비용은 훨씬 적었다.
WMT 2014 영어→프랑스어 번역 과제에서는, big 모델이 새로운 최고 점수인 BLEU 점수 41.0을 기록했다. 이는 기존 최고 모델 대비 1/4 이하의 학습 비용으로 달성한 결과다.
학습 비용(FLOPs)은 다음과 같이 추정했다:
학습 시간 × 사용된 GPU 수 × GPU당 부동소수점 연산 처리량

ⓑ Model Variations
Transformer의 다양한 구성 요소의 중요성을 평가하기 위해, base 모델을 여러 방식으로 변형하고 영어→독일어 번역 개발셋에서의 성능 변화를 측정했다.

(A): 어텐션 헤드 수 및 키/값의 차원을 변형
싱글 헤드 어텐션은 BLEU 점수가 0.9점 낮고, 헤드 수가 너무 많아도 성능이 저하됨 → 적절한 헤드 수의 균형이 중요하다.

(B): 어텐션의 키 차원을 변형
어텐션의 키 차원이 줄어들수록 모델 성능이 떨어짐 → 쿼리-키 간의 유사도 계산을 잘 하려면 충분한 차원이 필요하다.

(C), (D), (E)에서는 더 큰 모델이 성능이 더 좋고, 드롭아웃은 과적합 방지에 매우 효과적이고, 사인/코사인 포지셔널 인코딩과 학습 가능한 포지셔널 임베딩은 별 차이가 없다.

ⓒ English Constituency Parsing
Transformer가 다른 과제에도 일반화 가능한지를 평가하기 위해, 영어 구문 분석 실험을 수행했다. 영어 구문 분석 실험의 특징으로는 다음과 같다.
① 출력 결과는 강한 구조적 제약을 받는다.
② 출력 시퀀스가 입력 시퀀스보다 훨씬 더 길다.
③ 기존의 RNN 기반 시퀀스-투-시퀀스 모델들은 데이터가 적은 상황에서는 최고 성능을 달성하지 못했다.

특별한 튜닝 없이도 Transformer는 매우 우수한 성능을 보였다. Transformer는 구조적 과제에도 일반화 가능하고 강력하다.

Conclusion(결론)
이 논문에서는 Transformer를 제안했다. 이는 완전히 어텐션에 기반한 최초의 시퀀스 변환 모델로, 순환층을 멀티헤드 셀프 어텐션으로 완전히 대체했다. 번역 과제에서 Transformer는 순환 또는 합성곱 기반 아키텍처보다 훨씬 빠르게 학습했다. WMT 2014 영어→독일어, 영어→프랑스어 번역 과제 모두에서 최신 state-of-the-art 성능을 달성했다.
이후의 계획으로는 텍스트 외에도 다른 입력/출력 형태가 포함된 문제에 Transformer를 확장하려고 한다. 또한, 로컬 또는 제한된 어텐션 메커니즘을 연구하여, 대규모 입력/출력을 더 효율적으로 처리할 방법도 모색하고 있다. 생성 과정을 덜 순차적으로 만드는 것도 모색하고 있다.

🔭 현재 Transformer는 텍스트, 이미지, 오디오 등 다양한 데이터 유형을 통합하여 처리하는 멀티모달 학습 분야에서도 중요한 역할을 하고 있다.

profile
김준형

0개의 댓글