TT Lab

트랜스포머 · 어텐션의 안쪽

헤드마다 다른 곳을 본다

어텐션은 "지금 이 자리에서 어느 자리를 얼마나 볼까" 를 정하는 계산입니다. Q 와 K 를 곱해 점수를 내고, √d 로 나누고, 미래 칸을 가린 뒤, softmax 로 합이 1 인 가중치를 만듭니다. softmax 하나는 합이 1 이라 여러 곳을 동시에 강하게 볼 수 없습니다. 그래서 헤드를 여럿 둡니다. 아래 문장에서 동사 "먹었다" 는 헤드 셋을 통해 바로 앞 토큰, 주어, 목적어를 따로 봅니다.

헤드 셋을 깊이로 쌓은 가중치 막대

판 하나가 헤드 하나, 판 위의 줄이 쿼리, 열이 키입니다. 막대 높이가 가중치입니다 · 헤드 1 · 바로 앞 토큰 · 헤드 2 · 누가 했나(주어) · 헤드 3 · 무엇을(목적어) · 흐린 막대는 고르지 않은 쿼리 줄 · 회색 바닥은 마스크로 가린 미래 칸 · 노란 판은 고른 헤드

골라 보기

해 볼 것 두 가지. "고양이가" 를 고르고 인과 마스크를 꺼 보세요 — 주어 헤드가 뒤에 있는 동사 "먹었다" 로 옮겨 갑니다. 켜 두면 아직 오지 않은 동사를 볼 수 없어 [시작]에 기댑니다. 그리고 √d 로 나누기를 꺼 보세요 — 가장 큰 칸이 가중치를 거의 다 가져갑니다.

계산

헤드마다 가장 많이 보는 토큰
쿼리 한 줄이 헤드마다 나누어 주는 가중치. 굵은 칸이 가장 많이 보는 토큰 —

고른 헤드에서 쿼리 한 줄을 네 단계로 계산한다 —
키 토큰 점수 Q·K 마스크 뒤 softmax 가중치

마스크는 softmax 전에 −∞ 를 넣습니다. exp(−∞) 는 정확히 0 이라 남은 칸끼리 합이 1 이 됩니다. softmax 뒤에 0 을 곱하면 합이 1 보다 작아져 가중 평균이 아니게 됩니다.

고른 헤드의 Q 와 K 보기

점수 한 칸은 Q 의 한 줄과 K 의 한 줄을 곱해 더한 값입니다. 차원 이름은 이해를 돕기 위해 붙였습니다 — 학습된 모델의 차원에는 이름이 없습니다.

Q, 각 토큰이 찾는 것 —
K, 각 토큰이 내세우는 표지 —