본문 바로가기
AI · 인공지능/AI 칼럼

ChatGPT 등 수많은 고성능 AI를 낳은 구조 「Attention」 에 대한 상세한 해설 영상

by 두우우부 2024. 4. 17.
반응형

 
 
다양한 수학적 주제를 영상으로 해설하는 사이트  「3Blue1Brown」 에서, ChatGPT로 대표되는 AI를 형성하고 있는 「Transformer」 구조의 심장부인  「Attention 에 대해 해설하고 있습니다.

3Blue1Brown - Visualizing Attention, a Transformer's Heart | Chapter 6, Deep Learning

 

3Blue1Brown - Visualizing Attention, a Transformer's Heart | Chapter 6, Deep Learning

Demystifying attention, the key mechanism inside transformers and LLMs.

www.3blue1brown.com



AI의 몸체라고도 할 수 있는 대규모 언어 모델의 베이스는  「문장을 읽고 다음에 이어질 단어를 예측한다」 라는 것입니다.



문장은 「토큰」 이라는 단위로 분해되어 대규모 언어 모델에서는 이 토큰 단위로 처리를 실시합니다. 실제로는 1 단어마다 1 토큰인 것은 아닙니다만, 3Blue1Brown는 단순화해 「1 단어당 1 토큰」 으로 해설하고 있습니다.



대규모 언어 모델은 먼저 각 토큰을 고차원 벡터로 변환합니다.



이 행위를 임베딩(Embedding)이라고 합니다. 굳이 한국말로 번역하자면 '끼워넣기(심기)' 정도가 되겠습니다.



고차원 벡터 공간의 일면을 살펴보면, '딸 - 아들'과 '여성 - 남성'이 비슷한 벡터를 갖도록 다양한 의미의 연관이 이루어지고 있습니다.



그러나 같은 단어라도 상황에 따라 다른 의미를 나타내는 경우가 있어, 각각의 단어만을 바탕으로 적절하게 임베딩하는 것은 어렵습니다. Transformer의 역할은 주변 문맥을 사용하여 단어의 적절한 의미를 포함시키는 것입니다.



간단한 임베딩은 단순한 변환 테이블이기 때문에 "mole"이라는 동일한 단어라면 동일한 고차원 벡터와 연관 짓게 됩니다.



여기서 등장하는 어텐션은 주위의 단어와의 연관 정도를 계산해 적절하게 벡터를 조정해 주었으면 하는 것입니다.



그렇게 하면 같은 단어 하나라도 주변 컨텍스트를 바탕으로 적절한 벡터를 생성할 수 있습니다.



명확하게 의미가 나뉘어 있는 단어의 벡터를 조정하는 것 외에, '탑'과 '에펠탑'과 같이 모호한 의미의 벡터를 보다 구체적인 의미의 벡터로 조정하는 것도 어텐션의 일입니다.



어텐션은 다른 단어의 임베딩으로서 인코딩 된 정보를 끌어와서 단어의 임베딩을 조정할 수 있는 것입니다.



경우에 따라서는 매우 먼 위치의 단어에서 의미를 끌어오기도 하고, 한 단어로서는 꽤 많은 정보를 담아 넣을 수도 있습니다.



많은 다른 어텐션 블록을 포함하는 네트워크를 대량의 벡터가 흐르고 나서, 「다음 단어를 예측하는 일」 을 하는 것은 시퀀스의 마지막 벡터의 함수입니다.



예를 들어, 추리 소설의 거의 전체 텍스트를 입력하고 마지막 "therefore, the murderer was(따라서 범인은)"의 다음을 예측하는 작업의 경우에는, 마지막 토큰인 "was"를 포함한 벡터는 모든 어텐션 블록에 의해 갱신되어 매우 많은 정보를 갖도록 할 필요가 있는 것입니다.



이때, 1회의 입력인 문맥 윈도 내의 관련된 모든 정보를 어떻게든 임베딩할 필요가 있습니다.



어텐션이 해야 할 일에 대해 파악한 후, 간단한 예를 바탕으로 어떻게 계산할지를 고민해 나갑니다. 여기서는 「형용사+명사」 형태일 때, 명사의 벡터를 형용사 내용을 베이스로 갱신하는 방법을 고려합니다.



이 간단한 예에서는 'Multi-headed attention'이 아니라 1장 분량인 'Single head of attention'의 계산을 확인합니다.



앞서 확인한 것처럼 각 단어는 먼저 컨텍스트와 관련 없는 대응표를 기반으로 벡터화됩니다.



다만, 이 표현은 정확하지 않고, 실제로는 단어뿐만 아니라 위치 정보도 포함해 벡터화된다고 합니다.

 
 
여기서 생성된 벡터를 'E'로 표현하기로 합시다. 이번 예에서는 「E2」 나 「E3」 등의 형용사의 의미를 받아들인 새로운 「E4」를 생성하는 것이 목표입니다.

반응형


또한, E4'의 계산에 있어서는 「행렬과 벡터의 곱」 의 형태로 계산을 실시하려 합니다. 딥 러닝의 세계에서 행렬의 파라미터는 데이터를 바탕으로 트레이닝 가능하기 때문입니다.



덧붙여, 실제 딥 러닝의 움직임은 복잡하여 해석이 어렵기 때문에, 3Blue1Brown은 「형용사의 벡터를 바탕으로 명사의 벡터를 갱신한다」 라는 쉬운 예를 사용합니다.



최초의 스텝에서는 명사가 「내 앞에 형용사 있어?」 라고 물어보고, 형용사들이 「있어!」 라고 답하는 구조입니다.



명사의 질문은 "Query(쿼리)"라는 벡터로 인코딩 됩니다. 이 쿼리는 128차원처럼 단어의 내장 벡터와 비교하면 상당히 적은 차원의 수입니다.



쿼리 계산은 아래 그림과 같이 "W_Q"로 표시되는 행렬과 "E4"의 곱을 취하여 수행됩니다.



이와 같이, 행렬과의 곱을 취해 벡터를 갱신하는 조작을 화살표로 표현하면 아래 그림과 같이 됩니다. 아래 그림에서 각 토큰이 포함된 'E' 벡터는 'W_Q'에 의해 토큰당 하나의 'Q' 벡터로 변환됩니다.



W_Q는 트레이닝에 의해 조정되는 파라미터이며, 실제 동작을 해석하는 것은 어렵지만, 알기 쉽게 하기 위해 명사의 토큰이 임베딩된 벡터를  「내 앞에 형용사 있니?」 라는 질문을 의미하는 벡터로 변환하고 있다고 보입니다.



여기서 W_Q를 사용하여 토큰별로 Q 벡터를 생성한 것처럼 W_k를 사용하여 토큰별로 K 벡터를 생성합니다. K는 Key 벡터라고 합니다.



개념적으로 각 K 벡터는 Q 벡터의 질문에 대답하는 것으로 생각할 수 있습니다.



W_k는 W_Q와 마찬가지로 훈련 가능한 매개 변수의 행렬이며 각 토큰의 포함 벡터를 작은 차원의 Query / Key 공간에 매핑합니다.

 

Key가 질문인 쿼리에 반응하는지 여부는 Q 벡터와 K 벡터가 비슷한 벡터가 되는지 여부로 판단합니다.



이 유사도는 각 벡터의 내적(dot product)을 취하여 계산할 수 있습니다.



이번 경우, Q4와 K2 · K3, Q8과 K7이 비슷한 벡터가 되어 있다는 것을 알 수 있습니다.



"fluffy", "blue"라는 형용사의 포함이 creature라는 명사와 밀접하게 관련되어 있음을 나타냅니다.



한편, 전혀 관련이 없는 'the'의 K 벡터와 'creature'의 Q 벡터의 내적(dot product)은 매우 작습니다.



그리드의 모든 값을 계산하면 각 프레임에 음의 무한대에서 양의 무한대까지의 숫자가 입력됩니다.



그러나 각 단어와의 상대적인 관련 정도를 얻기 위해 어떤 실수가 아닌 합계가 1이 되는 가중치와 같은 형식으로 변환하고 싶게 마련입니다.



그래서 softmax 함수를 사용하여 정규화합니다.



정규화 후는 아래 그림과 같은 수치가 되었습니다.



이 그리드를 "Attention Pattern"이라고 합니다.



Attention의 논문인 「Attention Is All You Need」 에서는 이 일련의 계산을 하나의 식으로 기술하고 있습니다.



Q와 K는 위에서 설명한 Q 벡터와 K 벡터의 배열을 나타냅니다.



따라서 "QK^T"는 각각의 Q 벡터와 K 벡터의 내적을 취한 것입니다.



또한, 수치적으로 안정시키기 위해서 각각의 계산 결과를 차원수의 제곱근으로 나눕니다.



그리고 softmax를 적용하여 정규화합니다.



영상에서는, 마지막 「V」 가 도대체 무엇인가에 대해서나, 어텐션의 성능을 향상하는 다양한 대처, 멀티 헤드 어텐션 등에 대해서도 해설하고 있습니다.



그 외, 3Blue1Brown에서는 Transformer의 어텐션 이외의 해설 영상 등도 공개되어 있으므로, 궁금하신 분은 확인해 보세요~

반응형