เริ่มต้นสร้างคลาส MultiHeadAttention
หลังจากกำหนดคลาสสำหรับสร้าง token embedding และ positional embedding แล้ว ขั้นตอนต่อไปคือกำหนดคลาสสำหรับทำ multi-head attention โดยเริ่มจากการตั้งค่าพารามิเตอร์ที่ใช้ในการคำนวณ attention และกำหนด linear layer สำหรับแปลง input embedding เป็นเมทริกซ์ query, key และ value รวมถึงเลเยอร์สำหรับ project ค่า attention weight ที่รวมกันแล้วกลับเป็น embedding
มีการ import torch.nn ในชื่อ nn ไว้ให้แล้ว
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
Transformer Models ด้วย PyTorch
คำแนะนำการฝึกหัด
- คำนวณขนาด embedding ที่แต่ละ attention head จะประมวลผล โดยเก็บไว้ในตัวแปร
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 = ____