훈련 가능한 셀프 어텐션
방금 만든 어텐션은 배우지 못합니다
이유 1
고칠 수 있는 숫자가 하나도 없습니다
점수는 단어 벡터끼리의 점곱으로 그대로 정해집니다. 계산 안에 훈련으로 바꿀 숫자가 없어서, 어느 단어를 봐야 하는지를 데이터에서 배울 수 없습니다.
이유 2
점수가 양쪽으로 항상 같습니다
journey가 step을 볼 때1.09
step이 journey를 볼 때1.09
같은 두 벡터를 곱하니 순서를 바꿔도 값이 같습니다. 하지만 한 단어가 다른 단어를 참고해야 하는 정도는 방향에 따라 다를 수 있습니다.
해법
단어의 역할을 셋으로 나눕니다
- 쿼리
- 내가 찾는 것기준 단어가 던지는 질문
- 키
- 나는 이런 단어다비교될 때 내미는 이름표
- 값
- 내가 건네줄 내용섞일 때 실제로 들어가는 정보
검색에 견주면 쿼리는 검색어, 키는 문서 제목, 값은 문서 본문입니다.
달라지는 것
계산은 그대로, 재료만 바뀝니다
- 점수
- 쿼리 · 키전에는 단어 벡터 · 단어 벡터
- 섞기
- 가중치 × 값전에는 가중치 × 단어 벡터
점수, 가중치, 문맥 벡터로 이어지는 세 단계는 똑같습니다.
만드는 방법
단어 벡터에 행렬을 곱합니다
q = x @ W_q쿼리k = x @ W_k키v = x @ W_v값
W_q, W_k, W_v는 숫자가 담긴 표입니다. 처음에는 무작위로 채우고, 훈련하면서 조금씩 고칩니다. 어디를 볼지를 배우는 곳이 이 세 표입니다.
헷갈리기 쉬운 것
'가중치'가 두 가지입니다
- W
- 가중치 파라미터모델이 훈련으로 익혀서 갖고 있는 숫자
- α
- 어텐션 가중치문장이 들어올 때마다 새로 계산하는 비율
다음 편