Posted:      Updated:

Attention Is All You Need’ 논문을 한글로 번역한 내용은 여기에서 확인하실 수 있습니다.

The Transformer

트랜스포머(Transformer)는 “Attention is all you need”에서 처음으로 제안한 모델이다.

트랜스포머는 seq2seq(sequence-to-sequence) 처럼 인코더-디코더 구조를 따른다.
그러나 보통의 시퀀스 모델들은 RNN을 기반으로 하는데, 트랜스포머는 어텐션(Attention) 메커니즘만을 사용했다.
기존 모델보다 훨씬 적은 훈련 비용으로 효율적인 병렬 처리가 가능하다는 특징이 있다.

현재 BERT, GPT와 같은 트랜스포머 기반의 언어 모델이 계속해서 등장하고 있다.

Attention Mechanism

어텐션 메커니즘은 이 논문에서 처음으로 제시된 것은 아니다.

seq2seq 모델과 같이 기존 RNN 기반의 시퀀스 모델에는 문제점이 있었다.
seq2seq 모델은 입력 시퀀스를 고정된 벡터로 압축하여 출력 시퀀스를 만들어낸다.
고정 길이의 벡터로 압축할 때, 시퀀스의 길이가 길어질 수록 정보 손실이 발생하게 된다.
어텐션은 이때 시퀀스의 정확도가 떨어지지 않도록 보정하기 위해 사용됐다.

트랜스포머는 이 어텐션만으로 인코더와 디코더를 구현한다.

Model Architecture

Figure1

Encoder and Decoder Stacks

seq2seq 처럼 인코더-디코더 형식으로 되어 있다.
인코더와 디코더 모두 6개의 레이어 스택으로 구성된다.

인코더의 각 레이어는 두 개의 서브 레이어를 가진다.
서브 레이어는 각각 멀티 헤드 셀프 어텐션(multi-head self-attention), 포지션 와이즈 완전 연결 피드 포워드 네트워크(position-wise fully connected feed-forward network)이다.

디코더의 각 레이어에는 인코더와 같은 두 개의 서브 레이어에 멀티 헤드 어텐션을 수행하는 서브 레이어(masked multi-head attention)가 하나 더 있다.

Attention

Figure2

어텐션 함수는 쿼리(Q), 키(K), 값(V) 쌍의 집합을 출력으로 매핑한다.
이때 쿼리, 키, 값 그리고 출력은 모두 벡터이다.

Scaled Dot-Product Attention

가산 어텐션(additive attention)과 닷 프로덕트 어텐션(dot-product attention)을 언급하는데, 두 어텐션 메커니즘이 비슷하지만 닷 프로덕트 어텐션이 훨씬 빠르고 공간 효율적이라고 한다.
Scaled Dot-Product Attention은 닷 프로덕트 어텐션(Dot-Product Attention)에 값을 스케일링하는 것을 추가했다.

\[\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V\]

입력은 $d_k$ 차원의 쿼리(query)와 키(key)이고, 출력은 $d_v$ 차원의 값(value)으로 구성된다.
쿼리와 키에 대해 닷 프로덕트를 계산하고, 닷 프로덕트 결과를 $\sqrt{d_k}$로 나눔으로써 스케일링한다.
스케일링된 닷 프로덕트에 소프트맥스 함수를 적용하여 값에 대한 가중치를 얻는다.

Multi-Head Attention

쿼리, 키, 값에 대해 $h$개의 서로 다른 헤드로 분할하여 병렬 처리하는 것이 효율적이다.
각 헤드에서 선형 투영(Linear Projection)된 $d_k$, $d_k$ 와 $d_v$ 차원 각각에 독립적으로 어텐션 연산을 수행하고, 출력을 연결시킨 후 다시 한 번 선형 투영한다.

논문에서는 $h=8$개의 헤드를 사용했고, $d_k$와 $d_v$는 $d_{model}/h$로 설정했다.
즉, $d_k = d_v = d_{model}/h = 64$이다.

Applications of Attention

트랜스포머는 3가지 다른 방식의 멀티 헤드 어텐션을 사용한다.

  1. 인코더-디코더 어텐션(Encoder-Decoder Attention)
    쿼리는 이전 디코더 레이어로부터 제공되고, 키와 값은 인코더의 출력에서 제공된다.

  2. 인코더의 셀프 어텐션(Self-Attention in Encoder)
    쿼리, 키, 값 모두 인코더의 이전 레이어의 출력에서 제공된다.

  3. 디코더의 셀프 어텐션(Self-Attention in Decoder)
    디코더의 현재 단계까지 생성된 모든 단어를 쿼리, 키, 값으로 사용한다.
    자동 회귀 특성을 보존하기 위해, 아직 생성되지 않은 단어(미래의 단어)에 대한 정보는 차단한다.
    이는 마스킹 기법으로 구현된다.

Position-wise Feed-Forward Networks

인코더와 디코더의 각 레이어에는 어텐션 서브레이어 외에도 완전 연결 피드 포워드 네트워크가 포함되어 있다.

완전 연결 피드 포워드 네트워크는 두 개의 선형 변환으로 구성되어 있으며, 두 선형 변환 사이에 ReLU 활성화 함수가 사용된다.

\[\text{FFN}(x) = \max(0, xW_1 + b_1)W_2 + b_2\]

$x$는 입력, $W_1$, $W_2$는 가중치, $b_1$, $b_2$는 편향을 나타낸다.

Embeddings and Softmax

학습된 임베딩을 사용하여 입력 토큰과 출력 토큰을 $d_\text{model}$의 고정 크기 밀집 벡터로 변환한다.
가중치에 $\sqrt{d_\text{model}}$을 곱하여 스케일링하고, 입력 임베딩 레이어, 출력 임베딩 레이어, 소프트맥스 전의 선형 변환 레이어에서 가중치 행렬을 공유한다.
디코더 출력은 선형 변환과 소프트맥스 함수를 사용하여 다음 토큰 확률로 변환된다.

Positional Encoding

트랜스포머의 핵심 기법이라고 할 수 있다.
RNN은 단어의 위치에 따라 단어를 순차적으로 입력받아 처리하기 때문에 각 단어의 위치 정보를 가질 수 있다.
그러나 트랜스포머는 RNN처럼 재귀(recurrence)이나 컨볼루션(convolution)을 사용하지 않기 때문에, 토큰의 위치 정보를 모델에 제공하기 위한 방법으로 포지셔널 인코딩(Positional Encoding)을 사용한다.
포지셔널 인코딩은 인코더와 디코더 스택 하단에 있는 입력 임베딩에 추가된다.

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

포지셔널 인코딩은 사인, 코사인 함수를 사용하여 계산할 수 있으며, 학습된 포지셔널 임베딩을 사용하는 것과 거의 동일한 결과를 보였다고 한다.

Conclusion

이 논문에서는 멀티 헤드 셀프 어텐션으로 인코더 디코더 아키텍처에서 가장 흔히 사용된 RNN을 대체하면서 전적으로 어텐션에 기반한 첫 번째 시퀀스 변환 모델인 트랜스포머를 제시했다.
기존 RNN 기반 모델들이 가진 순차적 처리의 한계를 극복하고, 데이터의 병렬 처리를 가능하게 하여 학습 속도를 크게 향상시켰다.
번역 품질 측면에서 기존 모델들을 능가하는 성능을 보였으며, 특히 병렬 처리 능력으로 인해 학습 시간이 크게 단축되었습니다.

트랜스포머는 다양한 언어 처리 작업에 적용 가능한 범용적인 모델로, 이후의 많은 연구와 모델 개발에 영향을 미쳤다.

Categories:

댓글남기기