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

MLP: ให้แต่ละคำคิดต่อเอง

ในหนึ่ง ชั้น (layer, Transformer block)หนึ่งรอบการประมวลผลที่มีทั้ง attention และ MLP โมเดลจริงซ้อนกันหลายสิบชั้น โดยแต่ละชั้นแก้เวกเตอร์ของทุก token ทีละนิดดูคำศัพท์ทั้งหมด มีสองส่วน: attention ย้ายข้อมูล ระหว่าง token ส่วน เครือข่ายป้อนไปข้างหน้า (MLP, feed-forward network)ส่วนในแต่ละชั้นที่ประมวลผลเวกเตอร์ของ token ทีละตัว โดยขยาย ผ่านฟังก์ชันโค้งอย่าง ReLU แล้วย่อกลับ เป็นที่อยู่ของพารามิเตอร์ส่วนใหญ่ในแต่ละชั้น (ราว 2 ใน 3 ในดีไซน์มาตรฐาน และมากกว่านั้นในหลายโมเดลใหม่)ดูคำศัพท์ทั้งหมด ให้แต่ละ token "คิดต่อเอง"

MLP มี 3 ขั้น: ขยาย จาก d เป็น 4d → หักงอ ด้วยฟังก์ชันที่ไม่เป็นเส้นตรง (activation function) เช่น ReLU(x) = max(0, x) คือ "ติดลบให้เป็น 0" → ย่อ กลับเป็น d

ลองดูเซลล์ประสาทเทียม (neuron) ที่จับเรื่อง "เมืองหลวง และ ไทย" รับ f₁ = "เรื่องเมืองหลวง" กับ f₂ = "เรื่องไทย" แล้วคำนวณ ReLU(f₁ + f₂ − 1.5)

เซลล์นี้อยู่ที่ token สุดท้าย "คือ" ซึ่งเห็นแค่เวกเตอร์ตัวเอง attention ชั้นก่อนๆ จึงต้องขน f₁ และ f₂ มาไว้ก่อน

ข้อความ(f₁, f₂)ผล
เมืองหลวงของไทยคือ(1, 1)ReLU(0.5) = 0.5 ติด
เมืองหลวงของญี่ปุ่นคือ(1, 0)ReLU(−0.5) = 0 เงียบ
อาหารไทยคือ(0, 1)ReLU(−0.5) = 0 เงียบ

พอติด เซลล์นี้เขียนทิศ "กรุงเทพ" ลงทางหลัก ดัน logit ของกรุงเทพ (บทที่ 1: 96.5%)

ทำไมต้องหักงอ? ไม่มี ReLU แถว (1, 0) จะได้ −0.5 ดันผิดทางแทนที่จะเงียบ

อีกเหตุผล: ฟังก์ชันเส้นตรงให้ค่าที่ (1, 1) = (1, 0) + (0, 1) − (0, 0) เสมอ จึงทำเซลล์ "เงียบ เว้นแต่ครบสองเงื่อนไข" ไม่ได้ และซ้อนกี่ชั้นก็ยังเป็นเส้นตรง

คำถามชวนคิด

ตอบเป็นตัวเลขลองคิดก่อน: ถ้า f₁ = 0.8 และ f₂ = 0.9 เซลล์นี้ให้ค่าเท่าไร?
ดูเฉลยข้อนี้

คำตอบ: 0.2

0.8 + 0.9 − 1.5 = 0.2 > 0 จึงได้ 0.2 (ติดเบาๆ)

attention ให้ token คุยกัน ส่วน MLP ให้แต่ละ token คิดต่อเอง ด้วยเซลล์ที่ "ติด" เมื่อเงื่อนไขครบ

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

มังคุด

ความรู้ว่ากรุงเทพเป็นเมืองหลวง อยู่ในเซลล์เดียวเหรอ?