Transformer

이상민·2023년 3월 24일
0
post-custom-banner

Transformer는 2017년 구글이 발표한 논문인 "Attention is all you need"을 통해 등장한 seq2seq task를 목적으로 만들어진 신경망 아키텍처이다. Transformer는 단순히 번역뿐만 아니라 이미지분석, DNA 분석 등 다양한 분야에서 사용된다.

Sequential Model

입력을 순차적으로 받는 RNN, LSTM과 같은 모델들은 아래 그림과 같은 데이터가 들어 오면 문제가 발생할 수 있다 즉 RNN과 LSTM같은 모델들은 입력 시퀀스의 순서에 종속적이다. 그러나 transformer model은 입력 순서에 영향을 덜 받는다. 또한 sequential model들의 경우 시퀀스들 간의 차이가 멀면 정보손실이 생겨 학습이 잘 되지 않는 경우가 생길수 있는데 transformerself-Attension을 사용하여 이러한 상황을 어느정도 방지할 수 있다.

transformer 구조

transformer는 인코더와 디코더 파트로 구성 된다. 인코더는 소스 시퀀스의 정보를 압축해(encodding) 디코더로 보내주는 역할을 한다.
디코더는 인코더가 보내준 소스 시퀀스 정보를 받아 받아 타깃 시퀀스를 생성한다(decodding).

Self - Attention

어텐션이라는 단어의 뜻처럼 시퀀스 요소들 가운데 task 수행에 중요한 요소에 집중하고 그렇지 않은 원소는 어느정도 무시해 task의 성능을 끌어 올린다. 번역으로 예를 들면 타겟 언어로 디코딩할 때 소스언어의 단어 시퀀스들 중 디코딩에 도움되는 단어들에 집중해 번역성능을 끌어 올린다.

Attention 예시

어텐션은 querry,key,value 세가지 요소가 서로 영향을 받는 구조이다.

만약 "thinking machines"라는 입력으로 들어온다면 아래의 순서와 같이 진행한다.

  1. Thinking Machines라는 입력을 각각 한단어씩 embedding하여 x1x_1,x2x_2 벡터로 만든다.

  2. x1,x2x_1,x_2 각각 Wq,Wk,WvW_q,W_k,W_v와의 행렬곱을 qurry,key,value 3가지 벡터를 만든다.

  3. 쿼리 벡터들과 나머지 단어들의 키벡터들 간의 내적을 통해 score벡터를 생성
    → i 번째 단어가 나머지 단어들과 얼마나 유사도가 있는지 수치로 표현하는 과정

  4. score 벡터를 key vector의 차원의 제곱근으로 나누고 softmax를 사용하여 확률로 표현함.
    → 정규화, key vector의 차원은 하이퍼파라미터이다.

  5. 앞서구한 확률 벡터와 value 벡터를 가중 곱을 한다.
    z1=0.88v1+0.12v2z_1 = 0.88v_1 + 0.12v_2
    z2=(q2k1)v1+(q2k2)0.12v2z_2 = (q_2*k_1)v_1 + (q_2*k_2)0.12v_2

  6. Z행렬을 feed forward Neural Network로 전달

전체 과정

  • Encoder
  1. 입력 데이터를 벡터로 임베딩한다.
  2. 임베딩한 벡터에 positioning을 진행
  3. 입력값이 attention을 거쳐 normalize, feed forward를 거친뒤 최종적으로 Key, Value vector를 decoder에 전달한다
  • Decoder
  1. decoder로 들어온 입력값으로 querry벡터를 만든다.
  2. 인코더에서 입력받은 key, value 벡터와 decoder의 입력에서 구한 q벡터를 이용해 attention진행
  3. 이후에 그림과 같은 과정을 거친뒤 선형변환을 거쳐 확률로 표현한다.

Positioning

transformer구조를 보면 인풋 시퀀스가 encoder를 거치기전에 postional Encoding을 거치는 것을 볼 수 있다.

positioning이란 transformer는 입력 시퀀스 순서에 independent하다
그러나 seq2seq task는 시퀀스의 순서에 따라 결과가 달라지기에 positioning을 통해 시퀀스의 position을 표현한다.

profile
잘하자
post-custom-banner

0개의 댓글