# กลไกความใส่ใจ
กลไกความใส่ใจ (attention mechanism) หรือ แอตเทนชัน (attention) ในโครงข่ายประสาทเทียม เป็นเทคนิคที่ออกแบบมาเพื่อเลียนแบบกระบวนการความใสใจในการรับรู้ของมนุษย์

กลไกความใส่ใจมีส่วนช่วยในการเสริมน้ำหนักของข้อมูลป้อนเข้าบางส่วนที่สำคัญ และทำให้ส่วนอื่นอ่อนลง แนวคิดนี้ได้แรงบันดาลใจมาจากการที่ว่าโครงข่ายควรให้ความสำคัญกับข้อมูลบางส่วนที่แม้ว่าจะเล็ก ๆ แต่ก็มีสำคัญมากขึ้น มีความยืดหยุ่นในการขึ้นอยู่กับบริบทเพื่อกำหนดว่าส่วนใดของข้อมูลมีความสำคัญมากกว่าส่วนอื่น ๆ เมื่อเทียบกับวิธีการถ่วงน้ำหนักแบบมาตรฐานที่ให้ค่าคงที่ตลอดการดำเนินการ วิธีการนี้ใช้ "ค่าน้ำหนักแบบอ่อน" ซึ่งสามารถเปลี่ยนแปลงได้ขณะดำเนินการได้

กลไกที่คล้ายกับกลไกความใส่ใจได้ถูกเสนอขึ้นมาตั้งแต่ช่วงปี 1990 ภายใต้ชื่อต่อไปนี้:

 มอดูลแบบคูณ (multiplicative module)
 หน่วยซิกมาไพ (sigma-pi unit)
 โครงข่ายไฮเปอร์ (hyper-network)

มีเทคนิคมากมายที่ประยุกต์ใช้กลไกความใส่ใจได้แก่:

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

 ความเป็นมา 
กลไกความใส่ใจได้รับการออกแบบให้เป็นส่วนประกอบที่ทำหน้าที่ดังต่อไปนี้:

 seq2seq: แปลงแถวลำดับเวกเตอร์ป้อนเข้าเป็นแถวลำดับเวกเตอร์ขาออก"for mapping one ... sequence ... to another sequence ... Motivating our use of self-attention" Vaswani. (2017). Attention Is All You Need.
 การพิจารณาความขึ้นกับระยะไกล: ดัชนี  เชื่อมโยงค่าป้อนเข้าและค่าขาออกระยะไกล"Motivating our use of self-attention ... Learning long-range dependencies is a key challenge in many sequence transduction tasks." Vaswani. (2017). Attention Is All You Need.
 การแปลงแถวลำดับเวกเตอร์ความยาวตามที่ต้องการ: ทำการประมวลผลแถวลำดับป้อนเข้าที่มีความยาวต่างกันสำหรับการอนุมานแต่ละครั้ง"for mapping one variable-length sequence ... Motivating our use of self-attention" Vaswani. (2017). Attention Is All You Need.
 ความสามารถสูงในการประมวลผลแบบคู่ขนาน: ช่วงเร่งความเร็วในการเรียนรู้และการอนุมาน"three desiderata ... Another is the amount of computation that can be parallelized" Vaswani. (2017). Attention Is All You Need.

ตัวอย่างเช่น ลองพิจารณาการแปลด้วยเครื่อง ซึ่งเป็นงานที่ไม่ได้ทำง่าย ๆ โดยแค่แทนคำต่อคำ เนื่องจากลำดับคำในภาษาต่าง ๆ นั้นมีความแตกต่างกัน ดังนั้น เมื่อแปลงแถวลำดับเวกเตอร์คำป้อนเข้าเป็นลำดับเวกเตอร์คำเอาท์พุต จำเป็นต้องแปลงลำดับให้เป็นลำดับ (seq2seq"A neural machine translation system ... translating a source sentence ... to a target sentence" Luong. (2015). Effective Approaches to Attention-based Neural Machine Translation.) นอกจากนี้แล้ว ยังมีกรณีที่การอ้างอิงเฉพาะส่วนที่อยู่ใกล้นั้นไม่เพียงพอ จำเป็นต้องพิจารณาคำที่อยู่ก่อนหน้าไปไกลด้วย ตัวอย่างเช่นในการแปลประโยคคำถามภาษาอังกฤษเป็นภาษาไทย ต้องใช้คำว่า "Do"  ด้านหน้าสุดเพื่ออ้างอิงในการสร้าง "หรือ?" ต่อท้าย  กล่าวคือ จำเป็นต้องคำนึงถึงคำที่อยู่ไกลได้ด้วย นอกจากนี้ เนื่องจากความยาวของประโยคไม่คงที่ จึงจำเป็นต้องสามารถรองรับข้อมูลป้อนเข้าที่มีความยาวตามที่ต้องการได้"to encode a variable-length source sentence ... and to decode the vector into a variable-length target sentence" Bahdanau. (2015). Neural machine translation by jointly learning to align and translate. ICLR. การเรียนรู้เชิงปฏิบัติเกี่ยวกับลำดับเวกเตอร์ขนาดยาวโดยใช้แบบจำลองขนาดใหญ่ต้องใช้ความสามารถในการประมวลผลแบบคู่ขนานสูง

ตัวอย่างเช่นชั้นโครงข่ายประสาทป้อนไปข้างหน้าสามารถใช้สำหรับ seq2seq โดยการถ่วงน้ำหนักในทิศทางเวลาได้ แต่เนื่องจากค่าน้ำหนักเป็นตัวเลขคงที่ จึงไม่สามารถจัดการลำดับเวกเตอร์ที่มีความยาวตามใด ๆ ตามที่ต้องการได้ โครงข่ายประสาทแบบสังวัตนาการสามารถใช้สำหรับ seq2seq ที่มีความยาวไม่แน่นอนได้ แต่ต้องใช้เคอร์เนลขนาดใหญ่หรือหลายชั้นเพื่อจัดการส่วนที่ขึ้นกับระยะไกล"A single convolutional layer ... does not connect all pairs of input and output positions. Doing so requires a stack of ... convolutional layers" Vaswani. (2017). Attention Is All You Need. แม้ว่าแบบจำลองโครงข่ายประสาทแบบเวียนซ้ำจะสามารถตอบสนองความต้องการทั้ง 3 ข้อในทางทฤษฎีได้ แต่ในทางปฏิบัติเป็นที่ทราบกันดีว่าข้อมูลส่วนที่พึ่งพาระยะไกลจะหายไปในระหว่างการถดถอยแต่ละขั้น"three desiderata ... The third is the path length between long-range dependencies in the network. ... One key factor affecting the ability to learn such dependencies is the length of the paths forward and backward signals have to traverse in the network." Vaswani. (2017). Attention Is All You Need.

ความจำเป็นนี้ไม่ได้จำกัดอยู่แค่ที่การประมวลภาษาธรรมชาติเช่นการแปลด้วยเครื่อง แต่ยังจำเป็นในงานต่าง ๆ มากมาย เช่น การรู้จำแบบ ที่อ้างถึงวัตถุที่อยู่ห่างไกลในภาพ และ การสังเคราะห์เสียงพูด ที่บันทึกการเปลี่ยนแปลงของระดับเสียงในระยะยาว ด้วยเหตุนี้ กลไกความใส่ใจจึงได้รับการเสนอและใช้เป็นส่วนประกอบที่รับข้อมูลป้อนเข้าโดยตรงในแต่ละตำแหน่งเมื่อแปลงสายอักขระที่มีความยาวใด ๆ ให้เป็นแถวลำดับ

 แนวคิด 
การคำนวนภายในกลไกความใส่ใจทำโดย "ผลรวมถ่วงน้ำหนักแบบไม่ตายตัวขึ้นอยู่กับเควียรีของลำดับเวกเตอร์ป้อนเข้า"

กลไกความใส่ใจจะทำการคำนวณผลรวมถ่วงน้ำหนักของเวกเตอร์ป้อนเข้า  แต่ละตัว แล้วได้เวกเตอร์ขาออก  (โดย  เป็นดัชนีของข้อมูลป้อนเข้า ส่วน  เป็นดัชนีของข้อมูลขาออก) ในที่นี้ ค่าน้ำหนักไม่ได้เป็นเพียงค่าคงที่ แต่ได้มาจากการคำนวณ การคำนวณจากเวกเตอร์  ที่แสดงข้อมูลที่โยงกับค่าขาออกตัวที่  กับตัวเวกเตอร์ป้อนเข้านั้นเอง อาจแสดงแนวคิดการคำนวณได้ดังสูตรต่อไปนี้

 

ดังที่เห็นได้จากสูตรนี้ กลไกความใส่ใจจะคำนวณน้ำหนักสำหรับค่าขาออกแต่ละค่าจากเวกเตอร์แสดงความเกี่ยวพันและเวกเตอร์ป้อนเข้า แล้วพิจารณาค่าป้อนเข้าทั้งหมดตามน้ำหนัก ทำให้สามารถพิจารณาแถวลำดับข้อมูลป้อนเข้าทั้งหมดต่อเวกเตอร์ขาออกแต่ละตัวได้โดยตรง ในขณะที่จัดการลำดับเวกเตอร์ที่มีความยาวตามต้องการผ่านการคำนวณน้ำหนักแบบไม่คงที่

กลไกความใส่ใจนี้สามารถพิจารณาใหม่ได้จากมุมมองอื่น"An attention function can be described as mapping a query and a set of key-value pairs to an output" Vaswani. (2017). Attention Is All You Need. กลไกความใส่ใจจะทำการเตรียม ค่า  (value) ที่บวกเพิ่มโดยขึ้นกับค่าป้อนเข้า  และตัวจำแนก  ที่สรุปรวบข้อมูล เรียกว่า คีย์ (key)  จากนั้นก็เตรียมเวกเตอร์เควียรี (query)  ที่ขึ้นกับข้อมูลความเกี่ยวพันกับค่าขาออกแต่ละค่า แล้วกำหนดค่าน้ำหนักของค่าที่ขึ้นกับความสอดคล้องระหว่างเควียรีกับคีย์"An attention function ... The output is computed as a weighted sum of the values, where the weight assigned to each value is computed by a compatibility function of the query with the corresponding key." Vaswani. (2017). Attention Is All You Need. กล่าวคือ แสดงได้ดังสูตรต่อไปนี้"An attention function can be described as mapping a query and a set of key-value pairs to an output" Vaswani. (2017). Attention Is All You Need.:

 

แม้ว่าจะมีรูปแบบเกือบจะเหมือนกับสูตรแนวคิดแรก แต่ก็มีความยืดหยุ่นเพิ่มขึ้นในการแปลงข้อมูลที่ป้อนเข้าให้เป็นค่าแล้วจึงดำเนินการหาผลรวม

เพื่อที่จะเปลี่ยนแนวคิดนี้ให้เป็นการดำเนินการที่ใช้งานได้จริง ต้องดำเนินการอย่างเป็นรูปธรรมดังต่อไปนี้ อันดับแรก หากไม่มีข้อจำกัดเรื่องขนาดของ  แล้ว เวกเตอร์ขาออกจะแจกแจงออกไปเมื่อเจอค่าป้อนเข้าที่มีความยาวมากเป็นอนันต์ ดังนั้นจึงกำหนดให้จำกัดให้ผลรวมค่าน้ำหนักเป็น 1  ได้มีการนิยามฟังก์ชันที่วัดความสอดคล้องระหว่างเควียรีและคีย์ภายในข้อจำกัดนี้ (กลไกเควียรี-คีย์) แต่ฟังก์ชันนี้มีการใช้งานอยู่หลายรูปแบบ แบบที่มักใช้งานคือใช้ฟังก์ชันซอฟต์แมกซ์กับผลคูณจุด  "We compute the dot products of the query with all keys, divide each by √ dk, and apply a softmax function" Vaswani. (2017). Attention Is All You Need.

 ตัวอย่างการแปลภาษา 
หากต้องการสร้างเครื่องแปลจากภาษาอังกฤษเป็นภาษาฝรั่งเศส จะต้องประกอบตัวเข้ารหัส/ตัวถอดรหัสพื้นฐานเข้ากับหน่วยความใส่ใจ (ดูภาพด้านล่าง) ในตัวอย่างที่ง่ายที่สุด หน่วยความใส่ใจประกอบด้วยผลคูณจุดของสถานะของตัวเข้ารหัสแบบถดถอย และไม่จำเป็นต้องฝึก ในความเป็นจริง หน่วยของความใส่ใจประกอบด้วยชั้นโครงข่ายประสาทเทียมแบบเชื่อมต่อสมบูรณ์ 3 ชั้นที่เรียกว่า เควียรี-คีย์-ค่า (query-key-value) ซึ่งต้องมีการฝึก
thumb| วิดีโอแสดงลำดับการแปลภาษาทีละขั้นตอน
none|thumb|660x660px| แผนผังของตัวเข้ารหัส/ตัวถอดรหัสที่ประกอบด้วยกลไกความใส่ใจ ด้านซ้าย (สีดำ) คือตัวเข้ารหัส/ตัวถอดรหัส (นั่นคือเป็นตัวเข้ารหัสอัตโนมัติ) ตรงกลาง (สีส้ม) คือหน่วยความใส่ใจ และด้านขวา (สีเทาและ 3 สี) คือผลการคำนวณ พื้นที่สีเทาในเมทริกซ์ H และเวกเตอร์ w (ขวาสุด) หมายถึงค่าศูนย์ ตัวเลขห้อยระบุขนาดเวกเตอร์ และตัวห้อยตัวอักษร i และ i - 1 ระบุขั้นตอนเวลา
+คำอธิบายข้อความคำอธิบาย100ความยาวสูงสุด300ขนาดการฝังคำ (มิติของเวกเตอร์คำ)500ความยาวของเวกเตอร์ซ่อน9k, 10kขนาดพจนานุกรมของภาษาป้อนเข้าและขาออกx, Yเวกเตอร์ของพจนานุกรมแบบ 1-hot ที่ความยาวเป็น 9k และ 10k x → x ไม่ใช่ผลคูณเวกเตอร์ แต่ใช้เป็นตารางอ้างอิงค่า Y เป็นข้อมูล 1-hot ของ D ที่ชั้นตัวถอดรหัสเชิงเส้น นั่นคือเอาอาร์กิวเมนต์ของค่าสูงสุดของค่าขาออกของชั้นเชิงเส้นของ Dxเวกเตอร์ฝังคำความยาว 300 เวกเตอร์นี้มักผ่านการคำนวณล่วงหน้าโดยใช้วิธีการเช่น word2vec หรือ GloVehเวกเตอร์ซ่อนตัวเข้ารหัสความยาว 500 ที่แต่ละจุดเวกเตอร์นี้จะสรุปรวบคำทั้งหมดก่อนหน้า h ตัวสุดท้ายเรียกว่า "เวกเตอร์คำ" หรือที่ฮินตันเรียกว่า "เวกเตอร์ความคิด"sเวกเตอร์สถานะซ่อนตัวถอดรหัสความยาว 500Eตัวเข้ารหัส RNN 500 นิวรอน จำนวนขาออกเป็น 500 จำ
ตัวเข้ารหัสจะป้อนเข้าสู่ตัวถอดรหัสโดยตรงแค่ตอนแรกสุดเท่านั้น แต่หลังจากนั้นจะไม่ใช่แล้ว เส้นเชื่อมตรงจึงแสดงด้วยเส้นสีส้มอ่อนDตัวถอดรหัส 2 ชั้น ชั้นถดถอยมี 500 นิวรอน ชั้นเชิงเส้นเชื่อมต่อสมบูรณ์มี 10,000 นิวรอน (ขนาดคำศัพท์เป้าหมาย)
แค่ชั้นเชิงเส้นก็มีจำนวนพารามิเตอร์ค่าน้ำหนักเป็น 5 ล้าน (500×10000) แล้ว ส่วนชั้นถดถอยมีเป็น 10 เท่าscoreคะแนนการจัดเรียง ความยาว 100wค่ำน้ำหนักการใส่ใจ เป็นเวกเตอร์ 100 ตัว ค่าเหล่านี้จะเปลี่ยนแปลงไปในระหว่างขั้นตอนการฝึกAส่วนประกอบกลไกความใส่ใจ อาจเป็นผลคูณจุดของสถานะถดถอย หรือชั้นเชื่อมต่อสมบูรณ์ของเควียรี-คีย์-ค่า
ค่าขาออกเป็นเวกเตอร์ w ความยาว 1000H500×100
เป็นส่วนที่เวกเตอร์ซ่อน h ความยาว 100 เชื่อมโยงกับเมทริกซ์cเวกเตอร์บริบทความยาว 500
c เป็นการเชื่อมต่อเชิงเส้นถ่วงน้ำหนักเวกเตอร์ h ตัวด้วย w
c = H * w
เมื่อดูเป็นเมทริกซ์ จะเห็นได้ว่าค่าน้ำหนักความใส่ใจจะบ่งบอกว่าโครงข่ายปรับแบ่งความใส่ใจไปตามบริบทอย่างไร
 I love you je 0.94 0.02 0.04 t' 0.11 0.01 0.88 aime 0.03 0.95 0.02
แนวคิดเรื่องน้ำหนักความใส่ใจนี้ช่วยแก้ปัญหา "ความสามารถในการอธิบาย" ที่โครงข่ายประสาทเทียมมักถูกวิพากษ์วิจารณ์ หากเป็นโครงข่ายที่ทำการแปลคำต่อคำโดยไม่คำนึงถึงลำดับของคำจะได้เป็นเมทริกซ์ที่เกือบจะมีแต่องค์ประกอบแนวทแยง ในทางกลับกัน การที่มีค่าที่ไม่ใช่ในแนวทแยงอยู่นั้นบ่งชี้ว่ากลไกความใส่ใจนั้นมีความละเอียดอ่อนกว่านั้น ในการผ่านตัวถอดรหัสครั้งแรก 94% ของน้ำหนักความใส่ใจอยู่ที่คำภาษาอังกฤษคำแรก "I" ดังนั้นโครงข่ายจึงแสดงคำว่า "je" ในการผ่านตัวถอดรหัสครั้งที่สอง คำภาษาอังกฤษที่สาม "you" ได้ค่าน้ำหนักความใส่ใจ 88% ดังนั้นจึงแสดง "t" ในประโยคสุดท้าย คำภาษาอังกฤษที่สอง "ความรัก" ได้ค่าน้ำหนักความใส่ใจ 95% ดังนั้นจึงแสดง "aime"

 รูปแบบอื่น 
กลไกความใส่ใจหลายรูปแบบที่ใช้ค่าถ่วงน้ำหนักแบบยืดหยุ่น ตัวอย่างได้แก่:

 ความใส่ใจแบบบวก (additive attention): หรือเรียกว่า Bahdanau Attention
 ความใส่ใจแบบทวีคูณ (multiplicative): หรือที่เรียกว่า Luong Attention
 ความใส่ใจในตัว (self-attention)

สำหรับโครงข่ายประสาทแบบสังวัตนาการ กลไกความใส่ใจยังสามารถแบ่งตามมิติที่กลไกทำงาน คืออาจแยกตามปริภูมิ หรือแยกตามช่อง หรือทั้งสองอย่างรวมกัน

ตัวแปรเหล่านี้จะรวมค่าป้อนเข้าฝั่งตัวเข้ารหัสอีกครั้ง และแจกแจงใหม่ไปยังขาออกเป้าหมายแต่ละรายการ ในหลายกรณี เมทริกซ์ที่มีลักษณะคล้ายสหสัมพันธ์ของผลคูณจุดจะให้ปัจจัยในการถ่วงน้ำหนักใหม่ (ดูคำอธิบายประกอบ)
1. ผลคูณจุดตัวเข้ารหัส-ตัวถอดรหัส 2. QKV ตัวเข้ารหัส-ตัวถอดรหัส 3. ผลคูณจุดเฉพาะตัวเข้ารหัส 4. QKV เฉพาะตัวเข้ารหัส 5. บทช่วยสอนของ Pytorchthumb| การคำนวณความใส่ใจต้องใช้ทั้งตัวเข้ารหัสและตัวถอดรหัสthumb| การคำนวณความใส่ใจต้องใช้ทั้งตัวเข้ารหัสและตัวถอดรหัสthumb| ตัวถอดรหัสไม่ได้ใช้สำหรับการคำนวณความใส่ใจ หากมีป้อนเข้า corr แค่เดียว W คือความสัมพันธ์ในตัวของผลคูณจุด wij = xi xjthumb| ไม่มีการใช้ตัวถอดรหัสเพื่อคำนวณความใส่ใจthumb| คำนวณความใส่ใจด้วยชั้นเชื่อมต่อสมบูรณ์ แทนที่จะใช้ความสัมพันธ์จากผลคูณจุด
+ข้อความอธิบาย ฉลาก คำอธิบาย ตัวแปร X, H, S, T ตัวแปรตัวพิมพ์ใหญ่แสดงถึงประโยคทั้งหมด ไม่ใช่แค่คำปัจจุบัน ตัวอย่างเช่น H คือเมทริกซ์ที่แสดงถึงสถานะที่ซ่อนอยู่ของตัวเข้ารหัส หนึ่งคำต่อสดมภ์ S, T S คือสถานะซ่อนของตัวถอดรหัส และ T คือการฝังคำเป้าหมาย ในระหว่างขั้นตอนการฝึกอบรมของรูปแบบการสอนของ Pytorch นั้น T จะสลับระหว่างแหล่งข้อมูลทั้งสองตาม ขึ้นอยู่กับระดับของการบังคับผู้สอน (teacher forcing) ที่ใช้
T สามารถเป็นการฝังคำขาออกของโครงข่าย เช่น embedding(argmax(FC ขาออก))
หรือไม่ก็ ในกรณีของการบังคับผู้สอน T สามารถเป็นการฝังคำที่ถูกต้องที่รู้อยู่แล้วซึ่งเกิดขึ้นพร้อมกับความน่าจะเป็นในการบังคับที่คงที่ (เช่น 1/2) X, H สถานะซ่อนของตัวเข้ารหัส H, การฝังคำป้อนเข้า X W สัมประสิทธิ์ความใส่ใจ Qw, Kw, Vw, FC เมทริกซ์น้ำหนักสำหรับเวกเตอร์ของ เควียรี-คีย์-ค่า
FC คือเมทริกซ์น้ำหนักของชั้นเชื่อมต่อสมบูรณ์⊕, ⊗ ⊕ การต่อเวกเตอร์, ⊗ การคูณเมทริกซ์ corr ซอฟต์แม็กซ์ตามสดมภ์ (เมทริกซ์ที่รวมผลคูณจุดทั้งหมด) ผลคูณจุดในแบบที่ 3 คือ xi* xj ในแบบที่ 1 คือ hi* sj ในแบบที่ 2 คือ columni (Kw* H)* columnj (Qw* S) ในแบบที่ 4 คือ columni (Kw* X)* columnj (Qw* X)
ในแบบที่ 5 ใช้ชั้นเชื่อมต่อสมบูรณ์เพื่อกำหนดค่าสัมประสิทธิ์ สำหรับแบบ QKV ผลคูณจุดจะถูกทำให้เป็นมาตรฐานด้วย sqrt(d)
ในที่นี้ d คือความสูงของเมทริกซ์ QKV

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