스케일드 점곱 어텐션
점수를 왜 √dk로 나눌까요?
어디에 들어가나
소프트맥스 직전에 한 번 나눕니다
가중치 = softmax( 점수 ÷ √dk )
dk는 키 벡터에 든 숫자의 개수입니다. 예제에서는 2개라서 √2, 약 1.41로 나눕니다.
크기를 조절한다는 뜻의 '스케일드'가 이름에 붙은 이유입니다.
원인
숫자가 많을수록 점곱이 커집니다
점곱은 자리마다 곱해서 전부 더하는 계산입니다. 자리가 3개일 때보다 1,000개일 때 더한 값이 커지기 쉽습니다.
실제 GPT 계열 모델은 단어 하나에 숫자를 수백, 수천 개 씁니다.
결과
점수가 크면 한쪽으로 쏠립니다
점수 1, 2, 3의 소프트맥스
점수 10, 20, 30의 소프트맥스
점수 사이의 비는 같은데, 값이 커지자 한 단어가 전부를 가져갑니다.
왜 문제인가
쏠리면 배우기가 어려워집니다
모델은 숫자를 조금 고쳐 보고 결과가 얼마나 달라지는지를 신호로 삼아 배웁니다. 한 단어가 거의 100%를 가져간 상태에서는 조금 고쳐도 결과가 거의 변하지 않아, 이 신호가 0에 가까워집니다.
이 신호를 그레이디언트라고 부릅니다.
그래서
미리 줄여 둔 결과입니다
journey의 문맥 벡터0.310.82
쿼리, 키, 값을 숫자 2개짜리로 만들어서 문맥 벡터도 2개입니다. 훈련하기 전, 무작위로 채운 W로 계산한 값입니다.
다음 편