ในบทความนี้ ผมจะพูดถึงรายละเอียดและหลักการของวิธีการ LoRA (Low-Rank Adaptation Of Large Language Models) พร้อมกับอ้างอิงจากบทความวิจัย ประเด็นหลักของบทความวิจัยนี้คือการนำเสนอโครงสร้างใหม่ที่ช่วยลดต้นทุนในการปรับแต่งโมเดล (fine-tuning) ในขณะที่เพิ่มประสิทธิภาพ การปรับแต่งโมเดลมีบทบาทสำคัญในการศึกษาการประมวลผลภาษาธรรมชาติมานานแล้ว สมมติว่าคุณมีโมเดลที่ฝึกฝนแล้ว และต้องการขยายความรู้ของมัน คุณสามารถทำได้โดยการปรับแต่งโมเดล โดยไม่ต้องฝึกโมเดลใหม่ตั้งแต่ต้น
สมมติว่าโมเดลมีพารามิเตอร์ n ตัวหลังจากการฝึก และคุณจำเป็นต้องปรับแต่งให้ละเอียดขึ้น หากคุณใช้วิธีปรับแต่งแบบเต็มรูปแบบ พารามิเตอร์ทั้งหมดของโมเดลจะได้รับการอัปเดต เมื่อเราพิจารณาโมเดลที่มีพารามิเตอร์เป็นพันล้านตัว การอัปเดตพารามิเตอร์ทั้งหมดจะสร้างปัญหาเรื่องเวลาและพื้นที่จัดเก็บ ในเอกสารนี้ ผลลัพธ์ด้านประสิทธิภาพที่ดีขึ้นหรือเท่าเทียมกันจะถูกเน้นย้ำสำหรับโมเดล RoBERTa, DeBERTa, GPT-2 และ GPT-3 โดยใช้เมธอด LoRA
เอกสารดังกล่าวระบุว่าวิธี LoRA ได้รับแรงบันดาลใจจากการศึกษาวิจัยของ Li et. al (2018a) และ Aghajanyan et al (2020) การศึกษาวิจัยเหล่านี้เน้นย้ำว่าความสำเร็จของแบบจำลองที่มีการกำหนดพารามิเตอร์มากเกินไปนั้นแท้จริงแล้วขึ้นอยู่กับมิติภายในที่ต่ำ ซึ่งกลายมาเป็นประเด็นสำคัญที่กำหนดสมมติฐานของวิธี LoRA
วิธี LoRA เป็นการศึกษาวิจัยที่อิงตามการแยกตัวประกอบอันดับโดยสมบูรณ์ ในวิธีนี้ เมทริกซ์ลำดับสองชุดจะถูกเพิ่มขนานกับเลเยอร์หนาแน่นบางชั้นในเครือข่ายประสาทเทียมตามที่แสดงในรูปที่ 1 เมทริกซ์ลำดับเหล่านี้ถูกสร้างขึ้นโดยการกำหนดค่าอันดับที่กำหนด รูปภาพด้านล่างแสดงให้เห็นว่าเลเยอร์หนาแน่นมีลักษณะอย่างไรหลังจากเพิ่มเมทริกซ์อันดับตามลำดับ ตัวแปรอินพุตจะถูกส่งผ่านเมทริกซ์น้ำหนักก่อนการฝึกดั้งเดิมและเมทริกซ์แรกของเมทริกซ์ลำดับ จากนั้น ค่าเอาต์พุตจะถูกคำนวณโดยการรวมเอาต์พุตของเมทริกซ์ขนานสองชุดนี้เข้าด้วยกัน

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

แยกจากกันด้วยอันดับต่ำ ที่นี่ B คือเมทริกซ์ dxr, A คือเมทริกซ์ rxk ในขณะที่ r (อันดับ) มีขนาดเล็กกว่า d และ k มาก ในระหว่างการปรับแต่งอย่างละเอียด การอัปเดตการไล่ระดับเป็น Wo จะถูกป้องกัน เมทริกซ์ Wo และ ∆W ทั้งสองตัวจะถูกคูณด้วยค่าอินพุตเดียวกัน และผลลัพธ์จะถูกสรุปรวมกัน และเอาต์พุต h= w0 + ∆Wx = w0 +BAx จะเกิดขึ้น
ในช่วงเริ่มต้นของการฝึกอบรม พวกเขาใช้การกำหนดค่าเริ่มต้นแบบเกาส์เซียนแบบสุ่มสำหรับค่าเมทริกซ์ A และการกำหนดค่าเริ่มต้นเป็นศูนย์ทั้งหมดสำหรับค่าเมทริกซ์ B กล่าวอีกนัยหนึ่ง BA มีค่าเท่ากับศูนย์ในตอนเริ่มต้น
แอปพลิเคชัน LoRA ในสถาปัตยกรรมหม้อแปลง
มีเมทริกซ์น้ำหนัก 4 ตัวคือ Wq, Wk, Wv, Wo ในโมดูลการเอาใจใส่ตนเอง และเมทริกซ์น้ำหนัก 2 ตัวในโมดูล MLP ในสถาปัตยกรรมหม้อแปลง ในระหว่างการปรับ LoRA พวกเขาหยุดน้ำหนักในโมดูล MLP และใช้วิธีการนี้กับน้ำหนักการเอาใจใส่เพื่อให้การฝึกสอนเรียบง่าย
ข้อดี
- ความสะดวกสบายสูงสุดที่ LoRA มอบให้คือการใช้หน่วยความจำและการจัดเก็บ ตัวอย่างเช่น ในบทความดังกล่าว ระบุว่าสำหรับโมเดลหม้อแปลงขนาดใหญ่ที่ฝึกด้วย Adam การใช้ VRAM จะลดลงถึง 2/3 หาก << r d ทั้งนี้เนื่องจากสถานะของตัวเพิ่มประสิทธิภาพจะไม่ถูกเก็บไว้สำหรับพารามิเตอร์ที่ตรึงไว้
- สำหรับรุ่น GPT-3 175B การใช้ VRAM ลดลงจาก 1.2TB เป็น 350GB
- ในสถานการณ์ที่ r=4 และมีการเปลี่ยนแปลงเฉพาะน้ำหนักของค่าและเมทริกซ์การค้นหา ขนาดจุดตรวจสอบจะลดลงจาก 350GB เป็น 35MB ซึ่งทำให้สามารถดำเนินการฝึกอบรมด้วย GPU น้อยลง
- นอกจากนี้ เนื่องจากไม่มีการอัปเดตความชันในพารามิเตอร์ส่วนใหญ่ จึงทำให้มีการเร่งความเร็วได้ 25% เมื่อฝึก GPT-3 175B ด้วย LoRA เมื่อเทียบกับกระบวนการปรับแต่งละเอียดเต็มรูปแบบ
บทความยังระบุด้วยว่าหากจำเป็นต้องใช้กระบวนการปรับแต่งสำหรับภาษาอื่น ควรใช้โมเดลทั้งหมดแทน LoRA
ความรู้เพิ่มเติม
อันดับคืออะไร
อันดับ (Rank)คือจำนวนรวมของคอลัมน์หรือแถวที่เป็นอิสระเชิงเส้นต่อกันในเมทริกซ์ สมมติว่าเรามีเมทริกซ์ที่มี n คอลัมน์ และทุกคอลัมน์เป็นอิสระต่อกัน เราสามารถกล่าวได้ว่าอันดับคอลัมน์ของเมทริกซ์นี้คือ n และในทำนองเดียวกัน ถ้าทุกแถวของเมทริกซ์ที่มี n แถวเป็นอิสระต่อกัน เราสามารถกล่าวได้ว่าอันดับแถวของเมทริกซ์นี้คือ n
อันดับแถวและอันดับคอลัมน์ของเมทริกซ์จะต้องเท่ากัน ตัวอย่างเช่น เราสามารถดูเมทริกซ์ด้านล่าง
เมทริกซ์ A = [[1,2,5], [ 2, 4, 10] ]
หากเราพิจารณาเมทริกซ์อย่างละเอียด เราจะเห็นว่าแถวที่ 2 มีค่าเป็นสองเท่าของแถวที่ 1 ในทำนองเดียวกัน คอลัมน์ที่ 2 และ 3 ของเมทริกซ์มีค่าเป็น 2 และ 5 เท่าของคอลัมน์ที่ 1 ตามลำดับ กล่าวอีกนัยหนึ่ง ในขณะที่มีเวกเตอร์สองตัวอยู่บนเส้นเดียวกันโดยยึดตามแถวในเมทริกซ์ และมีเวกเตอร์ที่แตกต่างกันสามตัวบนเส้นอื่นโดยยึดตามคอลัมน์ แต่มีเวกเตอร์ที่ไม่ซ้ำกันเพียงหนึ่งตัวบนแต่ละแถวและแต่ละคอลัมน์ นั่นหมายความว่าอันดับของเมทริกซ์คือ 1
เพื่อค้นหาอันดับ เราจะแปลงเมทริกซ์เป็นรูปแบบขั้นบันได จากนั้นจึงคำนวณจำนวนแถวซึ่งประกอบด้วยค่าอย่างน้อยหนึ่งค่าที่ไม่ใช่ศูนย์
Low Rank Matrix คืออะไร
ในเมทริกซ์ อันดับอาจเท่ากับหรือต่ำกว่าจำนวนคอลัมน์หรือแถว เมทริกซ์ที่มีแถวหรือคอลัมน์อิสระเชิงเส้นน้อยกว่าจำนวนแถวหรือคอลัมน์ปัจจุบันเรียกว่าเมทริกซ์อันดับต่ำ เมทริกซ์ที่แถวหรือคอลัมน์ทั้งหมดเป็นอิสระเรียกว่าเมทริกซ์อันดับเต็ม
การแยกตัวประกอบอันดับคืออะไร
เราสามารถเขียนเมทริกซ์ที่มีอันดับ r ใหม่ได้เป็น B=LR^T โดยการแยกเมทริกซ์นั้นออกเป็นเมทริกซ์ L และ R โดยที่ L เป็นเมทริกซ์ขนาด mxr และ R^T เป็นเมทริกซ์ขนาด rxn กระบวนการนี้เรียกว่าการแยกส่วนตามอันดับ (rank decomposition )
ความสำคัญของการแยกตัวประกอบอันดับ:
ความสำคัญของกระบวนการแยกตัวประกอบตามลำดับ (rank factorization)คือ ช่วยให้เราสามารถแบ่งเมทริกซ์ B ออกเป็นเมทริกซ์ย่อย L และ R และจัดเก็บได้ในพื้นที่น้อยลง หมายความว่าเราสามารถจัดเก็บ B โดยการจัดเก็บตัวประกอบ L และ R ซึ่งจะลดความต้องการพื้นที่จัดเก็บของ B จาก mn เหลือเพียง (m+n)r นอกจากนี้ สิ่งสำคัญที่ควรกล่าวถึงคือ หลังจากแยกเมทริกซ์ออกเป็นเมทริกซ์ย่อยสองเมทริกซ์แล้ว จะช่วยให้สามารถคำนวณเกี่ยวกับเมทริกซ์ได้โดยไม่ต้องสร้างเมทริกซ์เดิมขึ้นมาใหม่ ด้วยเหตุนี้ เมื่อต้องจัดการกับเมทริกซ์ที่มีลำดับต่ำ การแยกตัวประกอบตามลำดับจึงถือเป็นขั้นตอนแรกที่สำคัญเสมอ หลังจากแยกตัวประกอบตามลำดับแล้ว การคำนวณจะทำได้เร็วขึ้นและใช้หน่วยความจำน้อยลง
นอกจากนี้
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับเมทริกซ์อันดับต่ำ คุณสามารถอ่านบล็อก ของ Ethan R. Epperly และเอกสาร LoRAได้ นอกจากนี้ คุณยังสามารถตรวจสอบแอปพลิเคชันที่ใช้โค้ดของ LoRA อย่างละเอียดได้ที่คลัง GitHub ของ microsoft/LoRA
Gizem ABALI, MSc. / หัวหน้าทีม