Transformer 요약

dddwsd·2022년 3월 31일
0

Transformer: Attention Is All You Need

https://www.youtube.com/watch?v=mxGCEWOxfe8

  • encoder와 decoder를 사용한 모델
  • RNN을 사용하지 않음 -> multi head attention을 사용
  • RNN을 사용하는 것보다 속도가 빠름
    • 문장을 순차적으로 처리하는 RNN에 비해 parallel하게 문장을 처리하기 때문에 속도가 빠름

Encoder

  • 문장의 모든 단어의 attention을 한번에 계산함.
  • Encoder의 입력과 출력의 dim은 같아야 함. -> 이는 encoder를 여러개 붙일 수 있음
  • transformer는 encoder layer를 6개 붙임 -> 각 encoder layer는 서로의 weight을 공유하지 않고 따로 학습함.

Positional Encoding

  • encoder decoder 입력값마다 상대적인 위치를 더해주는 작업.
  • sin, cos function을 사용해서 positional encoding을 사용함
    • positional encoding값이 [-1, 1]이 나옴
    • 학습데이터 중 가장 긴 문장보다 더 긴 문장이 들어와도 에러없이 상대적인 값을 계산할 수 있음

Self Attention

  • encoder에서 이루어지는 attention 연산
  • 각 단어마다 query, key, value 존재(벡터 형태) -> 단순 weight matrix로 딥러닝 학습시에 최적화 된다.
  • query - 현재 단어
  • 어떤 단어와의 상관관계를 구할때 query를 해당 단어의 key 값과 곱해줌(dot product) -> attention score라고 한다 -> 이 값이 높을수록 연관성이 높다.
  • attention score을 key의 차원수의 루트값으로 나눠서 softmax를 취해줌 -> key 벡터의 차원이 커질수록 값이 커지는 문제를 막기위해.
  • 이렇게 softmax를 취한 값을 각 단어의 value값과 곱해주고 모두 더한다 -> 이것은 문장속에서 현재 단어가 지닌 전체적인 의미를 나타낸다.
  • query, key, value가 모두 행렬이기 때문에 모든 단어에 대해서 한번에 계산이 진행될 수 있고 이것이 transformer의 최대 장점인 parallelism이다.

Multi Head Attention

  • transformer는 8개의 attention layer를 병렬적으로 처리한다. -> 이를 multi head attention이라고 부른다.
  • 하나의 정보는 attention은 모호한 정보를 갖고 있기 때문에 multi head attention을 통해 다양한 관점에서 수집해서 보완한다.
  • 단어 -> word embedding -> positional encoding -> multi head attention -> 결과를 concat해서 weight을 곱해서 입력과 동일한 차원인 matrix로 만듬 -> 행렬을 이루는 각각의 벡터는 또 따로 FC(Fully connected layer)로 들어가서 입력과 동일한 사이즈의 vector로 출력 -> output
  • backpropagation에 의해 positional encoding이 많이 손실될 수가 있는데, 이를 보완하기 위해 residual connection으로 입력된 값을 한번 더 더해줌
  • residual connection 뒤에는 layer normalization을 통해 학습의 효율을 높임.

Feed-Forward

  • 각 단어마다 독립적으로 적용되어 output vector를 만든다.

Decoder

  • attention + 이전 단어를 통해 다음 단어를 찾아냄.
  • transformer는 6개의 decoder layer를 갖고 있다.
  • 최초 단어부터 끝 단어까지 순차적으로 단어를 출력 - 현재까지 출력된 값들의 attention과 encoder 최종 output의 attention이 적용이 된다.

Masked Multi head Attention

  • decoder의 첫번째 multi head attention layer는 masked multi head attention layer다.
  • decoder layer에서 지금까지 출력된 값들에만 attention을 적용하기 위해서 출력값 이후의 단어들에 대해 masking을 진행.

Multi head Attention

  • Encoder의 Multi head Attention과 다른 점은 현재 decoder의 입력값을 query로 사용하고 encoder의 최종 output을 key와 value로 사용
  • decoder의 입력값을 통해 encoder의 최종 출력값에서 가장 연관이 있는 단어를 찾아내는 작업

Feed-Forward

  • multi head attention의 출력값을 feed-foward layer를 통해 최종값을 vector로 출력

Linear + Softmax

  • vector를 실제 단어로 출력하기 위해 사용하는 방법
  • linear를 통해 softmax에 입력으로 될 logits을 생성
  • softmax는 모델이 알고있는 모든 단어에 대한 확률값을 출력하고 가장 높은 확률을 가진게 다음 단어가 된다.
  • label smoothing을 통해 성능향상 -> 모델이 너무 학습데이터에 치우치게 학습하지 않도록 - 학습데이터의 label이 noisy한 경우 큰 효과를 낸다.
profile
Github - https://github.com/dddwsd

0개의 댓글