Transformer : Attention is all you need

- attention 메커니즘을 극대화시킨 모델(sequential -> atterntion)

- input embedding -> encoder -> decoder -> output의 구조를 가지고 있음.


encoding block vs docoding block

- unmasked(encoder) : 따로 masking 하지는 않음.

- masked(decoder) : 문장을 생성할 때 앞 -> 뒤로 순차적으로 만들어야하기 때문에 masking이 되어있음.

 

encoder 구조

- encoder block의 구조는 동일하나, 구조 안 가중치들은 학습을 통해 달라질 수 있음.

- 두 개의 sub layer로 이루어짐 (self-attention layer, feed forward NN)

- 각 word에 대해 self-attention -> feed forward NN를 각각 거침

 

decoder 구조

- encoder-decoder attention layer가 추가됨. 최종 output을 산출할 때, encoder 정보를 어떻게 반영할 것인지.


Input imbedding

- 처음 들어갈 정보들의 vector

- 첫 번째 encoder의 입력으로만 사용됨

- size는 512차원, 가장 아래 encoder만 word embedding으로 받고 다른 encoder는 이전 encoder를 이어받음.

- 한 sequence의 길이를 최대 몇 개까지 가져갈 것이냐? (ex - 상위 95%에 해당하는 token의 개수)

 

Positional Encoding

- input imbedding에서 encoder끼리 정보가 넘겨지면서 위치 정보가 손실될 수 있음.

- 이를 해결하고자 positional encoding이 나옴. (위치 정보를 반영할 수 있는 장치)

- input embedding과 positional encoding을 더해서 encoder로 넘겨줌(concat이 아닌 더하기 개념)

- 조건 1 : word embedding이란 동일한 크기의 벡터를 더해야 됨. 크기 자체가 위치에 따라 달라지면 안 됨. 두 단어의 거리가 멀어질수록 position encoding이 멀어지게 된다.

- 조건 2 : 평균에 비해 표준편차가 매우 작음. 


Encoder

- self-attention에서는 서로 연관이 있음. (단어들 간의 관계가)

- feed-forward layer에서는 연관이 없음 -> 병렬화 가능 (각 feed-forward에서는 weight가 공유되는 하나의 dense layer를 거침, 다른 encoder계층에서는 weight가 공유되지 않음)

 

Self-attention

- it이라는 단어가 어디에 영향을 많이 받고 있는지.

 

Self-Attention in Detai

1) 3종류의 vector를 만듦.

- Query : 현재 processing하는 current word의 representations. 다른 단어들을 scoring하는 기준 값.

- Key : label과 같은 역할. relevant words를 찾을 때 key를 활용.

- value : key에 대한 실제 값

- input imbedding으로부터 각각의 해당되는 matrix가 존재. thinking이라는 x1에 wq를 곱하면 q1이 나오게 됨

- wq와 input imbedding의 연산으로 quey, key, value의 vector를 학습으로 구하는 미지수.

- input 차원(512)보다 q, k, v 의 차원(64)을 적게 잡음. (multi-head attention을 통과하는 vector들을 concat했을 때, 512차원이 다시 만들어지도록. 64x8[multi-head attention의 숫자] = 512)

 

2) query해당되는 key값을 찾아 value 매칭

query vector와 key vector들을 곱함.

3) 차원의 root값만큼 나눠줌. (gradient가 stable해지는데 도움이 됨)

4) softmax 연산을 거침. (-> 현재 position에 해당하는 단어가, 내가 보고 있는 token에 얼마나 중요한 역할을 하는가)

5) value와 softmax를 곱해줌. 

6) softmax에 의해 가중합이 된 value값들을 첫 번째 token의 output으로 쓰겠다.(sum을 왜하지)

7) value와 score를 곱하게 되면 값이 클수록 크게 나타나고, socre가 작으면 남아있지 않음.

 

matrix 연산

- vector -> matrix 확장

 

- value vector와 score의 곱으로 나온 vector를 sum하는 이유?

- 각 토큰(x1, x2, ...)을 연산하고 난 모든 vector들을 각각 연산하면 똑같은 z1, z2, ...값이 나오게 되는 거 아닌지


Multi-headed attention

- single attention을 각각을 따로 한 multi head attention. attention을 여러개 쓰겠다.

1) attention heads로부터 나온 z값들을 concat

2) z를 concat한 차원을 row로 가지고, input vector의 차원을 가지는 w0 matrix 생성.

3) 두 matrix를 곱하면 원래 input imbedding의 dimension을 가지는 self-attention의 output을 가지게 됨.

 

Residual

- residual connection : 입력의 output의 자기 자신 x를 더해줌 -> d/dx 해주면 f'(x)+1이 나오게 됨. (1을 흘려주면 학습에서 유리)

- layer-normalization 사용

 

Position-wise Feed-Forward Networks

- fully-connected feed-forward network

- 각 포지션에 대해 relu function으로 0과 x중 큰 값을 더하고 weight를 곱하고 상수항을 더함

- 각 layer마다 서로 다른 파라미터 사용

- 같은 block내에서는 동일한 가중치. 다른 block에서는 가중치가 다를수도


Masked Multi-Head Attention(Decoder attention)

- 자기 자신보다 앞 쪽에 해당하는 token들만 attention score를 볼 수 있음.

- 뒷 단은 볼 수 없음. (position에 해당하는 score값을 무한대로 바꿔줌.

 

Encoder-Decoder Attention

- Encoder를 지나온 block이 key value를 가지고 decoder에 각각 영향을 미쳐서 output이 나오게 됨.

 

The final linear and softmax layer

- linear layer : fc layer

- softmax layer : score probability

728x90
반응형

'딥러닝 > 자연어처리' 카테고리의 다른 글

[NLP] GPT 논문 리뷰  (0) 2023.01.13
[NLP] Bert 논문 리뷰  (0) 2023.01.13
[NLP] seq2seq Learning  (0) 2023.01.03
자연어 처리  (0) 2021.07.12
NLP 논문리뷰 - Distilling the Knowledge in a Neural Network  (1) 2021.05.13
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 라이프코리아트위터 공유하기
  • shared
  • 카카오스토리 공유하기