17기 김예은
해당 논문은 현대의 딥러닝 기반의 자연어 처리 기술의 핵심이 되고 있으며, 논문의 제목에서도 알 수 있듯이 'Attention'이 메인 아이디어로 사용이 된다. 고려대학교에서 열렸던 'ChatGPT와 함께하는 슬기로운 대학생활 워크숍' 을 다녀오고 현재 우리가 많이 사용하고 있는 ChatGPT에서도 활용되고 있다는 것을 알게 되었고, 어떤 기술인지 이해해보고자 이 논문을 선정하여 리뷰를 진행하게 되었다.
GPT는 Transformer의 디코더(Decorder) 아키텍처를 활용하고 BERT는 Transformer의 인코더(Encorder) 아키텍처를 활용하는 등 최신 고성능 모델들은 Transformer 아키텍처를 기반으로 하는 경우가 대부분이다.
자연어처리 Task 중 가장 대표적이면서 중요한 것은 기계 번역이다.
LSTM 을 활용하여 다양한 sequence 정보를 모델링하기 시작하였고, 이후 주가 예측과 주가 함수예측이 진행되며 2014년 딥러닝 기반 기술로 Seq2Seq가 등장하였다. 이는 고정된 크기의 context vector를 사용하며 번역을 수행하는 방법을 제안하였다. 이 기술은 소스문장을 전부 고정된 크기의 벡터에 압축을 할 필요가 있다는 점에서 전체 성능의 병목현상이 일어날 수 있다는 성능적인 한계가 존재하였다. 이 논문을 계기로 이전의 RNN 자체를 사용하지 않고 오직 Attention 기법에 의존하는 아키텍쳐로 설계하였고 훨씬 좋은 성능이 나타난다는 것을 보이게 된다. 따라서 어텐션 매커니즘이 등장한 이후, 입력 시퀀스 전체에서 정보를 추출하는 방향으로 연구가 진행된다.
-Encoder: 단어들이 입력될 때마다 정보를 저장하는 역할을 하는 hidden state 값이 갱신되며, 마지막 단어가 입력되었을 때의 hidden state 값은 source 문장 전체를 대표하는 context vector의 기능을 할 수 있다.
-Decoder: 출력 단어가 들어올 때마다 context vector 로 부터 hidden state을 만들어 출력하며 출력이 eos(End of sequence)가 나올 때까지 이를 갱신해나간다.
-Encoder: 매번 단어가 출력되어 hidden state가 나올 때마다 별도의 배열에 저장한다.
-Decoder: 현재의 hidden state를 만들 때는 이전의 hidden state 값을 이용해 출력단의 hidden state 값과 소스 문장단의 hidden state 값을 서로 묶어 별도의 행렬곱을 수행하여 각각의 에너지 값(소스 문장 중 어떠한 단어에 초점화할 지를 수치화한 값)을 만들게 된다. 그 후 softmax를 취해 확률값을 구해 소스 문장각각의 hidden state 값에 대한 가중치를 곱하여 각각의 비율에 따라 더한 값인 weighted sum vector 값을 활용한다.
이는 소스 문장에서 출력된 모든 hidden state 값을 반영하였기에 어떠한 단어에 집중하여 출력단어를 만들 것인지 반영되어 모델의 성능을 높일 수 있게 된다.
Attention의 가중치를 통하여 출력이 어떤 입력 정보를 참고했는지 알 수 있으며, 이를 시각화할 수 있다는 장점이 있다.
Transformer는 RNN이나 CNN을 전혀 사용하지 않는 대신, 문장 내 단어 각각의 순서를 알려주기 위하여 Positional Encoding을 사용한다는 특징이 있다.
RNN을 사용하는 경우, 각각의 단어가 RNN에 들어갈 때 자동으로 각각의 hidden state 값이 순서에 대한 정보를 갖는 반면, RNN을 사용하지 않는 Transformer의 경우, 위치에 대한 정보를 주기 위해 임베딩을 사용하고 그 후 Attention을 진행한다.
Attention은 Input Embedding Matrix(입력 문장에 대한 정보)와 Positional Encoding(위치에 대한 정보)이 포함된 입력값을 받는다. 또한, 각각의 단어의 attention score을 구해 단어의 연관성을 찾으며 전반적인 입력 문장에 대한 문맥의 정보를 학습시킨다.
추가적인 성능향상을 위해 잔여 학습(Residual Learning)을 사용하는데 이는 대표적인 이미지 분류 네트워크인 Resnet에서 사용하는 기법으로 특정 레이어를 건너 뛰어 복사된 값을 그대로 넣어주는 기법이다. 이를 통해 추가적으로 잔여된 부분만 학습하도록 하기 때문에 학습 난이도가 낮아 초기 모델 수렴 속도가 높아져 global optimal을 찾을 확률이 높아진다.
Encoder는 Attention을 수행한 값과 Residual Connection을 이용한 값을 같이 받아 Normalization을 수행한 뒤 결과를 도출한다.
Attention과 Normalization을 여러 레이어를 중첩하여 사용하며 반복하여 마지막 인코딩에서 나온 출력값은 decoder에 들어가게 된다. Decoder는 입력 소스 문장 중 어떤 단어에 초점을 둘 지 매번 출력할 때마다 알려준다.
Decoder의 동작 원리
- Output Embedding Matrix(단어 정보)와 Positional Encoding(단어의 상대적 위치 정보)을 추가하여 입력한다.
- 1st Attention: 각각의 단어들이 서로에게 어떤 가중치를 가지는지 구해 전반적인 표현을 학습한다.
-2nd Attention: 인코더의 출력 정보를 받아 각각의 출력되는 단어가 소스 문장에 어떠한 단어와 연관성이 있는지를 구한다.
-RNN을 사용할 때와는 다르게 인코더를 거칠 때마다 병렬적으로 출력값을 구할 수 있어 계산 복잡도가 낮은 경향이 있다.
Attention Value를 구하는 과정
- 쿼리(물어보는 주체)와 단어들이 Key를 이루어 행렬곱을 수행하고 스케일링 한 후 필요시 마스킹이 진행된다. 그 후 SoftMax를 취하여 어떤 단어와 가장 연관성이 높은지를 확률값으로 구하고, value 값을 곱하여 Attention Value를 구한다.
Attention Value 값 자체는 입력되었던 Query, Key, Value와 동일한 차원을 가지며, Mask Matrix를 통해 특정단어는 무시할 수 있도록 한다.
-Multi Head Attention은 각각의 Head에 대해 Attention을 수행하고 W 가중치 값을 활용하여 값을 구할 수 있다.
1) Encorder Self-Attention : 각각의 단어가 서로에게 어떤 연관성을 가지고 있는지를 Attention을 이용하여 구한다.
2) Masked Decoder Self-Attention : 각각의 출력단어가 다른 출력 단어를 참고하지 않으며 등장했던 단어들만 참고한다.
3) Encoder-Decoder Attention : 이는 각각의 Key와 Value는 인코더에, Query는 디코더에 있다.
이는 하나의 문장에 포함된 각각의 단어들에 대한 상대적인 위치 정보를 알려 주기 위해 주기 함수를 활용한 공식을 사용한다. 이외에도 다른 주기성이 있는 함수를 사용해도 가능하다.
Attention is All you Need (neurips.cc)
[딥러닝 기계 번역] Transformer: Attention Is All You Need - https://www.youtube.com/watch?v=AA621UofTUA
댓글 영역