본문 바로가기

ml_interview

Transformer model Architecture(1)

오리지널 트랜스 포머 모델에는 여섯 개의 레이어 스택, 6-레이어 인코더, 6-레이어 디코더

 

입력은 어텐션 서브 레이어 (어텐션 하나의 레이어, Multi-Head Attension) 와 FFN 서브레이어를 통해 트랜스 포머 인코더로 향한다.

 

타겟은 두 개의 어텐션 서브 레이어 (Masked Multi-Head Attension, Multi-Head Attension) 와 FFN 서브 레이어를 통해 

 

어텐션 메커니즘은 word-to-word 연산, 분석 대상 단어를 포함하여 각 단어가 시퀀스의 다른 모든 단어와 어떻게 관련되어 있는지 찾아낸다.

어텐션은 단어 벡터들 간에 내적을 실행하고, 분석 대상 단어 자체를 포함한 단어들에 대해 가장 강한 관계를 결정한다.

 

다시 말해, 어텐션은 단어들 사이의 더 깊은 관계를 제공하고, 더 나은 결과를 도출한다.

 

각 어텐션 서브 레이어에 대해, 8개의 어텐션 서브레이어를 병렬로 실행, 

 

Multi-Head Attension

  • 시퀀스에 보다 광범위하고 철저한 분석
  • recurrence 배제에 따른 연산 축소
  • 병렬화 구현 가능
  • 각 어텐션 메커니즘이 같은 입력 시퀀스에 대해 서로 다른 관점 학습

 

인코더 스택

오리지널 트랜스 포머의 인코더 및 디코더는 레이어 스택, 

    1+.Positional Encoding

1. input - 2. multi-head attension - 3. add & norm - 4. feedforward - 5. add & norm -

 

1+ 연산 결과가 3 으로의 연결, 

3의 연산 결과가 5 로 연결

 

크게 두 개의 서브 레이어로 Multi-Head Attension, Positive-wise 완전 연결 FF 네트워크,(FFNN)

 

Residual (잔차) 연결은 트랜스포머 모델의 각 주요 서브레이어인 Sublayer(x) 를 둘러싼다. 이러한 연결은 서브레이어의 처리되지 않은 입력 x 를 레이어 정규화  함수에 전송한다. 

이를 통해 위치 인코딩 (positional encoding) 과 같은 정보가 손실되지 않는다.

 

각 레이어의 정규화된 출력은 

LayerNormalization (x + Sublayer(x))

 

임베딩 서브레이어의 경우 스택의 맨 아래에만 존재, 나머지 5개 레이어에 대해서 포함되지 않는 이유는, 인코딩된 입력이 모든 레이어에 거쳐 안정적이도록 보장

 

Multi-Head-Attension 메커니즘은 각 레이어에서 같은 기능을 수행,  (그러나 같은 작업은 아님) 각 레이어는 이전 레이어로부터 학습, 시퀀스의 토큰들을 연결하는 방법을 탐색한다.  - 다양한 단어 연관성의 탐색

 

트랜스포머의 효율적인 제약으로 모델의 모든 서브레이어의 출력은 임베딩 레이어와 잔차 연결을 포함하는, 상수 차원을 가진다. 

해당 차원은 d_model, 오리지널 아키텍쳐에선 model = 512, 목표에 따라 다른 값으로 설정할 수 있다.

 

d_model 의 내적 연산은 차원의 안정적 유지, 연산 수 감소, 정보가 모델을 통과할 때 더 쉽게 추적할 수 있도록 한다.

 

입력 임베딩 서브레이어

학습된 임베딩을 사용하여 입력 토큰들의 n 차원 벡터로 변환 (original version, n = 512), 고전적 구조와 동일하다.

Embedding sublayer 도 다른 표준 변환 모델처럼 작동한다. 

 tokenizer 가 문장을 토큰들로 변환, 

토큰화된 텍스트는 임베딩(의미 정보가 캡쳐된 벡터 dense vector 형태로 표현하는 것) 되어야 한다. - 토큰화된 텍스트가 정부에 충분하지 않음

 

트랜스포머에는 학습된 임베딩 서브레이어가 포함되어 있다. 다양한 임베딩 방법이 적용될 수 있음,

 

그 중 skip-gram, Google, 단어 창 안의 중심 단어에 초첨을 맞추고, 문맥 단어들을 예측한다. (현재 단어를 이용해 문맥의 예측) - 해당 과정의 반복

skip-gram 모델에는 입력 레이어, 가중치, 은닉 레이어, 토큰화된 입력 단어들의 단어 임베딩들을 포함하는 출력이 포함된다. 

더보기

임베딩된 데이터의 유사도를 측정하기 위한 방법으로 cosine similiery 를 사용, 

 

트랜스 포머의 후속 레이어들은 단어들이 어떻게 연관될 수 있는지에 관한 정보를 제공하는 단어임베딩을 배웠다. 

하지만, 시퀀스에서의 단어의 위치를 가리키는 추가 벡터나 정보가 없기 때문에 많은 정보가 누락된다.

 

트랜스포머에서는 위치 인코딩 positional encoding 이란 특색을 고안했다.

 

위치 인코딩 Positional encoding

위치 인코딩에 진입하기 전 시퀀스에서의 단어의 위치를 모르고 있다.

 

독립적인 위치 벡터를 사용하는 것은 훈련 속도에 많은 비용을 야기한다.

 

아이디어는 시퀀스에서 토큰의 위치를 기술하는 추가 벡터를 사용하는 대신, 입력 임베딩에 위치 인코딩 값을 추가하는 것이다.

 

해당 출력의 각 벡터에 대해 고정 크기를 기대한다 d_model

 

문제는 각 단어의 단어 임베딩에 값을 추가하여 위치 정보를 갖게 하는 방법을 찾는 것, d_model = 512 차원에 값을 추가해야 하는, 해당 차원 범위내에 i 의 정보를 제공해야 한다. 

 

설계자들은 단위 구를 사용하여 sin, cos 값으로 위치 인코딩을 나타낸다. 

각 차원 i 에 대한 위치 인코딩 Positional Encodding 을 위한 서로 다른 주파수를 생성한다.

 

이후 문제는 단어 임베딩 벡터에 위치 인코딩을 추가하는 방법이다.

 

 

임베딩 벡터에 위치 인코딩을 추가하기

단순히 단어 임베딩 벡터에 위치 인코딩 벡터를 추가하는 간단한 방법

 

black 의 단어 임베딩을 취하고 y1 = black 으로 부르면, 위치 인코딩 함수로 얻은 위치 벡터 pe(2) 에 추가할 준비가 된 것, 입력 단어 black 의 위치 인코딩 pc(black) 을 얻는다.

단어 임베딩의 정보를 잃을 수 있지만 이는 위치 인코딩 벡터에 의해 최소화될 것이다.

 

단어 임베딩 레이어의 정보가 다음 레이어에서 효율적으로 사용될 수 있도록 y1 의 값을 키우는 방법은 많다. 그 중 하나는 black 의 단어 임베딩인 y1 을 가중하는 것

y1 * sqrt(d_model)

동일한 크기의 유지,

 

임베딩의 초기 단어 유사도

위치 인코딩 벡터의 유사도

각 단어의 단어 임베딩 벡터와 해당 위치 인코딩 벡터

위 세 가지의 유사도 계산 가능

 

초기 단어 임베딩 정보와 위치 인코딩 값을 포함한다.

 

Multi-Head Attension

multi head attension sublayer 는 8개의 헤드를 포함하고, 포스트-레이어 정규화가 잇따르는 데, 이것은 서브 레이어의 출력에 잔차 연결을 더해서 정규화한다.

 

Multi-Head Attension Architecture

인코드 스택의 첫 번째 레이어의 멀티 어텐션 서브레이어의 입력은 각 단어의 임베딩 및 위치 인코딩을 포함하는 벡터이다.

스택의 다음 레이어들은 이 연산을 반복하지 않는다.

 

입력 시퀀스의 각 단어 x_n 의 벡터는 d_model = 512 이다.

각 단어 x_n 의 표현이 d_model = 512 차원의 벡터가 되었다.

 

각 단어는 시퀀스에서 어떻게 어울리는지 결정하기 위해 다른 모든 단어에 매핑된다. 

다음 문장에서는 it 이 시퀀스의 cat, rug 와 관련될 수 있다.

Sequence = The cat sat on the rug and it was dry-cleaned

모델은 it 이 cat, rug 와 관련이 있는지 알아 내기 위해 학습한다. 

512 차원을 그대로 사용하여 모델을 훈련한다면 많은 계산량이 요구될 것,

 

시퀀스를 하나의 d_model 블록으로 분석한다면, 한 번에 하나의 관점만 얻을 것이다. 더해서 다른 관점들을 찾는 데 상당한 계산 시간이 걸릴 것이다.

 

각 단어 x_n 의 512 차원을 8 개의 64 차원으로 나눠 사용,

8 개의 헤드를 병렬로 실행하여 훈련 속도 상승, 각 단어가 다른 단어와 어떻게 관련되는지에 대한 8개의 서로 다른 표현 부분 공간을 얻을 수 있다. representation subspace

(단어를 표현하는 차원의 분리, 단어별 임의의 차원들의 결합, 단어들간의 관계)

 

각 헤드의 출력은 x * d_k 행렬, z_i 

 

Multi Head Sublayer 의 출력이 하나의 x,d_model 행렬을 가지도록 Z 가 이어진다.

Multi Head Sublayer 를 나오기 전 Z 의 요소들을 잇는다. 

 

Multi Head layer 의 출력은 트랜스포머 모델의 제약 조건을 따른다. d_model = 512

 

어텐션 메커니즘의 각 헤두 h_n 내부에서 각 단어 벡터는 세 가지 표현을 가진다.

  • Query 벡터, d_q = 64 차원, 단어 벡터 x_n 이 셀프 어텐션을 포함하여 다른 단어 벡터들의 보든 Key-Value 쌍을 찾을 때 활성화되고 훈련된다.
  • Key 벡터 d_k = 64 차원, 어텐션 값을 제공하도록 훈련
  • Value 벡터 d_v = 64 차원. 또 다른 어텐션 값을 제공하도록 훈련

 

각 벡터들이 의미를 가지게 되는 이유는 아래 수식을 통해 의미를 가지고 어텐션이 정의된다.

 

어텐션은 Q, K, V 가 들어간 다음 식으로 표현되는 scaled Dot-Pproduct Attention 으로 정의된다

주어진 Q 에 대해 모든 K 의 유사도를 계산하고, 이 유사도들을 K 와 매핑되어 있는 V 에 반영하여 반환한다.

 

 

벡터들이 모두 같은 차원을 가지므로 스케일링된 내적을 사용하여 각 헤드에 대한 어텐션 값을 얻은 다음 8개 헤드 출력 Z 를 잇는 것이 비교적 간단하다. ( 같은 크기의 가중치, 같은 입력 크기를 유지하므로 )

 

Q, K, V 를 얻으려면 각각의 가중치 행렬 Q, K, V 를 사용하여 모델을 훈련시켜야 한다. 이 행렬들은 d_k = 64 열, d_model = 512 행이다. 

Q 는 x 와 Q_w 사이의 내적에 의해 얻어지며 d_k = 64 가 된다.