建立 MultiHeadAttentionClass 的起始結構
你已經定義了建立權杖嵌入向量與位置嵌入向量的類別,現在該定義用來執行多頭注意力的類別了。首先,請設定用於注意力計算的參數,以及將輸入嵌入向量轉換為 query、key、value 矩陣的線性層,並加入一個將合併後的注意力權重投影回嵌入向量的輸出層。
torch.nn 已匯入為 nn。
本練習屬於課程
Transformer Models with PyTorch
練習說明
- 計算每個注意力頭要處理的嵌入維度
head_dim。 - 定義三個輸入層(對應 query、key、value)與一個輸出層;將輸入層的 bias 參數移除。
動手互動練習
試著完成這個範例程式碼,體驗一下這個練習。
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 = ____