Machine learning 变压器模型如何计算自我注意?
在变压器模型中,使用softmax在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) 由于每
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中的代码)