กลไกความใส่ใจ

กลไกความใส่ใจ (attention mechanism) หรือ แอตเทนชัน (attention) ในโครงข่ายประสาทเทียม เป็นเทคนิคที่ออกแบบมาเพื่อเลียนแบบกระบวนการความใสใจในการรับรู้ของมนุษย์
กลไกความใส่ใจมีส่วนช่วยในการเสริมน้ำหนักของข้อมูลป้อนเข้าบางส่วนที่สำคัญ และทำให้ส่วนอื่นอ่อนลง แนวคิดนี้ได้แรงบันดาลใจมาจากการที่ว่าโครงข่ายควรให้ความสำคัญกับข้อมูลบางส่วนที่แม้ว่าจะเล็ก ๆ แต่ก็มีสำคัญมากขึ้น มีความยืดหยุ่นในการขึ้นอยู่กับบริบทเพื่อกำหนดว่าส่วนใดของข้อมูลมีความสำคัญมากกว่าส่วนอื่น ๆ เมื่อเทียบกับวิธีการถ่วงน้ำหนักแบบมาตรฐานที่ให้ค่าคงที่ตลอดการดำเนินการ วิธีการนี้ใช้ "ค่าน้ำหนักแบบอ่อน" ซึ่งสามารถเปลี่ยนแปลงได้ขณะดำเนินการได้
กลไกที่คล้ายกับกลไกความใส่ใจได้ถูกเสนอขึ้นมาตั้งแต่ช่วงปี 1990 ภายใต้ชื่อต่อไปนี้:- มอดูลแบบคูณ (multiplicative module)- หน่วยซิกมาไพ (sigma-pi unit)- โครงข่ายไฮเปอร์ (hyper-network)
มีเทคนิคมากมายที่ประยุกต์ใช้กลไกความใส่ใจได้แก่:- หน่วยความจำของเครื่องทัวริงประสาท- คอมพิวเตอร์ประสาทหาอนุพันธ์ได้- การประมวลภาษาธรรมชาติด้วยทรานส์ฟอร์เมอร์ หรือ หน่วยความจำระยะสั้นแบบยาว- การจัดการข้อมูลพหุฐานนิยมในเพอร์ซีเวอร์

**ความเป็นมา**
กลไกความใส่ใจได้รับการออกแบบให้เป็นส่วนประกอบที่ทำหน้าที่ดังต่อไปนี้:- seq2seq: แปลงแถวลำดับเวกเตอร์ป้อนเข้าเป็นแถวลำดับเวกเตอร์ขาออก- การพิจารณาความขึ้นกับระยะไกล: ดัชนี  เชื่อมโยงค่าป้อนเข้าและค่าขาออกระยะไกล- การแปลงแถวลำดับเวกเตอร์ความยาวตามที่ต้องการ: ทำการประมวลผลแถวลำดับป้อนเข้าที่มีความยาวต่างกันสำหรับการอนุมานแต่ละครั้ง- ความสามารถสูงในการประมวลผลแบบคู่ขนาน: ช่วงเร่งความเร็วในการเรียนรู้และการอนุมาน
ตัวอย่างเช่น ลองพิจารณาการแปลด้วยเครื่อง ซึ่งเป็นงานที่ไม่ได้ทำง่าย ๆ โดยแค่แทนคำต่อคำ เนื่องจากลำดับคำในภาษาต่าง ๆ นั้นมีความแตกต่างกัน ดังนั้น เมื่อแปลงแถวลำดับเวกเตอร์คำป้อนเข้าเป็นลำดับเวกเตอร์คำเอาท์พุต จำเป็นต้องแปลงลำดับให้เป็นลำดับ (seq2seq) นอกจากนี้แล้ว ยังมีกรณีที่การอ้างอิงเฉพาะส่วนที่อยู่ใกล้นั้นไม่เพียงพอ จำเป็นต้องพิจารณาคำที่อยู่ก่อนหน้าไปไกลด้วย ตัวอย่างเช่นในการแปลประโยคคำถามภาษาอังกฤษเป็นภาษาไทย ต้องใช้คำว่า "Do" () ด้านหน้าสุดเพื่ออ้างอิงในการสร้าง "หรือ?" ต่อท้าย () กล่าวคือ จำเป็นต้องคำนึงถึงคำที่อยู่ไกลได้ด้วย นอกจากนี้ เนื่องจากความยาวของประโยคไม่คงที่ จึงจำเป็นต้องสามารถรองรับข้อมูลป้อนเข้าที่มีความยาวตามที่ต้องการได้ การเรียนรู้เชิงปฏิบัติเกี่ยวกับลำดับเวกเตอร์ขนาดยาวโดยใช้แบบจำลองขนาดใหญ่ต้องใช้ความสามารถในการประมวลผลแบบคู่ขนานสูง
ตัวอย่างเช่นชั้นโครงข่ายประสาทป้อนไปข้างหน้าสามารถใช้สำหรับ seq2seq โดยการถ่วงน้ำหนักในทิศทางเวลาได้ แต่เนื่องจากค่าน้ำหนักเป็นตัวเลขคงที่ จึงไม่สามารถจัดการลำดับเวกเตอร์ที่มีความยาวตามใด ๆ ตามที่ต้องการได้ โครงข่ายประสาทแบบสังวัตนาการสามารถใช้สำหรับ seq2seq ที่มีความยาวไม่แน่นอนได้ แต่ต้องใช้เคอร์เนลขนาดใหญ่หรือหลายชั้นเพื่อจัดการส่วนที่ขึ้นกับระยะไกล แม้ว่าแบบจำลองโครงข่ายประสาทแบบเวียนซ้ำจะสามารถตอบสนองความต้องการทั้ง 3 ข้อในทางทฤษฎีได้ แต่ในทางปฏิบัติเป็นที่ทราบกันดีว่าข้อมูลส่วนที่พึ่งพาระยะไกลจะหายไปในระหว่างการถดถอยแต่ละขั้น
ความจำเป็นนี้ไม่ได้จำกัดอยู่แค่ที่การประมวลภาษาธรรมชาติเช่นการแปลด้วยเครื่อง แต่ยังจำเป็นในงานต่าง ๆ มากมาย เช่น การรู้จำแบบ ที่อ้างถึงวัตถุที่อยู่ห่างไกลในภาพ และ การสังเคราะห์เสียงพูด ที่บันทึกการเปลี่ยนแปลงของระดับเสียงในระยะยาว ด้วยเหตุนี้ กลไกความใส่ใจจึงได้รับการเสนอและใช้เป็นส่วนประกอบที่รับข้อมูลป้อนเข้าโดยตรงในแต่ละตำแหน่งเมื่อแปลงสายอักขระที่มีความยาวใด ๆ ให้เป็นแถวลำดับ

**แนวคิด**
การคำนวนภายในกลไกความใส่ใจทำโดย "ผลรวมถ่วงน้ำหนักแบบไม่ตายตัวขึ้นอยู่กับเควียรีของลำดับเวกเตอร์ป้อนเข้า"
กลไกความใส่ใจจะทำการคำนวณผลรวมถ่วงน้ำหนักของเวกเตอร์ป้อนเข้า  แต่ละตัว แล้วได้เวกเตอร์ขาออก  (โดย  เป็นดัชนีของข้อมูลป้อนเข้า ส่วน  เป็นดัชนีของข้อมูลขาออก) ในที่นี้ ค่าน้ำหนักไม่ได้เป็นเพียงค่าคงที่ แต่ได้มาจากการคำนวณ การคำนวณจากเวกเตอร์  ที่แสดงข้อมูลที่โยงกับค่าขาออกตัวที่  กับตัวเวกเตอร์ป้อนเข้านั้นเอง อาจแสดงแนวคิดการคำนวณได้ดังสูตรต่อไปนี้
 
ดังที่เห็นได้จากสูตรนี้ กลไกความใส่ใจจะคำนวณน้ำหนักสำหรับค่าขาออกแต่ละค่าจากเวกเตอร์แสดงความเกี่ยวพันและเวกเตอร์ป้อนเข้า แล้วพิจารณาค่าป้อนเข้าทั้งหมดตามน้ำหนัก ทำให้สามารถพิจารณาแถวลำดับข้อมูลป้อนเข้าทั้งหมดต่อเวกเตอร์ขาออกแต่ละตัวได้โดยตรง ในขณะที่จัดการลำดับเวกเตอร์ที่มีความยาวตามต้องการผ่านการคำนวณน้ำหนักแบบไม่คงที่
กลไกความใส่ใจนี้สามารถพิจารณาใหม่ได้จากมุมมองอื่น กลไกความใส่ใจจะทำการเตรียม ค่า  (value) ที่บวกเพิ่มโดยขึ้นกับค่าป้อนเข้า  และตัวจำแนก  ที่สรุปรวบข้อมูล เรียกว่า คีย์ (key)  จากนั้นก็เตรียมเวกเตอร์เควียรี (query)  ที่ขึ้นกับข้อมูลความเกี่ยวพันกับค่าขาออกแต่ละค่า แล้วกำหนดค่าน้ำหนักของค่าที่ขึ้นกับความสอดคล้องระหว่างเควียรีกับคีย์ กล่าวคือ แสดงได้ดังสูตรต่อไปนี้:
 
แม้ว่าจะมีรูปแบบเกือบจะเหมือนกับสูตรแนวคิดแรก แต่ก็มีความยืดหยุ่นเพิ่มขึ้นในการแปลงข้อมูลที่ป้อนเข้าให้เป็นค่าแล้วจึงดำเนินการหาผลรวม
เพื่อที่จะเปลี่ยนแนวคิดนี้ให้เป็นการดำเนินการที่ใช้งานได้จริง ต้องดำเนินการอย่างเป็นรูปธรรมดังต่อไปนี้ อันดับแรก หากไม่มีข้อจำกัดเรื่องขนาดของ  แล้ว เวกเตอร์ขาออกจะแจกแจงออกไปเมื่อเจอค่าป้อนเข้าที่มีความยาวมากเป็นอนันต์ ดังนั้นจึงกำหนดให้จำกัดให้ผลรวมค่าน้ำหนักเป็น 1 () ได้มีการนิยามฟังก์ชันที่วัดความสอดคล้องระหว่างเควียรีและคีย์ภายในข้อจำกัดนี้ (กลไกเควียรี-คีย์) แต่ฟังก์ชันนี้มีการใช้งานอยู่หลายรูปแบบ แบบที่มักใช้งานคือใช้ฟังก์ชันซอฟต์แมกซ์กับผลคูณจุด  

**ตัวอย่างการแปลภาษา**
หากต้องการสร้างเครื่องแปลจากภาษาอังกฤษเป็นภาษาฝรั่งเศส จะต้องประกอบตัวเข้ารหัส/ตัวถอดรหัสพื้นฐานเข้ากับหน่วยความใส่ใจ (ดูภาพด้านล่าง) ในตัวอย่างที่ง่ายที่สุด หน่วยความใส่ใจประกอบด้วยผลคูณจุดของสถานะของตัวเข้ารหัสแบบถดถอย และไม่จำเป็นต้องฝึก ในความเป็นจริง หน่วยของความใส่ใจประกอบด้วยชั้นโครงข่ายประสาทเทียมแบบเชื่อมต่อสมบูรณ์ 3 ชั้นที่เรียกว่า เควียรี-คีย์-ค่า (query-key-value) ซึ่งต้องมีการฝึก
วิดีโอแสดงลำดับการแปลภาษาทีละขั้นตอน
ไฟล์:Attention-1-sn.png|none|thumb|660x660px| แผนผังของตัวเข้ารหัส/ตัวถอดรหัสที่ประกอบด้วยกลไกความใส่ใจ ด้านซ้าย (สีดำ) คือตัวเข้ารหัส/ตัวถอดรหัส (นั่นคือเป็นตัวเข้ารหัสอัตโนมัติ) ตรงกลาง (สีส้ม) คือหน่วยความใส่ใจ และด้านขวา (สีเทาและ 3 สี) คือผลการคำนวณ พื้นที่สีเทาในเมทริกซ์ H และเวกเตอร์ w (ขวาสุด) หมายถึงค่าศูนย์ ตัวเลขห้อยระบุขนาดเวกเตอร์ และตัวห้อยตัวอักษร i และ i - 1 ระบุขั้นตอนเวลา
เมื่อดูเป็นเมทริกซ์ จะเห็นได้ว่าค่าน้ำหนักความใส่ใจจะบ่งบอกว่าโครงข่ายปรับแบ่งความใส่ใจไปตามบริบทอย่างไร
แนวคิดเรื่องน้ำหนักความใส่ใจนี้ช่วยแก้ปัญหา "ความสามารถในการอธิบาย" ที่โครงข่ายประสาทเทียมมักถูกวิพากษ์วิจารณ์ หากเป็นโครงข่ายที่ทำการแปลคำต่อคำโดยไม่คำนึงถึงลำดับของคำจะได้เป็นเมทริกซ์ที่เกือบจะมีแต่องค์ประกอบแนวทแยง ในทางกลับกัน การที่มีค่าที่ไม่ใช่ในแนวทแยงอยู่นั้นบ่งชี้ว่ากลไกความใส่ใจนั้นมีความละเอียดอ่อนกว่านั้น ในการผ่านตัวถอดรหัสครั้งแรก 94% ของน้ำหนักความใส่ใจอยู่ที่คำภาษาอังกฤษคำแรก "I" ดังนั้นโครงข่ายจึงแสดงคำว่า "je" ในการผ่านตัวถอดรหัสครั้งที่สอง คำภาษาอังกฤษที่สาม "you" ได้ค่าน้ำหนักความใส่ใจ 88% ดังนั้นจึงแสดง "t" ในประโยคสุดท้าย คำภาษาอังกฤษที่สอง "ความรัก" ได้ค่าน้ำหนักความใส่ใจ 95% ดังนั้นจึงแสดง "aime"

**รูปแบบอื่น**
กลไกความใส่ใจหลายรูปแบบที่ใช้ค่าถ่วงน้ำหนักแบบยืดหยุ่น ตัวอย่างได้แก่:- ความใส่ใจแบบบวก (additive attention): หรือเรียกว่า Bahdanau Attention- ความใส่ใจแบบทวีคูณ (multiplicative): หรือที่เรียกว่า Luong Attention- ความใส่ใจในตัว (self-attention)
สำหรับโครงข่ายประสาทแบบสังวัตนาการ กลไกความใส่ใจยังสามารถแบ่งตามมิติที่กลไกทำงาน คืออาจแยกตามปริภูมิ หรือแยกตามช่อง หรือทั้งสองอย่างรวมกัน
ตัวแปรเหล่านี้จะรวมค่าป้อนเข้าฝั่งตัวเข้ารหัสอีกครั้ง และแจกแจงใหม่ไปยังขาออกเป้าหมายแต่ละรายการ ในหลายกรณี เมทริกซ์ที่มีลักษณะคล้ายสหสัมพันธ์ของผลคูณจุดจะให้ปัจจัยในการถ่วงน้ำหนักใหม่ (ดูคำอธิบายประกอบ)

**การใช้งาน**
แบบจำลองที่ยืนพื้นจากสถาปัตยกรรมทรานส์ฟอร์เมอร์นั้นใช้กลไกความใส่ใจเป็นแกนหลัก ทรานส์ฟอร์เมอร์มีเมทริกซ์น้ำหนักอิสระหลายตัวในภายในชั้นเดียวกัน

**อ้างอิง**
หมวดหมู่:การเรียนรู้ของเครื่อง