[필수 과제] Multi-headed Attention Assignment
Multi-Headed Attention
import numpy as np
import matplotlib.pyplot as plt
import torch
import torch.nn as nn
import torch.optim as optim
import torch.nn.functional as F
%matplotlib inline
%config InlineBackend.figure_format='retina'
print ("PyTorch version:[%s]."%(torch.__version__))
device = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')
print ("device:[%s]."%(device))PyTorch version:[1.9.0+cu102].
device:[cuda:0].Scaled Dot-Product Attention (SDPA)

Scaled Dot Attention은 self(single)-attention이고, 이후에 multi attention이 나올 것임
2 : Q, K, V 벡터를 입력받는다. 정확히는 이것이 Batch가 되어서 들어오게 된다.
3 : Key dimension을 찾음. 왜? 점수를 square값으로 나눠야 하니까
4 : 점수를 계산
6 : softmax로 attention값 구하기
7 : Value벡터와 attention곱 구하기
3
n_batch : 단어의 개수
d_K : K벡터의 차원
d_V : V벡터의 차원
V벡터는 K벡터와 차원이 달라도 된다.
4: 각각의 벡터의 총 개수
쿼리벡터의 개수와 키벡터의 개수가 달라도 된다. 개수가 달라도 서로의 interaction을 계산할 수 있다.
멀티헤드에서는 각각의 벡터를 몇개할지가 2번째 인자자리에 추가되었다.
Multi-Headed Attention (MHA)
2 : dropout이 multihead 인자로 들어가게된다. 논문에는 설명이 안되어있는데 모든 코드에 쓴다
21-24 : Q, K ,V 벡터를 구하는 신경망을 구성하고 나오는 결과값을 가공해주는 Output도 정의해준다.
9-11 : 각각의 벡터를 신경망에 넣는다
17-19 : 그리고 이 벡터를 조각조각 내준다.
Last updated
Was this helpful?