심화세션 - NLP.week4-2

» AI

Attention is all you need

Attention

  • 초기 임베딩은 단순히 단어의 위치와 의미를 표현, 문맥적인 의미는 담고 있지 않음
  • 특히 동음이의어의 경우, 문맥과 상관없이 임베딩을 동일
  • 트랜스포머 모델은 주변 단어들의 임베딩을 바탕으로 단어의 의미를 더욱 구체화하고 문맥적 의미를 학습
  • 잘 훈련된 어텐션 블록은 문맥 함수에 따라 일반 임베딩에 추가해야할 내용을 계산해 특정 방향 중 하나로 이동시킴
  • 각 임베딩은 잘 훈련된 어텐션 블록을 통해 문맥 함수에 따라 특정 방향으로 업데이트되며, 단순히 단어의 의미를 세분화하는 것 이상으로 멀리 떨어진 단어 간의 정보 전달을 가능하게 함
  • 벡터가 네트워크 통과 후 다음 토큰을 예측하기 위해 수행하는 계산, 즉 트랜스포머 모델에서 최종적으로 계산되는 벡터는 시퀀스의 마지막 벡터에 크게 의존
  • 예시: 추리소설의 일부 내용, 마지막 문장(범인은 000이였다)
    • 단어가 포함된 시퀀스의 마지막 벡터는 이전 모든 문장의 정보에 의해 업데이트되어 개별 단어보다 더욱 풍부한 정보를 담고 있어야 함
    • 즉 개별 단어의 의미를 넘어서 전체 문맥을 인코딩하여 예측할 수 있어야 함
  • 예시: “파란색 복실복실한 생물이 숲을 돌아다니고 있다”는 문장
    • 명사는 주변 형용사에게 “내 앞에 형용사가 있나요?”라는 질문을 던짐 -> 이러한 질문이 쿼리(Query)로 인코딩
      • 쿼리 백터는 인코딩 벡터보다 훨씬 작은 크기
    • 형용사는 “나!”라고 대답하는 것이 키(Key) 역할을 함
      • 키는 쿼리에 대한 잠재적 답변
      • 키 행렬은 조정 가능한 매개변수로 가득 차있음
      • 키는 쿼리가 서로 밀접하게 일치할 때 일치
  • 쿼리와 키는 각각 임베딩 벡터를 더 작은 차원 공간에 매핑
  • 쿼리와 키의 내적을 계산하여, 얼마나 관련이 있는지 판단. 이 값이 클수록 쿼리와 키가 관련이 깊음
  • 각 쿼리-키 쌍의 내적값(음의 무한대에서 무한대까지의 값)이 음수거나 엄청 작을 경우 단어끼리 서로 관련이 없다는 뜻
    • 0과 1 사이의 확률 분포 값으로 정규화 = 소프트맥스(Softmax)
  • alt text
    • 큰 점이 키와 쿼리가 정렬되는 위치

Masking

  • 각 구절 초기 토큰 다음에 가능한 모든 다음 토큰을 동시에 예측하도록 하면 전체훈련이 훨씬 효율적
  • 그러나 어텐션 패턴의 경우 뒤 단어가 앞 단어에 영향을 미치면 안 됨
  • 이전 토큰에 영향을 미치는 이후 토큰 0이 되게 하기
    • alt text
    • 그러나 이렇게 하면 열의 합이 더이상 1이 되지 않아 정규화되지 않음
  • 따라서 이후 토큰이 이전 토큰에 영향을 주지 않도록, 소프트맥스를 적용하기 전에 이후 토큰 값을 음의 무한대로 설정 -> 마스킹
  • alt text

Value

  • value matrix를 첫 번째 단어의 임베딩에 곱함 -> value vector -> 두 번째 단어의 임베딩에 곱함
  • value matrix의 각 열에 대해 해당하는 가중치를 곱함
  • value 행렬은 키-쿼리 관계가 얼마나 잘 맞는지에 따라 업데이트되며, 이 값을 기반으로 컨텍스트에 따라 임베딩을 업데이트

Parameter Computation

  • value params = query params + key params가 되게 하는 게 효율적임
  • 쿼리, 키, 밸류 행렬을 계산할 때, 이를 작은 차원 공간으로 매핑한 후 다시 큰 공간으로 변환
    • 큰 임베딩 벡터를 더 작은 공간에 매핑
      • value down matrix
    • 이후 다시 임베딩 공간으로 매핑해 실제 업데이트에 사용하는 벡터 생성
      • value up matrix

Cross Attention

  • 언어를 다른 언어로 변환하거나 텍스트와 음성처럼 서로 다른 데이터 타입을 처리할 때 사용
  • 키 맵과 쿼리 맵이 서로 다른 데이터 세트에서 작동
  • 마스킹 x (이후 단어가 이전 단어에 영향을 미칠 수 있음)

Multi-head Attention

  • 트랜스포머의 핵심 기능 멀티 헤드 어텐션(Multi-head Attention)
    • 여러 개의 어텐션 작업을 병렬로 수행
    • 각 어텐션 헤드는 고유한 쿼리, 키, 밸류 매트릭스를 생성
      • 서로 다른 어텐션 패턴을 생성
      • 서로 다른 밸류 행렬을 가짐
      • 해당하는 어텐션 패턴을 가중치로 사용해 합산
      • 컨텍스트의 각 위치 각 토큰에 대해 모든 헤드가 해당 위치의 임베딩에 추가할 변경 사항 생성
    • 모든 변경사항 합산해서 그 결과를 해당 위치의 원래 임베딩에 추가
    • alt text

Deeper

  • 최종적으로 여러 어텐션 헤드의 결과를 종합하여 출력 임베딩을 생성
  • 이 임베딩은 이후 모델 내의 멀티레이어 퍼셉트론(MLP)을 거침
  • 트랜스포머 모델은 여러 층(layer)으로 이루어져 있음
    • 각 층은 어텐션 메커니즘과 MLP를 반복적으로 수행 -> 점진적으로 더 복잡한 의미를 학습
    • 이 반복 과정은 최종적으로 더 복합적인 문맥 정보를 담는 임베딩을 생성하게 됨

Query, Key, Value?

  • 쿼리(Query)
    • 특정 단어(토큰)가 다른 단어와 연관된 정보를 찾으려는 질문
  • 키(Key)
    • 각 단어(토큰)에 대한 정보(정답 후보)
    • 쿼리가 “너와 관련된 정보는?”이라고 물을 때, 키는 “이게 나의 정보야”라고 대답하는 역할
  • 밸류(Value)
    • 실제로 전달할 정보의 내용
    • 쿼리가 어떤 키에 얼마나 일치하는지 계산된 결과(유사도 점수)를 통해 밸류 값을 가져옴
    • 이 값이 최종적으로 문맥에 따라 업데이트
  • 쿼리와 키 사이의 유사도 계산
    • 쿼리와 키의 내적값으로 계산
    • 쿼리가 키와 얼마나 관련이 있는지를 수치화하는 것
    • 예를 들어, 쿼리와 키가 매우 관련이 있다면, 내적값이 커짐
      • 내적값이 크다는 것은 그만큼 밸류(Value)에 더 많은 가중치가 부여된다는 뜻
  • 가중치 계산
    • 쿼리와 키 사이의 내적값을 바탕으로 소프트맥스(Softmax) 함수를 사용해 각 내적값을 0과 1 사이의 확률 값으로 변환
    • 이를 통해 모델은 어떤 키와 더 밀접한 관련이 있는지를 알 수 있고, 해당 키와 연결된 밸류에 가중치를 부여
  • Value 행렬 생성
    • 각 밸류(Value)는 쿼리와 키의 유사도(내적값)에 비례하여 가중치가 곱해짐
    • 쿼리와 더 잘 맞는 키에 해당하는 밸류는 더 큰 비중으로 반영되고, 덜 관련된 키는 작은 비중으로 반영
  • 쉽게 말하면, 쿼리와 키의 내적값을 통해 키가 쿼리와 얼마나 관련이 있는지를 확인하고, 그 결과로 밸류에 가중치를 부여하여 최종적으로 Value 행렬이 생성