Transformer - Attention

이수진·2025년 10월 26일
0

attention 메커니즘

  • 문맥에 따라 단어는 각각 다른 의미를 가지게 됨
  1. 각 단어를 임베딩 스페이스로 보냄 (각 단어는 각각 문맥적인 의미는 갖지 않음)
  2. 임베딩 스페이스로 옮긴 뒤, 각각의 문맥적인 의미를 파악하게 됨
    • 문맥을 통해 단어 A를 실제 의미로 어디로 얼마나 움직여야 하는지 파악!
  3. 모든 벡터가 네트워크를 통해서 여러 Attention 블록을 거침
  4. 최종적으로 마지막 단어를 예측하는건 마지막 벡터 (Output)

Attention의 쿼리


Query Vector

  • 질문이 쿼리라는 다른 벡터로 인코딩 되어 질문한다고 생각하면 됨
  • 쿼리벡터는 임베딩벡터보다 차원이 조금 작음(128차원)
  • 모든 토큰(E)에 W_Q를 곱해서 쿼리벡터(Q)를 생성함
  • W는 가중치, 임베딩스페이스에 있는 단어 토큰을 쿼리 스페이스로 매핑하는 역할

Key Vector

  • 질문(Q)에 대한 답을 찾는 도구 역할을 하는 벡터
  • 훈련 가능한 파라미터(W_K)로 이루어져 있고, 임베딩 스페이스에 있는 단어 토큰을 키 스페이스로 매핑하는 역할을 함

  • 쿼리와 키의 벡터가 비슷할 때 둘이 일치한다고 볼 수 있음
    - 각 키가 각 쿼리랑 얼마나 비슷한지 (잘 맞는지) 확인하기 위해 내적을 확인함

    - 여기서 이 맵을 Attention Map이라고 한다.
    - 내적이 클수록 비슷하다고 볼 수 있음(원의 크기)
    • fluffy, blue는 creature와 비슷한 위치에 있음을 알 수 있음 (형용사)
      - 이 점수를 가지고 열에 대해서 가중치를 구해 합계를 구할 수 있음!!
    • 이 가중치가 0~1까지 확률 분포로 나타났음 좋겠다 -> softmax 함수를 통해 확률분포로 변환!
    • 다음과 같이 식으로 정리할 수 있음

Transformer를 훈련할 때 병렬적으로 훈련한다.
하나의 문장에서 여러개의 훈련 데이터를 만들 때 뒤에 오는 토큰이 앞에 오는 토큰에 영향을 주지 않게 하기 위해 병렬적 훈련을 진행한다.

Value Vector

  • value vector에 fluffy라는 단어를 곱해줌 -> 이 결과를 value라고 한다.
  • 이후에 뒤에 오는 단어에 value를 더해주면 creature라는 단어의 의미가 변하게 됨!
  • 더 앞에 있는 단어의 value를 다시 creature라는 단어에 더 더해주면 의미가 또 변하게 됨!
  • key값은 지금 fluffy와 blue에 가중치가 더 높게 나옴 -> 이 때 이 값들에 W_V(value Matrix)를 곱하고 더해주면 E의 변화량이 나오게 됨
  • 원래 있던 E값에 이 변화량을 더해주면 새로운 의미가 변화된 creature가 나오게 된다.
  • 이걸 모든 임베딩 벡터에 대해서 전부 계산하면 Attention block을 통과하면 의미를 더 잘 담은 문장이 나오게 됨 -> 단일 헤드 어텐션이라고 부른다.

최종 파라미터 (가중치 매트릭스)

멀티 헤드 어텐션

하나의 value matrix를 사용하는 것이 아니고, 전체 행렬을 2개로 쪼갠 다음 여러 의미의 방향을 선형적으로 더한 것

  • 여러 개의 병렬 작업을 동시에 수행 (어텐션 헤드가 여러 개)
  • N개의 서로 다른 키와 쿼리, N개의 서로 다른 어텐션 패턴, 어텐션 맵이 생성된다는 뜻
  • 각각의 헤드는 고유 Value Matrix가 있고, 고유 Value sequence를 가지고 있음
  • 각각의 어텐션 맵에 따라 가중치로 곱해지게 됨
  • 이 방향을 전부 더해서 결과를 원래 임베딩(단어)에 더해주는 것
  • 다양한 방법을 통해 문맥에 따라 의미가 어떻게 달라지는지를 알게 되는 것

Cross Attention

  • 두개의 다른 데이터로 처리할 때 사용
  • 다른 언어로 번역할때, 음성을 문자로 변형할 때 등등

Self Attention과 다른 점
키와 쿼리를 곱하는 매트릭스에서 각각 다른 언어를 곱한다는 점이 차이점

  • 각각의 단어가 어떤 단어에 대응되는지를 확인함
  • 이 때 마스킹 하지 않음 (다른 단어가 앞 단어에 영향을 주는 경우가 없음)
profile
뇽안

0개의 댓글