Transformer 분석(2): Transformer의 Encoder 이해하기

daewoo kim
9 min readJul 18, 2021

Transformer Encoder의 구조에 대해서 알아보자…

Transformer의 Encoder Stack

Transformer의 Encoder Stack은 N 개의 encoder로 구성되어 있다. 각 Encoder는 그것의 출력을 그 다음 Encoder에 보내고 마지막 Encoder는 입력 시퀀스의 표현(Representation)을 출력한다.

Transformer의 주요 파라미터

Transformer 논문에서 사용한 주요 파라미터는 다음과 같으며, 이들 파라미터 값들을 변형시켜 다양한 Transformer의 조합을 만들어 낼 수 있다.

  1. d_model = 512 : Transformer의 Encoder와 Decoder는 동일한 입출력 차원을 유지한다. 임베딩을 위한 차원과도 같다.
  2. N = 6 : Transformer의 Encoder와 Decoder가 몇 개의 레이어로 구성되었는지를 의미한다.
  3. h = 8 : 멀티헤드 어텐션을 위한 헤드의 개수를 의미한다. Transformer는 1 개의 어텐션을 사용하는 것보다 어텐션을 분할하여 병렬로 어텐션을 수행시킨다.
  4. d_ff = 2048 : Transformer의 Feed-Forward 네트워크의 크기를 의미한다.
  5. d_k = 64 : d_model/h=512/8=64의 값을 가진다. d_k 값은 Q, K, V의 차원을 결정한다.

Transformer 논문는 아래와 같이 파라미터가 다른 Transformer-Base와 Transformer-Big, 2개의 Transformer를 예시로 사용하고 있다.

Transformer의 Encoder 구조

아래 그림은 Transformer의 Encoder 구조이다. Transformer의 Encoder의 입력 차원과 출력 차원은 모두 동일한 차원을 유지한다. 심지어 각 Sub-layer간 입력과 출력 모두 동일한 차원을 갖는다.

Embedding

Encoder의 입력 시퀀스(번역 사례에서 영어 문장)는 Vocabulary로 부터 Numeric 단어 ID로 매핑된다. 또한 임베딩 레이어는 각 입력 단어를 임베딩 벡터로 매핑된다.

Positional Encoding

RNN으로 구현하면 각 단어가 순차적으로 입력되기 때문에 각 단어의 순서를 고려할 필요가 없었다. Transformer는 RNN을 사용하지 않아 모든 단어가 병렬로 Encoder에 입력될 수 있지만, 위치 정보가 사라지는 문제점이 있다.

입력 matrix를 직접 Transformer의 Encoder에 전달하면 단어의 순서를 이해하지 못하므로 입력 matrix에 단어의 순서를 가리키는 정보를 추가하는 것을 Positional Encoding이라고 한다.

Transformer는 임베딩 레이어를 통과한 후 임베딩 벡터로 변환된 단어의 위치 정보를 추가하기 위해 Sine과 Cosine 함수를 사용하였다.

Positional Encoding Matrix의 차원은 입력 matrix과 같은 차원이다.

Encoder에 입력되는 임베딩 벡터 차원

임베딩과 Positional Encoding이 끝나면 입력 임베딩 차원이 3차원으로 정의된다.

(samples, sequence length, embedding size)

Encoder의 Self-Attention 이해하기

Transformer의 셀프 어텐션은 Encoder에는 1개, Decoder에는 2개가 있다.

  • Encoder의 셀프 어텐션: 입력 시퀀스에 대한 어텐션
  • Decoder의 셀프 어텐션: 타겟 시퀀스에 대한 어텐션
  • Decoder의 Encoder-Decoder 어텐션: 타겟 시퀀스가 입력 시퀀스에 대한 어텐션

Query, Key, Value

Encoder의 어텐션 레이어는 3개의 파라미터(Query, Key, Value)형태의 입력을 받는다. Query(Q), Key(K), Value(V)로 명명하며 셀프 어텐션에 사용되는 표기는 다음과 같다.

  • Input Matrix: X (3x512)
  • Q/K/V Weight Matrix: W_Q(512x64) , W_K(512x64), W_V(512x64)
  • Q/K/V Matrix: Q(3x64), K(3x64), V(3x64)

Self-Attention

Input Matrix를 Q/K/V의 Weight Matrix로 dot-product 후 Q/K/V Matrix를 얻은 후 셀프 어텐션을 시작한다.

셀프 어텐션은 문장 내에서 특정 단어와 나머지 모든 단어가 어떠한 관계에 있는 것인지 이해하는 것이다. 셀프 어텐션은 다음과 같은 식을 통해 계산하며 총 4 단계로 구성되어 있다.

Step.1

Q Matrix와 K_Transpose Matrix 의 dot-product를 계산한다. 이 계산 결과는Similarity Score이다.

Step.2

Q⋅K^T Matrix를 √d_k 으로 나눈다. d_k는 Key 벡터의 차원으로 64이므로 d_k는 8이다. d_k는 일종의 scaling factor로 Similarity Score를 d_k로 나누는 이유는 학습 시 안정적인 그래디언트를 얻기 위해 유용하다.

Step.3

Step2까지 구한 Similarity Score를 Softmax 함수를 이용하여 0~1 범위의 값으로 정규화(Normalization)하여 Score Matrix를 계산한다.

Step .4

Attention Matrix (Z)를 계산한다. Attention Matrix는 Step.3에서 계산한 Score Matrix와 V matrix를 dot-product 하여 계산한다.

Encoder의 Multi-Head Attention 레이어

앞에서 셀프 어텐션을 통해 Attention Matrix를 계산하는 것을 알아 보았다. Transformer 논문은 셀프 어텐션의 아이디어를 확장하여 멀티 헤드 어텐션을 도입한다. 멀티 헤드 어텐션을 사용하는 이유는 멀티 헤드 어텐션을 사용할 경우, Attention Matrix가 좀더 정확해지기 때문이다.

멀티 헤드라는 것은 여러 개의 셀프 어텐션을 병렬로 수행하는 것으로 각 헤드(Single Self-Attention)의 계산은 서로 독립적인 worker (#1 ~#8)들로 병렬적으로 수행 가능하다.

최종 멀티헤드 어텐션 Matrix은 다음과 같다.

Multi-Head Attention(Q, K, V) = Concat(Z1, Z2, …, Z8)⋅W0

멀티 헤드 어텐션은 다음과 같은 장점을 제공한다.

  • 모델은 각 헤드가 입력의 다른 부분들에 대해 주의(Attention)을 기울일 수 있기 때문에 위치적 정보(Positional Information)를 좀더 캡처할 수 있다. 이들을 조합하면 더 견고한 Representation을 만들어 낼 수 있다.
  • 또한 각 헤드는 고유한 방식으로 단어간의 연관성을 계산하여 다른 상황 정보를 캡처할 수 있다.

Encoder의 Residual Connection과 Add & Norm

Residual Connection은 모델 학습을 돕기 위해 Vision 분야에서 사용하던 기법이다. Transformer는 Residual Connection을 도입하여 Encoder의 Multi-head Attention의 입력과 Multi-head Attention의 출력을 더한다.

Multi-head Attention의 입력과 출력을 더한 결과는 레이어 정규화(Layer Normalization) 과정을 거치게 된다. 레이어 정규화는 각 레이어의 값들이 급격하게 변하는 것을 방지하여 더 빠르게 학습시킨다.

Encoder의 Feed-Forward 레이어

Add & Norm을 거친 결과는 Feed-Forward 네트워크를 통과하게 된다. Feed-Forward 네트워크는 2개의 MLP 레이어와 ReLU 함수로 구성되어 있으며 Weight Matrix W1의 크기는 512 x 2048 (d_model, d_ff)을 가지며 Weight Matrix W2는 2048 x 512 (d_ff, d_model)를 갖는다.

Feed-Forward 네트워크의 결과는 다시 Add & Norm 과정을 거친 후, Encoder의 최종 출력이 된다.

레퍼런스

[1] Attention is All You Need

[2] 딥러닝을 위한 자연어처리 입무 — Transformer

[3] AI Summer: How Transformers work in deep learning and NLP: an intuitive introduction

--

--

daewoo kim

AI developer & Author | Working@semiconductor-industry. I write and share about what I learn.