開始使用免費開始

為 MultiHeadAttention 類別加入方法

在這個練習中,你將從零開始完成 MultiHeadAttention 類別的其餘部分,定義以下四個方法:

  • .split_heads():在多個注意力頭之間分割並轉換輸入的嵌入向量(embedding)
  • .compute_attention():計算縮放點積(scaled dot-product)注意力權重,並與 values 矩陣相乘
  • .combine_heads():將注意力權重轉回與輸入嵌入向量 x 相同的形狀
  • .forward():呼叫其他方法,讓輸入嵌入向量依序通過各步驟

torch.nn 已匯入為 nntorch.nn.functional 可用作 Ftorch 也已可用。

本練習屬於課程

Transformer Models with PyTorch

檢視課程

動手互動練習

試著完成這個範例程式碼,體驗一下這個練習。

class MultiHeadAttention(nn.Module):
    def __init__(self, d_model, num_heads):
        super().__init__()
        self.num_heads = num_heads
        self.d_model = d_model
        self.head_dim = d_model // num_heads
        self.query_linear = nn.Linear(d_model, d_model, bias=False)
        self.key_linear = nn.Linear(d_model, d_model, bias=False)
        self.value_linear = nn.Linear(d_model, d_model, bias=False)
        self.output_linear = nn.Linear(d_model, d_model)

    def split_heads(self, x, batch_size):
        seq_length = x.size(1)
        # Split the input embeddings and permute
        x = x.____
        return x.permute(0, 2, 1, 3)
編輯並執行程式碼