Coding study/algorithm

2024-10-18 딥러닝

rwg5565 2024. 10. 18. 11:16

1. 어텐션 메커니즘의 개념

어텐션 메커니즘은 입력 데이터에서 중요한 정보에 가중치를 부여하는 방식입니다. 예를 들어, 문장을 번역할 때 한 단어가 다른 단어보다 더 중요한 경우가 있습니다. 이런 상황에서 모든 단어를 동일하게 처리하지 않고, 중요한 단어에 가중치를 더 부여하는 것이 어텐션입니다.

2. 어텐션 메커니즘의 원리

어텐션은 쿼리(Query), 키(Key), 값(Value) 세 가지 개념을 사용합니다.

  • 쿼리(Query): 현재 단계에서 참고할 정보
  • 키(Key): 입력 데이터의 각 요소를 구별하기 위한 식별자
  • 값(Value): 키와 쿼리의 유사도를 기반으로 반환할 데이터

Transformer와 어텐션

Transformer는 **셀프 어텐션(Self-Attention)**을 기반으로 한 모델로, BERT, GPT와 같은 모델들이 Transformer 구조를 따릅니다.

1) 멀티 헤드 어텐션 (Multi-Head Attention)

  • 여러 개의 어텐션 헤드를 사용해 서로 다른 부분에 집중합니다.
  • 다양한 정보의 패턴을 더 잘 포착할 수 있습니다.

2) 포지셔널 인코딩 (Positional Encoding)

  • 어텐션 메커니즘 자체는 순서 정보를 고려하지 않으므로, 순서 정보를 추가하기 위해 포지셔널 인코딩을 사용합니다.

즉 GPT는 우리가 질문을 하면 맥락을 잡을 수 있다는 말이죠

어텐션 메커니즘은 AI 모델의 정밀도를 높이는 강력한 도구입니다. 특히 Transformer와 같은 구조를 통해 자연어 처리와 컴퓨터 비전 분야에서 큰 성과를 이루었으며, 앞으로도 다양한 분야에 활용될 가능성이 큽니다.

 

이 코드는 입력 3개의 단어가 들어오면 각 단어에 대해 어텐션 스코어, 즉 가중치 뭐가 더 중요한지 계산하고 가중합 벡터를 생성하는 코드 입니다.(GPT가 말을 두서 없이 해도 알아먹는 이유

import numpy as np

# 1. 입력 벡터 (3개의 단어, 4차원 임베딩)
inputs = np.array([
    [1, 0, 1, 0],  # 단어 1
    [0, 2, 0, 2],  # 단어 2
    [1, 1, 1, 1]   # 단어 3
])

# 2. Query, Key, Value 가중치 행렬 초기화 (4차원 -> 4차원 매핑)
W_q = np.random.rand(4, 4)
W_k = np.random.rand(4, 4)
W_v = np.random.rand(4, 4)

# 3. Query, Key, Value 계산
queries = np.dot(inputs, W_q)  # (3x4) * (4x4) = (3x4)
keys = np.dot(inputs, W_k)      # (3x4) * (4x4) = (3x4)
values = np.dot(inputs, W_v)    # (3x4) * (4x4) = (3x4)

# 4. 어텐션 스코어 계산 (쿼리와 키의 점곱)
attention_scores = np.dot(queries, keys.T)  # (3x4) * (4x3) = (3x3)

# 5. 스코어 정규화 (Softmax 함수)
def softmax(x):
    exp_x = np.exp(x - np.max(x))
    return exp_x / exp_x.sum(axis=-1, keepdims=True)

attention_weights = softmax(attention_scores)  # (3x3)

# 6. 가중합 계산 (어텐션 가중치 * Value)
weighted_sum = np.dot(attention_weights, values)  # (3x3) * (3x4) = (3x4)

# 결과 출력
print("어텐션 가중치:\n", attention_weights)
print("가중합 벡터 (최종 출력):\n", weighted_sum)

 

 

  • 입력 벡터: 3개의 단어를 4차원 임베딩으로 표현합니다.
  • Query, Key, Value 계산: 각 단어의 임베딩을 쿼리, 키, 값으로 변환합니다.
  • 어텐션 스코어 계산: 각 단어 쌍 간의 유사도를 구하기 위해 쿼리와 키의 점곱(dot product)을 사용합니다.
  • Softmax 정규화: 어텐션 스코어를 확률 분포로 변환합니다.
  • 가중합 계산: 어텐션 가중치와 값(Value)을 곱해 최종 가중합 벡터를 구합니다.

결론

이 코드는 Self-Attention의 기본적인 작동 원리를 보여줍니다. 각 입력 벡터(단어)가 다른 입력들과 얼마나 관련이 있는지를 계산해, 그에 따라 가중합 벡터를 생성합니다. 이런 메커니즘을 Transformer 모델 등에서 사용하여 문장 내에서 중요한 정보에 집중하게 합니다.

 

 

실무에선 구글 번역에서 Transformer 기반 모델을 사용합니다. 예를 들어 i'm going to the shop이라는 문장을 나는 가게에 간다로 번역할 때, 각 단어가 번역될 때마다 대응되는 단어에 집중합니다.

실제 동작:

  • "I"는 "나는"에, "shop"는 "가게"에 어텐션을 집중하여 번역합니다. 이 덕분에 문장 전체 문맥을 이해하고 자연스러운 번역이 가능합니다. (아~~ 내가 밥먹고 뭐시기뭐시기 친구만나서 카페갔다가~ 있지~ 지금 가게에 왔거든~ 근데 여기 가게는 뭐가유명해~? 라고 질문을 하면 GPT는 문맥을 파악하고 가게를 서치하여 필요한 정보를 제공합니다)

 

'Coding study > algorithm' 카테고리의 다른 글

2024-10-15 programmers 입문 문제 풀이  (2) 2024.10.15
2024-10-14 Algorithm 개념 study  (0) 2024.10.14