본문 바로가기
AI/Pytorch

[Pytorch] Transformer

by 까다로운오리 2024. 1. 28.

 

Transformer Model은 2017년 https://arxiv.org/abs/1706.03762 논문을 통해 소개된 모델입니다.

Transformer Model의 주요 기능은 Sequential Processing, Recurrent Connections에 의존하지 않고 입력들 사이의 패턴을 찾아내 병렬로 sequence를 처리합니다. 때문에 Big Data를 처리하기에 매우 효율적인 모델이라 할 수 있습니다. 

 

 

Transformer 모델은 크게 인코더(Encoder)와 디코더(Decoder)로 이루어져 있습니다.

먼저 인코더(Encoder)는, input sequence를 Embedding하여 고차원의 벡터로 변환하는 과정을 거칩니다.

디코더(Decoder)는, 인코더의 출력을 입력으로 받아 출력 sequence를 생성하는 기능을 합니다.

여기서 어텐션 메커니즘(Attention Mechanism)을 통해 인코더와 디코더의 상관관계를 계산하여 중요한 정보에 집중하는데, 이 말을 구체적으로 다시 풀어쓰면 디코더에서 output을 예측하는 매 time step마다 encoder의 전체 입력 중 가장 연관도가 높은 단어를 다시 참고하는 기능을 합니다.

 

 

 

특수 토큰

transformer는 단어 토큰 이외에 특수 토큰을 활용해서 문장을 표현합니다.

  • BOS(Beginning of Sentence) : 문장의 시작을 나타냄
  • EOS(End of Sentence) : 문장의 종료를 나타냄
  • UNK(Unknown) : 모르는 단어, 이전에 본 적이 없는 단어를 나타냄
  • PAD(Padding) : 짧은 문장의 빈 공간을 채울 때 나타내며, 모든 문장을 일정한 길이로 맞추기 위해 사용

 

Word2Vec

단어 토큰을 진행한 이후 모델에 학습하기 위해 Embedding과정을 거칩니다. 여기서 입력 임베딩으로 변환되는 과정은 Word2Vec 와 동일합니다. 흔히 사용하는 One-Hot vector는 단어 vector가 독립적으로 라벨링 하듯이 표현되기 때문에, 유의미한 유사도를 계산할 수 없습니다. 때문에 분산표현 방법을 사용하는 word2vec이 transformer의 embedding과정으로 작용합니다.

 

분산표현 방법은 ' 비슷한 위치에 등장하는 단어들은 비슷한 의미를 가진다'는 분포가설을 따릅니다.

예를들어 '이불'은 '포근하다', '따뜻하다' 등의 단어와 함께 자주 등장하는데, 해당 내용을 가진 문장의 '이불', '포근하다', '따뜻하다'를 벡터화 하면 이 세 단어는 유사한 벡터값을 갖습니다.

 

원핫인코딩은 문장에 단어가 10개라면 차원은 10개가 되고 0과 1로 표현되지만, 분산표현방법은 사용자가 설정한 차원수에 단어의 의미를 분산하여 표현하여 vetor들은 float형태를 가집니다.

 

Word2Vec에는 2가지 학습 방법이 있는데

- CBOW(Continusous Bag of Words)

- Skip-Gram

이 있습니다. 이 두 학습방법에 대한 자세한 내용은 다른 포스팅에서 다루겠습니다.

 

 

Encoder

Transformer Encoder

Transformer encoder는 input이 들어오면, 위치 정보를 반영하기 위해 위치 임베딩 벡터를 입력벡터에 더해줍니다.

더해준 벡터가 N개의 문장, 최대 S개의 토큰 길이와 d의 입력 임베딩 차원을 가질 때, [N, S, d]의 크기의 임베딩 텐서가되고,  입력 임베딩은 선형 변환을 통해서 3개의 임베딩 벡터를 생성합니다. 이때 생성된 벡터는 Q( Query ), K( Key ), V( Value ) 벡터라고 정의하며, Multi-Head Attention단계의 input이 됩니다.

 

Q(Query)벡터는 현재 시점에서 참고하고자 하는 정보의 위치를 나타내는 벡터로 인코더의 각 시점마다 생성됩니다.

K(Key)벡터는 쿼리 벡터와 비교되는 대상이며 인코더의 각 시점에서 생성되는 벡터로 Q를 제외한 입력 시퀀스에서 탐색되는 벡터가 됩니다. 

V(Value)벡터는 Q와 K로 생성된 Attention Score를 얼마나 잘 반영할지 설정하는 Weight 역할을 합니다.

 

Attention Score

해서 위와같은 Attention Score를 가집니다. 이때 루트d값( 벡터차원의 제곱근 ) 만큼 나눠서 보정하는데, 이 값은 벡터차원이 증가할 때 score값이 같이 커지는 문제를 완화하기 위해 적용합니다.

 

보정된 Attention score값을 softmax함수를 이용하여 확률적으로 재표현하고, 이를 V(Value)벡터와 내적하여 Self Attention Vector를 생성합니다. Multi-Head Attention은 이러한 Self-Attention을 여러번 수행해 여러개의 Head를 만드는 작업을 합니다. 이를 shape으로 표현하면, [N,S,d] Tensor에 K개의 Attention Vectore를 형성하면 [N,k,S,d/k] Tensor형태를 구성한 후에 K개의 self Attention Vector는 다시 병합되어 [N,S,d]의 형태로 출력됩니다.

 

Add & Norm block은 Attention을 통과하기 이전 값 [N,S,d]와 통과한 이후 [N,S,d]를 더하여 학습시 발생하는 기울기 소실을 완화한 후 계층 정규화를 적용합니다.

 

이후 forward로 선형임베딩 또는 1conv를 이용한다음 Add & Norm 과정을 거치면 Encoder 과정이 끝납니다.

 

Transformer Encoder는 여러개의 Transformer Encoder로 구성되는데, 이전 블록에서 출력된 벡터는 다음 블록의 입력으로 전달되어 입력 정보가 추상화 됩니다. 마지막 인코더 블록에서 출력된 벡터는 디코더에서 사용하여 디코더의 Multi-Head Attention에 참조되는 K,V로 활용됩니다. 

 

 

 

Decoder

 

디코더의 입력 임베딩과 위치인코딩을 더해 입력 시퀀스의 순서 정보를 학습할 수 있게 해줍니다. 이후 인과성(Casuality)를 반영한 Masked Multi-Head Attention을 사용하여, Attention score를 계산할 때, 이전의 단어들만 참조하게 Mask를 씌웁니다. 예를들어 첫 번째 Q vector는 첫 번째 K vector만, 두번째 Q vector는 첫 번째 두 번째 K vector를 참보하게 Mask를 씌웁니다. 때문에 이전 값을 참조하는 방식으로 인과성을 보장하면서 self-Attention을 수행하게 됩니다.

Masked Multi-Head Attention을 수행한 값은 인코딩과 마찬가지로 Attention을 통과하기 전의 값과 Add & Norm을 수행하고, Q vector를 생성하여 그 다음 Multi-Head Attention에 넣어줍니다. 이 Multi-Head Attention의 K와 V는 Encoder의 소스데이터가 사용됩니다.

이후는 인코더 과정처럼 attention score값을 계산하고 softmax함수를 이용하여 attention 가중치를 구합니다. 

 

transformer의 Decoder또한 encoder처럼 여러 개의 트랜스포머 디코더 블록으로 구성되며, 이전 트랜스포머 디코더 블록의 산출물은 다음 트랜스포머 디코더의 입력으로 전달됩니다.

 

 

디코더는 타깃 데이터를 추론할 때 토큰 또는 단어를 순차적으로 생성시키는 모델인데, 입력 토큰을 순차적으로 나타내는 방법은, PAD토큰을 이용합니다.

 

추론순서 디코더 입력 디코더 출력
1 [BOS] [PAD] [PAD] [PAD] [PAD] [BOS] '강아지' [PAD] [PAD] [PAD] [PAD]
2 [BOS] '강아지' [PAD] [PAD] [PAD] [PAD] '강아지' '는' [PAD] [PAD] [PAD]
3 [PAD] '강아지' '는' [PAD] [PAD] [PAD]'강아지' '는' '귀엽다' [EOS] [PAD]

 

 

 

 

 

[ 참고 도서 ]

 

파이토치 트랜스포머를 활용한 자연어 처리와 컴퓨터비전 심층학습 - 예스24

트랜스포머는 딥러닝 분야에서 성능이 우수한 모델로 현대 인공지능 분야의 핵심 기술이다. 트랜스포머와 비전 트랜스포머 기술을 습득하면 차별화된 역량을 갖출 수 있고 복잡한 문제를 해결

www.yes24.com