AI TECH

Sequential Models - Transformer

prefer_all 2022. 10. 6. 13:40
Sequential model의 한계점과 이를 해결 하기 위해 등장한 Transformer
Transformer는 Encoder와 Decoder로 구성되어있지만 강의에서는 Encoder와 Multi Head Attention 에 대해 좀 더 집중적으로 배웁니다. 

<목차>
1. Transformer
- self attention
- Multi-headed attention (MHA) : Positional Encoding

2. Vision Transformer
3. DALL- E

 

Sequential model의 한계점

data가 중간에 빠져 있거나 순서가 달라지면 모델링하기 어려움

 


Transformer

  • first sequence transduction model based entirely on attention
  • 재귀적인 구조가 없음. attention이라는 구조를 활용함 <-> RNN은 재귀적으로 돌아감

 

sequence - sequence model : 프랑스어 문장을 영어로 바꿈

입력 sequence, 출력 sequence 숫자가 다를 수 있음/ domain도 다를 수 있음

 

 

self attention (encoder)에서는 한 번에 찍음

<-> RNN은 세 개의 단어가 들어가면 세 번 nn이 돌아감. 

** N개의 단어가 어떻게 한 번에 처리되는 지, 인코더와 디코더 사이 어떤 정보 주고 받는 지 중요, 디코더가 어떻게 generation 할 수 있는 지 **

인코더: 표현 / 디코더: 생성

encoding 부분은 여러 개의 encoder를 쌓아 올려 만든 것 (논문에서는 6개를 쌓았다고 합니다만 꼭 6개를 쌓아야 하는 것은 아니고 각자의 세팅에 맞게 얼마든지 변경하여 실험할 수 있음).

decoding 부분은 encoding 부분과 동일한 개수만큼의 decoder를 쌓은 것. encoder들은 모두 정확히 똑같은 구조를 가지고 있음 (그러나 그들 간에 같은 weight을 공유하진 않음).

 

selft attention in both encoder and decoder is the cornerstone of Transformer (Feed Forward는 MLP랑 똑같으니까 여기선 큰 영향 안 미침)

 

  • 인코더에 들어온 입력은 일단 먼저 self-attention layer을 지나가게 됨. 이 layer 은 encoder가 하나의 특정한 단어를 encode 하기 위해서 입력 내의 모든 다른 단어들과의 관계를 살펴봄. 입력이 self-attention 층을 통과하여 나온 출력은 다시 feed-forward 신경망으로 들어가게 됨. 똑같은 feed-forward 신경망이 각 위치의 단어마다 독립적으로 적용돼 출력을 만듦.
  • decoder 또한 encoder에 있는 두 layer 모두를 가지고 있음. 그러나 그 두 층 사이에 seq2seq 모델의 attention과 비슷한 encoder-decoder attention이 포함되어 있음. 이는 decoder가 입력 문장 중에서 각 타임 스텝에서 가장 관련 있는 부분에 집중할 수 있도록 함.

x1이 z1으로 넘어갈 때 x2, x3의 정보도 고려함


Self Attention 살펴보기

  • self attention 구조는 세 가지 벡터 query, key, values를 만들어냄 (3개의 Neural network라고 이해)
  • score 벡터를 만듦 (인코딩 하고자 하는 쿼리 벡터와 나머지 모든 키 벡터를 내적. i번째 단어가 나머지 단어와 얼마나 유사도 있는 지 확인)

 

  • score 벡터를 8로 나눠서 normalize (key벡터가 몇 차원으로 만들어지느냐)
  • softmax를 취해서 0~1 사이의 값으로 attention weight을 계산 (자기 자신 혹은 다른 단어와 얼마냐 interaction 해야하는가. 스칼라값)
  • -> value 벡터로 가짐 (각 단어의 embedding에서 나오는 value벡터의 weight sum이 최종적으로 필요한 값)

<주의 할 점>

1) 쿼리벡터와 키 벡터는 차원이 항상 같아야함 (이유: 내적해야해서)

2) 쿼리벡터와 키 벡터는 value 벡터와 차원이 달라도 됨 (이유: weighted sum만 하면 되니까)

3) 최종적으로 나오는 encoding된 벡터의 차원은 value 벡터의 차원과 동일

 

 

 

Self Attention의 matrix 계산

위의 내용을 행렬로 간단하게 표현 : X로부터 나온 Q, K, V를 계산해서 Z를 찾움

X는 2*4 matrix이므로 4차원인 2개의 단어 / Q,K,V를 찾기 위해 W^Q, W^K, W^V 사용

 

Transformer의 장점

  • 고정된 이미지를 CNN이나 MLP에 넣으면 결과가 고정되어있음. 그러나 Transformer는 인코딩 하려는 옆 단어에 따라 결과 달라지므로 flexible하다는 장점이 있음.

Transformer의 단점

  • 많은 computation이 필요하다는 단점이 있음.
  • N개의 단어가 주어지면 N x N짜리 attention map을 만들어야함. (<-> RNN은 1000개의 sequence가 주어지면 1000번 돌리기만 하면 됨) -> 처리할 수 있는 한계가 있음

 


Multi-headed attention (MHA)

  • allows Transformer to focus on different positions.
  • 하나의 입력(임베딩된 벡터)에 대해 query, key를 하나만 만드는 게 아니라 여러 개 만듦
임베딩이란 사람이 쓰는 자연어를 기계가 이해할 수 있는 숫자의 나열인 벡터로 바꾼 결과 또는 그 과정을 의미함

N개의 Attention을 하면 N개의 encoding 벡터가 나올 것임.

위 그림의 경우 8개의 Head가 사용되었으므로 8개의 encoding 벡터가 생성됨.

  • 고려해야할 것: 입력과 출력의 차원을 맞춰줘야함. 즉, Embedding된 dimension과 Encoding되어서 self-attention 값으로 나오는 벡터의 dimension이 같아야 함.
  • We simply pass them through additional (learnable) linear map. 일단 모두 이어 붙여서 하나의 행렬로 만들어버리고, 그다음 하나의 또 다른 weight 행렬인 W0을 곱해버림.

위 그림에서 보면 8개의 벡터가 나왔는데, 한 개당 dimension이 10이라면 모든 attention값을 concatenate하면 80차원이 될 것이다. 입력과 출력의 차원을 맞춰주어야 하므로 80X10 matrix를 곱하여 10차원으로 줄여버린다.

근데 실제 구현체를 보면 이렇게 되어있지 않다. (늘렸다가 줄이는 게 아니라, 나눈다.)
원래 내 embedding dimension이 100이라고 하고, 10개의 head를 사용한다면, 100 dimension을 10개로 나눈다.
즉, 실제로 Query, Key, Value 벡터를 만들 때 각각 10 dimension을 이용한다. (쪼개서 처리하고 concatenate 한 후에 dense layer에 처리)

사진 한 장으로 MHA 요약 가능

 

Positional Encoding

  • Positional Encoding 을 이용해서 시퀀스의 순서 나타내기 : Transformer 모델은 각각의 입력 embedding에 “positional encoding”이라고 불리는 하나의 벡터를 추가. 이 벡터들은 모델이 학습하는 특정한 패턴을 따르는데, 이러한 패턴은 모델이 각 단어의 위치와 시퀀스 내의 다른 단어 간의 위치 차이에 대한 정보를 알 수 있게 해줌.
  • 이유:  Transformer에 n개의 단어를 Sequential하게 넣어주었다고 하지만 사실 Sequential한 정보가 포함되어 있지는 않다. Self-Attention의 동작을 생각해보면 ABCDE를 넣거나 BCEDA를 넣거나 각각의 Encoding 값은 달라지지 않는다. 그러나 실제 문장을 만들때는 어떤 단어가 어디서 나오는지 순서가 중요하다. 그래서 positional encoding 값을 더해준다. 
  • 즉, 이 값들을 단어들의 embedding에 추가하는 것이 query/key/value 벡터들로 나중에 투영되었을 때 단어들 간의 거리를 늘릴 수 있게 함

<요약>

- Transformer transfers key (K) and value (V) of the topmost encoder to the decoder

 

- encoder가 입력 시퀀스 처리. encoder의 출력은 attention 벡터인 k와 v로 변형됨-> 이 벡터들은 각 decoder의 encoder- decoder attention layer(인코더와 디코더 사이의 interaction)에서 디코더가 입력 시퀀스에서 적절한 장소에 집중할 수 있도록 함

인코더와 디코더 사이 어떤 정보 주고 받는 가: Key와 Value 벡터

 

 

디코더가 어떻게 generation 할 수 있는 지

- decoding 단계에서 출력을 완료했다는 special 기호를 출력할 때까지 반복.  encoder의 입력에 했던 것과 동일하게 embed를 한 후 positional encoding을 추가하여 decoder에게 각 단어의 위치 정보를 더함.

- decoder에서 self-attention layer은 마스킹을 통해 이전 단어들만 dependent하게 함(encoder와 다르게 동작)

  이유: 학습 단계에서는 정답을 알게 되면 의미가 없기 때문에 뒤에 단어들은 dependent하지 않게

- decoder의 encoder- decoder attention layerQuery 행렬들을 그 밑의 layer에서 가져오고 Key 와 Value 행렬들을 encoder의 출력에서 가져온다는 것 제외 multi-head self-attention과 똑같이 작동함.

 

 

- 여러 개의 decoder를 거치고 난 후에는 소수로 이루어진 벡터 하나가 남음. 이 벡터를 단어로 바꾸는 게 Linear layer 과 Softmax layer가 하는 일

- Linear layer은 fully-connected 신경망으로 decoder가 마지막으로 출력한 벡터를 그보다 훨씬 더 큰 사이즈의 벡터인 logits 벡터로 투영시킴 ( 우리의 모델이 training 데이터에서 총 10,000개의 영어 단어를 학습하였다고 가정하면  logits vector의 크기는 10,000이 될 것임. 벡터의 각 셀은 그에 대응하는 각 단어에 대한 점수 )

- softmax layer는 이 점수들을 확률로 변환해주는 역할. 들의 변환된 확률 값들은 모두 양수 값을 가지며 다 더하게 되면 1이 되고, 가장 높은 확률 값을 가지는 셀에 해당하는 단어가 해당 스텝의 최종 결과물로서 출력

마지막 layer은 단어들의 분포를 만들어 가장 확률이 높은 단어를 출력함

 


문장, 단어 처리 <->

 

Vision Transformer

이미지 분류에 인코더만 사용. 인코더에서 나오는 첫번째 벡터를 classifier에 집어넣는 식

이미지를 영역으로 나누고 하나의 입력처럼


DALL-E

문장을 주어지면 관련 이미지를 만듦

디코더만 활용을 함