[필수 과제] 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?