[논문리뷰] Attention Is All You Need

My_oyster_house·2024년 8월 16일

0. Abstract

기존 시퀀스 변환 모델

  • 인코더와 디코더를 포함하는 복잡한 순환 신경망(RNN)이나 합성곱 신경망(CNN)에 기반
  • 우수한 성능을 위해 어텐션 메커니즘을 사용하여 인코더와 디코더를 연결

Transformer 제안

  • RNN, CNN 을 사용하지 않음
  • 오직 어텐션 메커니즘에만 의존하는 단순한 네트워크 아키텍처

실험 결과:

  • WMT 2014 영어-독일어 번역: 28.4 BLEU 기록
    (기존 최고 성능(앙상블 포함)보다 2 BLEU 이상 개선)
  • WMT 2014 영어-프랑스어 번역: 단일 모델 최고 BLEU 점수 41.8 기록
    (3.5일 동안 8개의 GPU로 훈련)

일반화 성능

영문 구문 분석(English constituency parsing) 작업에서우수한 성능
대규모 및 제한된 훈련 데이터 모두에서 성공적으로 적용

1. Introduction

시퀀스 모델링 및 변환 문제에서 RNN, LSTM, GRU의 한계

  • Recurrent 모델은 시퀀스의 위치에 따라 계산을 진행함.
  • 순차적 특성으로 인해 병렬화가 어려움.
  • 시퀀스 길이가 길어질수록 이 문제가 더 심각해짐.
  • (계산 효율성을 높이려는 시도) 팩터라이제이션과 조건부 계산 등

Attention Mechanisme

  • 이전까지 이 한계를 극복하는 시퀀스 모델링에서 SoTA 역할.
  • 거리와 상관없이 의존성을 모델링할 수 있음.
  • 대부분의 경우 어텐션 메커니즘은 순환 네트워크와 결합하여 사용됨.

어텐션 메커니즘만을 사용한 Transformer 모델

  • RNN과 결합 없이 셀프 어텐션만으로 시퀀스를 처리할 수 있는 모델 제안
  • 병렬화가 가능
  • 8개의 P100 GPU로 12시간 훈련 후 최첨단 번역 품질을 달성함.

2. Background (배경)

reducing sequential computation을 줄이려는 노력

합성곱 신경망(CNN) 사용

  • Extended Neural GPU, ByteNet, ConvS2S 등등
  • 모든 입력과 출력 위치: 모델에 들어오는 데이터의 모든 위치(예: 문장의 각 단어)에 대해
  • 숨겨진 표현(hidden representations): 각 위치에 대해 모델이 계산한 내부적인 표현(예: 단어를 수치화한 벡터)
  • 병렬로 계산: 이 계산을 하나씩 순차적으로 하는 것이 아니라, 여러 위치에서 동시에 처리함
  • 한계: 인풋이든 아웃풋이든 두 단어 위치가 멀어지면 operation(계산)량이 늘어난다. 이로 인해, 멀리 떨어진 위치들 간의 관계(의존성)를 학습하는 것이 어려워진다. difficult to learn dependencies between distant positions.
  • Self-attention에서는 (RNN을 사용하지 않고 attention 만에 의존하는 트랜스포머)는 계산량이 늘어나는 문제가 해결된다.
  • RNN과 어텐션을 결합한 End-to-end memory networks도 좋은 성능을 보였는데 트랜스포머는 RNN을 사용하지 않아도 좋은 성능을 냈다.

3. Model Architecture (모델 아키텍처)

기본 구조: 인코더-디코더 구조

  • 대부분의 최신 딥러닝 시퀀스 변환 모델들은 인코더-디코더 구조를 사용함.

  • 인코더는 입력 시퀀스를 내부 표현(벡터)으로 변환하고, 디코더는 이 내부 표현을 바탕으로 출력 시퀀스를 한 번에 하나씩 생성함

  • 자기 회귀(auto-regressive) 방식: 디코더가 이전에 생성된 심볼(단어)을 참고하여 다음 심볼을 생성함.

  • Transformer 모델도 인코더-디코더 구조를 따름.
    - 셀프 어텐션(self-attention)과 fully-connected layer를 쌓아서 구성.
    - 입력 데이터를 병렬로 처리 가능.

3.1 인코더와 디코더

인코더 : 입력 시퀀스를 연속적인 표현(z)으로 변환

  • 동일한 6개의 레이어로 이루어진 스택.
  • 각 레이어는 두 개의 서브 레이어로 구성:
    - 멀티-헤드 셀프 어텐션(multi-head self-attention) 메커니즘.
    - fully-connected 피드포워드 feed-forward network).
  • 잔차 연결(residual connection)
    레이어의 출력을 다음 레이어에 전달할 때, 이전 레이어의 입력을 그대로 더해주는 방식. 딥러닝 모델에서 주로 역전파 과정에서 신경망이 너무 깊어질 때 발생하는 기울기 소실(vanishing gradient) 문제를 해결하기 위해 도입.
  • 레이어 정규화(layer normalization)
    각 레이어의 출력을 정규화하여, 평균이 0이고 분산이 1이 되도록 조정. 이로 인해, 레이어의 출력 값들이 더 고르게 분포되며, 다음 레이어로 전달될 때 불안정한 값들이 발생하는 것을 방지. 빠른학습이 가능해지며, 기울기소실이나 폭발을 방지.
    출력 벡터의 크기 dmodel=512d_{model}=512

디코더 : 연속적인 표현(z)을 바탕으로 출력 시퀀스를 생성

  • 인코더와 동일한 6개의 레이어로 이루어진 스택.
  • 세 번째 서브 레이어: 인코더 출력에 대해 멀티-헤드 어텐션을 수행.
  • 인코더와 마찬가지로 잔차 연결과 레이어 정규화를 동일하게 적용.
  • 마스킹(masking)
    디코더가 다음 단어를 생성할 때 이전 단어들만 참고하도록 함.

3.2 Attention

어텐션의 기본 요소

  • 쿼리(Query): 찾고자 하는 정보 (예: 번역하려는 단어)
  • 키(Key): 저장된 정보의 "이름표" 같은 것 (예: 문장 내 다른 단어들)
  • 값(Value): 실제로 찾아내고자 하는 정보 (예: 번역에 필요한 의미)
    (각각의 요소는 백터로 표현)

어텐션 메커니즘의 작동 방식

  • 유사도 계산: 쿼리와 각 키 간의 유사도((compatibility function)를 계산함.
  • 가중치 부여: 유사도에 따라 각 값에 가중치를 부여함.
  • 가중합 계산: 가중치를 곱한 값들을 모두 더해 최종 출력을 생성함.

영어를 프랑스어로 번역하는 걸 예시로 들어보자.

쿼리(Query): "apple"이라는 단어를 프랑스어로 번역하려고 할 때, 이 단어가 무엇을 의미하는지 찾고자 함.
키(Key): 문장 내의 다른 단어들 ("fruit", "red", "eat" 등)
값(Value): 각 키에 연결된 의미 또는 번역 가능성

1) 유사도 계산: "apple"과 문장 내 다른 단어들("fruit", "red", "eat")의 유사도를 계산함.
예: "apple"과 "fruit"은 높은 유사도, "apple"과 "red"는 중간 정도의 유사도, "apple"과 "eat"은 낮은 유사도를 가짐.
2) 가중치 부여: 유사도에 따라 가중치를 부여함.
예: "fruit"에 높은 가중치, "red"에 중간 가중치, "eat"에 낮은 가중치 부여.
3) 가중합 계산: 각 값(의미)에 가중치를 곱한 후 더해서 최종 출력(번역된 단어)을 생성함.
예: "fruit"이 가장 관련이 크므로, "apple"은 프랑스어로 "pomme"로 번역됨.

3.2.1 Scaled Dot-Product Attention

스케일드 닷-프로덕트 어텐션은 다음과 같이 작동한다:

  1. 입력: 쿼리와 키는 차원이 dkd_k이고, 값은 차원이 dvd_v이다.

  2. 계산:

    • 쿼리와 모든 키의 닷 프로덕트를 계산한다.
    • 각 닷 프로덕트를 dk\sqrt{d_k}로 나눈다.
    • 소프트맥스 함수를 적용하여 값에 대한 가중치를 얻는다.
  3. 행렬 연산:

    • 쿼리, 키, 값은 각각 QQ, KK, VV라는 행렬로 패킹된다.
    • 출력 행렬은 다음과 같이 계산된다:
      Attention(Q,K,V)=softmax(QKTdk)V\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V
  4. 비교:

    • 덧셈 어텐션은 피드포워드 네트워크를 사용하여 호환성 함수를 계산한다.
    • 닷-프로덕트 어텐션은 덧셈 어텐션과 이론적으로 비슷하지만, 스케일링이 없을 경우 큰 dkd_k 값에서 성능이 떨어질 수 있다.
    • 닷-프로덕트 어텐션은 스케일링 덕분에 계산 속도가 빠르고 메모리 효율적이다.
  5. 문제 해결:

    • dkd_k 값에서 닷 프로덕트의 크기가 커지면 소프트맥스 함수의 기울기가 작아질 수 있다.
    • 이를 해결하기 위해 닷 프로덕트를 dk\sqrt{d_k}로 스케일링한다.

기본 개념: '쿼리', '키', '값'을 입력으로 받아 출력 벡터를 생성

3.2.2 Multi-Head Attention

멀티-헤드 어텐션은 다음과 같이 작동한다:

  1. 프로젝션:

    • 단일 어텐션 함수 대신, 쿼리, 키, 값을 각각 다른 학습된 선형 프로젝션을 사용하여 dkd_k, dkd_k, dvd_v 차원으로 hh 번 프로젝션한다.
  2. 병렬 어텐션:

    • 각 프로젝션된 쿼리, 키, 값 버전에서 병렬로 어텐션 함수를 수행한다.
    • 이렇게 얻어진 dvd_v-차원의 출력 값들을 연결(concatenate)한다.
  3. 최종 프로젝션:

    • 연결된 출력을 다시 프로젝션하여 최종 값을 얻는다.
  4. 멀티-헤드 어텐션 공식:

    • 멀티-헤드 어텐션은 다음과 같이 정의된다:
      MultiHead(Q,K,V)=Concat(head1,,headh)WO\text{MultiHead}(Q, K, V) = \text{Concat}(\text{head}_1, \ldots, \text{head}_h) W_O
  5. 헤드 계산:

    • 각 헤드는 다음과 같이 계산된다:
      headi=Attention(QWQi,KWKi,VWVi)\text{head}_i = \text{Attention}(QW_{Q_i}, KW_{K_i}, VW_{V_i})
  6. 프로젝션 파라미터:

    • 프로젝션은 다음의 파라미터 행렬을 사용한다:
      • WQiRdmodel×dkW_{Q_i} \in \mathbb{R}^{d_{model} \times d_k}
      • WKiRdmodel×dkW_{K_i} \in \mathbb{R}^{d_{model} \times d_k}
      • WViRdmodel×dvW_{V_i} \in \mathbb{R}^{d_{model} \times d_v}
      • WORhdv×dmodelW_O \in \mathbb{R}^{hd_v \times d_{model}}
  7. 실험 설정:

    • 이 논문은 h=8h = 8개의 병렬 어텐션 헤드를 사용한다.
    • 각 헤드에 대해 dk=dv=dmodel/h=64d_k = d_v = d_{model}/h = 64로 설정한다.
    • 각 헤드의 차원이 줄어들기 때문에, 전체 계산 비용은 전체 차원을 가진 단일 헤드 어텐션과 유사하다.

3.2.3 Applications of Attention in our Model

트랜스포머 모델은 멀티-헤드 어텐션을 세 가지 방식으로 사용한다:

  1. 인코더-디코더 어텐션:

    • 쿼리는 이전 디코더 레이어에서 오고, 메모리 키와 값은 인코더의 출력에서 온다.
    • 이는 디코더의 각 위치가 입력 시퀀스의 모든 위치에 주의를 기울일 수 있게 한다.
    • 이는 시퀀스-투-시퀀스 모델에서 전형적인 인코더-디코더 어텐션 메커니즘을 모방한다.
  2. 인코더의 셀프 어텐션:

    • 셀프 어텐션 레이어에서는 모든 키, 값, 쿼리가 같은 곳에서 온다. 이 경우, 이전 인코더 레이어의 출력에서 온다.
    • 인코더의 각 위치는 인코더의 이전 레이어의 모든 위치에 주의를 기울일 수 있다.
  3. 디코더의 셀프 어텐션:

    • 셀프 어텐션 레이어에서는 디코더의 각 위치가 해당 위치까지의 모든 디코더 위치에 주의를 기울일 수 있게 한다.
    • 왼쪽으로의 정보 흐름을 방지하여 자기 회귀 속성을 유지해야 한다.
    • 이를 위해 스케일드 닷-프로덕트 어텐션 내부에서 소프트맥스 입력의 불법적인 연결에 해당하는 값을 −∞로 설정하여 마스킹을 구현한다. 이 과정은 그림 2에 설명되어 있다.

3.3 Position-wise Feed-Forward Networks

  • 구성:

    • 인코더와 디코더의 각 레이어에는 완전 연결 피드-포워드 네트워크가 포함된다.
    • 이 네트워크는 각 위치에 대해 독립적이고 동일하게 적용된다.
    • 네트워크는 두 개의 선형 변환과 그 사이에 ReLU 활성화 함수로 구성된다.
  • 수식:

    • 피드-포워드 네트워크의 수식은 다음과 같다:
      FFN(x)=max(0,xW1+b1)W2+b2\text{FFN}(x) = \text{max}(0, xW_1 + b_1)W_2 + b_2
  • 변환:

    • 선형 변환은 서로 다른 위치에서 동일하지만, 레이어 간에는 다른 파라미터를 사용한다.
    • 이는 커널 크기 1의 두 개의 컨볼루션으로 설명할 수 있다.
  • 차원:

    • 입력과 출력의 차원은 dmodel=512d_{model} = 512이다.
    • 내부 레이어의 차원은 dff=2048d_{ff} = 2048이다.

3.4 Embeddings and Softmax

  • 임베딩:

    • 학습된 임베딩을 사용하여 입력 토큰과 출력 토큰을 dmodeld_{model} 차원의 벡터로 변환한다.
  • 선형 변환과 소프트맥스:

    • 디코더의 출력을 예측된 다음 토큰 확률로 변환하기 위해 학습된 선형 변환과 소프트맥스 함수를 사용한다.
  • 가중치 공유:

    • 두 임베딩 레이어와 사전 소프트맥스 선형 변환 사이에서 동일한 가중치 행렬을 공유한다.
    • 임베딩 레이어에서는 이 가중치에 dmodel\sqrt{d_{model}}을 곱한다.

    3.5 Positional Encoding

  • 필요성:

    • 모델에는 순환이나 컨볼루션이 없으므로, 시퀀스의 순서를 모델이 활용할 수 있도록 해야 한다.
    • 이를 위해 시퀀스에서 토큰의 상대적 또는 절대적 위치에 대한 정보를 주입해야 한다.
  • 위치 인코딩:

    • 인코더와 디코더 스택의 입력 임베딩에 "위치 인코딩"을 추가한다.
    • 위치 인코딩은 임베딩과 같은 차원인 dmodeld_{model}을 가지며, 두 벡터를 합산할 수 있다.
    • 다양한 위치 인코딩 방법이 존재하며, 학습된 것과 고정된 것들이 있다.
  • 수식:

    • 본 연구에서는 서로 다른 주파수의 사인과 코사인 함수를 사용한다:
      PE(pos,2i)=sin(pos100002i/dmodel)\text{PE}(pos, 2i) = \sin\left(\frac{pos}{10000^{2i/d_{model}}}\right)
      PE(pos,2i+1)=cos(pos100002i/dmodel)\text{PE}(pos, 2i+1) = \cos\left(\frac{pos}{10000^{2i/d_{model}}}\right)
    • 여기서 pospos는 위치, ii는 차원을 의미한다.
    • 즉, 위치 인코딩의 각 차원은 사인 함수를 따른다.
    • 파장은 2π2\pi에서 100002π10000 \cdot 2\pi까지 기하급수적으로 증가한다.
  • 선택 이유:

    • 이 함수를 선택한 이유는 모델이 상대적 위치를 쉽게 학습할 수 있도록 할 것이라고 가정했기 때문이다.
    • 고정된 오프셋 kk에 대해, PEpos+k\text{PE}_{pos+k}PEpos\text{PE}_{pos}의 선형 함수로 표현될 수 있다.

Comparison with Learned Positional Encoding

  • 학습된 위치 인코딩:

    • 학습된 위치 인코딩은 훈련 과정에서 위치 정보를 학습할 수 있는 매개변수를 가진 임베딩 벡터를 사용한다.
    • 이는 모델이 각 위치에 대해 개별적으로 학습된 벡터를 통해 위치 정보를 인코딩하도록 한다.
  • 실험 결과:

    • 본 연구에서는 사인과 코사인 함수 기반의 고정된 위치 인코딩과 학습된 위치 인코딩 두 가지 방법을 비교했다.
    • 실험 결과, 두 방법 모두 거의 동일한 성능을 보였다.
  • 선택 이유:

    • 사인과 코사인 함수 기반의 고정된 위치 인코딩을 선택한 이유는 모델이 훈련 중에 본 적 없는 시퀀스 길이에도 잘 일반화할 수 있도록 하기 위해서였다.
    • 사인과 코사인 함수는 파장이 기하급수적으로 증가하므로, 상대적 위치를 효과적으로 학습할 수 있다.
    • 이러한 고정된 함수는 학습된 임베딩보다 더 나은 일반화 성능을 제공할 수 있다고 예상했다.

4 Why Self-Attention

셀프 어텐션의 장점은 다음과 같다:

  1. 계산 복잡성:

    • 셀프 어텐션: 계산이 빠르고 효율적이다. 모든 위치를 동시에 처리할 수 있다.
    • 순환 레이어: 순차적 연산이 O(n)O(n)이므로 상대적으로 느리다.
  2. 병렬 처리:

    • 셀프 어텐션: 연산을 병렬로 처리할 수 있다.
    • 순환 레이어: 순차적으로 연산해야 하므로 병렬화가 제한적이다.
  3. 장기 의존성 학습:

    • 셀프 어텐션: 입력과 출력 간의 경로가 짧아 장기 의존성 학습이 용이하다.
    • 순환 레이어: 긴 경로로 인해 장기 의존성 학습이 어려울 수 있다.
  • 성능 개선:

    • 셀프 어텐션을 지역적으로 제한하여 최대 경로 길이를 줄일 수 있다.
  • 해석 가능성:

    • 셀프 어텐션은 모델의 해석 가능성을 높이고, 어텐션 헤드가 문장의 구문과 의미를 잘 학습한다.

7 Conclusion

이 연구에서는 Transformer를 제안했다. Transformer는 전체가 어텐션 기반인 첫 번째 시퀀스 변환 모델로, 인코더-디코더 아키텍처에서 자주 사용되는 순환 레이어를 다중 헤드 셀프 어텐션으로 대체했다.

  • 번역 작업:

    • Transformer는 RNN, CNN 기반 아키텍처보다 훨씬 빠르게 훈련된다.
    • WMT 2014 영어-독일어 및 WMT 2014 영어-프랑스어 번역 작업에서 최첨단 성능을 달성.
    • 영어-독일어 번역 작업에서는 기존의 모든 앙상블을 능가하는 성능을 보였다.
  • 미래 계획:

    • 어텐션 기반 모델의 미래에 대해 기대하고 있으며, 다른 작업에도 적용할 계획이다.
    • Transformer를 텍스트 외의 입력 및 출력 모달리티(예: 이미지, 오디오, 비디오) 문제에 확장할 예정이다.
    • 생성 과정을 덜 순차적으로 만드는 것도 연구 목표 중 하나 라고 했는데 뭐 이 이후로 트랜스포머에 대한 연구는 무시무시하게 발전하고 이어지게 된다.
profile
kwonhs.alice@gmail.com

0개의 댓글