가중치 분할
헤드가 12개면 계산도 12번 해야 할까요?
생각 바꾸기
작은 W 여러 장을 큰 W 한 장으로
헤드 두 개의 W를 옆으로 붙여 큰 표 하나로 만듭니다. 한 번 곱하면 두 헤드가 쓸 쿼리가 한꺼번에 나옵니다. 키와 값도 같은 방식입니다.
나누기
나온 결과를 헤드 수만큼 자릅니다
단어마다 나온 숫자 4개 중 앞 2개는 헤드 1이, 뒤 2개는 헤드 2가 가져갑니다. 전체 4개를 헤드 2개가 나눠 맡으니 헤드 하나의 몫은 2개입니다.
숫자를 새로 계산하지 않고 묶는 모양만 바꿉니다. 큰 W의 결과를 헤드별로 나눠 쓰는 이 방식을 가중치 분할이라고 합니다.
헤드별 점수
쿼리 표와 키 표를 겹쳐서 곱합니다
이제 헤드마다 점수를 매길 차례입니다. 2번 장의 곱셈은 W로 쿼리와 키를 만드는 것이었고, 이번에는 그 쿼리 표와 키 표를 곱합니다. 헤드 수만큼 겹쳐서 곱하면 한 번에 끝납니다.
두 방법의 값이 같다는 것은 실습에서 확인했습니다. 이 계산의 이름은 배치 행렬 곱셈입니다. 칸의 밝기는 예시입니다.
합치기
헤드별 결과를 다시 이어 붙입니다
헤드마다 구한 문맥 벡터를 단어별로 붙여 숫자 4개로 되돌립니다. 아직은 앞 2개가 헤드 1, 뒤 2개가 헤드 2의 결과입니다.
마지막 층
두 헤드의 결과를 섞어 줍니다
이어 붙이기만 하면 두 헤드가 본 것이 칸마다 따로 놉니다. 그래서 아래 칸 하나하나를 위의 숫자 4개를 모두 섞어서 만듭니다. 이제 숫자마다 두 헤드가 본 것이 함께 담깁니다.
이 층을 출력 층이라고 하고 코드 이름은 out_proj입니다. 꼭 있어야 하는 것은 아니지만 LLM에서 널리 씁니다.
정리
곱하고, 나누고, 합칩니다
다음 편