开始编写 MultiHeadAttentionClass
您已经为构建词元嵌入和位置嵌入定义了类,现在该为多头注意力定义一个类了。首先,设置用于注意力计算的参数,并定义用于将输入嵌入转换为查询、键和值矩阵的线性层,以及一个用于将合并后的注意力结果投影回嵌入空间的输出线性层。
torch.nn 已以 nn 导入。
本练习是课程的一部分
使用 PyTorch 的 Transformer 模型
练习说明
- 计算每个注意力头要处理的嵌入维度
head_dim。 - 定义三个输入层(用于 query、key 和 value)以及一个输出层;对输入层去掉偏置参数。
交互式实操练习
通过完成这段示例代码来试试这个练习。
class MultiHeadAttention(nn.Module):
def __init__(self, d_model, num_heads):
super().__init__()
# Calculate the dimensions each head will process
self.num_heads = num_heads
self.d_model = d_model
self.head_dim = ____
# Define the three input layers and one output layer
self.query_linear = nn.Linear(____, ____, bias=False)
self.key_linear = nn.Linear(____)
self.value_linear = ____
self.output_linear = ____