Machine learning 变压器模型如何计算自我注意?

Machine learning 变压器模型如何计算自我注意?,machine-learning,deep-learning,pytorch,transformer,attention-model,Machine Learning,Deep Learning,Pytorch,Transformer,Attention Model,在变压器模型中,使用softmax在Query(Q)和Key(K)向量上计算自我注意: 我试图理解矩阵乘法: Q = batch_size x seq_length x embed_size K = batch_size x seq_length x embed_size QK^T = batch_size x seq_length x seq_length Softmax QK^T = Softmax (batch_size x seq_length x seq_length) 由于每

在变压器模型中,使用softmax在
Query(Q)
Key(K)
向量上计算自我注意:

我试图理解矩阵乘法:

Q = batch_size x seq_length x embed_size

K = batch_size x seq_length x embed_size

QK^T = batch_size x seq_length x seq_length

Softmax QK^T = Softmax (batch_size x seq_length x seq_length)
由于每个批次元素有
seq_length x seq_length
值,因此如何计算softmax

参考Pytorch计算将非常有用


干杯

QKᵀ 乘法是一种成批矩阵乘法——它通过
embed\u size x seq\u length
次进行单独的
seq\u length x embed\u size
乘法
batch\u size
运算。每一个都给出了大小
seq_length x seq_length
的结果,这就是我们最终得到QK的原因ᵀ 具有形状
批量大小x顺序长度x顺序长度

此操作使用以下PyTorch代码:

torch.matmul(query, key.transpose(-2, -1))

这是因为当一个输入至少有3个维度时,
torch.matmul
会进行批量矩阵乘法(请参见)。

ᵀ 乘法是一种成批矩阵乘法——它通过
embed\u size x seq\u length
次进行单独的
seq\u length x embed\u size
乘法
batch\u size
运算。每一个都给出了大小
seq_length x seq_length
的结果,这就是我们最终得到QK的原因ᵀ 具有形状
批量大小x顺序长度x顺序长度

此操作使用以下PyTorch代码:

torch.matmul(query, key.transpose(-2, -1))
这是因为当输入至少有3维时,
torch.matmul
会执行批量矩阵乘法(请参阅)

由于每个批次元素有
seq_length x seq_length
值,因此如何计算softmax

softmax在最后一个轴w.r.t上执行(
torch.nn.softmax(dim=-1)(张量)
,其中
tensor
具有形状
batch\u size x seq\u length x seq\u length
),以获得参与输入序列中每个元素的概率


让我们假设,我们有一个文本序列“思考机器”,因此在执行
QK^T
之后,我们有一个形状为“2x2”(其中
seq_length=2
)的矩阵

我使用下面的插图()来解释自我注意计算。如您所知,首先执行缩放点积
QK^T/平方根(dk)
,然后为每个序列元素计算softmax

这里,对第一个序列元素“Thinking”执行
Softmax
。通过使用softmax,将
14和12
的原始分数转化为
0.88和0.12
的概率。这些概率表明,令牌“思考”以88%的概率出现,令牌“机器”以12%的概率出现。类似地,也计算标记“机器”的注意概率


注意。我强烈建议阅读这篇关于变压器的优秀文章。对于实现,您可以查看

由于每个批次元素有
seq_length x seq_length
值,因此如何计算softmax

softmax在最后一个轴w.r.t上执行(
torch.nn.softmax(dim=-1)(张量)
,其中
tensor
具有形状
batch\u size x seq\u length x seq\u length
),以获得参与输入序列中每个元素的概率


让我们假设,我们有一个文本序列“思考机器”,因此在执行
QK^T
之后,我们有一个形状为“2x2”(其中
seq_length=2
)的矩阵

我使用下面的插图()来解释自我注意计算。如您所知,首先执行缩放点积
QK^T/平方根(dk)
,然后为每个序列元素计算softmax

这里,对第一个序列元素“Thinking”执行
Softmax
。通过使用softmax,将
14和12
的原始分数转化为
0.88和0.12
的概率。这些概率表明,令牌“思考”以88%的概率出现,令牌“机器”以12%的概率出现。类似地,也计算标记“机器”的注意概率



注意。我强烈建议阅读这篇关于变压器的优秀文章。对于实现,您可以查看。

此资源可能有帮助(它包含PyTorch中的代码)。此资源可能有帮助(它包含PyTorch中的代码)