본문 바로가기
  • 우당탕탕속의 잔잔함
Programming/Deep Learning Network

[Model] About Transformer : Attention Is All You Need

by zpstls 2023. 10. 31.
반응형

이번 포스트는 최근 AI 분야에서 활발하게 활용되고 있는,

Attention 구조를 활용한 Transformer 구조에 대해 다뤄보도록 하겠습니다.

 

 

우선, Transformer에 대한 논문은 다음과 같습니다.

 

Attention Is All You Need

The dominant sequence transduction models are based on complex recurrent or convolutional neural networks in an encoder-decoder configuration. The best performing models also connect the encoder and decoder through an attention mechanism. We propose a new

arxiv.org

 

 

본격적으로 Transformer에 대해 설명하기에 앞서, Transformer를 이해하기 위해서는 Attention Mechanism에 대한 사전 이해가 있어야 원활하게 이해할 수 있습니다. "Attention Is All You Need"논문에서도 Attention에 대한 설명이 포함되어 있지만, 조금 풀어서 이해하시고자 하시다면 다음 링크를 참조해 주세요.

(Attention Mechanism에 대해 설명한 포스트입니다.)

 

[Model] About Attention Mechanism

이번 포스트는 Transformer의 시초가 되는 Attention에 대해 간단하게 작성해 보도록 하겠습니다. 최근 AI와 관련된 논문들은 Transformer를 기반으로 한 경우가 꽤 많습니다. 그리고 이 Transformer는 Attention

mj-thump-thump-story.tistory.com

 

 

그럼 Transformer에 대해 본격적으로 다뤄보도록 하겠습니다.

 

Transformer는 Sequence-To-Sequence Model의 문제점을 개선하기위한 Attention 개념(= Input, Output Data에서 Sequence Distance와 무관하게 서로의 의존성을 모델링한 방법)을 활용한 것으로, Attention Mechanism만을 사용해 구성한 새로운 Network Architecture입니다.

이러한 Transformer의 Architecture는 다음과 같습니다.

The Transformer - Model Architecture

Encoder-Decoder 구조를 가지고 있으며, 내부는 Attention과 Fully Connected Layer 등으로 구성되어 있습니다. 우선, Encoder 부분을 자세히 살펴보겠습니다.

The Transformer - Encoder Architecture

Data의 Embedding이 Input되면 Positional Encoding을 적용하여 더해줍니다. 이에 대한 Output을 Multi-Head Self-Attention Mechanism(: Sub-Layer 1)에 적용합니다. 이전 값을 더해준 후 Add & Normalization을 적용하고 Position-Wise Fully Connected Feed-Forward Network(: Sub-Layer 2)에 넣어준 후 Add & Normalization을 수행합니다. 이때 Multi-Head Attention부터 Feed Forward Layer까지의 연산은 Residual Network의 형태를 따릅니다. 즉, 각각의 Sub-Layer의 출력은 위 이미지의 LayerNorm으로 정의되며 Sublayer는 Sub-Layer 자신의 값입니다.

이와 같은 과정을 N번 수행합니다. 과정이 완료되면 Encoder에 대한 Embedding이 생성됩니다.

 

다음으로는 Decoder 부분을 살펴보겠습니다.

The Transformer - Decoder Architecture

Output으로 들어갈 Word Embedding을 Input하고 Positional Embedding을 수행합니다. 이후 Masked Multi-Head Attention을 수행하고 Add & Normalization을 수행합니다. 다음 Layer, 즉 Multi-Head Attention(= MHA)에는 이전 Layer의 출력 값(= Query)과 Encoder의 출력 Embedding Data(= Key, Value )를 Input 합니다. 그리고 Add & Normalization을 수행하고 Feed Forward Network(= FFN)에 입력한 후, Add & Normalization을 수행합니다. 이와 같은 과정을 N번 수행하고 마지막으로 Linear와 Softmax를 적용하여 각 Data에 대한 확률 값을 구합니다.

 

이와 같은 구조가 Transformer의 전반적인 구조입니다. 이 구조를 살펴보면 몇 가지 키워드가 나올 것입니다.

 

우선, 제일 먼저 등장하는 Embedding이라는 것을 다뤄보도록 하겠습니다.

Embedding이라고 하면, "Data의 Vector화잖아?"라고 생각할 수 있습니다. 맞습니다. 맞는데, Transformer는 Input, Output의 Embedding이 조금은 다른 특징을 가지고 있습니다.

바로, Transformer의 Input Embedding과 Output Embedding은 Weight Matrix를 서로 공유한다는 것입니다. Embedding을 수행하는 목적은 어떤 Data(= Token)를 잘 표현할 수 있는 Vector를 만드는 것입니다. 이때 Input과 Output은 분명히 어떠한 연관성을 가지고 있을 것이기에 이러한 연관성을 잘 계산하기 위해서는 Weight를 공유하는 것이 바람직할 것입니다.

 

다음으로는, Positional Encoding에 대해 알아보도록 하겠습니다.

Transformer는 Recurrent Model(= RNN 계열 구조)을 사용하지 않고 Attention Mechanism만을 사용하였기에 Sequence 구조를 담아낼 수 없습니다. 따라서 이러한 Sequence 정보를 Data에 담아줘야 합니다. 이를 위한 과정이 Positional Encoding입니다.

 

Transformer의 저자는 Positional Encoding은 다음과 같은 기준을 충족해야한다고 정의했습니다.

  • 각 Time-Step마다 하나의 유일한 Encoding 값을 출력해야 한다. (≒ 문장에서의 단어의 위치를 나타내는 값은 유일해야 한다.)
  • 서로 다른 길이의 문장에서 두 Time-Step 간 거리는 일정해야한다.일정해야 한다. (≒ 문장의 길이가 달라도 각 단어마다의 거리는 일정해야 한다.)
  • Model에 대한 일반화가 가능해야 한다. (≒ 문장의 길이에 영향을 받지 말아야 하며, 위치를 나타내는 값들은 특정 범위 내에 있어야 한다.)
  • 위치 값은 하나의 Key 값처럼 결정되어야 한다. 즉, 매번 다른 값이 산출되어서는 안 된다.

Transformer는 위의 기준을 충족하기 위해 Sine과 Cosine 함수를 통해 다음과 같이 구현했다고 합니다.

The Transformer - Positional Encoding

Dimensional Vector로 문장 내 특정 위치 정보를 표현하며, 이는 각 단어에 포함되어 문장 내 위치 정보를 표현합니다.

Positional Encoding의 출력 값은 다음과 같이 정의할 수 있을 것입니다.

Frequency에 sin, cos 쌍이 포함되어 있으며, Vector의 차원이 증가함에 따라 Frequency가 줄어듭니다. 즉, 차원이 증가하면 Sin/Cos의 주기가 길어집니다. 이는 특별한 연산 과정을 수행하지 않고도 상대적인 Position을 표현할 수 있다는 이점을 가지고 있습니다. 이러한 특징은 Data에 어떠한 Positional Feature를 부여하는 과정에 안성맞춤입니다.

구체적인 할당을 시각적으로 표현해 보면, 위 이미지의 표처럼 Dimension에 따라 Position Index가 규칙적으로 할당되고 있는 것을 확인할 수 있습니다.

이러한 Position 정보를 실제 Word Embedding에 적용하면 Encoder 및 Decoder에 Input 할 최종적인 Embedding Data를 생성해 낼 수 있습니다. 참고로 Word Embedding과 Positional Embedding의 Dimension은 동일해야 합니다.

 

마지막으로, Multi-Head Attention이라는 것에 대해 다뤄보려고 하는데요.

Encoder와 Decoder 부분에서 Multi-Head Attention이 3번 등장합니다. 그런데 각각의 역할이 조금씩은 다릅니다. 해당 부분에 대한 내용은 다음과 같습니다.

 

  • Encoder에서의 MHA

Encoder에서 사용되는 Self-Attention으로 Input 되는 Query, Key, Value는 모두 Encoder로부터 나옵니다. 즉, Encoder의 각 Position은 이전 Layer의 모든 Position을 참조하고 현재 시점의 Position과 누적되고 있는 전체 Position 간의 Correlation 정보를 더해줍니다.

직관적으로 설명해 보면, 어떤 한 데이터(= Student)가 모든 데이터들(= She, Is, Student) 중에 어떤 Data와 연관성이 높고 낮은 지를 학습하는 과정이라고 생각하면 될 것 같습니다.

 

  • Decoder에서의 Masked MHA

Decoder에서 사용되는 Self-Attention이지만, Masked의 역할이 추가된 MHA입니다. Decoder의 경우 Sequence Model의 Auto-Regressive Property(= 과거의 Data를 통해 미래의 Data를 예측)를 보존해야 합니다. 이를 위해 Masking Vector를 사용하여 현재 Position의 이전 Vector만을 참조하는 구조를 사용합니다.

조금 풀어쓰면, 이전 Data들만을 이용해 미래의 Data를 예측해야지, 미래의 Data를 슬쩍 보고 "나는 미래 Data를 예측했어!"라고 하는 것은 반칙인 것과 같은 이치라고 보시면 될 것 같습니다.

 

  • Decoder에서의 MHA

Decoder에서 Self-Attention 다음으로 사용되는 Layer로, Query는 이전 Decoder Layer에서, Key와 Value는 Encoder의 Output에서 가져옵니다. 이를 통해 Decoder의 모든 Position Vector들이 Encoder의 모든 Position Vector값을 참조하여 Decoder의 Sequence Vector들이 Encoder의 Sequence Vector들과 어떠한 연관성을 가지는지 학습하게 됩니다.

직관적으로 보면, Decoder가 Encoder에게 어떠한 질문(= Query, "토마토는 과일일까? 아니면 채소일까?")을 던지면 Encoder는 Decoder에게 지식(= Key, "과일은 년생 식물이고 채소는 일 년생 식물이다.")과 어떠한 대답(= Value, "토마토는 열매이니 과일인 듯하다.")을 해주는 상황을 통해 계속해서 새로운 사실을 쌓아가고 갱신시키는 것과 같다고 보시면 될 것 같습니다.

 

 

이렇게 Transformer의 구조적인 부분에 대해 다뤄보았습니다. 그러면 이러한 Transformer가 왜 좋고 어떻게 좋은 성능을 발휘할 수 있는 것일까요?

n=Sequence의 길이, d=Representation 차원, k=Convolution Kernel Size, r=한정된 Self-Attention에서의 이웃의 크기

여러 가지 요인이 있겠지만, 연산 부분을 제외한 성능 쪽 향상은 Transformer가 Maximum Path Length를 줄여주기 때문에 Long-Range Dependencies를 더 쉽게 학습할 수 있다는 특징 때문에 이룰 수 있었다고 판단하고 있습니다.

조금 풀어쓰면, "Long-Range Dependency는 Sequence Transduction에서 중요한 Challenge인데, 이러한 Long-Dependency는 Length Of Path에 영향을 크게 받으며, 이러한 Length Of Path를 Transformer가 줄여주었기 때문에 Long-Range Dependency 문제를 더 쉽게 풀 수 있었다"라고 이해하시면 될 것 같습니다.

예를 들어 표현하면, 다음과 같습니다.

Self-Attention은 각 Token들을 모든 Token들과 참조하여 연관 정보를 구해 더해줍니다. 따라서 Maximum Path Length를 O(1)이라고 할 수 있습니다. 참고로 Recurrent 구조에서는 Maximum Path Length가 O(n)입니다. RNN 계열보다 Maximum Path Length가 확연히 줄어들었기 때문에 좋은 성능을 낼 수 있었겠죠.

 

정리해 보면, Transformer는 순환 레이어 대신 Attention에만 의존하는 최초의 Sequence Model이며 Recurrent Layer나 Convolution Layer를 기반으로 한 구조보다 훨씬 빠르게 학습되고 번역 Task에서 새로운 SOTA를 달성하였습니다. 게다가 최고 모델의 성능은 앙상블 모델도 능가한다고 하네요.

Computer Vision Task에서도 Transformer를 채택한 ViT나 Swin Tranformer 등이 많이 활용되는 만큼 이의 기초가 되는 Transformer에 대해 정리해 나가는 작업이 이제는 선택이 아닌, 필수가 되지 않을까 싶습니다.

 

 

Transformer에 대한 활용 결과와 같은 주제는 나중에 다뤄보면 좋을 것 같네요.

이번 포스트는 이렇게 마무리하도록 하겠습니다. 

반응형

'Programming > Deep Learning Network' 카테고리의 다른 글

[Model] About Attention Mechanism  (1) 2023.10.31
[Model] About Multi-Head Attention  (0) 2023.10.31
[Model] About Self-Attention  (1) 2023.10.31
[Model] About seq2seq (Sequence-To-Sequence)  (0) 2023.10.31
[Code] XNect  (0) 2023.04.04

댓글