본문 바로가기
Computer Vision/Transformer

Transformer("Attention is all you need")

by 흐긴 2021. 5. 6.

1. Introduction

트랜스포머는 구글에서 2017년에 제안한 자연어 모델로서 기존의 seq2seq모델처럼 인코더-디코더 구조를 따르지만, RNN과 CNN을 전혀 사용하지 모델입니다. 기존 seq2seq모델의 한계점은 인코더에서 추출된 고정된 크기의 context vector를 디코더의 입력으로 사용하여 병목현상으로 인한 성능저하 문제가 있었습다. 예를 들어, 긴 문장이 들어왔을 때 인코더의 가장 뒤의 hidden state의 벡터를 사용하기에 문장의 앞부분의 특징을 제대로 표현하지 못한다는 문제점입니다. 

여기서, "만약 각 단어(토큰)으로부터 나온 특징 벡터를 모두 다 병렬로 디코더에 입력할 수 없을까?"라는 질문에서 시작하여 트랜스포머가 출현하게 되었습니다.

 

먼저, 트랜스포머를 설명하기전에 Attention 기법을 이해할 필요가 있습니다.

1-1 Attention mechanism

  • 입력 시퀀스 데이터의 길이가 긴 문장의 기억을 돕기 위한 방법
  • 디코더에서 i번째 단어를 예측할 때 사용하는 이전 스텝의 디코더 정보와 인코더의 j번째 정보가 얼마나 유사한지 스코어 산출

Attention mechaninism

여기서 Attention Vector는 어떻게 구해지는 걸까요?

먼저, Attention Score는 디코더의 이전 상태 벡터와 인코더의 히든 상태 벡터들을 어떤 Attention score 함수에 대입하여 구합니다. 구해진 Attention Score를 Softmax에 넣어 확률 형태로 변환합니다. 변환된 Attention weights와 히든 상태 벡터와 곱하여 sum을 해주면 Context Vector가 얻어집니다. 마지막으로, 얻어진 Context vector와 디코더의 이전 상태의 벡터를 비선형 함수에 넣어주게 되면 최종적인 Attention Vector가 얻을 수 있습니다.

1-2 기존 Attention mechanism의 문제점

  • 입력 시퀀스 데이터를 순차적으로 처리하기 때문에 병렬 처리 불가능
  • 계산 복잡도, 연산시간이 증가.
  • 해결방안(Self-Attention mechanism): 입력 시퀀스 데이터를 병렬 처리하여 정보를 압축하고 계산 복잡도와 연산 시간을 줄이자!

2. Transfomer의 출현!

2-1 Transfomer 구조

  • Encoder-Decoder 구조의 모델
  • 실제로는 6개의 인코더와 디코더로 구성
  • 인코더: Feed Forward + Self-Attention
  • 디코더: Feed Forward + Self-Attention + Encoder-Decoder Attention

2-2 Self-Attention

  • 인코더의 각 단어에 해당하는 3개의 벡터를 만듭니다.
  • Query, Key, Value vector
  • 각 쿼리, 키, 밸류 벡터는 각각의 weight 행렬과 곱해져서 얻어집니다.

 

예를 들어, "나는"이라는 입력 벡터가 들어오게 될 경우,

  1. "나는"의 쿼리 벡터는 모든 단어의 키 벡터와 곱해서 Score을 산출합니다.
  2. 산출된 Score는 특정 키의 제곱근 차원으로 나눕니다.
  3. Softmax식에 대입하여 확률형태로 바꿉니다.
  4. Sofmax값과 각 Value 벡터를 곱하여 Sum하여 "나는"에 대한 각 단어의 관련도를 표현하는 Attention vector를 얻게 됩니다.

 

Self-Attetnion Vector구하는 과정

2-3 Multi-Head Attention

  • 서로 다른 Head는 문장 내의 서로 다른 관계를 배울 수 있습니다.
  • Multi-Head Attention은 서로 다른 Query, Key, Value 행렬들과 선형 변환합니다.

Multi-Head Attention

2-4 Encoder-Decoder Attention

  • 디코더의 Encoder-Decoder Attention 레이어는 마지막 Encoder에서 출력한 Key와 Value행렬을 사용하여 Self-Attention 연산을 합니다. 
  • 이를 통해, 디코더가 입력 시퀀스 데이터의 적절한 위치에 집중하도록 하였습니다.

2-5 Positional Encoding

  • Self-Attention은 RNN과 달리 입력 시퀀스 데이터를 순차적으로 처리하지 않습니다.
  • Positional Encoding: 입력 시퀀스에서 단어의 순서를 표현하기 위한 임베딩 방법

3. 정리

Transfomer 전체 구조 및 과정

  1. 먼저, Positional Encoding으로 각 단어에 대한 순서정보를 표현합니다.
  2. 인코더에서 Self-Attention network를 통과한 Attention vector와 원래 단어 임베딩 벡터와 더한 후 정규화를 하여 feed forward 통과합니다.
  3. 디코더에서는 앞부분의 단어와 mask를 시행하여 Self-Attention를 진행합니다.
  4. Encoder-Decoder Attention에 인코더의 마지막 벡터를 입력하여 디코더와의 Attention Vector를 출력하여, feed foward 통과합니다.