"Attention Is All You Need"라는 논문은 어떤 혁신을 가져왔는가? 이 논문이 왜 모든 자연어처리의 기초 논문이 된 것일까 궁금해졌다.
RNN, LSTM과 같은 recurrent한 구조 없이도 시퀀스를 처리할 수 있다는 것을 보여주었기 때문이다.
그리고 이러한 transformer 구조의 특성상, 병렬 연산이 가능해지고, Long-Term dependency 문제를 해결할 수 있었기 때문에 엄청난 성능 향상 및 빠른 학습이 가능해진 것 !!
그동안의 sequence transduction model들은 복잡한 RNN/CNN의 encoder-decoder 모델로 구성되어왔다.
이 논문은 오직 attention mechanism 만을 사용한 Transformer 라는 새로운 신경망을 제안한다.
두 개의 기계 번역 실험을 통해
됨을 보여준다. 또한, 다른 작업에도 generalize가 잘 되며, 제한된 / 많은 데이터들에서 둘 다 영어 구문 분석 능력이 뛰어났다.
그동안 RNN, LSTM, GRU 모델을 통해 sequence modeling 이나 transduction 문제를 해결하는 것이 일반적이었다. 그러나 이런 모델들은 각 입력을 시간에 따라 순차적으로 처리한다. 계산 방식을 보면, 각 요소에 대해 이전 hidden state의 값을 사용하여 현재의 hidden state값을 계산한다.

매 시점마다 이전 은닉 상태를 입력과 함께 사용하여 새로운 상태를 만든다.

따라서 각 시점의 계산이 이전 시점의 값을 필요로 하기 때문에, 모든 시점을 동시에 계산하는 병렬 처리 가 불가능하다. LSTM은 gate를 활용하여 장거리 관계에서 학습이 안되는 문제를 완화하긴 하였지만, 그럼에도 연속된 많은 연산을 거치기 때문에 긴 시퀀스의 정보가 점차 소실되거나 폭발하므로 긴 시퀀스의 정보를 학습하기 어려웠다.
이후 연구들은 팩토리제이션 트릭과 조건부 계산을 통해 계산 효율성을 크게 향상시켰다. 이러한 기법들은 모델의 성능 향상에도 기여했으나, 본질적인 순차적 계산으로 인한 한계 는 해결하지 못했다.
그러나 Attention Mechanism은 sequence의 길이(거리)에 상관없이 의존성을 모델링 할 수 있다.
이전의 RNN이나 LSTM과 같은 모델은 각 단계에서 이전 결과를 기반으로 연속적으로 연산을 수행하므로, 계산이 순차적이고 속도가 느림. 반면 Transformer는 recurrence 모델을 완전히 없애고 attention만을 사용하면서 병렬 처리를 가능하게 함.
RNN:
입력 순서대로 하나씩 처리하기 때문에
→ 첫 단어와 마지막 단어의 관계를 계산하려면 전체 시퀀스를 따라가야 함
→ 연산 횟수: 시퀀스 길이만큼 (O(n))
CNN (ConvS2S, ByteNet):
컨볼루션은 병렬적으로 처리하지만 멀어질수록 의존성 학습이 어려워진다 는 단점을 아직 해결하지 못함
→ 먼 거리의 단어 간 관계를 보려면 여러 층(layer)을 거쳐야 함
→ 연산 횟수: 거리만큼 늘어남 (O(log n) 또는 O(n))
Transformer :
→ 연산 횟수가 상수 이다.
→ 단어 A와 단어 B 사이의 의존 관계를 파악하는 데 필요한 연산 수는 시퀀스 길이와 무관하게 일정 = O(1)
→ 대신 전체 시퀀스에 대해 모든 쌍의 관계를 계산하므로, 전체 연산량은 O(n²)
전체적으로 연산량은 많지만 빠른 이유는 병렬 연산이 가능하기 때문
그러나 Attention weights를 평균화하는 과정에서 해상도가 감소하는 문제가 발생. 이 과정에서 정보를 평균화하게 되어, 세밀한 위치 정보가 손실될 수 있음.
=> Multi-Head Attention 을 사용하여 해결(section 3.2)

Transformer 원 논문에서 제안된 Sinusoidal Positional Encoding은 다음과 같이 구성됩니다:
이 값들은 단어 임베딩에 비해 작고 정규화된 패턴을 가지고 있어서:
➡️ 즉, 완전히 덮어쓰는 게 아니라 **약간의 위치 편향(bias)**를 주는 식이에요.
k
),PE(k,2i+1)=cos(
10000
2i/d
k
),
여기서
𝑑
d는 모델의 임베딩 차원 수,
𝑖
i는 인덱스입니다
machinelearningmastery.com
. 이로써 짝수 인덱스 차원에는 사인파, 홀수 인덱스 차원에는 코사인파가 배정되며, 주파수가 각 차원마다 기하급수적으로 다르게 설정됩니다. 즉, 서로 다른 주파수의 사인·코사인 파형이 겹쳐 각 위치마다 고유한 벡터 패턴을 형성합니다
machinelearningmastery.com
. 예를 들어, 위치 0,1,2,...의 인코딩 벡터를 시각화하면 저주파부터 고주파까지 다양하게 변화하는 사인파 그래프들을 볼 수 있습니다. 이러한 주기적 특성 덕분에 모델이 상대적 거리를 학습하기도 유리하다고 알려져 있습니다
그래야 residual connection이 가능. 벡터 연산이니까 같은 차원이어야지
attention function에 대해 알아보자. attention은 쿼리와 key-value 쌍을 출력에 매핑하는 것으로 볼 수 있다. 출력은 가중평균을 통해 계산된다.
Query, Key, Value란 각각 무엇을 의미할까?
Query (질의): 입력 시퀀스의 특정 위치에서 다른 위치와의 연관성을 확인하기 위한 기준이 되는 벡터. 쉽게 말해, 입력 시퀀스의 각 단어 또는 토큰이 "나는 다른 단어들과 어떤 관계가 있지?"라고 질문하는 역할을 한다. Query는 해당 위치의 정보가 다른 단어들과 얼마나 연관이 있는지를 찾기 위한 시작점.
Key (키): 입력 시퀀스의 각 위치에 자신이 가진 정보를 압축한 벡터로, Query와의 유사도를 계산하기 위한 정보. Query는 각 Key와 비교되어 유사도를 측정하게 된다. Key는 일종의 "다른 단어들이 나와 얼마나 관련이 있는지 측정할 때 사용할 정보"를 담고 있다.
Value (값): Query가 Key와 상호작용하여 계산된 연관성(주의 점수)을 통해 최종적으로 참조하게 되는 정보를 담고 있는 벡터. Query와 Key의 유사도를 기반으로 가중치가 부여된 후, Value를 종합하여 최종적으로 문맥을 고려한 표현을 계산한다.
정리하자면:
Query: "나와 관련된 정보는?"
Key: "내가 가진 정보는?"
Value: "최종적으로 참조할 정보는?"
이라고 볼 수 있다.
먼저 attention function을 보면 아래와 같다.

처음에 입력 seq의 각 요소는 Q,K,V 의 행렬로 변환된다.
(이때 ,,는 가중치)
: Query와 key의 내적으로 유사도 계산
: key 벡터의 차원. 이의 루트 값으로 나누어 주어 내적 값이 너무 커지지 않도록 스케일링
또한 softmax 함수를 통해 확률값으로 변환한 이 값이 attention score이다.
자신을 포함해 다른 단어들과의 유사도(관계)를 나타내는 값이 됨을 알 수 있다.
=> additive attention도 있으나, 이보다 dot-product attention이 빠르고 공간 효율적이라 이를 따랐다. 그러나 차원이 커질수록 (값이 커질수록) 내적 값이 매우 커지고, 이는 기울기 소실 문제로 이어질 수 있다. 따라서 루트 값으로 나누어 완화하고자 하였다.
Multi-Head Attention은 여러 개의 서로 다른 Attention Head를 동시에 적용하여 다양한 관점에서 정보를 처리하는 것이다. 각 헤드가 서로 다른 Query, Key, Value로
1. 독립적인 attention 계산을 수행 한 후, 각 헤드가 계산한 결과(Value 벡터들에 가중치가 적용된 값들)를
2. 연결(concatenate) 하고, 이를 다시
3. 선형 변환 을 통해 최종 출력으로 만든다.

Head 에 대해 자세히 알아보자. 입력 시퀀스의 각 벡터(단어)를 여러 개의 작은 벡터로 분할한다. 예를 들어, 512차원의 입력 벡터를 8개의 헤드로 나눈다면, 각 헤드에 대해서는 64차원짜리 벡터들이 사용되는 것이다. 이렇게 분할한 벡터들은 각 헤드마다 서로 다른 Query, Key, Value 행렬에 적용된다. 각 헤드마다 해당 벡터의 서로 다른 부분의 정보 를 학습하게 되는 것이다.
따라서 각 헤드가 서로 다른 가중치 행렬()을 사용하여 Query, Key, Value를 계산하고, attention score를 계산한다. 즉, 여러 헤드가 동시에 같은 입력에 대해 서로 다른 문맥을 학습하게 된다.
각 헤드는 서로 다른 가중치 행렬을 가지고 있기 때문에 Query, Key, Value 벡터들을 서로 다르게 변환한다. 이를 통해 같은 입력 토큰이라도 헤드마다 다르게 해석되며, 다양한 관점에서 입력을 이해할 수 있게 된다.
ex. 한 헤드는 단어 간 짧은 거리에서의 관계를 더 잘 학습하고, 또 다른 헤드는 긴 거리에서의 관계를 더 잘 학습
Transformer 모델은 세 가지 방식으로 멀티-헤드 어텐션을 사용한다:
1. Encoder-Decoder attention
: 디코더의 이전 레이어에서 쿼리가 오고, 인코더의 출력에서 키와 값을 통해 연산
2. Encoder self-attention
: 키, 값, 쿼리가 모두 이전 레이어의 출력에서 나옴
3. Decoder self-attention
: 디코더에서 autoregressive property를 유지하기 위해(오른쪽에서 왼쪽으로 정보를 전달하는 것을 방지) 해당 값들을 마스킹(−∞로 설정)
인코더와 디코더 모두 각 레이어마다 해당 네트워크를 가지고 있음.

Transformer 모델에서는 다른 시퀀스 변환 모델과 마찬가지로, 학습된 임베딩(embedding)을 사용하여 입력 토큰과 출력 토큰을 차원 d_model의 벡터로 변환
입력 임베딩 레이어, 출력 임베딩 레이어, 그리고 디코더의 소프트맥스 이전에 있는 선형 변환이 같은 가중치 행렬(weight matrix)을 공유
임베딩 레이어에서는 가중치 행렬을 √d_model로 곱하여, 임베딩 벡터의 크기를 적절히 조정
Transformer 모델에는 순환(RNN)이나 합성곱(CNN) 구조가 없기 때문에, 시퀀스의 순서 정보를 모델에 반영하기 위해 위치 인코딩(positional encoding)을 추가한다.

(학습된 위치 인코딩도 사용해 보았으나, 성능이 비슷하고 심지어 고정된 인코딩이 더 긴 시퀀스에 적용이 가능하여 고정된 인코딩으로 진행)
CNN,RNN과 비교하여 Self-Attention의 장점이 3가지 있다.

총 계산 복잡도
Self-Attention 레이어는 모든 위치 간의 연결이 상수 시간 내에 이루어지는 반면, RNN 레이어는 O(n)의 순차적인 연산이 필요하다.
병렬 처리 가능성
Self-Attention 레이어는 계산을 병렬화할 수 있는 정도가 높다. 즉, 입력 시퀀스의 모든 위치에 대한 처리를 동시에 수행할 수 있어 더 빠른 연산을 가능하게 한다.
장기 의존성 학습의 경로 길이
Self-Attention은 입력 및 출력 시퀀스 간의 경로 길이를 짧게 유지하여 장기 의존성을 쉽게 학습할 수 있다.
추가적으로, Self-Attention은 입력 시퀀스의 길이(n)가 표현 차원(d)보다 작을 때 더 빠르며, 일반적으로 n<d이다. CNN은 커널 폭(k)으로 인해 모든 입력 및 출력 위치를 연결할 수 없으며, 이를 위해 O(n/k) 또는 O(logk(n))의 레이어 스택이 필요하다. CNN은 일반적으로 RNN보다 계산 비용이 더 높다.
이는 처음 warmup_steps(4,000) 동안 학습률을 선형으로 증가시키고, 이후 스텝 번호의 역 제곱근에 비례하여 감소시킴Residual Dropout
Label Smoothing
big models
base models
기본 모델은 마지막 5개의 체크포인트의 평균을 사용하여 생성되었으며, 큰 모델은 마지막 20개의 체크포인트의 평균을 구하였다. 빔 서치를 사용하여 빔 크기 4와 길이 패널티 α = 0.6로 설정하였다. 또한 추론 시 최대 출력 길이는 입력 길이 + 50으로 설정하였으나, 가능한 경우 조기종료하도록 하였다.
아래는 각 모델의 훈련 시간, GPU 수, 및 부동소수점 연산량을 통해 성능을 비교한 표이다.

Transformer의 다양한 구성 요소의 중요성을 평가하기 위해, 우리는 기본 모델을 여러 가지 방식으로 변경하고, 이를 통해 영어-독일어 번역에서의 성능 변화를 측정하였다.

(A): 주의 헤드 수와 주의 키 및 값 차원을 변경하여 연산량을 일정하게 유지. 단일 헤드 주의는 최적 설정보다 0.9 BLEU 낮았으며, 헤드 수가 너무 많아지면 품질이 감소하였다.
(B): 주의 키 크기 dk를 줄이면 모델 품질이 저하되는 것을 관찰. 이는 호환성 결정을 쉽게 하는 것이 아니며, 점곱보다 더 정교한 호환성 함수가 유리할 수 있음을 알 수 있다.
(C) & (D): 예측한 바와 같이, 더 큰 모델이 더 나은 성능을 보이며, 드롭아웃이 과적합을 피하는 데 매우 유용함을 알 수 있음.
(E): 우리의 사인 함수 기반 위치 인코딩을 학습된 위치 임베딩으로 대체했을 때, 기본 모델과 거의 동일한 결과.
Transformer 모델이 다른 작업에 일반화될 수 있는지를 평가하기 위해, 영어 구문 분석 실험을 수행하였다.
이 작업은 강한 구조적 제약이 있으며, 출력이 입력보다 상당히 길다는 특징이 있다.
실험 설정:
아래의 표의 결과에 따르면, Recurrent Neural Network Grammar를 제외한 모든 이전 모델보다 더 나은 결과를 기록하였다. RNN 시퀀스-투-시퀀스 모델과 비교할 때, Transformer는 WSJ 훈련 세트(40K 문장)만으로 훈련했음에도 불구하고 BerkeleyParser【29】보다 더 나은 성능을 보였다.

이 실험 결과는 Transformer 모델이 다양한 자연어 처리 작업에서 효과적으로 일반화될 수 있음을 시사한다.
이 연구에서는 Transformer를 소개하며, 이는 완전히 어텐션에 기반한 최초의 시퀀스 변환 모델이다. 기존의 인코더-디코더 구조에서 주로 사용되던 순환층을 다중 헤드 셀프 어텐션으로 대체하였다.
주요 성과:
향후 계획:
어텐션 기반 모델을 다른 작업에도 적용할 계획. 텍스트 외의 입력 및 출력 모달리티를 포함한 문제로 Transformer를 확장할 계획이며,이미지, 오디오, 비디오와 같은 대규모 입력 및 출력을 효율적으로 처리하기 위해 국소적, 제한된 어텐션 메커니즘을 탐구할 것이다. 또한, 생성 과정의 순차성을 줄이는 것도 하나의 목표이다.
사용한 코드 : github