Transformer

현빈·2023년 8월 14일
0
post-thumbnail

Transformr: Attention is All you Need

Transformer는 RNN과 다르게 한번에 모든 토큰을 처리한다. 즉, Attention 사용 + 속도가 매우 빠른 모델이다.


다음과 같은 구조로 되어 있다. Encoder stack, Decoder stack.

Encoder vs Decoder

Encoder: 한번에 모든 sequence 사용해서 Unmasked
Decoder: sequence 생성 시 순차적으로 처리해야하므로 순서에 따라 masked

각각의 Encoder들은 모두 같은 2단 구조로 이루어져 있다.(Self Attention, Feed Forward Neural Network) 다만 가중치는 모두 달라질 수 있다.

  • Self Attention Layer: Token 처리 시 함께 주어진 다른 input들을 얼마나 중요하게 볼 것인가 계산. 각각의 단어이니 단어의 Position 그대로 적용된다.
  • Feed Forward Neural Network: 각각의 Self Attention이 수행된 단어들에 대해 Neural Netwrok 적용해 output 추출. 역시 Position 그대로 적용된다.
  • 즉 모든 각각 Token에 대해 Self Attention 계산 후 Feed Forward Neural Network 적용해 output 추출한다.

각각의 Decoder들은 모두 같은 3단 구조로 이루어져 있다.(Self Attention, Encoder-Decoder Attention, Feed Forward Neural Network)

  • Self Attention: Decoder에서 어떤 정보가 주어지면 자기 자신끼리 Self Attention 수행
  • Encoder-Decoder Attetntion: 최종적인 output 산출 시 Encoder에서 주어지는 정보를 어떻게 반영할 것인지? 즉, Encoder에서 가져온 정보와의 Self Attention 수행
  • Feed Forward Neural Network

1. Input Enbedding

제일 처음 Encoder의 입력으로만 사용된다. 1차적으로 Input 단어들에 대해 Embedding 적용 후 보통 512차원으로 적용.
다음 Encoder들의 입력은 이전 Encoder의 Output을 사용한다. 이때 사이즈(Hyper Parameter)는 유지된다.

2. Postional Encoding

RNN과 다르게 전체 sequence를 한번에 Input에 넣으면 특정 단어가 언제 입력됐는지에 대한 정보가 손실돼기에 각각의 위치를 어느정도 보존 해주는 것

Input Sequence의 단어의 순서를 고려해준다.

즉, Input Embedding + Positional Encoding (Concat이 아니다)

Postitional Encoding의 조건

  • 해당하는 Postitional Encoding vector 자체의 크기는 같아야 한다.
  • 위치관계 표현이니 두 단어의 거리가 Input sequence에서 멀어지면 Postional Encoding 사이의 거리도 멀어져야 한다.

3. Multi Head Attention

Encoder에서

  • Self Attention에서는 각각의 Token에 Dependency 존재
  • Feed Forward Neural Network에서는 Dependency X

4. Self-Attention

''The animal didn't cross the street because it was too tired''
위 문장에서 'it' 을 'The animal'에 Self-Attention을 이용해 연결시킬 수 있다.

  • Input sequence의 다른 단어들을 모두 보며 'it'과 연관이 있는 단어에 대한 답을 구하는 과정
  • 즉, 다른 단어들의 관계를 알기 위해 현 동일한 Input sequence의 다른 단어들을 살펴보겠다는 의미

4-1 Query, Key, Value 의미

Self-Attention을 만들기 위해 각각의 Input vector에 대해 3종류의 벡터를 만든다

  • Query: 현재 내가 보고 있는 단어. 다른 단어의 Scoring을 위한 기준이 된다.
  • Key: Label의 의미. Query가 주어졌을 때 유의미한 관계를 찾을 때 Key를 바탕으로 찾기 시작한다.
  • Value: Key에 딸려있는 실제 값.

즉, Query와 Key를 통해 가장 적절한 Value를 찾고 연산한다.

일반적으로 Q,K,V의 차원은 Input, Output보다 작게 한다.

4-2 Self-Attention 계산법

현재 보고있는 Query가 가장 관련이 높은 Key, Value 찾아야 한다.

  • 현재 보고있는 Query와 연관성 큰 토큰 찾는법: 현재 보고 있는 Query vector(q1)과 나를 포함한 나머지 값들의 Key값(kn)을 곱한다.
  • 각각 차원의 루트 수로 나눈다.
  • Softmax score 도출: 현재 Position에 해당하는 단어가 현재 보고있는 Query에 얼마나 중요한지 판단
  • Softmax score * Value(v1, v2,...)
  • Softmax에 의해 가중합이 된 Value값들을 모두 더한 것이 첫번째 Token의 Self-Attention Output으로 사용하겠다.(z1)

5 Multi-Head Attention

그러나
위와같이 8개의 행렬 결과값이 나온다 해서 Feed-Forward Layer로 보낼 수 없다. Feed Forward Layer은 한 위치에 대해 하나의 행렬만을 input으로 받을 수 있어 하나의 행렬로 합쳐야 한다.

  • Self Attention의 output들(Z0,Z1,Z2...)을 Concat 한것과 같은 컬럼, 그리고 원래의 임베딩과 같은 로우의 수로 W0를 새로 생성한다.
  • 그다음 Concat 한 Z들 * W0

6 Redidual

  • 모든 Encoder, Decoder에서 사용한다
  • Self-Attention에서 나온 Output에 본인인 X(input)을 더한다.
  • 미분 시 Gradient가 0이 되는 것 방지한다.
  • 그다음 Normalization

7 Decoder - Masked Multi-Head Attention

  • Decoder에서 Self-Attention Layer은 반드시 자기 자신보다 앞쪽 Layer에 있는 Token들의 Attention Score만 볼 수 있다.
  • 그렇다면 뒷쪽 Token들의 Self-Attention Score을 -inf로 보내면 된다.

8 Decoder - Multi-Head Attention with Encoder Outputs

  • Encoder의 Output과 Decoder의 Masked-Attention 통과한 값 사이의 Attention

즉, Mult-Head Attention은 3가지 종류가 있다.

9 Linear & Softmax Layer

Deocder들을 걸치고 최종적으로 남은 벡터를 단어로 바꾸는 과정

  • Linear Layer: Decoder가 마지막으로 출력한 벡터를 더 큰 사이즈의 벡터로 투영시킨다.
  • Softmax Layer: 최종적 argmax로 단어 출력
profile
안녕하세요

1개의 댓글

comment-user-thumbnail
2023년 8월 14일

좋은 정보 감사합니다

답글 달기

관련 채용 정보