들어가기 전에
이번에는 트랜스포머 2번째 강의로, 내적을 통한 어텐션의 실행방법과 각 기능에 대한 이유에 대해서 학습합니다. 앞으로 트랜스포머 구조의 기능을 소개 어떤 기능이 있는지도 알아보지만, “왜” 그 기능이 나오게 됐는지도 같이 기억해주시면 공부하실 때 더 정확하게 이해하실 수 있으실 겁니다. 👀
학습 목표
Scaled dot product attention의 동작원리와 이유에 대해서 학습하고 설명할 수 있습니다.
핵심 단어
- dot product
- attention
- scaled dot product
- Query, Key , Value
강의 듣기
이번 강의에서는 Transformer 구조에서 내적(Dot-product) 기반 어텐션을 수행하는 방법과 그 특징 중하나인 scaling을 해주는 이유에 대해서 학습합니다.
q, K,V를 입력으로 어텐션 구하기
- 주어진 key들의 행렬인 K와, value들의 행렬인 V 마지막으로 해당 스텝의 쿼리인 q를 입력값으로 받아서 아래 수식과 같이 계산할 수 있습니다.

q → Q(행렬)로 확장하여 어텐션 벡터 구하기
- 단일 쿼리(q)가 아닌 다수의 쿼리로 확장하면, 쿼리들의 행렬을 의미하는 Q로 바꿔 아래 수식과 같이 표현할 수 있습니다.

- 위 수식에 따라, 들어온 Q,K,V에 대해 Q와 K의 내적 후 softmax를 취해준 뒤, 나온 가중치 값을 V에 곱해줘서 어텐션벡터를 구할 수 있습니다.
scaled by the length of query / key vectors

- QK를 내적해준 후 d_k의 루트값으로 나눠준 후 softmax 취해줍니다.
- scaled를 취해주는 이유 : 분산이 큰 값(dimension이 큰값)으로 인해 softmax의 값이 몰릴 수 있기 때문입니다.
- 내적에 참여하는 쿼리와 키의 차원(dimension)에 따라 값이 좌지우지 될 수 있습니다. 때문에 이를 보정해주기 위해서 표준편차로 나눠줍니다. 위 과정을 scaled 라고 부르며, 이를 통해 분산이 1로 유지됩니다.
생각해보기
1) 기존 RNN 기반 어텐션과 셀프어텐션의 차이점은 무엇이 있나요?
2) dot product를 진행할때 scaling을 진행하는 이유는 무엇인가요?
참고자료
comment
좋은 강의 감사합니다! 학습하다가 궁금한 점이 생겨서 댓글 남깁니다.
왜 쿼리와 키의 수가 다른지 궁금합니다.
입력 데이터가 n개라고 할 때, 각각의 입력데이터마다 쿼리는 q1, q1.., qn, 키는 k1, k2, ...kn 각 n개씩 나오고 해당 벡터들을 행렬로 모아서 계산식을 간단하게 만들어서 계산하는걸로 이해했는데요. 강의에서 보면 쿼리는 3개, 키는 4개더라고요..! 어떻게 그럴수가 있는지 궁금합니다.