Transformer

hangdi·2024년 5월 11일
0

논문 링크 : https://arxiv.org/pdf/1706.03762.pdf

논문 제목 : Attention Is All You Need

Abstract


과거 지배적인 번역 모델 → 인코더와 디코더를 포함한 recurrent or convolutional based 번역 모델

이 논문에서는 Transformer라는 recurrence와 conv를 완전히 배제하고, attention 메커니즘만 베이스로 한 Transformer라는 모델을 소개한다.

결과

두 가지 기계 번역 과제를 대상으로 실험한 결과

  • 트랜스포머 모델은 품질이 우수함 + 병렬 처리성이 높아져 학습에 훨씬 적은 시간이 소요
  • 영어-독일어 번역 task에서 28.4 BLEU의 성능을 획득 (기존보다 2 BLEU 이상 향상)
  • 영어-프랑스어 번역에서 41.8 BLEU 성능 획득 (SOTA)
  • 트랜스포머는 대규모 혹은 제한된 소규모 학습 데이터 기반의 영어 구문 분석 과제(English constituency parsing)에서도 높은 성능을 보임
    • 다른 과제들에도 일반화가 가능하다는 것을 보여줌

1. Introduction


RNN이나 LSTM, GRU같은 것들은 이전부터 계속 SOTA를 달성해오던 접근법

  • 그 이후, Recurrent 모델과 인코더-디코더 아키텍처의 경계를 허물기 위한 수많은 노력이 계속됨

Attention 메커니즘은 다양한 작업에서 강력한 시퀀스 모델링 및 번역 모델의 필수 요소가 되어 input 또는 output 시퀀스에서의 거리에 관계없이 종속성을 모델링할 수 있다.

  • 그러나 모든 경우에서 이러한 Attention 메커니즘은 recurrent 메커니즘과 함께 사용되어왔다.
💡 이 논문에서는 recurrence를 피하고, input과 output 사이에 global dependencises를 이끌어 내기 위해서 attention mechanism을 전체에 적용하는 Transformer를 소개한다.

2. Background


  1. 순차적 연산(sequential computation)을 줄이려는 시도는 여러 모델에서도 다뤄진 문제(Extended Neural GPU, ByteNet and ConvS2S)

    • 모두 기본 구성요소로 CNN을 사용
    • 모든 입력과 출력 위치에 대해 hidden representation을 병렬로 계산

    두 임의의 입력과 출력 위치에서 서로 간의 종속성을 계산하는 데에 필요한 연산 횟수는 위치 간의 거리에 따라 ConvS2S의 경우, 선형적으로(linearly), ByteNet의 경우, 로그적으로(logarithmically) 증가함.

    • 따라서 멀리 떨어진 위치 사이의 종속성을 학습하는 데에 어려움 존재
    • 트랜스포머에서는 이러한 연산횟수를 Multi-Head Attention을 통해 연산 수 줄임
    • 또한 특정 위치의 단어 정보가 흐려지는 것 까지 해결
  2. self-attention은 시퀀스의 representation을 계산하기 위해 single sequence의 서로 다른 위치의 단어들의 종속성을 계산하는 어텐션 메커니즘

    • self-attention은 이해력, 추상적 요약 등 다양한 분야에서 성공적으로 사용되어짐
  3. End to End memory network는 sequence aligned recurrence 대신에 recurrent attention 메커니즘을 기반으로 하였고, 간단한 언어 질문 답변 및 언어 모델링 작업에서 잘 수행되는 것으로 나타났다.

  4. 하지만 Transformer는 input과 output을 sequence-aligned RNN이나 Conv 없이 input과 output의 representation을 계산하는데 오로지 self-attention만을 사용하는 첫번째 번역 모델

3. Model Architecture


모델 아키텍쳐 참조

대부분의 번역 모델은 인코더-디코더 구조이다.

  • 인코더는 input sequence (x1,,xn)(x_1, … , x_n)을 연속적인 representation인 z=(z1,,zn)z = (z_1, … , z_n)으로 표현한다.
  • z가 주어졌을 때, 디코더는 output sequence (y1,,ym)(y_1, … , y_m)를 생성한다.
  • 각각의 단계는 auto-regressive하며, 다음을 예측할 때 이전 단계에서 생성된 것을 추가적인 input으로 넣는다.
    • = 병렬적 처리 불가

Untitled

  • 트랜스포머 구조는 stacked self-attentionpoint-wise fully connected layer를 양쪽 encoder와 decoder에 사용한다.

3.1 Encoder and Decoder Stacks

Encoder

  • encoder는 N=6개의 동일한 layer의 stack으로 구성
  • 각각의 layer는 2개의 sub-layer가 있음
    1. multi-head self attention mechanism
    2. position-wise fully connected feed-forward network
    • 각각의 두 sub layer를 중심으로 residual connection을 사용한 후, layer normalization 사용

    • 결국 이 두 sub-layer의 output은 ? : LayerNorm(x+Sublayer(x))LayerNorm(x+Sublayer(x))

    • residual connection을 위해서 output dimension을 dmodel=512d_{model}=512로 통일 !

      Untitled

      이렇게 각각의 인코딩에다가 feed forward를 취한게 point-wise fully connected layer인듯? → input 노드를 512로 취했으니 multihead attention에서 나온 input을 그대로 받아서 합쳐주는 역할인듯 !

      이렇게 각각의 인코딩에다가 feed forward를 취한게 point-wise fully connected layer인듯? → input 노드를 512로 취했으니 multihead attention에서 나온 input을 그대로 받아서 합쳐주는 역할인듯 !

Decoder

  • decoder 또한 N=6개의 동일한 layer의 stack으로 구성
  • 디코더는 3개의 sub-layer로 구성되어 있으며, encoder의 output에 MHA을 수행
    • 첫번째 sub-layer : Masked Multi-Head Attention.
    • 두번째 sub-layer : Encoder와 Decoder 간의 Multi-Head Attention
    • 세번째 sub-layer : Point-wise Feed-forward Network
  • 인코더랑 비슷하게 각각의 레이어에 residual connections를 수행하며, 그 후 layer-normalization 수행
  • 그리고 decoder stack에 position이 subsequent position으로 이동하는 것을 막기 위해서 self-attention 수정
    • 이것을 masking이라고 함 !
    • ii번째보다 앞에 있는 position만 참조하게 해서 예측을 수행하도록 함

Untitled

Untitled

3.2 Attention

Attention 함수는 query 및 key-value pair 세트를 output에 매핑하는 것으로 설명할 수 있으며, 여기서 query, key, value 및 output은 모두 벡터

output은 value의 weighted sum으로 계산되며, 각 값에 할당된 weight는 해당 key와 query의 compatibility function에 의해 계산됨

  • compatibility funtion이라는게 key랑 query가 softmax 거치고 나서까지의 과정을 말하는 듯 = 가중치를 계산하는 과정

Untitled

3.2.1 Scaled Dot-Product Attention

Untitled

특정한 attention을 “Scaled Dot-Product Attention”이라고 부른다.

  • input은 query와 차원 DkD_k의 key와 차원 DvD_v의 value로 구성.
  • key로 query와 dot product를 계산 → 각각을 dk\sqrt{d_k}로 나눔 → 소프트맥스 함수를 적용 → 값의 가중치 획득

Additive attention 보다는 dot-product Attetion이 더 빠르고, 공간 효율적(space-efficient)

  • 작은 dkd_k의 value를 가지고 있으면 Additive나 dot-product나 비슷한데 만약 큰 dkd_k의 value를 가지고 있는데 dk\sqrt{d_k} 의 scaling을 안해준다면, additive가 성능이 훨씬 좋다.
  • dkd_k에 대해서는 dot product가 커지기 때문에, softmax 함수를 극도의 적은 gradients로 밀어낼 것 → 그래서 dk\sqrt{d_k} 로 나눠줌
    • dk\sqrt{d_k} 로 나눠주는 이유
      - Query 벡터와 Key 벡터의 각각 원소의 값을 평균 0, 분산 1을 가지는 확률변수라고 하자

      ![Untitled](https://prod-files-secure.s3.us-west-2.amazonaws.com/3dbf94fa-5256-425e-8805-b9afd8dc7bcc/8be89593-a6be-4fb1-89f3-b8112f9cfbc3/Untitled.png)
      
      - 그러면 Query 벡터와 key 벡터를 내적한 값의 평균과 분산은 어떻게 될까?
          - 평균 : 전체 평균이 0이므로 내적값의 평균도 0
          - 분산 : a와 x가 통계적으로 독립이고 분산이 1인 확률변수가 곱해지면 분산 1, b와 y도 마찬가지 ! → 1+1 = 2
          - 만약 query 벡터와 key 벡터의 차원이 100이고 각각의 벡터의 원소가 통계적으로 독립이고, 평균이 0, 분산이 1이라면?
              - 평균 : 0, 분산 : 100
      - 분산의 차원이 커질수록 softmax를 통과했을 때, 확률 분포가 큰 값으로 확률이 쏠리는 현상이 발생 → 역전파 할 때, gradient vanishing 문제 발생
      - 내적 값의 분산을 1로 유지시켜서 학습 안정화

      Untitled

3.2.2 Multi-Head Attention

dmodeld_{model} 차원의 key, value, query에 대해 single attention function을 수행하는 대신, 학습된 다양한 linear projection을 통해 query, key, value를 각각 dkd_k, dkd_k, dvd_v 차원에 linear projection 하는 것이 유리하다는 것을 발견

  • query, key, value에 대해서 Attention을 병렬로 수행 → dvd_v 차원 output을 산출
  • 그리고 그걸 열방향으로 concat한 다음, 다시 한번 projection

Untitled

만약에 head가 8이라고 하면(h=8)(h=8) =, dk=dv=dmodel/h=64d_k = d_v = d_{model}/h = 64 로 사용

  • 이렇게 각각의 head로 차원을 줄였기 때문에, 계산 비용은 single-head attention과 비슷함
  • 혁펜하임 PPT Untitled Untitled Untitled Untitled

Untitled

3.2.3 Applications of Attention in our Model

multi-head attention은 3가지 방법으로 사용할 수 있다.

  1. “encoder-decoder attention”에서 query는 이전 decoder layer에서 나오고, key와 value는 encoder의 output에서 나온다.
    • 이를 통해 decoder의 모든 position에서 input sequence의 모든 position에 대해 어텐션을 수행할 수 있게 된다.
    • 시퀀스 투 시퀀스 모델에서 일반적으로 볼 수 있는 인코더-디코더 어텐션 메커니즘을 모방
  2. encoder는 self-attention layer들이 포함되어 있다.
    • self-attention layer에서 모든 key, value, query들을 동일한 위치에서 가져오는데, 이 경우 encoder의 이전 layer의 output이다.
    • encoder에서 각 position들은 encoder의 이전 layer에서 모든 position들에 attention 할 수 있다.
    • 즉, Attention을 계산하는 데 사용되는 "키(keys)", "값(values)", 그리고 "쿼리(queries)"는 모두 이전 층의 출력에서 나온 것
  3. 비슷하게, decoder의 self-attention layer는 해당 위치를 포함한 decoder의 모든 position에 Attention을 할 수 있게 한다.
    • decoder에서는 auto-regressive feature를 보존하기 위해 decoder 내에서 왼쪽방향(오른쪽 → 왼쪽) 정보 흐름을 방지해야 한다.
      • auto-regressive : 이전에 생성된 출력을 현재의 입력으로 사용하여 시퀀스를 한 단계씩 생성
      • 이를 위해 scaled dot-product Attention 내에서 softmax의 입력 중 부적절한 연결에 해당하는 모든 값을 마스킹(−∞로 설정)하여 왼쪽 방향으로의 정보 흐름을 방지

3.3 Position-wise Feed-Forward Networks

attention sub-layers에 더하여, 인코더와 디코더 각 레이어는 각 위치에 독립적으로 동일하게 적용되는 완전히 연결된 피드포워드 네트워크를 포함하고 있다.

  • 이 네트워크는 ReLU 활성화 함수가 있는 두 개의 linear transformations으로 이루어져 있다.
  • 그냥 fully connected 2번 통과한 것 !
  • max(0,xW1+b1)max(0, xW_1 + b_1) 이건 그냥 ReLU

Untitled

linear transformations은 서로 다른 위치에서 동일하지만, layer 간에는 다른 매개변수를 사용

  • 입력과 출력의 차원은 dmodel=512d_{model} = 512, 내부 layer의 차원은 dff=2048d_{ff} = 2048

Untitled

Untitled

3.4 Embeddings and Softmax

  1. 학습된 임베딩을 사용하여 input token과 output token을 dmodeld_{model}의 vector로 변환
  2. 그리고 linear transformation과 softmax를 사용해 decoder의 output을 다음에 올 token의 확률로 변환
  3. 두 embedding layer와 pre-softmax linear transformation 간에 동일한 가중치 행렬을 공유
    • GPT 가라사대…
      • 파라미터 공유로 학습 효율성 향상
      • 임베딩 레이어 간 정보 공유
        • 입력과 출력 간에 공유된 가중치를 사용하면 모델이 서로 다른 위치에서 나타난 단어 간에 일종의 유사성을 학습

Untitled

3.5 Positional Encoding

우리 모델은 recurrence와 conv가 없기 때문에, sequence의 tokens의 위치를 반드시 알려줘야 함 !

  • positional encodings라는 것을 encoder와 decoder stack 아래에 있는 input embedding에 넣어줌 ! (더해준다 / 참조 링크) Untitled Untitled
  • positional encoding은 dmodeld_{model}과 차원 동일 !

Untitled

  • pospos는 단어 위치 : 예를 들어서 0번째 단어라고 하면 pos는 0 !
  • ii는 dimension : 만약 dimension이 512라고 하면 i는 256까지 !
    • 그러니까 만약 한 문장에 50까지 단어가 있고, 0번째 단어에 대한 positional encoding을 구하려고 한다면 ? → 0번째 단어는 512개 만큼
  • 혁펜하임 PPT Untitled Untitled Untitled

헷갈리는 것

  • 그럼 input embedding에서는 어떻게 들어가는데?
    • token 처리된 단어 각각을 input embedding으로 처리해서 dmodeld_{model} 차원의 임베딩 얻음
    • 그 임베딩에 position embedding을 더해줌 Untitled

4. Why Self-Attention


왜 self-attention을 수행했는지에 대한 4가지 이유

  1. 각각 layer의 전체적인 계산 복잡도 때문
  2. 필요한 sequential operations의 최소한의 수로 병렬화할 수 있는 계산량
  3. 네트워크에서 long-range dependency 사이의 경로 길이
    • dependency에 영향을 미치는 것 중 하나 → 신호가 forwar와 backward로 이동해야 하는 길이
      • 입력 및 출력 시퀀스의 각 위치 간의 경로가 짧을수록 (즉, 신호가 짧은 거리를 이동할수록) 장거리 종속성을 학습하기가 더 쉽다
      • 이는 네트워크에서 정보가 더 빨리 흘러가고 연관성 있는 신호를 빠르게 학습할 수 있게 되기 때문
    • 서로 다른 레이어 유형으로 구성된 네트워크에서 입력과 출력 위치 간의 최대 경로 길이를 비교함으로써 이러한 아이디어를 평가
  4. Attention Distribution을 히트맵 형태로 시각화하여 좀 더 해석가능한 모델이 될 수 있다.

Untitled

  1. self-attention vs Recurrent
    • Self-attention 레이어는 모든 위치를 일정한 수의 Sequential Operation
    • Recurrent는 O(n)O(n)의 Sequential Operation이 필요
    • 계산 복잡도 측면에서, nn이 d보다 작을 때 self-attention 레이어가 Recurrent 레이어보다 빠름
  2. Self-Attention for Long Sequences
    • 매우 긴 시퀀스를 다루는 작업의 계산 성능을 향상시키기 위해, self-attention은 출력 위치를 중심으로 입력 시퀀스의 크기가 r인 근처만 고려하도록 제한할 수 있다. (restricted)
    • 이렇게 하면 최대 경로 길이가 O(n/r)로 증가
      • O(n/n) → O(n/n)이기 때문에 O(n/r)이 증가한 것이 맞음 ! r는 n보다 작기 때문에

5. Training


5.1 Training Data and Batching

문장 쌍은 대략적인 시퀀스 길이에 따라 일괄 처리됨 → 시퀀스 길이보다 짧은 경우, PAD 처리

각 training batch에는 약 25000개의 source token과 25000개의 target token의 문장 쌍이 포함됨

학습데이터

  • English-German dataset
    • standard WMT 2014 English-German dataset consisting of about 4.5 million sentence pairs
  • English-French dataset
    • we used the significantly larger WMT 2014 English-French dataset consisting of 36M sentences and split tokens into a 32000 word-piece vocabulary

5.3 Optimizer

  • Adam optimizer 사용
  • β1=0.9, β2=0.98, ϵ=109\beta_1 = 0.9,\ \beta_2 = 0.98, \ \epsilon = 10^{-9}
  • 아래의 공식에 따라 learning rate를 조절하며 학습 수

Untitled

Untitled

warmup_step까지는 linear하게 learning_rate를 증가, warmup_step 이후에는 step_num의 inverse square root에 비례하도록 감소

  • 학습 초기에는 학습이 잘 되지 않은 상태이므로 learning rate를 빠르게 증가시켜 변화를 주다가, 어느 정도 학습이 이뤄지고 난 후에는 learning rate를 천천히 감소시켜 조금씩 학습을 진행하기 위함
    • 모델이 초기에 빠르게 수렴하고 학습을 안정화시키는 데 도움
  • warmup_steps=4000warmup\_steps = 4000
  • 이게 Noam 스케줄

5.4 Regularization

Residual Dropout

  • 정규화되기 전에 sub-layer의 output에 dropout 추가
  • encoder 및 decoder stack 모두에서 embedding과 positional encoding의 합계에 드롭아웃 적용
    • 기본 모델의 경우 Pdrop=0.1P_{drop} = 0.1

Label Smoothing

  • ϵls=0.1\epsilon_{ls} = 0.1 적용
    • 원래 라벨링이 [0, 1, 0, 0] 으로 분류되었다고 하면, 10.1=0.91-0.1=0.9라서 1을 0.9로 만들고 나머지 0인 부분에 0.1을 나눠줌, 아래 식에서 K는 class 수 Untitled
    • [0,1,0,0][0.25,0.925,0.25,0.25][0, 1, 0, 0] → [0.25, 0.925, 0.25, 0.25]
  • 모델이 확신하지 않도록 학습하게 하고, BLEU score 향상시킴

6. Results


평가 기준

  • PPL(Perplexity)
    Perplexity=1P(w1,w2,w3,...,wN)N=1i=1NP(wiw1,w2,...,wi1)NPerplexity=\sqrt[N]{\frac{1}{P(w_{1}, w_{2}, w_{3}, ... , w_{N})}}=\sqrt[N]{\frac{1}{\prod_{i=1}^{N}P(w_{i}| w_{1}, w_{2}, ... , w_{i-1})}}
    Untitled
  • BLEU Untitled Untitled

6.2 Model Variations

Untitled

Untitled

6.3 English Constituency Parsing

Untitled

  1. 실험 목적
    • Transformer의 다른 작업에 대한 일반화 능력을 평가하기 위해 영어 Constituency Parsing 작업에 적용한 실험을 수행
      • Constituency Parsing : 어떤 단어가 문법적으로 어떤 품사에 속하는지 분류하는 task
      • 강한 구조적 제약 조건을 가지며, 출력이 입력보다 상당히 긴 특수한 도전 과제
      • ex) AI is genius이면, AI는 Noun(명사), is는 Verb(동사), genius는 Adjective(형용사)로 분류
    • RNN sequence-to-sequence 모델은 작은 데이터 환경에서 최첨단 결과를 달성하지 못함
  2. 결과:
    • 모델은 작업 특정 조정이 없어도 놀랍도록 잘 수행되며, 이전에 보고된 모델들 중에서 Recurrent Neural Network Grammar [8]을 제외하고는 성능이 더 좋음
    • RNN sequence-to-sequence 모델 [37]과 비교하여, Transformer는 WSJ 학습 세트만 사용할 때에도 BerkeleyParser [29]를 능가
    • Transformer가 별도의 task에서도 잘 일반화 됨을 입증

7. Conclusion

  • encoder-decoder 구조에서 사용되는 recurrent layer를 전부 다 attention으로 대체하여 사용하는 번역 모델을 처음으로 제안했다.
  • translation task에서 Transformer는 기존의 recurrent나 conv layer보다는 훨씬 빨랐고, WMT에서 SOTA도 달성했다.
  • 이 transformer는 다른 task(image, audio, video)에도 확장될 수 있을 것으로 보인다.

Untitled

profile
눈물 콧물 흘리면서 배우는 코딩

0개의 댓글

관련 채용 정보