Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon กลไกความสนใจในหม้อแปลงปรับปรุงการสร้างรหัสได้อย่างไร


กลไกความสนใจในหม้อแปลงปรับปรุงการสร้างรหัสได้อย่างไร


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

แนวคิดพื้นฐานของความสนใจในหม้อแปลง

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

สูตรหลักสำหรับความสนใจของผลิตภัณฑ์ดอทที่ปรับขนาดคือ:

-
\ text {attere} (q, k, v) = \ text {softmax} \ left (\ frac {qk^t} {\ sqrt {d_k> \ ขวา) v
-

โดยที่ $$ Q $$, $$ K $$ และ $$ V $$ เป็นเมทริกซ์ของการสืบค้นกุญแจและค่าตามลำดับและ $$ D_K $$ เป็นมิติของคีย์ที่ใช้สำหรับการปรับขนาด ฟังก์ชั่น SoftMax แปลงคะแนนผลิตภัณฑ์ DOT ระหว่างการสืบค้นและคีย์เป็นการกระจายความน่าจะเป็นซึ่งจะใช้ในการสร้างน้ำหนัก

การจับบริบทและการพึ่งพาในรหัส

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

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

ความสนใจหลายหัวสำหรับบริบทที่หลากหลาย

Transformers ใช้ความสนใจแบบหลายหัวซึ่งมีการดำเนินการด้านความสนใจแบบขนานหลายครั้ง (หัว) ในการคาดการณ์เชิงเส้นที่แตกต่างกันของการฝังอินพุต หัวแต่ละหัวเรียนรู้ที่จะมุ่งเน้นไปที่แง่มุมต่าง ๆ ของอินพุตเช่นชื่อตัวแปรโครงสร้างการควบคุมการควบคุมหรือขอบเขตฟังก์ชัน การตั้งค่าหลายหัวนี้มีประโยชน์หลายประการ:

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

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

encoder-decoder ความสนใจสำหรับการจัดตำแหน่งเป้าหมายแหล่งที่มา

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

ความสนใจเชิงสาเหตุและสวมหน้ากากสำหรับรุ่นอัตโนมัติ

เมื่อสร้างรหัสโทเค็นโดยโทเค็นตัวถอดรหัสจะใช้การแทรกแซงด้วยตนเองเชิงสาเหตุ (สวมหน้ากาก) เพื่อให้แน่ใจว่าการทำนายตำแหน่ง $$ i $$ ขึ้นอยู่กับโทเค็นก่อนหน้า $$