AI 해부교실 · Part 5 어텐션 완전 정복
48장 나누고 소프트맥스
Q. 관련도 점수를 그대로 소프트맥스하면 안 될까요? 왜 굳이 한 번 나눌까요?
- 47장에서 '간다'가 매긴 점수는 2, −1, 3, 1이었어요. 어? 14장에서 본 점수 3, 2, 1, −1과 같은 숫자들이네요.
- 그대로 소프트맥스를 하면 14장과 똑같이 나와요. 학교에 65.7%, 나는 24.2%, 간다 8.9%, 오늘 1.2%.
- 그런데 어텐션은 그 전에 한 단계를 더 해요. 점수를 √d로 나눠요. d는 Q, K 벡터의 칸 수예요.
- 우리 예시는 2칸이라 √2, 약 1.41로 나눠요. 2는 1.41, −1은 −0.71, 3은 2.12, 1은 0.71이 돼요.
- 나눈 점수로 소프트맥스를 하면 학교에 55.7%, 나는 27.5%, 간다 13.5%, 오늘 3.3%. 아까보다 덜 쏠렸어요.
- 왜 나눌까요? 칸이 많으면 내적이 커져요. 128칸 벡터로 해 보면 점수가 20, −14처럼 커져서, 한 단어가 거의 100%를 가져가요.
- 이렇게 몰리면 점수를 살짝 바꿔도 결과가 안 변해서 학습이 잘 안 돼요(21장). √128 ≈ 11.3으로 나누면 다시 고르게 나뉘어요.
- 이제 '간다'가 단어마다 쳐다볼 비율이 정해졌어요. 다음 장에서는 이 비율대로 Value를 섞어요.
한 장 요약
- 점수를 √d로 나눈 다음 소프트맥스한다. d = Q, K의 칸 수.
- 칸이 많으면 내적이 커져서, 그냥 두면 한 단어가 거의 100%를 가져간다.
- √d로 나누면 칸 수와 상관없이 비율이 알맞게 나뉘고 학습이 잘 된다.