Sequential Models - Transformer

yst3147·2022년 2월 20일
0

공부 내용

  • Sequential model의 한계
  • Transformer
  • 여러 가지 Transformer 종류

Sequential Model의 한계

  • 다음과 같은 여러 sequence data 형태들 때문에 sequential modeling이 어렵다
    • Trimmed sequence : 몇개의 뒤 단어가 빠짐
    • Omitted sequence : 중간 단어가 빠짐
    • Permuted sequence : 단어가 밀리거나 permutation 발생
  • 위와 같은 sequence data 다루기 위해 Transformer 등장

Transformer

  • Transformer는 attention 기반의 최초의 seqeunce transduction model이다
    -> 재귀적인 구조가 없고 attention 구조를 활용함

  • 기계어 번역 외에도 이미지 분류, detection, 이미지 생성 등 다양한 task에서 활용된다.

Description

  • 입력과 출력 sequence 길이와 도메인은 달라도 된다 (Machine Translation)
  • 인코더와 디코더 구조로 되어 있다
    -> 동일한 구조이지만 네트워크 파라미터가 다른 encoder, decoder가 stack된 구조
  • 한 번에 모든 sequence 데이터를 인코딩한다
    • 한 번의 n개의 단어를 처리하고 computational cost는 n2n^2에 비례
      -> length가 길어지면 처리하기 힘들어진다는 한계 (메모리 많이 잡아먹음)
    • 인코딩하려는 단어와 문장의 다른 단어들에 따라 인코딩 된 값이 달라진다
      • 입력이 고정되더라도 출력이 달라질 수 있어서 다양한 내용을 표현할 수 있다
        -> MLP보다 flexible한 모델
  • 반면, 생성할 때(디코딩)는 하나씩 만든다

주요 고려사항

  1. n개에 단어가 어떻게 한 번에 인코더에서 처리 되는가
  2. 인코더와 디코더 사이에 어떤 정보를 주고 받는지
  3. 디코더가 어떻게 generation 하는지

Encoder 데이터 처리

Encoder layer

  • 하나의 Encoder layer는 Self-Attention과 Feed Forward Neural Network를 하나씩 가짐
    • Encoder는 Encoder layer가 반복되는 구조
  • 인코더와 디코더의 Self-Attention은 Transformer가 왜 잘 되는지를 나타내는 핵심 구조
  • Feed Forward Neural Network는 MLP와 동일

데이터 처리

  • 각 단어를 embedding vector로 표현

  • Transformer 는 self-attention을 활용하여 각 단어를 feature 벡터로 인코딩
    • xix_iziz_i로 넘어갈 때 xix_i뿐만 아니라 나머지 xx의 정보도 같이 활용한다
    • feed-forward network는 dependency가 없다

Self-attention

  • 문장에서 한 단어를 이해할 때는 단어 자체의 의미뿐만 아니라 해당 단어가 문장 속에서 다른 단어들과 어떻게 interaction이 일어나는 지를 이해해야 한다
    -> Transformer는 특정 단어를 인코딩 할 때 문장에서 다른 단어들과의 관계성을 학습

진행 과정

  1. 각 단어 embedding 벡터마다 query, key, value 벡터 만든다

  2. query, key, value 벡터 활용해서 x Embedding 벡터를 새로운 벡터로 바꾼다

  3. Score 벡터 계산

    • 인코딩을 하고자 하는 벡터의 query 벡터와 모든 단어의 key 벡터를 내적함으로서 해당 단어가 문장의 다른 단어들과 얼마나 유사도(관계)가 있는지 학습
  4. Score 벡터를 normalize 해준다 (key dimension의 root 값(dk\sqrt{d_k}) 으로 나눔)
    -> 값이 너무 커지지 않게 하기 위해

  5. softmax를 이용하여 scaling을 진행함으로써 attention weights 계산

    • 각각의 단어가 자기 자신 혹은 다른 단어들과 얼마나 interaction을 해야 하는지를 보여 줌
    • weight의 총합은 1이 된다
  6. final 인코딩은 value 벡터의 weighted sum을 계산한 값이다
    -> attention weight와 value 벡터를 weighted sum 해준다

위 과정을 통해 하나의 단어에 대한 인코딩 벡터가 나온다

유의사항

  • query, key 벡터는 차원 같아야 한다
    -> 두 벡터 내적해야 하므로
  • value 벡터는 차원 달라도 된다
    -> weighted sum만 해주면 됨
  • 최종 인코딩 벡터 차원은 value 벡터 차원과 동일 (위의 setting에서는)

Self-Attention에서 Matrix 계산

  • 행렬 형태의 X에서 Q, K, V를 계산한다
    • X의 행 : 단어의 수
    • X의 열 : 단어의 임베딩 차원

  • X를 Z로 나타내는 과정을 한 줄 수식으로 표현 가능하다
    • Row-wise softmax 취해 줌
    • Value 벡터 차원은 Query, Key 벡터 차원과 반드시 같을 필요는 없음

Multi head Attention

  • 하나의 인코딩 된 벡터에 대해서 query, key, value 벡터를 head 개수(n)만큼 만든다
    -> Multi head를 가진 Attention

  • n개의 attention을 반복하면 n개만큼의 인코딩 벡터가 나온다

  • n개의 인코딩 벡터를 추가적인 학습 가능한 linear map을 이용하여 차원 조절한다

실제로는 embedding 벡터를 head 개수로 나누고 해당 dimension의 입력 벡터를 활용

Positional encoding

  • 단어의 순서와 상관없이 각 단어가 encoding되는 값은 같음(order에 independent)
    -> sequence 데이터의 위치를 표현하기 위해 기존 embedding 벡터에 Positional encoding 값 더함

Decoder

  • Transformer는 최상위 인코더의 key(K)와 value(V)를 디코더에 전달한다
    -> query는 디코더에 들어가는 단어로 만들어진 query 벡터 활용

  • output sequence는 autoregressive하게 순서대로 생성됨

Decoder self attention

  • Decoder self attention layer는 soft 단계 이전에 future position을 마스킹하여 수행되는 output sequence의 earlier position만 활용할 수 있게 한다
    -> 입력과 출력 정답을 알고 있으면 학습하는 의미가 없으므로

Encoder-Decoder attention

  • Encoder-Decoder attention layer는 그 아래 레이어에서 query matrix를 생성하고 encoder stack에서 key와 value를 가져오는 것을 제외하면 multi-headed self-attention과 동일하게 작동한다
    • decoder input query와 encoder로부터 생성된 key, value 활용
      -> encoder와 decoder 사이에서 interaction 하게 됨

final layer

  • final layer는 decoder output stack을 단어에 대한 분포로 변환한다

여러 가지 Transformer 종류

Vision Transformer(ViT)

  • 이미지 분류에서 활용되는 Transformer -> Encoder만 활용
  • 인코딩 벡터를 분류기에 집어 넣음
  • 이미지를 영역별로 잘라서 각 영역을 linear layer에 통과시켜 하나의 입력처럼 활용
    -> position Encoding 더해 줌

DALL-E

  • 문장이 주어지면 문장에 대한 이미지를 만들어 냄(GPT-3 활용)

Ref

0개의 댓글