Attention is All You Need

LegendKi·2024년 6월 22일

NLP

목록 보기
4/5

Introduction

연구 배경

자연어 처리(Natural Language Processing, NLP)는 컴퓨터가 인간 언어를 이해하고 생성할 수 있도록 하는 인공지능의 한 분야로 특히 기계 번역, 텍스트 요약, 질문 응답 등 다양한 응용 분야에서 큰 성과를 보였다. 이러한 성과는 주로 Sequence-to-Sequence (Seq2Seq) 모델의 발전에 기여한다.

기존의 Seq2Seq 모델은 주로 RNN (Recurrent Neural Networks), LSTM (Long Short-Term Memory), GRU (Gated Recurrent Unit) 등을 기반으로 구축되었다. 이 모델들은 시퀀스 데이터를 순차적으로 처리하여 입력 시퀀스를 고정된 길이의 벡터로 인코딩하고 이를 통해 출력 시퀀스를 생성하는 방식으로 작동한다.

기존의 RNN, LSTM, GRU 등의 순환 신경망 모델은 여러 한계를 가지고 있다. 순차적인 처리 방식으로 인해 병렬 처리가 어려워 긴 시퀀스를 처리할 때 학습과 추론 속도가 매우 느려지는 문제가 발생한다. 긴 시퀀스에서의 정보 손실 문제도 존재해 입력 시퀀스의 길이가 길어질수록 초기 입력 정보가 후반부로 전달되기 어렵기 때문에 장기 의존성을 학습하기 어려워진다. 또한 학습 과정에서 기울기 소실 또는 기울기 폭발 문제를 겪을 수 있어 안정적인 학습이 어렵다.

Transformer의 등장

이러한 한계를 극복하기 위해 2017년 Vaswani et al.은 "Attention is All You Need" 논문에서 Transformer 모델을 제안했다. Transformer는 기존의 순환 신경망을 완전히 배제하고 Self-Attention 메커니즘을 중심으로 설계된 새로운 아키텍처이다. Self-Attention 메커니즘은 시퀀스의 모든 단어가 서로를 참고할 수 있게 하여, 병렬 처리의 장점을 최대한 활용할 수 있도록 한다.

인코더는 입력 시퀀스를 처리하여 컨텍스트 벡터를 생성하고 디코더는 이 벡터를 사용하여 출력 시퀀스를 생성한 뒤 Self-Attention 메커니즘은 각 단어가 시퀀스 내 다른 모든 단어와의 관계를 고려할 수 있게 하여 장기 의존성을 효과적으로 처리할 수 있게했다.

Transformer 아키텍처

주요 구성 요소

Positional Encoding

Transformer는 순서 정보가 없는 Self-Attention 메커니즘을 사용하기 때문에 입력 시퀀스의 단어 순서를 인코딩할 필요가 있다. 이를 위해 포지셔널 인코딩을 사용하여 각 단어의 위치 정보를 사인(sin)과 코사인(cos) 함수를 사용하여 계산 후 입력 임베딩에 추가한다.

인코더 (Encoder)

인코더는 입력 시퀀스를 처리하는 역할로 여러 개의 동일한 레이어로 구성되며 각 레이어는 두 가지 주요 서브 레이어로 이루어져 있다.

  • Multi-Head Self-Attention : 이 서브 레이어는 입력 시퀀스의 각 단어가 다른 모든 단어와의 관계를 학습할 수 있게 하고 여러 개의 어텐션 헤드를 사용하여 다양한 표현 공간에서 정보를 추출하고 결합한다.
  • Feed-Forward Neural Networks : 이 서브 레이어는 각 위치의 입력을 독립적으로 처리하여 비선형 변환을 적용한다.

디코더 (Decoder)

디코더는 인코더의 출력과 이전에 생성된 단어들을 사용하여 출력 시퀀스를 생성한다. 디코더 역시 여러 개의 동일한 레이어로 구성되며 각 레이어는 세 가지 주요 서브 레이어로 이루어져 있다.

  • Masked Multi-Head Attention : 디코더의 Self-Attention은 이전에 생성된 단어들 간의 관계를 학습한다.
  • Multi-Head Attention : 이 서브 레이어는 인코더의 출력을 참고하여, 입력 시퀀스와 출력 시퀀스 간의 관계를 학습한다.
  • Feed-Forward Neural Networks : 인코더와 마찬가지로 각 위치의 입력을 독립적으로 처리하여 비선형 변환을 적용한다.

Residual Connections and Layer Normalization

각 서브 레이어 뒤에 Residual Connection을 추가하여 입력 정보를 유지하고 학습을 안정화하고 Layer Normalization 통해 각 레이어의 출력을 정규화하여 학습 속도를 향상시키고 과적합을 방지합니다.

Self-Attention 메커니즘

Self-Attention

Self-Attention 메커니즘은 Transformer의 핵심 요소로 입력 시퀀스의 모든 단어가 서로의 중요도를 동적으로 계산하여 컨텍스트를 반영하는 방법으로 단어 간의 관계를 모델링하고 각 단어가 다른 단어들과 어떻게 상호작용하는지 학습하게 한다. Self-Attention은 특히 긴 시퀀스에서의 장기 의존성 문제를 효과적으로 해결하며순차적인 처리가 필요 없기 때문에 병렬 처리가 가능하다.

계산 방법

Query, Key, Value 생성

Q=XWQ,K=XWK,V=XWVQ = XW_Q, K = XW_K, V=XW_V

Query (Q), Key (K), Value (V). 이는 각 단어가 다른 단어들과의 유사도를 계산하기 위해 사용된다. 변환 과정은 가중치 행렬 WQ,WK,WVW_Q, W_K, W_V를 사용하여 이루어진다. 여기서 XX는 임베딩 벡터다.

유사도 계산

Attention(Q,K,V)=Softmax(QKTdk)VAttention(Q,K,V) = Softmax(\frac{QK^T}{\sqrt{d_k}})V

Query와 Key 벡터의 내적을 계산하여 유사도를 측정한다. 이는 각 단어가 다른 단어와 얼마나 관련이 있는지를 나타내며 Softmax를 통해 정규화 된다. 여기서 dkd_k는 Key 벡터의 차원 수로 내적 결과를 dk\sqrt{d_k}로 나누는 이유는 큰 값이 나오는 것을 방지하기 위함이다.

가중합 계산

Ouput=iAttentioniViOuput = \sum_i{Attention_i \cdot V_i}

정규화된 유사도 점수를 활용하여 Value 벡터의 가중합을 계산한다. 이는 입력 시퀀스의 각 단어가 다른 단어들로부터 얼마나 영향을 받는지를 반영하여 새로운 표현을 생성한다.

장점과 단점

장점

  • 병렬 처리 가능 : Self-Attention은 모든 단어를 동시에 처리할 수 있어 RNN 기반 모델보다 훨씬 빠르게 학습 및 추론이 가능하다.
  • 장기 의존성 처리 : 입력 시퀀스의 모든 단어 간의 관계를 한 번에 고려할 수 있어 장기 의존성을 효과적으로 학습할 수 있다.
  • 유연성 : 다양한 입력 길이에 유연하게 대응할 수 있으며 다양한 NLP 작업에 쉽게 적용될 수 있다.

단점

  • 계산 복잡도 : Self-Attention의 계산 복잡도는 입력 시퀀스 길이에 대해 O(n2)O(n^2)으로 시퀀스가 길어질수록 메모리 사용량과 계산 비용이 급격기 증가한다.
  • 포지션 정보 부족 : 단어 순서 정보를 내재적으로 가지지 않기 때문에 Positional Encoding을 추가로 사요하여 순서정보를 보완해야한다.

Multi-Head Attention

Multi-Head Attention

Multi-Head Attention은 Self-Attention 메커니즘을 확장한 것으로 여러 개의 독립적인 Self-Attention을 병렬로 수행하여 다양한 표현 공간에서 정보를 추출하는 방법이다. 이 기법은 Transformer 모델의 핵심 요소 중 하나로 모델이 다양한 시각에서 입력 시퀀스를 이해하고 보다 풍부한 표현을 학습할 수 있게 한다.

구성과 동작 방식

헤드 개수 설정

모델은 hh개의 어텐션 헤드를 사용하며 각 헤드는 독리접으로 Query, Key, Value 벡터를 생성하고 Self-Attention을 수행한다.

Query, Key, Value 벡터 생성

Qi=XWQi,Ki=XWKi,Vi=XWVifori=1,,hQ_i = XW_{Q_i}, K_i = XW_{K_i}, V_i = XW_{V_i} for i = 1, \ldots, h

입력 임베딩 XX는 각 헤드에 대해 서로 다른 가중치 행렬 WQi,WKi,WViW_{Q_i}, W_{K_i}, W_{V_i}를 통해 Query, Key, Value 벡터로 변환된다.

독립적인 Self-Attention 수행

Oi=Attention(Qi,Ki,Vi)O_i = Attention(Q_i,K_i,V_i)

각 헤드는 독립적으로 Self-Attention을 수행하여 출력 벡터 OiO_i를 생성한다.

출력 벡터 결합

O=[O1;O2;;Oh]WOO = [O_1;O_2;\ldots ;O_h]W_O

각 헤드의 출력 벡터 OiO_i를 결합하여 하나의 벡터로 만든다. 리를 위해 모든 출력 벡터를 연결하고 다시 변환 행렬 WOW_O를 통해 최종 출력 벡터로 변환한다.

장점과 단점

장점
다양한 표현 학습 : 여러 개의 어텐션 헤드를 사용함으로써 입력 데이터의 다양한 측면을 동시에 학습할 수 있어 모델이 더 풍부한 표현을 학습하게 하여 성능을 향상시킵니다.
강력한 표현력 : Multi-Head Attention은 서로 다른 위치에서의 상호작용을 독립적으로 학습하므로 모델이 보다 정교하고 복잡한 관계를 이해할 수 있게 한다.
유연성 : 다양한 크기의 어텐션 헤드를 사용할 수 있어 모델의 복잡도를 조정하는 것이 가능하다.

단점
계산 비용 증가 : 여러 개의 어텐션 헤드를 병렬로 처리하기 때문에 계산 비용이 증가해 메모리 사용량과 연산 시간을 늘릴 수 있다.
복잡한 설계 : 다수의 헤드를 사용하는 복잡한 구조로 인해 모델의 구현이 다소 복잡할 수 있으며 하이퍼파라미터 튜닝이 필요하다.

Positional Encoding

순서 정보의 필요성

Self-Attention 메커니즘은 입력 시퀀스의 단어 간 관계를 학습하는 데 매우 효율적이지만 순서 정보를 내재적으로 가지지 않는다. 즉 Self-Attention은 단어의 순서를 고려하지 않고 단어 간의 유사도를 계산해 자연어 처리 작업에서 중요한 단어 순서 정보가 손실될 수 있다는 것을 의미한다.

예를 들어, 문장에서 "고양이가 나무에 올라갔다"와 "나무에 고양이가 올라갔다"는 단어의 순서가 바뀌었지만 의미는 유사하다. 그러나 순서가 달라지면 문장의 의미가 완전히 달라지는 경우도 많으므로 모델이 단어 순서 정보를 학습할 수 있도록 하는 방법이 필요하다. 이를 위해 Transformer는 Positional Encoding을 사용하여 단어의 순서 정보를 입력 임베딩에 추가한다.

Positional Encoding의 원리와 구현

Positional Encoding은 입력 시퀀스의 각 단어 위치에 고유한 정보를 부여하여 단어 순서를 인코딩한다. Transformer에서 사용하는 Positional Encoding은 사인(sin)과 코사인(cosine) 함수를 기반으로 하며 다음과 같은 방식으로 계산된다.

Positional Encoding 공식

PE(pos,2i)=sin(pos100002i/dmodel)PE(pos, 2i) = \sin\left(\frac{pos}{10000^{2i/d_{\text{model}}}}\right)
PE(pos,2i+1)=cos(pos100002i/dmodel)PE(pos, 2i+1) = \cos\left(\frac{pos}{10000^{2i/d_{\text{model}}}}\right)

각 위치 pospos와 임베딩 차원 ii에 대해 Positional Encoding은 다음과 같이 정의된다. 여기서 dmodeld_{model}은 입베딩 벡터의 차원 수로 짝수 차원에서는 사인 함수를 홀수 차원에서는 코사인 함수를 사용하여 각 위치에 대한 고유한 값을 생성한다.

Feed-Forward Neural Networks

인코더와 디코더 내의 FFNN

Transformer 모델의 인코더와 디코더는 각 레이어마다 Self-Attention 서브 레이어 외에도 위치별 Position-wise Feed-Forward Neural Networks (FFNN) 서브 레이어를 포함하고 있다. 이 FFNN 서브 레이어는 Self-Attention에서 얻은 출력을 처리하여 더욱 복잡하고 비선형적인 표현을 학습하는 데 기여한다.

1. 첫 번째 Dense 레이어

입력 벡터의 차원을 확장하며 일반적으로 이 레이어의 출력 차원은 입력 차원의 4배로 설정된다.

2. Activation Function

첫 번째 Dense 레이어의 출력을 비선형 변환하며 주로 ReLU(Rectified Linear Unit) 함수를 사용한다.

3. 두 번째 Dense 레이어

출력 차원을 다시 원래의 입력 차원 dmodeld_{model}로 축소한다.

4. 레이어 정규화 및 잔차 연결

각 FFNN 서브 레이어의 출력은 Layer Normalization을 거치며 Residual Connection을 통해 원래 입력과 더해진다.

이 구조는 입력 시퀀스의 각 위치별로 독립적으로 적용되며 전체 시퀀스의 정보를 보존하면서도 개별 위치의 표현을 풍부하게 만든다.

Residual Connections and Layer Normalization

Residual Connections의 역할

Residual Connections는 입력이 각 서브 레이어를 통과할 때, 원래 입력을 해당 서브 레이어의 출력에 더해주는 방식으로 구현되어 모델의 학습을 안정화하고, 성능을 향상시키는 데 기여한다.

Ouput=Layer(x)+xOuput = Layer(x) + x

여기서 xx는 서브 레이어에 대한 입력이고 Layer(x)Layer(x)는 해당 서브 레이어의 출력이다.

학습 안정화

Residual Connections는 입력 값이 출력 값에 더해지기 때문에 각 레이어는 이전 레이어의 학습된 정보를 유지하면서 새로운 정보를 추가적으로 학습할 수 있어 기울기 소실 문제를 완화하여 효율적인 학습이 가능하게 한다.

정보 전달 유지

원래 입력 정보가 손실되지 않고 다음 레이어로 전달될 수 있도록해 모델이 보다 안정적이고 일관된 학습이 가능하게 한다.

Layer Normalization의 역할

Layer Normalization은 각 레이어의 출력을 정규화하여 모델의 학습 속도를 향상시키고 과적합을 방지하는 데 기여한다. Transformer 모델에서 Layer Normalization은 각 서브 레이어의 출력에 적용되어 Input Feature들의 분포를 안정화한다.

x^=xμσ+ϵ\hat{x}=\frac{x-\mu}{\sigma+\epsilon}
Ouput=γx^+βOuput = γ \hat{x}+\beta

여기서 𝑥는 정규화할 입력, 𝜇는 입력의 평균, 𝜎는 입력의 표준편차, 𝜖은 수치 안정성을 위한 작은 값이며 이 정규화된 값에 학습 가능한 파라미터 𝛾와 𝛽를 곱하고 더하여 최종 출력을 얻는다.

0개의 댓글