We-Co

[We-Co] Transformer - Tensorflow, NLP 본문

Python/Tensorflow

[We-Co] Transformer - Tensorflow, NLP

위기의코딩맨 2022. 2. 6. 17:40
반응형

안녕하세요. 위기의 코딩맨입니다.

오늘은 Transformer에 대해서 간단하게 알아보도록 하겠습니다

[ Transformer ] 

"Attention is all you need"의 제목으로 2017년 구글에서 발표한 모델입니다.

기존의 Seq2Seq의 구조 인코더 - 디코더를 기반으로 하지만, RNN모델을 사용하지 않고

Ateention의 기법을 사용하여 우수한 성능을 보여주는 모델입니다.

 

Transformer의 장점은

- RNN은 순차적의 형태로 출력하지만, 병렬적으로 계산이 가능

- Rnn 스텝이나 Convolution을 켜지 않고 멀리 떨어진 텍스트의 정보들도 서로 영향을 주고 받으며

  서로 연관관계를 학습이 가능

 

Transformer Architecture

Seq2Seq와 같이 왼쪽은 Encoding부분, 오른쪽은 Decoding부분으로 나뉩니다.

Encoding 부분에서는 RNN이 아닌 해당 모델에서 새롭게 제안하는 부분의 구조를 나타냅니다.

 

Positional Encoding 벡터를 생성하는데 Embedding한 벡터의 값들의 포지션 정보에 대한 중요도를 가중치로 넣어주는 값으로 생각하시면 됩니다. 

Transformer는 RNN과 같이 시간축의 따른 반복이 존재하지 않기 떄문에 위치에 대한 값의 정보를 학습하게 됩니다.

보통은 Embedding의 값들은 단어들 간의 유사 정도를 나타내지만 위치 정보를 포함하고 있지 않아서

별도의 Positional Encoding의 계산 값과 Embedding 값을 더한 값을 모델의 입력 값으로 사용하게 됩니다.

수식

pos는 입력 문장의 Embedding의 벡터의 위치를 나타내며, i는 해당 차원의 인덱스를 나타냅니다.

인덱스의 값이 짝수인 경우 sin의 함수, 홀수인 경우 cos의 함수를 사용하게 됩니다. 

dmodel은 모든 층 출력 차원을 의미하는 Transformer의 하이퍼파라미터를 의미합니다.

 

Transformer에서 사용되는 3가지의 Attention에 대해서 알아보도록 하겠습니다.Attention의 함수는 Query에 대해서 Key의 유사도를 구하고, 이 유사도를 가중치로 하여 Key와 맵핑되어 있는 Value를 반영하고 유사도가 반영된 Value의 모든 가중합을 리턴해주는 작업을 의미합니다.

[출처 : https://wikidocs.net/31379 ]

1번째 사진은 Encoder에서 이루워 지지만, 

2번째, 3번째 사진은 Decoder 부분에서 이루어집니다.

 

Self-Attension = Query, Key, Value 모두 동일한 경우를 의미합니다.

2번째 사진까지는 Self-Attention으로 불리며,

3번째는 Encoder-Decoder에서 Query가 Decoder의 벡터이지만

Key, Value가 Encoder의 벡터이므로 모두 같지 않아 Attention으로 분류 됩니다.

 

여기서 Query, Key, Value는 무슨 의미일까요?

Query는 Key, Value를 얻기위한 질문, Key는 Dict의 {'나이': '26'}에서 나이, Value는 '26'의 값이라고 생각하시면 됩니다.

학습 과정에서 이러한 조합의 벡터를 사용하게 됩니다.

 

 

Scaled Dot-Product Attention (Self-Attention) 

간단하게 각 단어들이 다른 단어들과 밀접한 관련이 있는지에 대한 정보를 담고있는 구조를 의미한다.

Scaled Dot-Product Attention 

Q는 영향을 받을 단어, K영향을 주는 단어, V는 영향에 대한 가중치라고 생각하고 공식을 풀어보면

Q와 K의 벡터의 행렬곱 연산을 진행하고, 그 값을 Scaling을 하고 선택적으로 Mask를 진행하고,

Softmax를 거쳐 나온 값을 V벡터 값과 행렬곱을 진행하는 수식을 갖고 있습니다.

 

선택적으로 Mask를 진행하는 이유는 Decoder에서 Attention방식에서 2가지의 방식이 존재하기 때문이며,

시계열 데이터를 정확하게 예측하기 위해 정보를 미리 알려주는 것이 아니고, 순차적으로 데이터를 유추해가며

정보를 얻기위해서 Mask를 사용하여 순서가 되지 않는 데이터의 정보를 숨기는 과정을 거치게 되는것을 의미합니다.

 

수식

 

Multi-Head Attention

Transformer는 여러개의 Head를 통해 Multi-head Attension을 계산하게 됩니다.

Input 값으로 V, K Q를 Linear 계층으로 보내는데 가중치와 편향을 계산하고 이를 각각 Head로 나누고

각각의 Head에서 Scaled Dot-Product Attention 연산을 수행하고 Head에서 실행한 연산을 Concatenation을 진행하고 마지막 Linear Layer에 적용하여 활용하는 것을 의미합니다.

여러개의 Head가 다른 정보들을 학습하고 활용이 가능하고 병렬적으로 빠르게 계산이 가능하여  좋은 성능을 갖고 있습니다.

 

따라서 Transformer의 Encoder부분에 해당하는 부분은

Input에 대한 문장을 Embedding을 수행하고, Positional Encoding에 대한 덧셈, Multi-Head Attention 수행, Feed forward network 연산을 통해 Encoder의 최종 아웃풋의 출력 값을 계산하게 됩니다.

 

 Decoder의 부분은 Teacher Foccing의 방법론을 통하여 출력할 값에 대란 입력을 받고, Embedding과 Positional Encoding을 적용합니다.

그리고 해당 값을 Multi-head-Attention을 수행하는데 이때 Mask를 사용하여 미래 시점의 단어를 계산시에 제시를 해주도록 합니다.

다음으로 두번째 Multi-head-Attention을 진행하는데 K,V를 Encoder의 output으로 지정하고, Q는 Decoder의 이전 Multi-head 넷트워크의 output으로 계산을 진행합니다.

그 결과를 point wise feed forward 네트워크를 사용하여 계산하고, 마지막으로 Softmax Layer를 이용하여

다음에 올 글자나 단어를 예측하도록 합니다.

 

 

오늘은 Transformer에 대해서 간단하게 알아보았습니다.

어렵다 어려워~

반응형