brunch

트랜스포머 모델(Transformer)_1

chatGPT를 위한 NLP 기초 : Transformer1

by 별똥별 shooting star


들어가며

오늘은 자연어 처리의 꽃인 트랜스포머에 대해서 배워보도록 하겠다. 트랜스포머는 RNN과 CNN을 완전히 배제하고 어텐션을 사용해서 처리를 한다. 이는 RNN의 순차적으로 계산하며 고질적인 한계인 기울기 소실을 완전히 해결하지 못한 단점을 극복하기 위한 혁신이다. 트랜스포머를 사용함으로써 병렬 계산을 할 수 있게 되어 성능을 크게 향상해 주었다. 자연어 처리의 성능을 대폭 올려 주어 유명세를 치르고 있는 BERT, GPT3 또한 트랜스포머 기반이다. 이 정도면 트랜스포머를 제대로 공부해야 할 이유가 생겼을 것이라 생각된다. 이제부터 본격적으로 트랜스포머에 대해서 학습해 볼 것인데 트랜스포머라는 개념이 워낙 복잡하고 분량이 많다 보니 3번의 포스팅으로 나눠서 업로드하고자 한다.



1. 트랜스포머

트랜스포머는 순차적으로 계산하는 RNN과 달리 어텐션으로 각 단어들의 상관관계를 구해 병렬적으로 처리를 한다. 밑의 그림을 보면 어딘가 익숙하다는 생각이 들것이다. 바로 seq2seq이다. 큰 틀은 seq2seq의 Encoder-Decoder 구조를 사용한다. 하지만 안에는 다양한 모듈들이 들어있다. 언뜻 보면 Positional Encoding, Muti-Head Attention, Masked Multi-Head Attention, Feed Forward, Add & Norm 등이 눈에 띈다. 그리고 화살표를 자세히 보면 두 입력선이 모두 하나의 시계열 데이터로부터 나오는 것을 볼 수 있다. 이것은 트랜스포머에 가장 핵심이 되는 개념은 Self-Attention이다. 지금부터 그림을 토대로 차근차근 트랜스포머의 구성에 대해서 알아보도록 하겠다.


image.png



2. 트랜스포머의 입력인 Positional Encoding

1) Positional Encoding란?


image.png


위에 빨간 네모 상자에 해당하는 것이 Positional Encoding이다. 이는 입력받을 때 문장에 있는 단어들을 순차적으로 입력받을 때에는 문제가 없었다. 하지만 문장에 있는 모든 단어를 한꺼번에 입력으로 받기 때문에 모델에서 단어의 순서가 뒤죽박죽이 되어 형편없는 모델이 만들어질 수 있다. 그래서 모델에게 어순의 정보를 알려주기 위하여 고안된 것이 Positionl Encoding 즉 임베딩 벡터에 위치 정보를 가진 벡터값을 더하는 것이다. 자세히 보면 아래의 그림과 같이 나타낼 수 있다.


image.png


2) Positional Encoding을 구하는 수식

Positionl Encoding의 벡터값은 아래의 수식으로 정해진다. dmodel은 임베딩 벡터의 차원을 의미, pos는 입력 문장에서의 임베딩 벡터의 위치, i는 임베딩 벡터 내의 차원의 인덱스를 의미한다. 이를 통해 임베딩 행렬과 포지셔널 행렬을 더함으로써 각 단어 벡터에 위치 정보를 더해주는 것이다.


image.png


3) Positional Encoding의 한계

Positional Encoding은 크게 2가지의 방법을 사용한다. 첫 번째는 데이터에 0~1 사이의 label을 붙인다. 0이 첫 번째 단어이며 1이 마지막 단어이다. 이 방법의 한계는 문장 길이에 따라 더해지는 값이 가변적이기 때문에 단어 간의 거리가 일정하지 않다는 것이다. 두 번째 방법은 각 단어에 선형적으로 증가하는 정수를 더하는 것이다. 이를 통해서 단어 간의 거리가 일정해져 첫 번째 방법을 보안해 줄 수 있다. 하지만 범위가 무제한이어서 모델의 값이 매우 커져 일반화하기 어려워질 수 있다는 한계를 가지고 있다.


4) Positional Encoding을 만족하는 조건

Positional Encoding은 다음 네 가지의 조건을 반드시 충족해야 한다. 첫 번째는 각 time step마다 하나의 유일한 encoding 값을 출력해야 한다는 것이다. 두 번째는 서로 다른 길이의 문장에 있어서 두 time step 간 거리는 일정해야 한다는 것이다. 세 번째는 모델에 대한 일반화가 가능해야 한다. 쉽게 말해 순서를 나타내는 값들이 특정 범위 내에 있어야 한다. 네 번째는 하나의 key 값으로 결정되어 항상 같은 고정된 값이 나와야 한다.


5) 다양한 기법들

Positional Encoding뿐만 아니라 Positional Embedding과 Sinusoid Embedding도 존재한다. Positional Embedding은 문장의 길이만큼 Embedding Table의 크기가 커진다. Positional Embedding는 Position에 대한 정보를 담은 Embedding 레이어를 선언하여 위치에 대한 정보를 학습하게 한다. 지금은 간단하게 다양한 기법이 더 있구나 정도만 알고 넘어가면 좋을 것 같다.



3. Self-Attention

입력 Encoding을 알아보았으니 본격적으로 Attention을 활용한 모델 구성에 대해서 알아봐야 한다. 그렇지지만 트랜스포머의 핵심 개념인 Self-Attention를 빼고 넘어갈 수 없다. 트랜스포머를 보다 더 잘 이해를 위해서 이번에는 Self-Attention에 대해서 살펴보도록 하겠다. Self-Attention은 앞서 얘기한 것처럼 트랜스포머의 핵심 개념이다. 원리는 두 입력선이 모두 하나의 시계열 데이터로부터 나온다. 이렇게 되면 하나의 시계열 데이터 내에서의 원소 간 대응관계가 구해진다. 즉, 현재 문장 내의 단어들끼리 서로 유사도를 구한다는 것이다.



마치며

그렇다면 유사도는 어떻게 구해야 하는지 궁금증이 생길 것이다. 이는 다음 장에서 Multi-Head Attention를 다루면서 살펴보면서 설명하도록 하겠다.

keyword
매거진의 이전글seq2seq의 단점을 극복한 Attention