elevne's Study Note

Huggingface 공부 - Transformer (1: Attention Mechanism) 본문

Machine Learning/NLP

Huggingface 공부 - Transformer (1: Attention Mechanism)

elevne 2022. 12. 11. 00:45

Google은 2017년 논문에서 Sequence Modeling을 위한 새로운 Neural Network 아키텍쳐, Transformer를 제안하였고 이는 기존의 RNN을 능가하였다. 이 모델은 오늘날의 GPT, BERT의 기반이 되었다. 두 모델은 Transformer 구조와 비지도학습을 결합하여 작업에 특화된 모델을 밑바닥부터 훈련할 필요를 거의 없애고 거의 모든 NLP Benchmark에서 큰 차이로 기록을 갱신하였다고 한다. 

 

 

 

Transformer 이전에는 RNN 기반 Encoder-Decoder 형태의 Seq2Seq가 많이 사용되었다. RNN은 단어 또는 문자와 같은 입력을 받아 Network를 통과시킨 후 은닉상태라는 벡터를 출력한다. 동시에 출력된 정보를 피드백 루프로 보내 자기자신에 다시 입력한다. 이러한 과정에서 Encoder은 입력 Sequence의 정보를 Last Hidden State라 불리는 수치 표현으로 Encoding하고 이는 Decoder로 전달되어 출력 Sequence가 생성된다.

 

 

위 구조는 Encoder의 마지막 은닉상태가 Information Bottleneck이 된다는 약점이 있다. Decoder은 Encoder의 마지막 은닉 상태만을 참조하여 출력을 만들어야 함으로 여기에 전체 입력 Sequence의 의미가 담겨야 하는데, Sequence가 긴 경우 모든 것을 고정된 하나의 표현으로 압축하는 과정에서 시작 부분의 정보가 손실될 가능성이 있는 것이다.

 

 

 

Seq2Seq

 

 

 

Attention은 입력 Sequence에서 은닉 상태를 만들지 않고 Step마다 Encoder에서 Decoder이 참고할 은닉상태를 출력한다는 주요 개념에 기초한다. 하지만, 모든 상태를 동시에 사용하려면 Decoder에 많은 입력이 발생하므로 어떤 상태를 먼저 사용할지 우선순위를 정하는 메커니즘이 필요한데 여기서 Attention이 사용되는 것이다.

 

 

Decoder은 모든 Decoding Timestep마다 Encoder의 각 상태에 다른 가중치, 또는 Attention을 할당한다. Attention 기반 모델은 Timestep마다 가장 많이 관련된 입력 Token에 초점을 맞추므로 번역 문장에 있는 단어와 원 문장에 있는 단어의 복잡한 정렬 문제를 학습할 수 있는 것이다. 

 

 

 

Attention

 

 

 

Attention으로 기계해독 성능이 향상되기 하였지만 Encoder, Decoder에 사용하는 RNN의 단점은 여전히 존재했다. 계산이 순차적으로 수행되며 입력 Sequence 전체에 걸쳐 병령화될 수 없기 때문이었다.

 

 

 

Transformer은 Modeling의 패러다임을 바꾸었다고 한다. 순환을 모두 없애고 Self-Attention이라는 특별한 형태의 Attention에 전적으로 의지한다. Self-Attention은 간단하게는 신경망의 같은 층에 있는 모든 상태에 대해 Attention을 작동시키는 방식이다. 

 



Transformer 또한 Encoder, Decoder의 구조를 띈다. 아래 이미지와 같은 구조를 가지는 것이다.

 

 

 

 

Transformer

 

 

Transformer에서는 Positional Encoding을 사용하여 Token 위치에 관한 정보를 주입한다. 또, Decoder에서는 층마다 Encoder의 출력이 주입된다. Decoder에서는 Sequence에서 가장 가능성 있는 다음 Token을 예측한다. 이 단계의 출력이 Decoder로 다시 주입되어 다음 Token을 생성하는 것이다. 

 

 

 

Attention Mechanism을 사용하며 신경망이 Sequence의 각 원소에 다른 양의 가중치 또는 Attention을 할당한다. Text Sequence에서 원소는 Token Embedding이다. 각 Token은 고정 차원의 벡터에 매핑된다(e.g., BERT는 768차원 벡터로 표현). 각 Token에 대해 고정된 Embedding을 사용하는 대신, 전체 Sequence를 사용해 각 Embedding의 가중평균을 계산하는 것이 Self-Attention의 기본 개념이라고 한다(Contextualized Embedding을 위해(문맥고려 임베딩)). 여기서 각 Token을 새로운 Embedding Sequence로 변환할 때 사용되는 계수는 Attention-Weight라고 하며 한 Sequence 내에서 이를 모두 더했을 때 1이 되도록 정규화된다.

 

 

 

Self-Attention에서 사용되는 여러 방법 중 Scaled dot-product Attention이 가장 일반적으로 사용된다고 한다. 

 

  • 각 Token Embedding을 쿼리(query), 키(key), 밸류(value) 세 개의 벡터로 투영한다.
  • Attention 점수를 계산한다. 유사도 함수를 사용하여 쿼리 벡터와 키 벡터가 서로 얼마나 관련되는지 계산하는 것. 이는 Embedding의 행렬곱셈을 사용하여 효율적으로 계산된다. 쿼리와 키가 비슷하면 dot-product의 값은 크고, 반대의 경우에는 결과가 작아진다. 이 단계의 출력은 Attention-Score이라고 한다. (n개의 token이 있는 Sequence가 들어오면 nxn 크기의 Attention Map이 만들어지는 것)
  • Attention 가중치를 계산한다. (일반적으로 dot-product는 임의의 큰 수를 만들기 때문에 훈련 과정이 불안정해진다고 한다.) Attention Score에 scaling factor을 곱해 분산을 정규화하고 Softmax 함수를 적용해 모든 열의 값이 1이 되게끔 한다. => 이를 통해 만든 Attention map에는 Attention Weight이 담기게 되는 것
  • Token Embedding을 업데이트 한다. Attention Weight이 계산되면 이를 value 벡터와 곱해서 Embedding을 위해 업데이트 된 표현을 얻는다.

 

 

참고) Query, Key, Value는 정보검색 시스템에서 유래됐다고 한다. 예를 들어 식사에 필요한 재료를 사러 마트에 갔을 때, 필요한 식재료가 쿼리가 된다. 마트 진열대에 붙은 이름표가 키가 되고, 이 키와 필요한 재료(쿼리)가 일치(유사도 함수)하는지 확인한다. 이름표가 일치하면 진열대에서 상품(값)을 꺼낸다. 

더 나아가자면, 모든 상품을 둘러보며 유사도를 측정하여 이를 기반으로 Rank를 만들 수 있다. 이 Rank를 기반으로 각 key들 간의 상대적 유사도를 파악하고 싶다면 각 유사도 점수를 모든 유사도 점수에 대하여 정규화하면 되는 것이다. Query에 대한 답으로는, 모든 Key와의 유사도를 알고 있으므로 Query에 대한 답을 모든 Value의 Weighted Sum(위 예에서는 부적절하긴 한듯..)으로 보여줄 수 있다. 

 

 

 

 

Decoder에서는 Timestep마다 지난 출력과 예측한 현재 Token만 사용하여 Token을 생성한다. 이렇게 하지 않으면 Decoder은 훈련하는 동안 단순히 Target 번역을 복사하는 방식의 부정행위가 가능해진다고 한다. (Mask Matrix 사용)

 

 

또, Encoder-Decoder Attention 층에서는 Decoder의 중간표현을 Query처럼 사용하여 Encoder 스택의 출력 key와 value 벡터에 Multihead Attention을 수행한다고 한다. 이를 통해 Encoder-Decoder Attention 층은 두 개의 다른 Sequence에 있는 Token을 연관짓는 방법을 학습하는 것이다. (Decoder은 각 블록에서 Encoder의 key, value를 참조한다.) 

 

 

 

 

출처:

https://wikidocs.net/31379

https://github.com/eubinecto/k4ji_ai/issues/42