brunch

You can make anything
by writing

C.S.Lewis

by 알바트로스 Feb 25. 2024

LLM의 핵심원리 - Attention 매커니즘

텍스트(text) 데이터는 더이상 연속적인 데이터가 아니다. 

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


RNN 계열의 딥러닝 기반 언어모델(Deep learning based Language Models, DLM)은 순차적으로 입력된 정보를 바탕으로 다음 정보나 sequence(연속 데이터)를 예측하는 구조로 되어있는데, 이러한 방식을 seq2seq(시퀀스 투 시퀀스)라고 한다는 사실을 지난시간에 배웠었죠. 


그런데 아이러니하게도 언어모델이 초거대언어모델(LLM)으로 발전할 수 있었던 것은 이 seq2seq 구조를 과감히 던져버렸기 때문에 가능했습니다. 이게 무슨소리일까요? 이번 시간에는 seq2seq 방식의 한계점과 이를 극복하기 위해 등장한 어텐션 메커니즘(attention mechanism)에 대해 알아봅시다.


1. seq2seq 모델의 한계점 


(출처: 깃허브)


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


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


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


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


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


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


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


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


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



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



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



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


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


다음시간에는 이 어텐션 매커니즘(attention mechanism)이 딥러닝과 자연어처리 영역에서 어떤 혁신을 가져왔는지 그 의의를 살펴보겠습니다. 그리고 본격적으로 이 어테년 매커니즘(attention mechanism)을 파격적으로 적용한 트렌스포머(transformer)에 대해 알아보도록 하시죠.



브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari