스케일드 점곱 어텐션

점수를 왜 √dk로 나눌까요?

어디에 들어가나

소프트맥스 직전에 한 번 나눕니다

가중치 = softmax( 점수 ÷ √dk )

dk는 키 벡터에 든 숫자의 개수입니다. 예제에서는 2개라서 √2, 약 1.41로 나눕니다.

크기를 조절한다는 뜻의 '스케일드'가 이름에 붙은 이유입니다.

원인

숫자가 많을수록 점곱이 커집니다

점곱은 자리마다 곱해서 전부 더하는 계산입니다. 자리가 3개일 때보다 1,000개일 때 더한 값이 커지기 쉽습니다.

실제 GPT 계열 모델은 단어 하나에 숫자를 수백, 수천 개 씁니다.

결과

점수가 크면 한쪽으로 쏠립니다

점수 1, 2, 3의 소프트맥스
  • 10.09
  • 20.24
  • 30.67
점수 10, 20, 30의 소프트맥스
  • 100.00
  • 200.00
  • 301.00

점수 사이의 비는 같은데, 값이 커지자 한 단어가 전부를 가져갑니다.

왜 문제인가

쏠리면 배우기가 어려워집니다

모델은 숫자를 조금 고쳐 보고 결과가 얼마나 달라지는지를 신호로 삼아 배웁니다. 한 단어가 거의 100%를 가져간 상태에서는 조금 고쳐도 결과가 거의 변하지 않아, 이 신호가 0에 가까워집니다.

이 신호를 그레이디언트라고 부릅니다.

그래서

미리 줄여 둔 결과입니다

  • Your0.15
  • journey0.23
  • starts0.22
  • with0.13
  • one0.09
  • step0.18
journey의 문맥 벡터0.310.82

쿼리, 키, 값을 숫자 2개짜리로 만들어서 문맥 벡터도 2개입니다. 훈련하기 전, 무작위로 채운 W로 계산한 값입니다.

다음 편

개념은 여기까지입니다

9편코드로는 몇 줄일까? 4강 목록