Data/논문 읽기

[논문 같이 읽기] Attention Is All You Need

neulvo 2022. 10. 12. 15:42

논문 링크 :

 

Attention Is All You Need

The dominant sequence transduction models are based on complex recurrent or convolutional neural networks in an encoder-decoder configuration. The best performing models also connect the encoder and decoder through an attention mechanism. We propose a new

arxiv.org

 

Jay Alammar 논문 해설(모델 구조 및 작동 원리 with Animation) :

 

The Illustrated Transformer

Discussions: Hacker News (65 points, 4 comments), Reddit r/MachineLearning (29 points, 3 comments) Translations: Arabic, Chinese (Simplified) 1, Chinese (Simplified) 2, French 1, French 2, Japanese, Korean, Russian, Spanish, Vietnamese Watch: MIT’s Deep

jalammar.github.io

Jay Alammar 번역 :

 

The Illustrated Transformer

저번 글에서 다뤘던 attention seq2seq 모델에 이어, attention 을 활용한 또 다른 모델인 Transformer 모델에 대해 얘기해보려 합니다. 2017 NIPS에서 Google이 소개했던 Transformer는 NLP 학계에서 정말 큰 주목을

nlpinkorean.github.io

딥러닝을 위한 자연어 처리 입문(구현과 함께) :

 

1) 트랜스포머(Transformer)

* 이번 챕터는 앞서 설명한 어텐션 메커니즘 챕터에 대한 사전 이해가 필요합니다. 트랜스포머(Transformer)는 2017년 구글이 발표한 논문인 Attentio ...

wikidocs.net

Ratsgo's NLPBOOK (Self Attention과 그 수식에 대한 상세한 설명) :

 

Transformers

pratical tips for Natural Language Processing

ratsgo.github.io

 

편의 및 가독성을 위해 논문 관련 링크를 상단에 미리 배치하였다.

추후 Seq2Seq  With Attention 논문 해설을 추가해 달도록 하겠다.

그럼 이전과 동일하게 논문 번역 및 해석을 우선 진행하겠다.

 

새로운 단순 네트워크 아키텍쳐인, attention mechansim에 전적으로 기반을 둔 Transformer를 제안

우월한 품질, 병렬화, 적은 훈련 시간 소요

WMT 2014 영어-프랑스 번역 작업에서, 8개의 GPU로 3.5일동안 학습 후 41.8의 SOTA BLEU score 달성

 

Skip

 

순환 모델은 일반적으로 입력 및 출력 시퀀스의 기호 위치에 따라 계산을 고려합니다. 계산 시간의 steps(단계들)에 위치를 정렬하고, 이전 은닉 레이어 ht-1과 위치 t에 대한 입력의 함수로 은닉 레이어 ht의 시퀀스를 생성합니다.

이 본질적으로 sequential한(순차적인) 특성은 메모리 제약이 예제들을 batching(한 데 묶는 것)하는 것을 제한하기 때문에 더 긴 시퀀스 길이에서 중요해지는, 학습 예제 내의 병렬화를 불가능하게 합니다.

sequential computation의 제약에 대한 얘기

이 작업에서 우리는 반복을 피하고 대신 입력과 출력 사이의 전역 의존성을 끌어내기 위해 Attention 메카니즘에 전적으로 의존하는 모델 아키텍쳐인 Transformer를 제안합니다.

 

그러나 우리가 아는 한, Tranformer는 시퀀스로 정렬된 RNNs or Convolution을 사용하지 않고 입력 및 출력의 표현을 계산하기 위해 전적으로 self-attention에 의존하는 최초의 변환 모델입니다.

 

각 단계에세 모델은 자동-회귀적이며 다음 (것을) 생성할 때 이전에 생성된 기호를 추가적인 입력으로 사용합니다.

Transformer는 각각 그림 1의 왼쪽과 오른쪽 절반에 나타난 인코더와 디코더 모두에 대해 쌓여 있는 self-attention 및 point-wise 방식의 완전히 연결된 레이어를 사용하여 이 전체 아키텍쳐를 따릅니다.

point wise / pair wise / list wise 링크:

 

Pointwise vs. Pairwise vs. Listwise Learning to Rank

At a high level, pointwise, pairwise and listwise approaches differ in how many documents you consider at a time in your loss function when…

medium.com

 

인코더는 6개의 동일한 레이어 스택으로 구성됩니다. 각 레이어에는 두 개의 하위 레이어가 있습니다. 첫 번째는 multi-head self-attetion 메카니즘이고 두 번째는 간단한, 위치 방식의 완전히 연결된 feed-forward 네트워크입니다.

우리는 두 개의 하위 레이어 각각 주위에 residual(잔차) 연결을 사용했습니다. 레이어 정규화가 그 뒤를 따릅니다.

즉, 각 하위 레이어의 출력은 LayerNorm(x+Sublayer(x))이며, 여기서 Sublayer(x)는 하위 레이어 자체에서 실행되는 함수입니다. 이러한 잔차 연결을 가능하게 하기 위해서 모델의 모든 하위 레이어와 임베딩 레이어는 dmodel=512 차원의 출력을 생성합니다.

 

Position-Wise Feed-Forward Layer is a type of feedforward layer consisting of two dense layers that applies to the last dimension, which means the same dense layers are used for each position item in the sequence, so called position-wise.

위치-방식의 Feed-Forward 레이어는 마지막 차원에 적용되는 두개의 dense 레이어로 구성되어 있는 일종의 feedforward 레이어입니다. 이것은 시퀀스의 각 위치 항목에 동일한 dense 레이어가 사용된다는 것을 의미합니다.

 

디코더 또한 6개의 동일한 레이어 스택으로 구성됩니다. 각 인코더 레이어의 두 개의 하위 계층에 더해서 디코더는 인코더 스택의 출력에 대해 multi-head attention을 수행하는 세 번째 하위 레이어를 삽입합니다.

인코더와 유사하게 각 하위 레이어 주위에 잔차 연결을 사용하고 레이어 정규화를 수행하였습니다. 또한 디코더 스택의 self-attention 하위 레이어를 수정하여 위치가 후속 위치에 주의를 기울이지 않도록 하였습니다. 이 마스킹(차폐)는 출력 임베딩이 한 위치 씩 떨어진(offset, 의역) 된다는 사실과 결합하여, 위치 i에 대한 예측이 i보다 작은 위치에서 알려진 출력에만 의존할 수 있도록 합니다.

마스킹, 출처 : https://wikidocs.net/31379

 

Attention 함수는 쿼리와 키-밸류 쌍을 출력에 매핑하는 것으로 설명될 수 있습니다. 여기서 쿼리, 키, 밸류 그리고 출력은 모두 벡터입니다. 출력은 밸류의 가중치 합으로 계산되며, 여기서 각 밸류에 할당되는 가중치는 쿼리와 그에 대응하는 키의 호환성 함수로 계산됩니다. 

 

 

위 figure 2에 대한 설명

입력은 dk 차원의 쿼리와 키 그리고 dv 차원의 밸류로 구성됩니다. 모든 키에 대해 쿼리로 내적을 계산하고, dk^1/2로 나누고, softmax 함수를 적용해 밸류의 가중치를 얻습니다.

실제로, 우리는 행렬 Q로 함께 묶인 쿼리 세트에 대한 attention 함수를 동시에 계산합니다.

additive attention과 dot-product attention의 비교

dk의 작은 값에 대해 두 메커니즘이 유사하게 수행되는 반면(유사한 성능을 보이는 반면), additvie attention은 dk의 큰 값에서 스케일링을 하지 않은 dot product attention 보다 성능이 좋았습니다.

dk의 큰 값에 대해 내적은 크기가 크게 증가하여, softmax 함수를 매우 작은 기울기가 있는 영역으로 밀어넣는 것으로 의심되었습니다. 이 효과에 대응하기 위해 우리는 내적을 1/dk^1/2 만큼 스케일(조정)하였습니다.

 

단일 attention 함수를 dmodel 차원의 키, 밸류, 쿼리와 함께 사용하는 대신에 쿼리, 키, 밸류를 각각 dk, dk, dv 차원의 서로 다른 학습된 선형 투사로 h 번 선형으로 투사하는 것이 유익하다는 것을 발견했습니다. 이러한 투사된 버전의 쿼리, 키, 밸류에 대해 attention 함수를 병렬로 수행하여, dv 차원의 출력 값을 산출했습니다. 이것은 합쳐지고(concatenated) 다시 한번 투사되어, figure2에서 묘사된 바와 같이 최종 값이 됩니다.

Multi-head attention은 서로 다른 위치에 있는 서로 다른 표현 부분 공간의 정보에 모델이 공동으로 주의를 기울이게 합니다. 단일 attention head에서는 평균을 계산해 이를 억제합니다.

이 작업에서는 h=8의 병렬 attention 레이어 또는 헤드를 사용했습니다. 각각에 대해서 dk=dv=dmodel/h=64 (차원)을 사용했습니다. 각 헤드의  차원이 줄어듦에 따라 총 계산 비용은 전체 차원을 갖는 단일 헤드 attention의 비용과 비슷합니다.

 

인코더-디코더 attention 레이어에서는, 쿼리를 이전 디코더 레이어에서 가져오고 메모리 키와 밸류를 인코더의 출력에서 가져옵니다. 이를 통해 디코더의 모든 위치가 입력 시퀀스의 모든 위치에 주의를 기울일 수 있습니다.

인코더는 self-attention 레이어를 포함합니다. self-attention layer의 모든 키, 밸류, 쿼리는 같은 장소에서 오는데, 이 경우에는 인코더의 이전 레이어의 출력입니다. 인코더의 각 위치는 인코더의 이전 레이어에 있는 모든 위치에 주의를 기울일 수 있습니다.

유사하게, 디코더의 self-attention 레이어는 디코더의 각 위치가 그 위치까지와 그 위치를 포함하는 모든 위치에 주의를 기울일 수 있도록 합니다. 자동-회귀 특성을 유지하려면 디코더의 왼쪽 방향의 정보 흐름을 방지해야 합니다. 우리는 잘못된 연결에 해당하는 softmax의 모든 입력 값을 마스킹(-infinity로 설정)하여 조정된 내적 attention의 내부에 이를 구현합니다.

 

attention 하위 레이어 외에도, 인코더와 디코더의 각 레이어에는 fully connected feed-forward 네트워크가 포함되어 있으며, 이것은 각 위치에 개별적으로 그리고 동일하게 적용됩니다. 이것은 Relu 활성화 함수(비선형 변환, 더 많은 표현력)가 사이에 있는 두 개의 선형 변환으로 구성되어 있습니다.

선형 변환은 다른 위치들에 대해 동일하지만, 그들은 레이어 마다 다른 매개변수를 사용합니다.

 

다른 시퀀스 변환 모델과 유사하게, 임베딩을 사용하여 입력 토큰과 출력 토큰을 dmodel 차원의 벡터로 변환합니다. 또한 일반적인 학습된 선형 변환과 softmax 함수를 사용하여 디코더의 출력을 예측된 다음-토큰 확률로 전환시켰습니다.

모델에서 두 개의 임베딩 레이어와 softmax-이전 선형 변환은 동일한 가중치 행렬을 공유합니다. 임베딩 레이어에서 우리는 그 가중치에 root(dmodel)을 곱합니다.

 

모델에 recurrence 또는 convolution이 포함되어 있지 않기 때문에, 모델이 시퀀스의 순서를 사용하려면 시퀀스 내 토큰들의 상대적인 또는 절대적인 위치에 대한 정보를 주입해야 합니다. 이를 위해, 인코더 및 디코더 스택의 맨 아래에 있는 입력 임베딩에 "위치 인코딩"을 추가하였습니다.

이 작업에서 우리는 다른 주기를 가진 사인과 코사인 함수를 사용했습니다.

여기서 pos는 위치이고 i는 차원입니다. 즉, 위치 인코딩의 각 차원은 사인 곡선에 대응합니다. 모델이 상대 위치에 주의를 기울이며 쉽게 학습할 수 있게끔 한다고 가정했기 때문에 이 함수를 선택했습니다. 어떠한 고정 offset(출발점) K에 대해서도 PEpos+k가 PEpos의 선형 함수로 표현될 수 있기 때문입니다. 

우리는 또한 학습된 위치 임베딩을 대신 사용해 실험해보았습니다. 그리고 두 버전이 거의 동일한 결과를 생성한다는 것을 발견했습니다. 우리는 사인 곡선 버전을 선택했는데, 그 이유는 그것이 모델로 하여금 학습 중에 만난 것보다 긴 시퀀스 길이로 추론할 수 있게끔 할 수도 있기 때문입니다.

 

self-attention의 우리의 사용을 동기 부여하기 위해 우리는 세 가지 열망을 고려하였습니다.

하나는 레이어 당 총 계산 복잡도입니다. 다른 하나는 필요 순차 작업의 최소 숫자로 측정된 병렬 처리될 수 있는 계산의 양입니다.

세 번째는 네트워크의 장거리 의존성 간의 경로 길이입니다. 장거리 의존성을 학습하는 것은 많은 시퀀스 변환 과제의 주요 도전 과제입니다. 이러한 의존성 학습 능력에 영향을 미치는 하나의 주요 요소는 네트워크에서 순방향 및 역방향 신호가 가로질러야 하는 경로의 길이입니다. 입력과 출력 시퀀스의 위치 조합 사이의 경로가 짧을 수록 장거리 종속성을 더 쉽게 학습할 수 있습니다.

 

표 1에서 알 수 있듯이, self-attention 레이어는 모든 위치를 상수의 순차적으로 실행되는 작업에 연결하는 반면 recurrent 레이어는 O(n)의 순차적 작업을 필요로 합니다.(시간 복잡도 얘기)

계산 복잡도의 측면에서, self-attention 레이어는 시퀀스 길이 n이 표현 차원 d보다 작을 때, recurrent 레이어보다 빠릅니다. 이는 단어-조각 과 바이트-쌍 표현과 같이 기계 번역에서 SOTA 모델에 사용되는 문장 표현에서 가장 자주 발생하는 경우입니다.

매우 긴 시퀀스를 포함하는 과제의 계산 성능을 향상시키기 위해서, self-attention은 각 출력 위치를 중심으로 하는 입력 시퀀스에서 r 크기 만큼의 이웃만을 고려하도록 제한될 수 있습니다. 이렇게 하면 최대 경로 길이가 O(n/r)로 늘어납니다.

부가적인 이득으로, self-attention은 더 해석 가능한 모델을 산출할 수 있습니다.

개별 attention 헤드는 다른 과제를 수행하는 법을 분명히 배울 뿐만 아니라, 문장의 구문 및 의미 구조와 연관된 행동을 보이는 것으로 많이 나타납니다.

 

약 450만 문장 쌍으로 구성된 표준 WMT 2014 영어-독일어 데이터셋으로 학습했습니다. 문장은 약 37000 여개 토큰의 공유 원천-대상 어휘가 있는 바이트-쌍 인코딩을 사용하여 인코딩되었습니다.

영어-프랑스어의 경우, 3600만 문장으로 구성된 훨씬 더 큰 WMT 2014 영어-프랑스어 데이터 세트를 사용했습니다. 그리고 토큰들을 32000 단어-조각 어휘로 분할하였습니다. 문장 쌍은 대략적인 시퀀스 길이로 한데 묶였습니다. 각 학습 배치에는 약 25000 개의 원천 토큰과 대상 토큰이 포함된 문장 쌍의 세트가 포함되었습니다.

우리는 8개의 NVIDIA P100 GPU가 있는 하나의 기계에서 모델을 학습했습니다. 논문 전체에서 설명된 하이퍼파라미터를 사용하는 기본 모델의  경우 각 학습 단계는 약 0.4초가 소요되었습니다. 총 100,000 단계 또는 12 시간 동안 기본 모델을 훈련하였습니다. 큰 모델의 경우, 단계 시간은 1.0 초였습니다. 큰 모델은 300,000 단계 (3.5일) 동안 학습되었습니다.

 

B1 = 0.9, B2 = 0.98, e = 10^-9의 아담 최적화 (함수)를 사용하였습니다. 공식을 따라, 학습 과정에서 학습률에 변화를 주었습니다.

이것은 첫 번째 warmup_steps 학습 단계에 대해 선형적으로 학습률을 증가시키고 이후 단계 수의 역 제곱근에 비례하여 (학습률을) 감소시키는 것에 해당합니다. 우리는 warmup_steps = 4000을 사용하였습니다.

잔차 드롭아웃 : 각 하위 레이어의 출력에 드롭아웃을 그것이 하위 레이어 입력에 더해지고 정규화되기 전에 적용하였습니다. 게다가, 인코더 및 디코더 스택 모두에서 임베딩과 위치 인코딩의 합에 드롭아웃을 적용하였습니다. 기본 모델에서 우리는 0.1 비율을 사용하였습니다.

라벨 스무딩 : 학습 동안, els=0.1 값의 라벨 스무딩을 사용하였습니다. 이것은 복잡도를 해치지만, 모델이 더 불확실한 것을 배우게하여 정확도와 BLEU 점수를 향상시킵니다. (*라벨 스무딩은 Hard label(One-hot encoded vector로 정답 인덱스는 1, 나머지는 0으로 구성)을 Soft label(라벨이 0과 1 사이의 값으로 구성)로 스무딩하는 것을 뜻함)

 

기본 모델의 경우 10분 간격으로 기록된 마지막 5개의 체크포인트를 평균내서 얻은 단일 모델을 사용하였습니다. 큰 모델에 대해서는 마지막 20개의 체크포인트를 평균냈습니다. beam search를 beam 크기 4, 길이 페널티 a=0.6을 써서 사용했습니다.

추론 동안의 최대 출력 길이를 입력 길이 + 50으로 설정했지만, 가능하다면 일찍 종료시켰습니다.

 

 

Transformer의 다른 구성 요소의 중요성을 평가하기 위해서, 우리는 우리의 기본 모델을 다른 방식으로 변화시켜, 성능의 변화를 측정하였습니다. 빔 서치를 이전 섹션에서 설명한 바와 같이 사용하였지만 checkpoint 평균은 사용하지 않았습니다.

(A) : 계산량을 상수로 유지하면서 attention 헤드의 수와 attention 키와 벨류의 차원을 변화시켰습니다. 단일-헤드 attention의 BLEU 점수가 0.9로 최고 설정보다 나쁘지만, 너무 많은 헤드 수에서도 품질은 저하됐습니다.

(B) : attention key의 차원 크기 dk를 줄이는 것이 모델의 품질을 해치는 것을 관찰했습니다. 이것은 호환성을 결정하는 것이 쉽지 않다는 것을 암시하고 내적 보다 더 복잡한 호환성 함수가 유익할 수 있음을 시사합니다.

(C) & (D) :  더 큰 모델이 더 낫고 드랍아웃은 과적합을 피하기 위해 매우 도움이 된다는 것을 발견했습니다.

(E) : 사인파 위치 인코딩을 학습된 위치 임베딩으로 바꾸었는데 기본 모델과 거의 비슷한 결과를 보이는 것을 관찰했습니다.

 

Transformer가 다른 과제로 일반화할 수 있는지 평가하기 위해서 영어 구성 성분 분석 실험을 수행했습니다. 이 과제는 특정한 도전 과제를 제시합니다 : 출력은 강력한 구조적 제약을 갖기 쉽고 입력보다 상당히 깁니다.

약 40K 학습 문장의 WSJ의 Penn Treebank 부분에서 dmodel=1024 차원으로 4-레이어 transformer를 학습했습니다. 우리는 또한 준-지도 설정에서 그것을 학습시켰습니다. 더 큰 높은-신뢰도와 약 1,700만 문장의 BerklyParser 말뭉치를 사용했습니다. 우리는 WSJ 전용 설정에 대해 16K 토큰의 어휘를 사용했고 준-지도 설정에서는 32K 토큰의 어휘를 사용했습니다.

추론하는 동안, 최대 출력 길이를 입력 길이 +300 만큼 늘렸습니다. WSJ 전용과 준-지도 설정 모두에서 21크기와 a=0.3의 beam을 사용했습니다. 

표 4의 결과는 과제-특정적 조정이 없었음에도 불구하고 우리 모델이 놀라울 정도로 잘 수행되어, RNN Grammar를 제외하고 이전에 보고된 모든 모델들보다 더 나은 결과를 산출하였다는 것을 보여줍니다.

구성성분 분석, 의존성 분석(문법)

 

skip

 

attention encoder figure

 

모델 전체 구조(2 레이어 간소화 모델)와 작동 :

출처 : http://jalammar.github.io/illustrated-transformer/
출처 : http://jalammar.github.io/illustrated-transformer/

728x90