훈련 가능한 셀프 어텐션

방금 만든 어텐션은 배우지 못합니다

이유 1

고칠 수 있는 숫자가 하나도 없습니다

점수는 단어 벡터끼리의 점곱으로 그대로 정해집니다. 계산 안에 훈련으로 바꿀 숫자가 없어서, 어느 단어를 봐야 하는지를 데이터에서 배울 수 없습니다.

이유 2

점수가 양쪽으로 항상 같습니다

journey가 step을 볼 때1.09
step이 journey를 볼 때1.09

같은 두 벡터를 곱하니 순서를 바꿔도 값이 같습니다. 하지만 한 단어가 다른 단어를 참고해야 하는 정도는 방향에 따라 다를 수 있습니다.

해법

단어의 역할을 셋으로 나눕니다

쿼리
내가 찾는 것기준 단어가 던지는 질문
키
나는 이런 단어다비교될 때 내미는 이름표
값
내가 건네줄 내용섞일 때 실제로 들어가는 정보

검색에 견주면 쿼리는 검색어, 키는 문서 제목, 값은 문서 본문입니다.

달라지는 것

계산은 그대로, 재료만 바뀝니다

점수
쿼리 · 키전에는 단어 벡터 · 단어 벡터
섞기
가중치 × 값전에는 가중치 × 단어 벡터

점수, 가중치, 문맥 벡터로 이어지는 세 단계는 똑같습니다.

만드는 방법

단어 벡터에 행렬을 곱합니다

  1. q = x @ W_q쿼리
  2. k = x @ W_k키
  3. v = x @ W_v값

W_q, W_k, W_v는 숫자가 담긴 표입니다. 처음에는 무작위로 채우고, 훈련하면서 조금씩 고칩니다. 어디를 볼지를 배우는 곳이 이 세 표입니다.

헷갈리기 쉬운 것

'가중치'가 두 가지입니다

W
가중치 파라미터모델이 훈련으로 익혀서 갖고 있는 숫자
α
어텐션 가중치문장이 들어올 때마다 새로 계산하는 비율

다음 편

남은 것은 식 속의 작은 장치 하나입니다

8편√dk는 왜 나눌까? 4강 목록