스케일드 점곱 어텐션
점수를 왜 √dk로 나눌까요?
dk는 벡터에 든 숫자의 개수입니다. √는 제곱근으로, √2는 두 번 곱하면 2가 되는 수(약 1.41)입니다.
어디에 들어가나
소프트맥스 직전에 한 번 나눕니다
dk는 키 벡터에 든 숫자의 개수입니다. 예제에서는 2개라서 √2, 약 1.41로 나눕니다.
크기를 조절한다는 뜻의 '스케일드'가 이름에 붙은 이유입니다.
원인
숫자가 많을수록 점곱이 커집니다
점곱은 자리마다 곱해서 전부 더합니다. 그림은 모든 자리가 0.5 × 0.5일 때입니다. 실제 GPT 계열 모델은 단어 하나에 숫자를 수백, 수천 개 씁니다.
결과
점수가 크면 한쪽으로 쏠립니다
점수 사이의 비는 그대로인데, 값이 커지자 한 단어가 전부를 가져갑니다.
왜 문제인가
쏠리면 배우기가 어려워집니다
가로는 점수 차이, 세로는 한 단어의 가중치입니다. 가운데에서는 점수를 조금만 바꿔도 가중치가 달라지지만, 100%에 붙은 평평한 끝에서는 변하지 않습니다. 그래서 어느 쪽으로 고쳐야 할지 알 수 없습니다.
모델은 조금 바꿨을 때 변하는 정도를 보고 배웁니다. 이 변하는 정도를 그레이디언트라고 부릅니다. 5편의 곡선은 합으로 나누기 전이라 계속 올라갔고, 이 곡선은 나눈 뒤의 가중치라 100%에서 멈춥니다.
그래서
미리 줄여 둡니다
실제 벡터는 양수와 음수가 섞여 있어 곱한 값끼리 서로 지워집니다. 그래서 점곱은 dk만큼이 아니라 대략 √dk만큼만 커지고, 그만큼만 나눕니다.
예제는 dk가 2라서 차이가 작습니다. 숫자가 많은 실제 모델일수록 효과가 커집니다.
무작위로 채운 W를 거친 값이라 5편, 6편의 숫자와 다릅니다.
다음 편