구현과 정리

셀프 어텐션은 코드로 몇 줄일까요?

답

여섯 줄입니다

  1. q = x @ W_q쿼리
  2. k = x @ W_k키
  3. v = x @ W_v값
  4. scores = q @ k.T점수
  5. weights = softmax(scores / √dk)가중치
  6. context = weights @ v문맥 벡터

파이토치 코드를 읽기 쉽게 줄여 쓴 것입니다. 지금까지 본 내용이 한 줄씩 그대로 들어 있습니다.

묶으면

클래스 하나가 부품이 됩니다

넣는 것단어 벡터 여섯 개
↓
부품SelfAttention
↓
나오는 것문맥 벡터 여섯 개

LLM은 이런 부품을 여러 층으로 쌓아서 만듭니다.

구현 방식

W를 만드는 방법이 두 가지입니다

v1
nn.Parameter행렬을 직접 만들어서 곱한다
v2
nn.Linear파이토치의 선형 층에 맡긴다

하는 계산은 같습니다. 다만 nn.Linear는 처음 숫자를 훈련에 유리하게 채워 주기 때문에, 실제로는 v2 방식을 씁니다.

확인

두 버전의 출력이 다른 이유

계산이 달라서가 아니라 처음에 채운 숫자가 달라서입니다.

한쪽의 W를 다른 쪽에 그대로 옮겨 넣으면 두 출력이 똑같아집니다. 두 방식이 같은 계산이라는 것을 이렇게 확인합니다.

4강 정리

여기까지 온 길

  1. 메모 한 장의 한계긴 문장을 벡터 하나에 다 담지 못한다
  2. 어텐션필요한 곳을 비중을 두고 다시 본다
  3. 셀프 어텐션점수, 가중치, 문맥 벡터
  4. 쿼리, 키, 값어디를 볼지 훈련으로 배운다
  5. √dk가중치가 한쪽으로 쏠리지 않게 한다

다음 강의

아직 두 가지가 남았습니다

코잘
코잘 어텐션뒤에 올 단어를 가리고 본다
멀티
멀티 헤드 어텐션어텐션 여러 개를 동시에 돌린다
4강 끝목록으로 돌아가기