บทที่ 3 · ข้างใน Transformer หน้า 5/13 ~3 นาที

Attention หลายหัว: ถามหลายคำถามพร้อมกัน

บทที่ 2 แอบบอกว่า "มี attention หลายชุดทำงานพร้อมกัน" มาดูกันว่าหมายถึงอะไร

กลไกความสนใจ (attention)วิธีที่แต่ละคำเลือกว่าจะ "ฟัง" คำอื่นในประโยคมากน้อยแค่ไหน โดยใช้ softmax แบ่งน้ำหนักให้รวมได้ 100%ดูคำศัพท์ทั้งหมด หนึ่งชุดถามได้แบบเดียว เช่น "ใครคือตัวที่หิว" แต่ภาษาต้องถามหลายเรื่องพร้อมกัน เช่น คำก่อนหน้าคืออะไร ใครเป็นคนทำ และอะไรถูกกระทำ

ทางออกคือ attention หลายหัว (multi-head attention)การรัน attention หลายชุดขนานกัน แต่ละหัวย่อเวกเตอร์เป็น q, k, v ขนาดเล็กด้วยตารางของตัวเองจึงสนใจเรื่องต่างกัน แล้วรวมผลของทุกหัวกลับเป็นเวกเตอร์เดียวดูคำศัพท์ทั้งหมด แต่ละหัวใช้ตารางตัวเลขชุดของตัวเอง ( ซึ่งเป็นพารามิเตอร์ที่เรียนรู้มา) ย่อเวกเตอร์เต็มเส้นเป็น คิวรี-คีย์-แวลู (query, key, value)สามบทบาทใน attention คำถาม (query) ไปเทียบกับป้ายชื่อ (key) ของทุกคำ แล้วผสมข้อมูล (value) ตามน้ำหนักที่ได้ดูคำศัพท์ทั้งหมด ขนาดเล็ก แล้วทำ attention แยกกัน

ตัวอย่างที่เปิดเผยไว้: GPT-2 รุ่นเล็ก (2019) มี d = 768 มิติ (dimension)จำนวนตัวเลขในเวกเตอร์ บทเรียนนี้ใช้ 2 มิติให้วาดได้ โมเดลจริงใช้หลายร้อยถึงหลายพันมิติดูคำศัพท์ทั้งหมด และ 12 หัว q, k, v ของแต่ละหัวจึงยาว มิติ

เสร็จแล้วต่อผลทุกหัวเข้าด้วยกัน () แล้วผสมด้วยตาราง ได้เวกเตอร์ยาว 768 เท่าเดิม

ลองดูสองหัว (ใส่ causal mask แล้ว) หัวที่ 1 ดูคำก่อนหน้า: "หิว" ฟัง "มัน" 75.0% ส่วนหัวที่ 2 หาว่าใครหิว: "หิว" ฟัง "แมว" 60.0%

Attention: คำไหนฟังคำไหน

เลือกหัว แล้วแตะคำที่อยากรู้ว่ามัน “ฟัง” คำไหนบ้าง (ตัวเลขตั้งขึ้นเพื่อสาธิต)

ประโยคเดียวกันทุกหัว: “แมวกินปลาเพราะมันหิว”

คำว่า “หิว” ฟัง “มัน” มากที่สุด 75.0%

  • แมว5.0%
  • กิน2.0%
  • ปลา3.0%
  • เพราะ5.0%
  • มัน75.0%
  • หิว10.0%

รวมทั้งแถว = 100.0% (softmax แบ่งความสนใจให้รวมได้ 100% เสมอ)

ตารางทั้งประโยค: แถว = คำที่ถาม (query) · คอลัมน์ = คำที่ถูกฟัง (key) · ยิ่งเข้มยิ่งฟังมาก

ลองกด “หัวที่ 2 · หาว่าใครหิว” แล้วดูว่า “หิว” ฟังคำไหนต่างไป

น้ำหนัก attention ของประโยค “แมวกินปลาเพราะมันหิว” · หัวที่ 1 · ดูคำก่อนหน้า (ใส่ causal mask) (แถว = query, คอลัมน์ = key) ตารางตัวเลขสำหรับโปรแกรมอ่านหน้าจอ
query \ keyแมวกินปลาเพราะมันหิว
แมว100.0%ปิดปิดปิดปิดปิด
กิน90.0%10.0%ปิดปิดปิดปิด
ปลา10.0%80.0%10.0%ปิดปิดปิด
เพราะ5.0%5.0%80.0%10.0%ปิดปิด
มัน5.0%5.0%5.0%75.0%10.0%ปิด
หิว5.0%2.0%3.0%5.0%75.0%10.0%

งานวิจัยเจอหัวแบบ "ดูคำก่อนหน้า" (previous-token head) ในโมเดลจริง แต่หัวจำนวนมากตีความยาก

แบ่งหัวแล้วพารามิเตอร์ไม่เพิ่ม: ของแต่ละหัวขนาด รวม h หัวก็เท่ากับตาราง ตารางเดียว Q, K, V, O จึงเป็น 4 ตาราง (ใช้ในหน้า 10)

multi-head attention คือ attention หลายชุดทำงานขนานกัน แต่ละหัวถามคำถามต่างกัน แล้วรวมผลเป็นเวกเตอร์เดียว

มังคุด มาสคอตมังคุด

มังคุด

เหมือนประชุมที่มีคนจดหลายคน คนหนึ่งจดว่าใครพูด อีกคนจดตัวเลข ใช่มั้ย?