-
Attention is all you need 리뷰Paper/Learning based method 2019. 10. 29. 13:11
Attention is all you need
1. Contribution
global dependency를 잡아내고 횡방향으로 병렬 연산을 가능하게 하여 학습속도를 높임
RNN 모델을 Attention으로 대체 가능하게 함
2. Background
2.1. ByteNet
sequential 한 연산을 줄이자는 목표
hidden representation을 병렬처리하기 위해 CNN활용
distant position 에 있는 dependency는 많은 연산을 필요로 함
2.2. Self Attention = Transformer
이전의 RNN과 함께 사용되던 attention의 경우에는 인코더 측의 hidden variable과 디코더 측의 hidden variable간의 유사성, 즉 서로 다른 sequence들과의 유사성을 비교했다. 하지만 self attention은 한 sequence 내에서 서로 다른 위치간의 유사성을 고려하도록 설계되었다.
한 sequence 내에서 다른 position과의 대응관계를 통해 연결해주는 attention기법
RNN, CNN 구조를 사용하지 않고 hidden representation을 구한 최초 모델
Attention weight position에 평균을 취하여 효율성을 잃었지만 (이 operation이 상수로 고정되어 있다는 것은 무슨 말 ???) Multi-Head-Attention으로 이를 극복
3. Model
집중해서 봐야할 것
-
Skip connection
-
Layer normalization
-
Multi-Head-Attention - 다수의 attention을 병렬로 연결
-
position encoding
3.1 Encoder and Decoder Stacks
$$N_X$$ 는 그 계층을 N겹으로 쌓아 올렸다는 말 (stack)
3.1.1 Encoder
6개를 stack 하였고 각 layer는 2개의 sub-layer (Multi-Head Self Attention, FC)로 구성
각 sub-layer마다 skip connection 이후 normalization
수월한 skip connection을 위해 embedding layer의 출력과 sub-layer의 출력의 차원 수는 512로 통일
3.1.2 Decoder
Encode와 동일하게 6개를 stack하였고 동일한 2개의 sub-layer를 갖음
또한 마찬가지로 각 sub-layer마다 skip connection 이후 normalization
하지만 하나의 sub-layer인 Masked-Multi-Attention layer가 추가
그 layer에서는 각 위치에 뒤따라오는 위치에 attention하는 것을 방지하기 위해 약간 수정을 했다고 하며 그것을 통해 i번째 위치에 대한 예측이 이전의 예측값들에만 의존 할 수 있도록 했다고 한다. (??? 정확히 이해가 안됨)
3.2. Attention
hidden representation 간의 관계를 compatibility function 통해 중요도인 attention weight를 구한뒤 weighted sum 을 하여 구함
3.2.1 Scaled Dot-Product Attention
Compatibility function으로 대표적으로 scaled dot product 를 사용
Query와 key 가주어졌을 때
Q, V를 Matmul -> Scaling -> Mask(optional) -> SoftMax -> Value 와 Matmul
3.2.2. Multi-Head Attention
전체 dimension에 대해서 한번 attention을 적용하는 것이 아니라 attention을 병렬로 전체 dimension을 h로 나눠서 attention을 h번 적용했다. 다시말해, 어텐션을 사용할 때, 1번 하는 것 보다 여러 개로 분할해서 병렬로 어텐션을 수행하고 결과값을 다시 하나로 합치는 방식을 택
- query와 key, value를 $$d_k$$차원에 linear projection
- projected된 버젼의 h개의 query, key, value를 가지고 h번의 Scaled Dot-Product Attention
- h개를 다시 concat하고 다시 project을 시켜 최종값을 얻음
여기서 h=8이라고 함
최종적으로 position의 다른 subspace에서의 representation 정보를 얻는다고 함
이유는 linear projection을 통해 다른 subspace에서의 표현방법들을 찾아서 복원시켰기 때문
3.3. Position-wise Feed-Forward Network
모든 position에 동일하게 적용되는 FC layer
Relu를 포함한 2개의 linear layer $$ FFN(x)=max(0,xW_1+b_1)W_2+b_2 $$ 로 구성
또다른 표현방식으로는 kernel size1의 2 convolution 로 디자인을 해도 됨
input과 output차원은 512이고, hidden layer의 차원은 2048
3.4. Embeding and Softmax
input output token을 벡터로 만들어주는데 learned embedding을 사용
decoder를 통해 나온 representation은 FC와 softmax를 거쳐 다음token의 probability로 나옴
3.5. positional Encoding
인코더 디코더의 하위 layer인 embedding layer에 'positional encoding'을 추가하여 sequence 를 ordering
positional encoding은 임베딩 차원과 동일하며 따라서 합쳐질 수 있음(뭐와 합쳐질 수 있다는 거지??)
positional encoding방법들 중 cosine function을 사용
pos는 위치 i는 차원?? 을 의미
$$ PE_{(pos,2i)}=sin(pos/10000^{2i/d_k}) $$
$$ PE_{(pos,2i+1)}=cos(pos/10000^{2i/d_k}) $$
각 positional encoding의 차원이 sin곡선을 가진다는 것을 의미
$$PE_{pos+k}$$가 $$PE_{pos}$$의 linear function이 되므로 relative position의 정보를 배울 수 있을 것이라 가정
따라서 training때 없었던 길이의 sequence가 들어와도 잘 작동할 수 있을 것이라 생각
4. Self Attention
-
Layer 마다 연산복잡도
-
연산의 병렬화 정도
-
네트워크의 path 길이에 따른 long range dependency
위의 세가지를 아래 네가지와 비교했다.
-
Self-Attention
-
Recurent
-
Convolutional
-
Self-Attention (restricted)
Self-Attention이 모든 position을 상수시간이 소요되는 constant sequential operation으로 연결
RNN은 Self-Attention보다 n = sequence길이 < d = representation 차원 수 일때 layer당 연산 복잡도가 낮음
Restricted는 연산을 향상시키기 위해 self-attention을 $$r = neighborhood$$ 이내의 경우로 제한시킨것이고, 이경우 path 길이가 늘어나는 단점이 있는 trade-off가 있음
Conv layer는 커널로 인해 Rnn보다 주로 더 계산이 많다. 그러나 seperable convolution(??? 뭔지모름)은 복잡도를 확연히 줄일수가 있다
Self-attention을 통해 좀더 해석가능한 모델이 되는데, 이를 이용해 다른 task를 하도록 함(appendix참조)
5. Training
5.1 Training Data and Batching
4.5M의 sentence pair로 구성된 WMT2014 English-German 사용
sentence encoding은 source와 target vocabulary에서 37000개의 단어가 겹쳐 byte-pair encoding을 사용
36M의 sentence pair로 구성된 WMT2014 English-French 사용
sentence pair는 길이에 따라 batch로 묶였다. 각 batch는 약 25000개의 source token과 역시 약 25000개의 target token
5.2. Optimizer
Adam 사용
$$\beta_1=0.9$$, $$\beta_2=0.98$$, $$\epsilon=10^{-9}$$ ,$$ lrate=d^{-0.5}_{model}\cdot min(stepnum^{-0.5}, stepnum\cdot warmstep^{-1.5}) $$
warmup_step=4000
warmup_step에서는 learning rate를 선형적으로 증가시켰다가 이후에는 step_number의 square root로 천천히 감소시킨 learning decay를 가능하게 함
5.3. Regularization
Residual dropout을 사용
각 sub-layer가 skip connection과 더해지고 normalized되기 전에, sub-layer의 output에 dropout
embedding과정에서도 dropout
drop rate = 0.1
6. Result
6.1. Machine Translation
training cost = 학습시간 * 사용된 GPU수 * 각 GPU의 연산능력 으로 추정
WMT 2014 Eng-Ger에서
big transformer model이 앙상블을 포함한 이전모델을 2.0 BLEU score로 앞섬
base모델 역시 training 비용을 고려하였을때 이전모델들과 견줄만
WMT 2014 Eng-French에서
big model이 이전의 다른 single model보다 training 비용은 1/4로 줄었음에도 BLEU는 더 좋음
6.2. Model Variance
Eng-Germ 모델을 newstest 2013이라는 새로운 데이터에 적용
Transformer의 설정을 조금씩 바꿔보며 파라미터에 대한 variance기록
때 beam search를 사용 (beam search가 무엇??)
-
연산량은 유지하면서 attention head의 수나 key, value의 차원을 조절해보았다. head가 너무 많은것도, 적은것도 성능에 악영향을 줌
- ttention key size $$d_k$$를 줄이는것 역시 결과가 안좋았다. 아마 compatibility function이 dot product의 이점보다 더욱 복잡한것이 필요
모델의 차원이 크고 head를 8에서 16으로 늘린 big model이 최고의 성능
-