본문 바로가기

Deep Learning

Transformer

이 글은 Joshua StarmerTransformer Neural Networks, ChatGPT's foundation, Clearly Explained!!를 정리한 것임을 밝힙니다.

Transformer

Context vector: 마지막 셀의 hidden state

Seq2Seq 는 고정된 context vector을 사용하여 Input에 따라 유연하지 못했다.

 

트랜스포머 모델은 기존 자연어 처리 모델의 여러 한계를 효과적으로 보완한다. 

 

  • 순차적 처리의 한계 극복: 이전의 seq2seq과 같은 순환신경망 모델들은 데이터를 순차적으로 처리하는 구조로 인해 긴 시퀀스에서 효율성이 떨어지고, 장기 의존성을 학습하는 데 한계가 있었다. 트랜스포머는 Self-Attention 메커니즘을 통해 문장의 모든 부분을 동시에 처리하며, 이로 인해 장기 의존성 문제를 효과적으로 해결하고 학습 속도를 크게 향상시켰다.
  • 효율적인 정보 추출: 기존 모델들은 입력 시퀀스에서 중요한 특징을 추출하는 데 한계가 있었다. 트랜스포머는 각 단어가 문장 전체에서 중요한 단어와의 관계를 파악하여 필요한 정보만을 선택적으로 추출하도록 설계되었다. 이는 모델이 보다 정확하게 정보를 학습하고, 더욱 정교한 출력을 생성할 수 있게 돕는다. 이러한 보완을 통해 트랜스포머 모델은 다양한 자연어 처리 작업에서 기존 모델들보다 우수한 성능을 발휘한다.

Transformer 아키텍처

위의 Transformer 아키텍처를 간단한 toy example로 설명해보겠다.

Transformer는 seq2seq 기반 모델과 비슷하게 Encoder 와 Decoder로 나눠진다.
(단, 모든 단어들이 한 번에 처리되는 것이 특징이다.)

Encoder

Transformer Encoder

Encoder 부분은 위와 같이 Word Embedding, Positional Encoding, Self-Attention, Residual Connections 으로 크게 네 부분으로 구성된다. 각각이 어떤 역할을 하는지 하나씩 알아보자.

Word Embedding

 

먼저, 단어를 숫자로 표현하기 위해 단순한 신경망을 학습시킨다. 이것을 Word Embedding 이라고 하고 Backpropagation을 통해 학습된다.

weight는 모든 input words에 대해 동일하여 단어가 길어져도 동일한 weight로 embedding을 시켜주면 되기 때문에 유연하다.

일반적으로 수 백~수 천 개의 Embedding values를 만든다.(예시에서는 toy example 로 두 개의 embedding value만!)

Positional Encoding

순차적으로 입,출력이 되는 RNN 기반 모델과는 달리 Transformer는 모든 단어들이 한 번에 처리되어야 하기 때문에 위치 정보를 포함시켜주어야 한다. 이 방법이 Positional Encoding이다. 그 방법은 매우 간단하다!

  1. embedding values 개수 만큼의 주기 함수(sin, cos) 함수를 생성한다. 이 때 주기는 점점 길어진다. (거리가 멀어질수록 먼 거리에 있는 단어들 간의 순서를 파악할 수 있기 때문에)
  2. embedding values에 positional encoding 한 값을 더해주어, 위치정보까지 단어에 포함시켜준다. 

element wise로 더해주기 때문에, embedding values와 positional encoding의 차원은 동일해야 한다.

 

Self-Attention

'good'이 문장에서 어떤 걸 집중하고 있는지?

한 단어가 문장 내에서 다른 단어와 어떠한 연관성을 지니고 있는지 파악하는 방법이다. 이 때, 자기 자신과의 연관성도 고려한다. 단어 간의 유사도를 바탕으로 각각의 단어를 어떻게 encode할 지 결정한다.

Let's에 대한 Self-Attention

  • Query: 궁금한 단어. 지금 주목하고 있는 단어로부터 나온 값
  • Key: 비교할 다른 단어로부터 나온 값
  • Value: Query, Key의 유사도를 바탕으로 최종 값을 도출하기 위한 값

Self-Attnetion 매커니즘

  1. Query, Key 로 유사도 계산(ex. dot product)
  2. 유사도에 Softmax를 취해 각 단어의 percentage 계산
  3. 비교한 단어의 value 의 percentage를 가중치로 한 weighted sum을 구하여 최종 Self-Attention value 도출
  • Key, Value는 매번 일정하여 비교 대상 단어의 Query만 생성해주면 된다!
  • 하나의 Attention head에서 Q,K,V를 생성하는 weights는 모든 단어에 대해 동일하다. → 다양한 길이의 input에도 작동
  • Q,K,V를 동시에 병렬적으로 계산할 수 있다. → GPU 사용하여 빠른 계산이 가능! 

 

Multi-Head Attention

하나의 position encoded values로 부터 여러 Self-Attention 셀들을 쌓는 방식이다.(Attention is all you need 논문에서는 8개의 head) 이렇게 하는 이유는 가중치는 셀 안에서는 동일하지만, 셀끼리는 다르므로 복잡한 단어의 관계를 설명할 수 있기 때문이다. 각각의 head가 attention하는 단어가 조금씩 다르기 때문이다.

 

Residual Connection values

최종적으로 나온 Self-Attention values 값에 position encoded values 를 다시 더해준다.

Input으로 들어갔던 걸 왜 다시 더해주냐면, 모델이 깊게 학습하더라도 Input에 대한 영향력을 보존할 수 있도록 하는 방법이다. 위치 정보를 다시 더해줌으로써 위치 정보를 보존할 수 있다.

Self-Attention 층을 통해 입력 단어들 사이의 관계를 확립함으로써, Word Embedding과 Position Encoding 정보를 반드시 보존할 필요 없이 처리할 수 있다.

 

Decoder

Encoder와 마찬가지로 embedding하고 positional encoding 더한다. (이 때 주기함수는 Encoder와 동일하다.)

<EOS> 토큰으로 시작해서 위의 Encoder 과정 반복 (<SOS>로 시작해도 됨)

<EOS>의 Self-Attention values를 구한다. (Decoder는 문장을 생성하면서 Attention 해서 갈수록 비교할 단어가 많아짐)

Decoder에도 Unit을 병렬 처리 하고 싶어!

* Q,K,V weight는 encoder와 다르다.

 

Encoder-Decoder Attention

Encoder-Decoder Attention

<EOS>의 Self-Attention value로부터 Query를 생성한다. 

Encoder의 모든 단어들의 Self-Attention value 들로부터 Key를 구한다.

위의 Self-Attention 매커니즘과 똑같이 Decoder의 QueryEncoder의 Key 유사도, Softmax 값 계산한다.

마찬가지로, value들의 weighted sum을 구하고 percentage에 따라 곱하여 Encoder-Decoder Attention values 생성한다!

  • Encoder-Decoder Attention의 Q,K,V는 Encoder, Decoder 내부의 가중치와 다름에 유의하자

Encoder-Decoder Attention value에 Residual connection 연결

Feedforward Neural Network

최종적으로 나온 Encoder-Decoder Attention를 Output 차원에 맞추어 신경망에 Input으로 넣는다.

 

Original Paper

  1. 37,000 tokens 사용
  2. Positional Encoding, Attention value를 구한 이후에 Normalize
  3. 유사도: dot product/sqrt(# of embedding values) 사용
  4. Encoder, Decoder 마지막에 hidden layer 추가 

'Deep Learning' 카테고리의 다른 글

Sequence-to-Sequence(Seq2Seq)  (0) 2024.11.19
Attention 메커니즘  (0) 2024.05.15
[신경망] Neural Network와 Back propagation  (1) 2023.12.03
LSTM 쉽게 이해하기  (0) 2023.09.14
RNN 쉽게 이해하기  (2) 2023.09.14