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

"แมวกินปลา" ≠ "ปลากินแมว": โมเดลรู้ลำดับคำยังไง

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

ทางแก้คือเติม ข้อมูลตำแหน่ง (positional encoding, RoPE)วิธีบอกโมเดลว่าแต่ละ token อยู่ลำดับที่เท่าไร เพราะ attention ล้วนๆ ไม่รู้ลำดับคำ วิธีที่นิยมในโมเดลรุ่นใหม่คือ RoPE ซึ่งหมุน query และ key ตามตำแหน่ง คะแนนจึงขึ้นกับระยะห่างระหว่างคำด้วยดูคำศัพท์ทั้งหมด รุ่นใหม่หลายตัวใช้ RoPE (rotary position embedding) คือ หมุน q และ k ก่อนเทียบกัน คำที่ตำแหน่ง m หมุนไป

ผลคือมุมระหว่าง query (ตำแหน่ง m) กับ key (ตำแหน่ง n) เปลี่ยนไป ขึ้นกับ ระยะห่าง ไม่ใช่จุดเริ่ม ส่วนที่เหลือของคะแนนยังมาจากเนื้อหาของ q และ k

ลองคิดตาม ให้ θ = 30° และ q = k = (1, 0) (ให้เห็นแค่ส่วนของตำแหน่ง):

  • query ตำแหน่ง 3 หมุน 90° ได้ (0, 1) และ key ตำแหน่ง 1 หมุน 30° ได้ (0.8660, 0.5000) → ผลคูณจุด (dot product)เอาตัวเลขตำแหน่งเดียวกันของสองเวกเตอร์มาคูณกัน แล้วบวกรวม ยิ่งชี้ไปทางเดียวกันยิ่งได้ค่ามากดูคำศัพท์ทั้งหมด = 0.5000
  • เลื่อนทั้งคู่ไป 1 ตำแหน่ง (4 และ 2) ได้ (−0.5000, 0.8660) กับ (0.5000, 0.8660) → dot ยังเป็น 0.5000

ลองเลื่อนทั้งสองคำโดยให้ห่างเท่าเดิม แล้วดูค่า dot

หมุนตามตำแหน่ง (RoPE)

ลากตำแหน่งของสองคำ แล้วดู dot product

key @1query @3(m−n)·θ = 60°
ตำแหน่ง m, n
3, 1
มุมหมุน m·θ, n·θ
90°, 30°
ระยะห่าง m − n
2
dot
0.5000
ระยะห่าง → dot (θ = 30°)
ระยะห่างdot
01.0000
10.8660
2 (ตอนนี้)0.5000
30.0000
4−0.5000
5−0.8660
6−1.0000

ย้ายทั้งสองคำไปตำแหน่งใหม่ โดยให้ห่างกันเท่าเดิม (2 ตำแหน่ง)

ตำแหน่งและผลหมุน (ตารางตัวเลขสำหรับโปรแกรมอ่านหน้าจอ)
รายการquerykey
ตำแหน่ง31
มุมหมุน90°30°
พิกัดหลังหมุน(0.0000, 1.0000)(0.8660, 0.5000)
ระยะห่าง / dot20.5000

ถ้าติด: กดปุ่ม "เลื่อนทั้งคู่ +1 →" ครั้งเดียวก็ผ่าน

RoPE หมุน query และ key ตามตำแหน่ง dot product จึงขึ้นกับเนื้อหาของสองคำและ "ระยะห่าง" ไม่ใช่ตำแหน่งตายตัว

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

มังคุด

ถ้าย้ายประโยคไปท้ายเอกสารยาวๆ ความสัมพันธ์ระหว่างคำก็ยังเหมือนเดิมเหรอ?