Direct Preference Optimization (DPO) ช่วยให้นักพัฒนาสามารถทำ fine-tune โมเดลภาษาขนาดใหญ่ได้โดยไม่ต้องฝึก reward model แยกต่างหาก หรือต้องรันลูปการเรียนรู้แบบเสริมกำลัง (reinforcement-learning หรือ RL) ซึ่งช่วยลดทั้งต้นทุนการคำนวณและความไม่เสถียรที่มักเกิดขึ้นในกระบวนการ RL-from-human-feedback แบบดั้งเดิม
ทำไม RL-from-Human-Feedback ถึงดูหนักหน่วง
สูตรมาตรฐานของ RL-from-human-feedback (RLHF) มีสามขั้นตอน ขั้นแรก โมเดลพื้นฐาน (base model) จะถูก fine-tune ด้วยชุดข้อมูลที่คัดสรรมาแล้ว ขั้นต่อมา reward model จะเรียนรู้ที่จะทำนายความพึงพอใจของมนุษย์ระหว่างคู่ของผลลัพธ์ และสุดท้าย นักปฏิบัติจะรัน Proximal Policy Optimization (PPO) ซึ่งเป็นอัลกอริทึม RL แบบคลาสสิก เพื่อผลักดันนโยบาย (policy) ไปสู่รางวัลที่คาดการณ์ไว้สูงขึ้น ในขณะที่ยังคงความใกล้เคียงกับโมเดลต้นฉบับไว้
การตั้งค่าแบบสามโมเดลนั้นต้องใช้หน่วยความจำพร้อมกันและบังคับให้เกิดลูป RL ที่มีค่าใช้จ่ายสูง เนื่องจากต้องสุ่มตัวอย่างข้อความใหม่ในทุกการอัปเดต ทีมพัฒนาบ่อยครั้งพบว่า policy เรียนรู้ที่จะ "โกง" (game) รางวัล โดยสร้างผลลัพธ์ที่ได้คะแนนสูงในตัวแทน (proxy) แต่ไม่ได้คุณภาพตามที่ตั้งใจไว้ ผลลัพธ์ที่ได้คือกระบวนการที่ราคาแพง เปราะบาง และขยายขนาดได้ยาก
ทางลัดทางพีชคณิตของ DPO
DPO ข้ามขั้นตอน reward model ไปเลย ข้อสังเกตสำคัญคือเป้าหมายของ RLHF ซึ่งก็คือการเพิ่มรางวัลที่คาดหวังให้สูงสุดพร้อมกับลงโทษการเบี่ยงเบนจากโมเดลอ้างอิง (reference model) นั้นมีนิพจน์รูปแบบปิด (closed-form expression) การจัดรูปสมการใหม่ทำให้รางวัลสำหรับโทเคนใดๆ กลายเป็นผลต่างระหว่างค่า log-probability ที่กำหนดโดย policy และค่าที่กำหนดโดย reference model
ในทางปฏิบัติ หมายความว่า "รางวัล" นั้นฝังอยู่ในตัว policy เอง การฝึกฝนจึงลดรูปเหลือเพียงการคำนวณ classification loss เพียงครั้งเดียวบนคู่ความพึงพอใจ: เมื่อกำหนดคำตอบที่เลือก (chosen response) และคำตอบที่ถูกปฏิเสธ (rejected one) โมเดลจะถูกกระตุ้นให้กำหนดค่าความน่าจะเป็นที่สูงขึ้นให้กับข้อความที่เลือก ไม่ต้องมีการสุ่มตัวอย่าง (sampling) ไม่ต้องมีการอัปเดต PPO และไม่ต้องมีโมเดลเพิ่มเติมให้จัดเก็บ
หน้าตาของ loss แบบใหม่
Loss นี้จะเปรียบเทียบ log-probability ของคำตอบที่พึงพอใจภายใต้นโยบายปัจจุบัน กับค่าภายใต้ reference model โดยปรับสเกลด้วยไฮเปอร์พารามิเตอร์ $\beta$ ที่คล้ายกับอุณหภูมิ (temperature) ค่า $\beta$ ที่สูงจะบังคับให้ policy อยู่ใกล้กับ reference เพื่อรักษาความลื่นไหลและความปลอดภัย ส่วนค่า $\beta$ ที่ต่ำจะปล่อยให้ policy เบี่ยงเบนออกไปได้ไกลขึ้น เพื่อเพิ่มความชัดเจนในการเลือกคำตอบที่ต้องการ
ประโยชน์ที่สำคัญต่อนักพัฒนา
- ไม่ต้องมี reward model – ตัดความจำเป็นในการเก็บข้อมูล feedback จากมนุษย์เพิ่มเติมเพื่อสร้างตัวทำนายแยกต่างหาก
- ไม่มีการสุ่มตัวอย่างระหว่างการฝึก – โมเดลไม่ต้องสร้างข้อความใหม่เพื่อคำนวณ gradient ช่วยลดเวลาการใช้ GPU ได้อย่างมหาศาล
- ความเสถียร – ใช้ binary-cross-entropy loss มาตรฐานแทนที่ RL gradients ที่มีความแปรปรวนสูง ซึ่งมักทำให้เกิดการลู่ออก (divergence)
- ประสิทธิภาพ – การทำ gradient step เพียงครั้งเดียวในแต่ละคู่ความพึงพอใจก็เพียงพอแล้ว การฝึกฝนจะลู่เข้า (converge) โดยใช้จำนวน epoch น้อยกว่า PPO มาก
การทดลองในช่วงแรกแสดงให้เห็นว่า DPO ให้ประสิทธิภาพเทียบเท่าหรือเหนือกว่า PPO ในชุดข้อมูล benchmark ความพึงพอใจ โดยใช้ทรัพยากรการคำนวณเพียงเศษเสี้ยวเดียว ข้อได้เปรียบด้านต้นทุนนี้อธิบายว่าทำไมโครงการ open-source จำนวนมากจึงหันมาใช้ DPO หรือรูปแบบที่ใกล้เคียงกันเป็นวิธีการทำ alignment เริ่มต้น
ข้อแลกเปลี่ยน
DPO ทำงานบนชุดคู่ความพึงพอใจที่คงที่ เนื่องจากไม่เคยมีการสุ่มตัวอย่างคำตอบใหม่ในระหว่างการฝึก จึงไม่สามารถสำรวจพื้นที่คำตอบ (answer spaces) ที่ไม่มีอยู่ในข้อมูลต้นฉบับได้ ในทางตรงกันข้าม การรัน PPO แบบออนไลน์สามารถค้นพบพฤติกรรมใหม่ๆ ที่ให้รางวัลสูงกว่าได้โดยการทดสอบโมเดลอย่างต่อเนื่อง
หากตั้งค่า $\beta$ ต่ำเกินไปหรือรันการฝึกนานเกินไป policy อาจเบี่ยงเบนออกจาก reference model มากพอจนสูญเสียความลื่นไหลหรือสร้างสิ่งแปลกปลอม (artefacts) ที่ไม่พึงประสงค์ออกมา
บทสรุป
Direct Preference Optimization เข้ามาแทนที่โครงสร้าง RLHF แบบสามโมเดลที่หนักหน่วงด้วย RL ด้วย loss เพียงตัวเดียวที่มีความเสถียร ซึ่งเรียนรู้โดยตรงจากคู่ความพึงพอใจของมนุษย์ ผลลัพธ์ที่ได้คือเส้นทางที่ราคาถูกกว่าและคาดเดาได้มากกว่าในการทำ alignment ให้กับโมเดลภาษา—ตราบใดที่ข้อมูลการฝึกครอบคลุมพฤติกรรมที่คุณต้องการและคุณควบคุมพารามิเตอร์การเบี่ยงเบน (drift parameter) ได้อย่างเหมาะสม
