본 논문에서는 Transformers에 대한 complete, precise, and compact overview를 제공하는 것을 목적으로 Transformer components의 pseudocode를 소개하고 있습니다.
what Transformers are (Section 6)
how they are trained (Section 7)
what they’re used for (Section 3)
their key architureral components (Section 5)
tokenization (Section 4)
a preview of practical considerations (Section 8)
the most preminent models
Encoder-only Transfomer, Decoder-only Transformer에 대한 algorithm과 함께 train, inference에 대한 algorithm도 같이 소개하고 있으니 함께 살펴보셔도 좋을 것 같습니다.
Notations
Notation
논문에서 쓰이는 notation에 대해 소개합니다. Appendix B에 Notation 목록이 포함되어있습니다.
[N]:={1,2,…,N−1,N}, 1∼N까지 정수를 포함한 집합
NV: vocabulary size
V≅[NV]: vocabulary
V∗=⋃l=0∞Vl: vocabuary로 만들 수 있는 모든 sequence를 가지는 집합
l: sequence length
lmax: maximum sequence length
x: primary token sequence
xn≡x[1:l]≡x[1]x[2]…x[l]∈V∗
x[t]: x의 t번째 token
Python과 달리 index의 시작이 1 입니다.
target이라는 표현을 사용하기도 하지만 여기서는 primary로 표기합니다.
z: context token sequence, x에 대한 context sequence
zn≡z[1:l]≡z[1]z[2]…z[l]∈V∗
z[t]: z의 t번째 token
Python과 달리 index의 시작이 1 입니다.
source라는 표현을 사용하기도 하지만 여기서는 context로 표기합니다.
M∈Rd×d′: matrix
M[i,j] : entry Mij
M[i,:] : M의 i번째 row vector
M[:,j] : M의 j번째 column vector
Ndata: data 갯수
n∈[Ndata]: n번째 data
xn, zn
Matrix Multiplication
DL에서 많이 쓰이는 row vector × matrix 대신 수학에서 자주 쓰이는 matrix × column vector를 사용합니다.
따라서 각각의 component에서 반환되는 vector는 모두 column vector로 표시됩니다.
Final Vocabulary and text representation
Tokenization을 통해 만든 vocabulary에 3가지 special token을 추가하여 final vocabulary를 만듭니다.
special token을 제외한 나머지 token들에 대해서 {1,2,…,NV−3}의 unique index를 할당합니다.
special token은 다음과 같습니다.
mask_token:=NV−2, masked language modelling에 쓰이는 token
bos_token:=NV−1, the beginning of sequence, sequence의 시작을 알리는 token
eos_token:=NV, the end of sequence, sequence의 마지막을 알리는 token
Algorithm 1: Token embedding
Input
v: token ID
Output
e∈Rde: 입력으로 들어온 token ID에 대한 embedding vector 반환.
Parameters
We∈Rde×NV: embedding matrix
vocabulary에 존재하는 모든 token에 대해 embedding 값을 반환하기 위해서 column size가 NV가 됩니다.
과정
1번: token ID v에 대한 vector representation을 반환합니다.
Algorithm 2: Positional embedding
Attention is All You Need에서는 고정된 Positional Encoding 사용하지만 이 논문에서는 Postional Encoding 또한 학습 parameter로 설정하였습니다.
Input
l: position in sequence
Output
e∈Rde: 입력으로 들어온 postion에 대한 embedding vector 반환.
Parameters
We∈Rde×lmax: positional embedding matrix
data에 존재하는 모든 sequence에 대해 positional embedding 값을 반환하야하기 때문에 column size가 lmax가 됩니다.
과정
1번: position l에 대한 vector representation가 됩니다.
최종적으로 sequence x의 t번째 token에 대한 embedding vector는 다음과 같습니다.
e=We[:,x[t]]+Wp[:,t]
Algorithm 3: Basic single-query attention
Attention is all You Need 논문에 소개된 single query attention 과정인 A(q,K,V)=i∑∑jexp(q⋅kj)exp(q⋅ki)vi 을 그대로 적용합니다.
Input
e∈Rdin: 현재 token에 대한 vector representation
context sequence에 존재하는 모든 token에 대한 vector representation
et∈Rdin: context sequence의 t번째 token에 대한 vector representation
Output
현재 token과 context 정보를 결합한 vector representation 반환
v~∈Rdout
실제 Transformer에서는 attention 이후 residual connection을 하기 때문에 이 점에 유의해서 dout과 din를 설정해주어야합니다.
Parameters
We∈Rdattn×din: query linear projection
be∈Rdattn: bias term
Wk∈Rdattn×din: key linear projection
bk∈Rdattn: bias term
Wv∈Rdout×din: value linear projection
bv∈Rdout: bias term
과정
1번: 현재 token을 query vector로 변환합니다.
2번: context sequence에 존재하는 모든 token을 key vectors로 변환합니다.
3번: context sequence에 존재하는 모든 token을 value vectors로 변환합니다.
4번: query vector와 key vectors 사이에 attention distribution을 계산합니다.
5번: attention distribution을 가중치로 사용하여 value vector의 가중합 벡터를 반환합니다.
Algorithm 4: Attention
single query attention이 하나의 token에 대한 attention 과정이었다면 algorithm 4번의 attention은 이를 확장시켜 sequence에 존재하는 모든 token에 대해 attention을 진행하는 과정입니다.
Attention is All You Need에 소개된 A(Q,K,V)=softmax(dkQKT)V을 그대로 적용합니다.
Input
X∈RdX×lX: primary sequence
Z∈RdZ×lZ: primary sequence에 대한 context sequence
Output
V~∈Rdout×lX: context 정보와 결합한 X에 존재하는 모든 token에 대한 vector represenations 반환
v~∈Rdout
실제 Transformer에서는 attention 이후 residual connection을 하기 때문에 이 점에 유의해서 dout과 din를 설정해주어야합니다.
Parameters
We∈Rdattn×dX: query linear projection
be∈Rdattn: bias term
Wk∈Rdattn×dZ: key linear projection
bk∈Rdattn: bias term
Wv∈Rdout×dZ: value linear projection
bv∈Rdout: bias term
Hyperparameters
Mask∈{0,1}lz×lx
과정
1~ 4번: single query attention에서 1 ~ 3번 과정을 행렬로 확장시킨 것입니다.
5번: 계산된 score에 mask를 사용하는 부분이 등장합니다.
mask값이 0인 부분에 아주 작은 값을 할당해서 softmax를 통과할 때 0에 가까운 값이 반환되도록 합니다.
6번: single query attention에서 4 ~5번 과정을 행렬로 확장시킨 것입니다.
self-attention
self-attention은 자기자신만을 사용하여 attention을 계산합니다. 따라서 Z=X인 Attention 입니다.
Bidirectional / unmasked self-attention
bidirectional / unmasked self-attention의 경우 sequence에 존재하는 모든 token에 대해 attention을 계산합니다. 따라서 Mask≡1 이면서 Z=X인 Attention입니다.
Unidirectional / masked self-attention
Unidirectional / masked self-attention의 경우 이전 token들을 context로 사용하여 각 token에 대해 attention을 계산합니다.
현재 token 다음에 나오는 token들은 maksed out되기 때문에 Mask:=[[tz≤tx]]이면서 Z=X인 Attention 입니다.
Cross-attention
primary sequence와 context sequence가 다른 attention입니다. self-attention에 반대되는 경우라고 볼 수 있기 때문에 Z=X입니다. cross-attention은 또한 mask를 적용하지 않기 때문에 mask≡1인 Attention 입니다.
Algorithm 5: MHAttention
Input
X∈RdX×lX: primary sequence
Z∈RdZ×lZ: primary sequence에 대한 context sequence
Output
V~∈Rdout×lX: context 정보와 결합하여 X에 존재하는 모든 token에 대한 vector represenations 반환
v~∈Rdout
실제 Transformer에서는 attention 이후 residual connection을 하기 때문에 이 점에 유의해서 dout과 din를 설정해주어야합니다.