brunch

You can make anything
by writing

C.S.Lewis

by 알바트로스 Sep 25. 2023

LLM과 자연어처리의 역사(4)

어텐션 메커니즘은 어떻게 자연어처리를 혁신했을까?

  자연어를 구성하는 텍스트 데이터는 단어의 위치에 따라 문맥과 의미가 전혀 달라진다는 점에서 날씨, 주가, 분기별 매출 등과 같이 연속 데이터(sequential data)의 성격을 띈다. 이러한 자연어의 특성을 충분히 반영하기 위해 자연어처리(NLP) 태스크에는 주로 RNN 계열의 모델(Vanilla RNN, LSTM, GRU)를 사용한다는 것을 지난시간(LLM과 자연어처리의 역사(3))에서 배웠었다.


   RNN 계열의 딥러닝 기반 언어모델(Deep learning based Language Models, DLM)은 순차적으로 입력된 정보를 바탕으로 다음 정보나 sequence(연속 데이터)를 예측하는 구조로 되어있는데, 이러한 방식을 seq2seq(시퀀스 투 시퀀스)라고 한다. 이번시간에는 seq2seq 구조를 분해하여 자세히 뜯어보고 작동원리를 이해한 후에 seq2seq 방식의 한계점과 그것을 극복하기 위해 등장한 어텐션 메커니즘(attention mechanism)에 대해 알아보도록 하자.


1.seq2seq 모델이란?


  seq2seq 구조를 따르는 모델은 주로 문장을 입력하는 인코더(encoder)와 출력하는 디코더(decoder) 두가지 부분으로 이루어져 있는데, 이러한 인코더-디코더 구조는 현재 SoTA(State-of-The-Art) 모델로 일컬어지는 GPT-4.0을 비롯한 초거대언어모델(LLM)의 뼈대가 되는 트랜스포머(Transformer) 계열 모델의 기본구조로 이어지고 있으므로 기억해 두는 것이 좋다. seq2seq 구조를 구성하는 핵심 요소는 크게 문맥 벡터(context vector), 인코더(encoder) 그리고 디코더(decoder) 세가지가 있는데 그 역할은 다음과 같다.

     

출처 : https://github.com/ndb796/Deep-Learning-Paper-Review-and-Practice

문맥 벡터(context vector)는 seq2seq 모델에서 핵심적인 요소로, 인코더가 입력 시퀀스를 처리하고 생성하는 고정 길이의 벡터이다. 문맥(Context)이라는      단어에서 유추할 수 있듯이 이 벡터는 입력 시퀀스의 정보를 압축적으로 담고 있다. (참고로 뒤의 어텐션 메커니즘에서 다루게 될 문맥 벡터와는      다르게 seq2seq의 문맥 벡터는 인코더의 마지막 hidden state만을 가리킨다.)

인코더(encoder)는 입력 시퀀스(예: 원문 문장)를 받아들여 내부 상태를 업데이트하고 문맥 벡터(context vector)를 생성하는 역할을      한다.

디코더(decoder)는 인코더를 통해 생성된 문맥 벡터(context vector)를 초기 상태로 사용하여 출력 시퀀스(예: 번역된 문장)를      생성하는 역할을 한다.


2.seq2seq 모델의 한계점


출처 : https://github.com/ndb796/Deep-Learning-Paper-Review-and-Practice


  Seq2Seq 모델의 주요 한계점 중 하나는 긴 입력 시퀀스를 처리할 때 모든 정보를 고정 길이의 문맥 벡터에 압축해야 한다는 것인데, 이로 인해 정보의 손실이 발생할 수 있다. 예를 들어 문맥 벡터의 차원이 3차원으로 작을 때에는(I love you 처럼 문장이 3개의 단어로 이루어져 있을 때) 문장 전체의 문맥 정보를 문맥 벡터에 함축하는 데에 큰 문제가 없지만, 벡터의 차원이 매우 커지는 경우 문맥 벡터의 정보가 손실될 수밖에 없는 문제가 발생한다. 이러한 이유로 지난시간에 살펴보았던 RNN 단어의 배열이 길어지면 정보가 소실되는 기울기 소실(gradient vanishing) 문제가 발생하는 것이다.


3.어텐션(attention mechanism)의 등장


  어텐션 즉 ‘주목하다’는 단어에서 유추할 수 있듯이 어텐션(attention mechanism)의 핵심은 문장 내에서 주요한 단어나 구문에 집중하여 더 많은 정보를 얻어오는 것이다. 기존 seq2seq 방식의 문맥 벡터는 고정된 크기의 벡터에 문장속의 모든 정보를 담으려 했기 때문에 정보 손실이 발생할 수밖에 없었다.


  어텐션 메커니즘은 기존의 고정된 길이의 문맥 벡터를 사용하는 대신, 디코더가 출력을 생성할 때마다 입력 시퀀스의 모든 단어에 대해 어떤 단어에 더 많은 주의를 기울여야 할지 동적으로 결정하는 방식으로 작동한다. 어텐션 메커니즘은 문장속 모든 단어에 대해 집중해야 할 정도를 계산하고 0과 1사이의 숫자로 표현한다. 덕분에 기존에 seq2seq 방식을 사용하던 모델에 긴 문장의 경우에는 정보 손실이 불가피하다는 문제점을 크게 개선할 수 있었다.


출처 : attention is all you need(논문)

기본적으로 어텐션 메커니즘은 디코더가 출력의 각 단계에서 어떤 입력 단어를 중점적으로 보아야 할지의 가중치를 계산한다. 디코더의 현재 상태와 인코더의 모든 상태를 비교하여 이 가중치를 계산하고, 이를 바탕으로 "주의를 기울인" 문맥 벡터를 생성한다. 이 새로운 문맥 벡터는 디코더의 현재 상태와 결합되어 출력 단어를 예측하는데 사용된다. 어텐션 메커니즘을 통해 새로운 방식으로 문맥 벡터를 구하는 구체적인 방법을 공부해보자.


4.어텐션(attention mechanism)의 작동원리


어텐션의 작동원리를 이해하기 위해 가장 기본이 되는 어텐션인 Dot Product Attention(Luong Attention)의 계산 방법을 알아보자. 기본적인 attention mechanism의 작동 원리는 다음과 같다.


1.  Hidden states 계산 : 각 입력 시퀀스 위치에 대한 인코더의 hidden states를 계산한다.

출처 : https://blog.floydhub.com/attention-mechanism/

2.  Attention Scores 계산 : 디코더의 현재 hidden state와 인코더의 모든 hidden states 간의 유사성을 계산한다. 이 유사성 점수는 주로 내적(dot product)이나 다른 유사성 메트릭을 사용하여 계산된다. 이렇게 계산된 점수를 attention scores라고 한다.


출처 : https://blog.floydhub.com/attention-mechanism/

 

3.  Softmax를 통한 정규화 : Attention scores에 softmax 함수를 적용하여 normalized attention weights를 얻다. 이 가중치들은 0과 1 사이의 값으로, 모든 가중치의 합은 1이 된다. 이는 디코더의 현재 시점에서 입력 시퀀스의 각 위치에 얼마나 "주의"를 기울여야 하는지를 나타내는 확률분포다.


출처 : https://blog.floydhub.com/attention-mechanism/

 

4.  Context Vector 계산 : 위에서 구했던 normalized attention weights와 인코더의 hidden states를 사용하여 가중 평균을 계산한다. 이렇게 나오게된 결과물이 바로 문맥 벡터(context vector)이다. seq2seq에도 문맥 벡터라는 개념이 등장했지만, seq2seq에서 말하는 문맥 벡터는 인코더의 마지막 hidden state만을 가리키는 것과는 다르게, 디코더의 현재 시점에서 가장 관련 있는 입력 정보를 반영한다.


출처 : https://blog.floydhub.com/attention-mechanism/

 

5.  디코더에 문맥 벡터 전달: 문맥 벡터는 디코더의 현재 hidden state와 결합된다. 이렇게 결합된 정보는 디코더에서 다음 출력 단어나 토큰을 예측하는 데 사용된다.


출처 : https://blog.floydhub.com/attention-mechanism/


즉, attention mechanism의 핵심은 디코더가 출력 시퀀스의 각 위치에서 입력 시퀀스의 어떤 부분에 주목해야 할지를 동적으로 결정하게 해준다는 점이다. 이를 통해 긴 입력 시퀀스에서도 중요한 정보를 유지하고, 출력 시퀀스의 각 부분이 입력 시퀀스의 특정 부분에 직접적으로 "주목"할 수 있게 된다.


5. 어텐션(attention mechanism)의 의의


  이번 시간에 살펴보았듯이 어텐션 메커니즘의 도입으로 인해, seq2seq 모델은 긴 입력 시퀀스에서도 정보 손실 없이 효과적으로 작동할 수 있게 되었다. 특히, 복잡하고 긴 문장도 해당 문장의 중요한 부분을 정확하게 집중하여 번역이나 요약과 같은 작업을 수행할 수 있게 되었다는 점에서 그 의의가 크다.


  뿐만 아니라 어텐션 메커니즘은 2017년 구글이 발표한 ‘attention is all you need’라는 논문의 주요 개념이 되면서 초거대언어모델(LLM)을 비롯한 SoTA 모델들의 비약적인 성능 향상을 이루어내는 발판이 되기도 하였다. 구글의 엔지니어들은 기존의 복잡한 RNN기반의 딥러닝 언어모델의 거품을 걷어내고 seq2seq 모델에서 탈피하여 오롯이 어텐션 메커니즘만을 사용하자는 과감한 시도끝에 영어 - 독일어 기계번역에서 믿을 수 없는 성능향상을 이루어냈다.


출처 : attention is all you need


  이처럼 어텐션 메커니즘은 트랜스포머(Transformer) 구조의 핵심 동작 원리로, 기존의 인코더-디코더 구조를 그대로 답습하여 이후의 BERT, GPT와 같은 초거대 언어 모델들을 탄생시키기도 했다. 일례로 감정 분석(sentiment analysis)와 문장 분류(classification) 등 다양한 자연어처리 태스크에서 좋은 성능을 보여준 것으로 유명한 버트 (Bidirectional Encoder Representations form Transformer, BERT)는 트랜스포머의 인코더를 여러겹 쌓아올린 후 태스크 용도에 맞게 미세조정(fine-tune)하는 방식으로 작동하는 모델이다.


  마찬가지로 최근 화제가 되고있는 챗GPT 역시 어텐션 메커니즘을 적용한 트랜스포머의 디코더를 활용한 GPT(Generative pre-trained Transformer)에 방대한 양의 데이터를 사전학습 시킨 GPT-3.5와 GPT-4.0을 기반으로 하는 모델에 지나지 않는다. 어텐션 메커니즘은 모델의 거대화에도 지대한 영향을 미치기도 했는데, RNN이나 LSTM의 순환적인 구조와 달리 병렬 처리가 가능하므로, 학습 속도나 추론 속도 면에서도 큰 이점을 가지게 되었다. 이러한 특성 덕분에 대량의 데이터를 빠르게 처리하며 효과적인 학습이 가능해졌기 때문이다. 따라서 어텐션 메커니즘의 등장은 현대 자연어처리의 새로운 시대를 열어준 획기적인 발전이라고 할 수 있다.


매거진의 이전글 OpenAI는 어쩌다 ClosedAI가 됐을까?
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari