Consistency LLM: เปลี่ยน LLM ให้เป็นตัวถอดรหัสแบบขนาน เพิ่มความเร็วการอนุมานได้สูงสุด 3.5 เท่า
(hao-ai-lab.github.io)- เมื่อสร้างคำตอบยาว ๆ การถอดรหัสแบบอัตถดถอย (AR decoding) ที่สร้างโทเคนทีละตัวคือคอขวดหลักของความหน่วง และ CLLM เป็นแนวทางที่พยายามลดปัญหานี้ด้วยการถอดรหัสแบบขนานทีละ n โทเคน
- Consistency Large Language Models (CLLMs) ปรับจูน LLM ที่ผ่านการพรีเทรนมาแล้ว เพื่อให้เรียนรู้การแมปสถานะ n โทเคนใด ๆ ไปยังจุดคงที่เดียวกับผลลัพธ์ AR greedy ได้อย่างรวดเร็ว
- Jacobi decoding ในทางทฤษฎีจะลู่เข้าไปยังผลลัพธ์เดียวกับการสร้างแบบ AR greedy แต่เมื่อใช้กับ LLM เดิม ๆ กลับเพิ่มความเร็วได้จำกัดเพียงเฉลี่ยราว 1.05 เท่า ทำให้ใช้งานจริงได้ไม่มากนัก
- CLLM แสดงความเร็วในการสร้างที่เพิ่มขึ้น 2.4 เท่า~3.4 เท่า ในการทดลองกับ Spider, Human-Eval, GSM8k และ MT-bench และได้รับการประเมินว่าอยู่ในระดับใกล้เคียงหรือดีกว่าเทคนิคอนุมานเร็วอย่าง Medusa2 และ Eagle
- ระหว่างอนุมานไม่จำเป็นต้องใช้ คอมโพเนนต์โมเดลเสริม หรือแก้สถาปัตยกรรมของโมเดลเป้าหมาย จึงสามารถมุ่งปรับปรุงทั้งความเร็วและประสิทธิภาพการใช้หน่วยความจำได้
คอขวดการถอดรหัสที่ CLLM มุ่งแก้
- LLM ถูกใช้ในหลายด้าน เช่น การเขียนโปรแกรม กฎหมาย และคำแนะนำด้านสุขภาพ แต่ในขั้นตอนอนุมานโดยทั่วไปจะสร้างโทเคนทีละตัวด้วย การถอดรหัสแบบอัตถดถอย (AR decoding)
- ยิ่งคำตอบยาวขึ้น วิธีสร้างทีละโทเคนก็ยิ่งทำให้ความหน่วงเพิ่มขึ้น และเวลารอที่ผู้ใช้รับรู้ได้ก็ยาวนานขึ้น
- วิธีอนุมานเร็วที่มีอยู่เดิมมักต้องแก้สถาปัตยกรรม ใช้คอมโพเนนต์เสริม หรือใช้โมเดลร่าง เพื่อสร้างหลายโทเคนในครั้งเดียว
วิธีทำงานและข้อจำกัดของ Jacobi decoding
- Jacobi decoding เป็นวิธีที่เริ่มจากการวนซ้ำแบบจุดคงที่ของ Jacobi และ Gauss-Seidel และได้รับการพิสูจน์แล้วว่าใน greedy decoding จะให้ผลเหมือนกับการสร้างแบบ AR
- เปลี่ยนการสร้างแบบลำดับให้เป็นระบบของตัวแปร n ตัวและสมการไม่เชิงเส้น n สมการ เพื่อให้คำนวณแบบขนานได้ด้วยการวนซ้ำ Jacobi
- ลำดับการทำงานโดยละเอียดมีดังนี้
- จากพรอมป์ต์อินพุต สุ่มเดา n โทเคน ถัดไป
- ใส่พรอมป์ต์และลำดับ n โทเคนเข้าไปใน LLM แล้วอัปเดตซ้ำ ๆ
- เมื่อลำดับไม่เปลี่ยนแปลงอีก จะถือว่าถึง จุดคงที่ (fixed point)
- ลำดับ n โทเคนสุดท้ายจะลู่เข้าไปยังผลลัพธ์ที่ AR decoding จะสร้างภายใต้กลยุทธ์ greedy
- เส้นทางจากการสุ่มเดาเริ่มต้นไปจนถึงผลลัพธ์สุดท้ายของการสร้างแบบ AR เรียกว่า วิถี Jacobi (Jacobi trajectory)
- Jacobi decoding แบบพื้นฐานเมื่อใช้กับ LLM จริงให้ความเร็วเพิ่มขึ้นเพียงเฉลี่ยประมาณ 1.05 เท่า เมื่อเทียบกับ AR decoding
- LLM ที่เรียนรู้ด้วย AR จะทำนายโทเคนถัด ๆ ไปให้ถูกต้องได้ยาก หากโทเคนก่อนหน้ามีข้อผิดพลาด
- การวนซ้ำ Jacobi ส่วนใหญ่แก้ไขได้เพียงโทเคนเดียวในลำดับ n โทเคน ทำให้วิถียาวขึ้น
- Lookahead decoding และ speculative decoding พยายามลดความไม่มีประสิทธิภาพของ Jacobi decoding และ AR decoding เดิม แต่ทำให้เกิดต้นทุนหน่วยความจำเพิ่มเติมระหว่างอนุมาน
เป้าหมายการฝึกของ Consistency LLM
- CLLM เป็นวิธีปรับ LLM ที่ผ่านการพรีเทรนมาแล้วให้เคลื่อนไปยัง จุดคงที่ ได้อย่างสม่ำเสมอจากจุดใด ๆ ในวิถี Jacobi
- เป้าหมายนี้คล้ายกับเป้าหมายของ consistency models ซึ่งเป็นเทคนิคเร่งความเร็วโมเดล diffusion
- ใช้วิถี Jacobi ที่เก็บจากโมเดลเป้าหมาย เพื่อฝึกโมเดลด้วย loss ที่ส่งเสริม การลู่เข้าในขั้นตอนเดียว ระหว่างการวนซ้ำ Jacobi
- การฝึกเพื่อเปลี่ยนโมเดลเป้าหมายแต่ละตัวเป็น CLLM ประกอบด้วยสองส่วน
- การเตรียมวิถี Jacobi
- สำหรับแต่ละพรอมป์ต์ จะรัน Jacobi decoding ตามลำดับในทุกช่วงตัดทีละ n โทเคน
- ลำดับคำตอบทั้งหมดจะอยู่ในรูปของการนำจุดคงที่ต่อเนื่องหลายจุดมาต่อกัน
- แต่ละลำดับที่สร้างขึ้นระหว่างวิถีจะนับเป็นหนึ่งรายการข้อมูลฝึก
- ใช้การตัดทีละ n โทเคนเพื่อหลีกเลี่ยงความช้าจากการประเมินอินพุตยาวทั้งหมดในคำตอบยาว
- การปรับเหมาะร่วมกันของ consistency loss และ AR loss
- consistency loss ช่วยชี้นำให้ทำนายหลายโทเคนได้ในครั้งเดียว
- AR loss ช่วยรักษาคุณภาพการสร้าง โดยไม่ให้ CLLM เบี่ยงออกจากการกระจายของ LLM เป้าหมาย
- การเตรียมวิถี Jacobi
องค์ประกอบของ loss function
- กำหนดให้ LLM เป้าหมายเป็น
pและ CLLM เป็นqθโดยqθถูกเริ่มต้นด้วยพารามิเตอร์ของp - Global consistency (GC) loss ชี้นำให้ CLLM ส่งออกจุดคงที่
y*เมื่อรับสถานะใด ๆyในวิถี Jacobi เป็นอินพุต - Local consistency (LC) loss ปรับให้สถานะที่อยู่ติดกันในวิถี Jacobi คือ
y(j)และy(j+1)ให้เอาต์พุตเดียวกัน - ระยะห่างระหว่างการกระจาย
D(·||·)ใช้ตัวเลือกตามที่อภิปรายในวิธี GKD และในการทดลองนี้ใช้ forward KL เป็นหลัก - AR loss ใช้ loss แบบอัตถดถอยดั้งเดิมจากผลลัพธ์การสร้าง
lของ LLM เป้าหมายpเพื่อป้องกันไม่ให้เบี่ยงออกจากการกระจายของ LLM เป้าหมาย - loss การฝึกทั้งหมดประกอบด้วยผลรวมของ consistency loss และ AR loss ที่มีน้ำหนัก
w
การตั้งค่าการทดลองและผลลัพธ์
- การทดลองครอบคลุมงานเฉพาะโดเมนสามแบบและเบนช์มาร์กสนทนาแบบโดเมนเปิดหนึ่งรายการ
- Spider: text-to-SQL
- Human-Eval: การเติมโค้ด Python ให้สมบูรณ์
- GSM8k: คณิตศาสตร์
- MT-bench: การสนทนาโดเมนเปิด
- ใช้ fine-tuned coder LLM, Deepseek-coder-7B-instruct, LLaMA-2-7B, ABEL-7B-001 เป็นโมเดลเป้าหมายตามแต่ละงาน
- ทั้งการฝึกและการประเมินดำเนินการบนเซิร์ฟเวอร์ NVIDIA A100 40GB
- ในโดเมนเฉพาะ CLLM แสดงการเพิ่มความเร็วสูงสุดเมื่อเทียบกับ baseline เช่น โมเดลเป้าหมายเดิม, Medusa2 และ speculative decoding
- ใน MT-bench เมื่อ CLLM ที่ฝึกจาก LLaMA2-7B ด้วยชุดข้อมูล ShareGPT ใช้ร่วมกับ lookahead decoding จะทำความเร็วเพิ่มขึ้นได้ใกล้เคียงกับ Medusa2
- คะแนน MT-bench ก็อยู่ในระดับที่เทียบเคียงได้
- CLLM ไม่จำเป็นต้องแก้สถาปัตยกรรมเดิมของโมเดลเป้าหมาย
- ไม่มีคอมโพเนนต์เสริม จึงมีประสิทธิภาพด้านหน่วยความจำสูง
ต้นทุนการฝึก
- ต้นทุนการปรับจูน CLLM ถูกนำเสนอว่าอยู่ในระดับปานกลาง
- LLaMA-7B ใช้ผ่านเพียงประมาณ 1 ล้านโทเคน ในชุดข้อมูล Spider และทำความเร็วเพิ่มขึ้นได้ 3.4 เท่า
- ในกรณีชุดข้อมูลขนาดใหญ่ เช่น CodeSearchNet-Python ใช้เพียง 10% ของชุดข้อมูลในการสร้างวิถี Jacobi และได้ความเร็วเพิ่มขึ้นประมาณ 2.5 เท่า
- จำนวนโทเคนรวมประมาณได้จากสูตรต่อไปนี้
- จำนวนวิถีเฉลี่ยต่อพรอมป์ต์ × ความยาววิถีเฉลี่ย × จำนวนพรอมป์ต์
- ต้นทุนการฝึกโดยประมาณตามชุดข้อมูลมีดังนี้
- Spider: 2 ล้านโทเคน,
< 0.01%ของต้นทุนพรีเทรน - CodeSearchNet-Python: 100 ล้านโทเคน,
~0.1%ของต้นทุนพรีเทรน - GSM8K: 10 ล้านโทเคน,
~0.01%ของต้นทุนพรีเทรน - ShareGPT: 200 ล้านโทเคน,
~0.2%ของต้นทุนพรีเทรน
- Spider: 2 ล้านโทเคน,
การเดินหน้าเร็วและโทเคนคงที่
- โดยทั่วไป LLM เป้าหมายจะสร้างโทเคนที่ถูกต้องได้เพียงหนึ่งตัวในการวนซ้ำ Jacobi หนึ่งครั้ง
- ใน CLLM พบปรากฏการณ์ การเดินหน้าเร็ว (fast forwarding) ที่ทำนายโทเคนต่อเนื่องหลายตัวได้ถูกต้องในการวนซ้ำ Jacobi หนึ่งครั้ง
- ใน LLM เป้าหมาย บางครั้งโทเคนที่ถูกสร้างถูกต้องไว้ก่อนหน้าอาจเปลี่ยนเป็นโทเคนผิดในการวนซ้ำถัดไป
- CLLM แสดงความสามารถในการทำนายโทเคนที่ถูกต้องล่วงหน้า แม้โทเคนก่อนหน้าจะมีข้อผิดพลาด และยังคงรักษาโทเคนนั้นไว้ในการวนซ้ำต่อ ๆ ไป
- โทเคนลักษณะนี้เรียกว่า โทเคนคงที่ (stationary tokens)
- การเดินหน้าเร็วและโทเคนคงที่ทำให้ Jacobi decoding ของ CLLM ลู่เข้าเร็วขึ้น และมีส่วนช่วยเพิ่มความเร็วในการสร้าง
การเรียนรู้รูปแบบทางภาษา
- มีข้อสังเกตว่า CLLM เรียนรู้แนวคิดทางภาษาที่เรียกว่า คำปรากฏร่วม (collocations) ผ่านการฝึก
- คำปรากฏร่วมหมายถึงลำดับของคำหรือคำศัพท์ที่ปรากฏร่วมกันบ่อยกว่าความบังเอิญแบบสุ่ม
- มีตัวอย่างคำปรากฏร่วมทั้งในภาษาธรรมชาติและโค้ด
- ภาษาธรรมชาติ:
talk to,remind … of … - โครงสร้างกริยา+คำนาม:
make a decision,catch a cold - โครงสร้างไวยากรณ์ตามโดเมน:
SELECT … FROM …,if … else
- ภาษาธรรมชาติ:
- เป้าหมาย consistency generation กระตุ้นให้ CLLM อนุมานโครงสร้างเหล่านี้ได้จากทุกจุดในวิถี Jacobi และทำนายหลายคำพร้อมกันเพื่อลดจำนวนขั้นตอนการวนซ้ำ
แหล่งข้อมูลและโค้ด
- ดูรายละเอียดเพิ่มเติมได้ใน 论文
- มี implementation ให้ใช้งานใน codebase
- CLLM checkpoints ก็เปิดเผยต่อสาธารณะแล้ว
1 ความคิดเห็น
ความคิดเห็นใน Hacker News
คล้ายกับประสบการณ์ตอนที่เคยเรียนคลาส "วาดอิสระ" (ไม่มีการบรรยาย)
ตอนเด็ก ๆ มักมีคนบอกว่าฉันวาดรูปเก่ง แต่พอมาคิดดูจริง ๆ สิ่งที่ฉันจำได้คือการวาดภาพรายละเอียดคล้าย ๆ เดิมซ้ำไปซ้ำมา หรือใช้เวลานานมากกว่าจะวาดเสร็จ ฉันคิดว่าถ้ามีเวลาและความอดทนมากพอ ใคร ๆ ก็วาดฉากให้ออกมาดูน่าเชื่อถือได้พอสมควร
ในคลาสไม่มีทั้งกฎและการสอน แต่ละคนเอาวัสดุที่ตัวเองอยากใช้มา บางคนเอาหมึก บางคนเอาดินสอ ส่วนฉันเอาถ่านมา และสิ่งเดียวที่กำหนดไว้คือช่วงเวลาระหว่างท่าโพสของแบบ ตอนแรก ๆ แต่ละท่าใช้เวลาสั้นมากประมาณ 1 นาที แล้วค่อย ๆ ยาวขึ้นไปจนถึงท่าละ 5 นาที และจะฉีกภาพทิ้งแล้ววาดท่าเดิมใหม่เมื่อไรก็ได้
การวอร์มอัพสั้น ๆ บังคับให้ต้องจับสัดส่วนและโครงร่างให้ได้ตั้งแต่ครั้งแรกจริง ๆ และต่างจากความเชื่อที่ว่าความรีบร้อนจะทำให้พัง ดูเหมือนว่าเวลาฝึกหรือขัดเกลาทักษะ ความเร่งรีบจะทำหน้าที่เป็นแรงกดดันที่ช่วยกระตุ้นความใส่ใจและการเรียนรู้
ฉันมั่นใจว่าแม้ก่อนเข้าเรียนก็น่าจะวาดภาพคุณภาพใกล้เคียงกันได้ แต่คงใช้เวลานานกว่าเดิม 5~10 เท่า วิธีที่บังคับไม่ให้วกวนและทำให้รู้สึกถึงราคาของความผิดพลาดจากความใจร้อนนั้นได้ผลดี
แต่ก็ยังรู้สึกเสียดายที่เรียกเทคนิคนี้ว่า Consistency ชื่อนี้เหมาะกับการปรับปรุงคุณภาพมากกว่า แต่ดูไม่ค่อยเหมาะกับการเพิ่มความเร็วในการอนุมานนัก ถึงอย่างนั้นก็เข้าใจความหมายว่าเป็น "ความสอดคล้องกับผลลัพธ์ที่ในที่สุดจะได้ออกมาถ้าสร้างทีละโทเค็น" ถ้าจะให้ตั้งชื่อเอง ฉันอยากเรียกมันว่า Proficiency LLM มากกว่า คือยังคาดหวังผลลัพธ์เดิม แต่ไปถึงข้อสรุปเดียวกันโดยไม่ต้องสะดุดสะดุดคลำทางไป
สำหรับการวาดรูป คุณสามารถกำหนดเวลาที่ให้ในแต่ละครั้งแล้วค่อย ๆ ลดให้สั้นลงได้ ใน CLLM ดูเหมือนว่าจะทำให้กระบวนการฝึกยากขึ้นได้ โดยทำให้มันต้องแมปสถานะที่อยู่ไกลจากสถานะสุดท้ายมากขึ้นเรื่อย ๆ บนวิถี Jacobi ไปยังสถานะสุดท้าย
คำว่า "consistency" ถูกยืมมาจากความคล้ายกันระหว่าง consistency model สำหรับการสร้างภาพแบบ diffusion กับ consistency LLM และเป็นเพราะกระบวนการฝึกมีความคล้ายกัน
นักศึกษาจะเดินเข้าห้องแล็บ รับตัวอย่าง แล้วคำสั่งที่ได้รับมีแค่ว่า "วาดสิ่งนี้ภายใน 30 นาที เริ่มได้"
ไม่มีคำพูดอย่าง "ต้องวาดแบบนี้" หรือ "อันนี้ทำได้ อันนั้นห้ามทำ" ที่จริงแล้วมันแทบจะเป็นแนวว่า "ไม่สนว่าคุณจะกังวลหรือคิดว่าตัวเองวาดไม่เป็น เลิกแก้ตัวแล้ววาดเดี๋ยวนี้" มากกว่า
พวกเราทุกคนก็วาด และตลอดทั้งหน้าร้อนก็มีสัตว์เข้ามาเพิ่มอีกเรื่อย ๆ พร้อมกับทำแบบฝึกเดิมซ้ำไปซ้ำมา จนทุกคนพัฒนาขึ้นอย่างมาก
สิ่งที่วิชานั้นสอนคือ ใคร ๆ ก็วาดได้ จริง ๆ แล้วทุกคนวาดได้ ทัศนคติของทั้งกลุ่มเปลี่ยนจาก "ไม่แน่ใจด้วยซ้ำว่าทำได้ไหม" เป็น "ทำได้อยู่แล้ว มันง่าย เป็นเรื่องปกติ และไม่ได้พิเศษอะไร"
เป็นแนวทางที่อยากแนะนำมาก และเป็นหนึ่งในวิชามหาวิทยาลัยที่ทั้งให้ความรู้สึกเป็นอิสระและน่าทึ่งที่สุดเท่าที่ฉันเคยเรียน
ผู้เขียนบอกว่า การถอดรหัสแบบ Jacobi เทียบเท่ากับการถอดรหัสแบบ autoregressive เชิงละโมบ แต่ในทางปฏิบัติ เวลาพยายามหลีกเลี่ยงคำตอบที่ซ้ำซากหรือกว้างเกินไป เราก็มักอยากตั้งค่า sampling temperature ให้สูงกว่า 0 ไม่ใช่หรือ
ฉันไม่รู้จักกลยุทธ์การถอดรหัสนี้เลย จึงอาจพลาดวิธีง่าย ๆ ที่สะท้อนประเด็นนี้อยู่ก็ได้
ในบริบทของการฝึก CLLM แทนที่จะแมปไปยังเป้าหมายการฝึกที่เป็นจุดตรึงแบบสถิตซึ่งได้จากการถอดรหัส Jacobi เราเรียกมันว่าจุดตรึงแบบพลวัต ถ้าอยากดูความคืบหน้าใหม่ ๆ ก็ติดตามที่ GitHub repository ได้
ขั้นตอนการปรับจูนละเอียดที่ฝึกให้วิถีเข้าใกล้การเติมเต็ม n-โทเค็นที่มีสถิติตามต้องการก็น่าจะยังทำได้อยู่ แต่ฉันไม่แน่ใจว่าจะใช้สิ่งใดมาแทนขั้นตอน การตรวจจุดตรึง ได้ อาจจะเป็นประมาณว่า "ตรวจว่าค่านี้อยู่เหนือค่าเกณฑ์คงที่สำหรับ likelihood หรือไม่" ก็ได้
มันดูเหมือนการปรับให้เหมาะสมที่ค่อนข้างเสี่ยง ถ้าทำก่อนที่จะ เข้าใจจริง ๆ ว่าภายใน LLM เกิดอะไรขึ้น ตัวอย่างเช่น คนที่เชื่อในการตีความเชิงเรขาคณิตก็คงมีสิ่งจะพูด และในกรณีที่ใช้โทเค็นสำหรับ "เติมช่องว่าง" มันก็ดูเหมือนอาจเป็นผลเสียได้
อีกทั้งสมมติฐานที่ว่า "สร้างประโยคที่สมบูรณ์ในใจก่อน แล้วค่อยพูดออกมาทีละคำ" ก็เป็นเพียงสมมติฐาน ไม่ใช่ข้อเท็จจริงสากล และดูเหมือนจะลดทอนความซับซ้อนของสิ่งที่เกิดขึ้นในจิตใจเรามากเกินไป ก่อนที่จะพูดหรือพิมพ์ออกมาจริง ๆ เรามีแผนที่สมบูรณ์อยู่แล้วจริงหรือ ในฐานะชาวพุทธ ฉันมองว่านั่นใกล้เคียงกับภาพลวงตาเสียมากกว่า และยิ่งไปกว่านั้นแล้ว ความคิดที่เกิดขึ้นพร้อมกันล่ะ เราคิดแบบเป็นเส้นตรงในระดับประโยคจริงหรือ
อย่างไรก็ดี คณิตศาสตร์ก็ค่อนข้างเจ๋งมาก
อย่าปฏิบัติต่อ LLM ราวกับเป็นสิ่งมหัศจรรย์ที่คล้ายจิตใจมนุษย์ มันก็เป็นเพียงโปรแกรมอีกตัวที่สร้างประโยคที่ฟังดูสมเหตุสมผลเท่านั้น
ถ้าขอให้คนอธิบายเหตุการณ์ในอดีตที่ซับซ้อนด้วยหลายแนวทาง ผู้คนมักสอดแทรกเศษเสี้ยว ส่วนเสริม และประเด็นแตกแขนงเข้าไปอย่างรวดเร็วกลางประโยคเพื่อให้ครอบคลุมขอบเขตทั้งหมดของเหตุการณ์ ฉันไม่คิดว่าเคยเห็น สมมติฐานเรื่องความละเอียดระดับประโยค ในบริบททางวิทยาศาสตร์ที่จริงจังนัก
บางครั้งก็ไปติดทางตันทางไวยากรณ์กลางประโยค จนต้องปิดความคิดด้วยคำหรือวลีที่ฟังดูแปลก ๆ หรือไม่ก็หยุดแล้วเริ่มพูดใหม่ตั้งแต่ต้น
และก็ไม่เห็นมีเหตุผลชัดเจนว่าปรากฏการณ์นี้จะพังลงอย่างฉับพลันในระดับ ประโยค
น่าแปลกใจมากที่เรื่องนี้ยังไม่ได้รับความสนใจมากกว่านี้ ดูเหมือนว่าจะให้ประโยชน์ด้าน ประสิทธิภาพการอนุมาน อย่างชัดเจน
ต้นทุนการ fine-tune นี้สมเหตุสมผล และอยู่ที่ประมาณ 0.01% ของต้นทุน pretraining เดิม อีกทั้งผลลัพธ์ด้านประสิทธิภาพก็ดูค่อนข้างสม่ำเสมอ
ผมไม่ค่อยรู้จักงานวิจัยอื่นที่เสนอว่าสามารถเพิ่ม ประสิทธิภาพการอนุมานของ LLM ได้มากขนาดนี้ มีมาก่อนหน้านี้ไหม?
ยิ่งถ้ายังคงคุณภาพเอาต์พุตไว้ได้ ปรับปรุงได้ทั้ง latency ของคำถามและ throughput โดยรวม ไม่ต้องใช้การคำนวณเพิ่ม และยังใช้งานได้จริงพอสมควรโดยไม่เพิ่มความซับซ้อนมากนัก ก็ยิ่งน่าสนใจ
มันต่อยอดมาจากงานด้านการถอดรหัสแบบขนาน/Jacobi ดังนั้นอาจมองได้ว่า insight เองเป็นการพัฒนาแบบค่อยเป็นค่อยไป งานก่อนหน้านี้ก็จำเป็นและสำคัญ แต่ผลลัพธ์นี้อาจเป็นตัวที่ดึงคุณค่าในโลกจริงออกมาจากศักยภาพของการถอดรหัสแบบขนานได้
เพราะงั้นงานนี้จึงน่าสนใจมาก และเท่าที่ผมรู้ก็เคยมีความพยายามลักษณะนี้มาก่อนแต่ไม่ค่อยสำเร็จนัก อย่างไรก็ตาม ผลกระทบในทางปฏิบัติจะใหญ่แค่ไหนยังไม่ชัดเจน
ถ้าฝึกด้วยข้อมูลมากขึ้น ความเร็วก็จะเพิ่มขึ้นอีก เพราะโมเดลสามารถเรียนรู้จาก collocation และรูปแบบวลีที่พบบ่อยกว่าได้
ดูรายละเอียดเพิ่มเติมได้ในตัวงานวิจัย และเรายังยืนยันได้ด้วยว่าการเพิ่มความเร็วจะเริ่มอิ่มตัวเมื่อขนาดข้อมูลฝึกใหญ่ขึ้น
ตอนแรกผมนึกว่าเป็นงานสาย Medusa ที่ใช้ unembed head เพิ่มเพื่อเดาโทเค็นถัดไป แต่ไม่ใช่เลย
สุดยอดมาก ไม่ต้องใช้พารามิเตอร์เพิ่ม แค่เพิ่ม auxiliary training loss เท่านั้น
วิธีฝึกและวิธีถอดรหัสต่างกันโดยสิ้นเชิง และอย่างที่คุณชี้ไว้ CLLM ไม่ต้องใช้พารามิเตอร์เพิ่มหรือการตั้งค่า attention mask สำหรับการตรวจสอบแบบ tree-based
ดูเหมือนว่าอีกไม่นานคนจะเริ่มตระหนักว่าอาจไม่จำเป็นต้องฝึกโมเดลเลย
สิ่งที่ต้องการคือ การทำดัชนีและการสุ่มตัวอย่าง ที่ดี
โดยแก่นแท้แล้ว ในระดับหนึ่ง LLM ทุกตัวอาจมองได้ว่าเป็นฐานข้อมูลของชุดข้อมูล และมีอินเทอร์เฟซภาษาธรรมชาติที่ยอดเยี่ยมครอบอยู่ด้านบน
ทั้งสองอย่างเป็นเพียงวิธีที่ต่างกันในการสำรวจข้อมูลที่เก็บไว้
LLM ไม่ได้สำรวจข้อมูลที่เก็บไว้ LLM ไม่ใช่ ฐานข้อมูล ของข้อมูลฝึก
https://news.ycombinator.com/item?id=40266791
มีที่ไหนที่คนไม่ค่อยรู้เรื่องอย่างผมจะไป "ถามผู้เชี่ยวชาญ AI" ได้ไหม?
อย่างเช่นผมอยากถามว่าทำไม LLM ถึงไม่ตอบแบบกำหนดตายตัวเหมือนกันทุกครั้ง ทั้งที่ได้รับพรอมป์ต์เดียวกัน
ผมอยากเรียนรู้เรื่องนี้ และอาจต้องลองตามวิดีโอ YouTube แนว "สร้าง LLM ใน 1 ชั่วโมง" ดูก็ได้
ในกระบวนการเลือกนี้อาจมีปุ่มปรับหลายอย่างที่ใช้บังคับลักษณะของคำตอบ หากคุณต้องการให้เป็นแบบกำหนดตายตัวและเข้าถึงซอฟต์แวร์ได้โดยตรง ก็สามารถตั้งเป็น
top-k = 1หรือtemperature = 0.0ได้ ขึ้นอยู่กับซอฟต์แวร์ที่ใช้โดยทั่วไปค่าเริ่มต้นมักไม่เป็นแบบกำหนดตายตัว เพราะถ้าทำให้กำหนดตายตัวเต็มที่ คุณภาพผลลัพธ์มักจะไม่ค่อยดี
โมเดล LLM จะส่งออกเวกเตอร์ความน่าจะเป็นของโทเค็นต่าง ๆ และผู้ใช้ LLM จะใช้ความสุ่มเลือกโทเค็นจากรายการที่มีความเป็นไปได้สูง
เมื่อป้อนพรอมป์ต์เข้าไป มันจะคำนวณความน่าจะเป็นของคำถัดไป แล้วทำซ้ำกระบวนการนั้นจนกลายเป็นประโยคในที่สุด ความน่าจะเป็นที่เรียนรู้มานั้นอิงจากข้อมูลฝึก
ด้วยความที่เป็นโมเดลความน่าจะเป็นแบบนี้ จึงไม่กำหนดตายตัว 100% และนอกจากนี้โมเดลอย่าง ChatGPT ก็จงใจมีพารามิเตอร์
temperatureเพื่อเพิ่มความสุ่มให้กับกระบวนการทั้งหมดถ้าอยากอ่านต่อ คำตอบนี้อิงจากงานวิจัยนี้: The Matrix: A Bayesian learning model for LLMs, https://arxiv.org/abs/2402.03175
แต่ถ้าตั้งอุณหภูมิให้ต่ำที่สุดเท่าที่ทำได้ คุณภาพคำตอบก็มักจะตกลงมาก ระบบอาจติดอยู่กับ local optimum บางจุดและวนซ้ำไปมา คำตอบแบบนั้นอาจ "กำหนดตายตัว" ก็จริง แต่ไม่ได้ดีนัก
https://writings.stephenwolfram.com/2023/02/what-is-chatgpt-...
ไม่มีของฟรี ดังนั้นในมุมมองของผมตรงนี้ก็น่าจะมี path loss บางอย่างอยู่
ตัวอย่างเช่น trajectory แบบ Jacobi บางส่วนตัดเส้นทางที่มีอุณหภูมิสูงกว่าออกไปตามนิยาม ในมุมมองของการค้นคืนข้อมูลนี่อาจเป็นข้อดีด้วยซ้ำ แต่ถ้าคุณอยากเพิ่มความสร้างสรรค์ให้สูงสุด มันอาจเป็นข้อเสีย
ผมไม่แน่ใจว่าแนวคิด "ไม่มีของฟรี" จะใช้ได้อย่างมีนัยสำคัญเป็นพิเศษเสมอไปหรือไม่ บางอย่างก็ไม่ได้อยู่บน Pareto frontier
อยากได้คำอธิบายเพิ่มเติมอย่างละเอียดเกี่ยวกับส่วนที่บอกว่า "วิธี speculative decoding มีต้นทุนหน่วยความจำเพิ่มเติมระหว่างการอนุมาน"
ใน speculative decoding โมเดลที่เล็กกว่าจะสร้าง "กิ่ง" ที่เร็วกว่าแต่มีโอกาสไม่แม่นยำ จากนั้นจึงใช้โมเดลใหญ่ตรวจสอบกิ่งเหล่านี้ แต่ speculative decoding ต้องใช้หน่วยความจำเพียงเท่ากับโทเคนของสาขาเดียวเท่านั้น และโทเคนของกิ่งอื่น ๆ จะถูก mask ไว้เฉย ๆ ระหว่างการอนุมาน ถ้ามีบริบทขนาด 1000 และมีกิ่งยาว 5 โทเคนราว 30 กิ่ง ภาระหน่วยความจำเพิ่มเติมก็อยู่ที่ 3% ซึ่งถือว่าเล็กน้อยมาก ถ้าขนาดบริบทเล็กกว่าจำนวนกิ่งมาก ก็อดสงสัยไม่ได้ว่าผู้ใช้ LLM เชิงกำเนิดที่มีหน้าต่างบริบทแค่ 50 โทเคนจะกังวลเรื่องความเร็วในการสร้างจริงหรือ
นอกจากนี้ เทคนิค speculative decoding ไม่ได้จำกัดอยู่แค่ greedy sampling มันควรทำงานได้ตรงกับโมเดลต้นฉบับทุกประการและสุ่มตัวอย่างตามความน่าจะเป็นคาดหมายได้ วรรณกรรมส่วนใหญ่เกี่ยวกับ speculative decoding รายงานการเพิ่มความเร็วไว้แล้วที่ 2.6~3.5 เท่า ขณะที่บทความบล็อกนี้รายงานความเร็วการสร้างที่ 2.4~3.4 เท่า เลยไม่แน่ใจว่านี่เป็นการอัปเกรดที่ใหญ่ขนาดนั้นหรือไม่
ข้างบนมีการพูดถึง speculative decoding แล้ว และเทคนิคที่ผู้เขียนนำมาเปรียบเทียบดูเหมือนจะเป็น Medusa2 กับ Eagle แต่ปัญหาหลักยังเหมือนเดิม ไม่ว่าจะใช้วิธีไหนในการทำนายโทเคนล่วงหน้า ก็มีบางจุดที่จำเป็นต้องมีโทเคนก่อนหน้าอย่างเด็ดขาดก่อนจะทำนายโทเคนถัดไป นี่ไม่ใช่ปัญหาของโมเดลหรือเทคนิคใดเทคนิคหนึ่ง แต่เป็นคำถามเชิงคณิตศาสตร์ว่าอะไรทำได้จริง หากการแจกแจงความน่าจะเป็นของโทเคนถัดไปตัวที่ห้าขึ้นอยู่กับสี่โทเคนก่อนหน้าอย่างมาก แล้วจะทำนาย 5 โทเคนพร้อมกันได้อย่างไร? ไม่ว่าจะเป็น speculative decoding, Jacobi decoding หรือการถอดรหัสแบบขนานหลายโทเคนก็เหมือนกัน
ถ้าวิธีนี้รองรับได้แค่ greedy sampling ก็สงสัยว่าข้อดีคืออะไร ยิ่งเมื่อพิจารณาว่าเทคนิคอื่น ๆ ก็ทำความเร็วที่คาดหวังได้อยู่แล้วก็ยิ่งเป็นเช่นนั้น การเอาความเร็วที่ได้จาก greedy sampling ไปเทียบกับความเร็วจากการสุ่มแบบสุ่มจริง ๆ ก็เหมือนเอาแอปเปิลไปเทียบกับส้ม และต่อให้ดัดแปลงวิธีนี้ให้เข้ากับการสุ่มแบบสุ่มแล้ว ก็ยังสงสัยว่าเพราะปัญหาหลักที่พูดถึงข้างต้น ความเร็วระดับเดียวกันนั้นจะยังคงอยู่หรือไม่
ผ่าน consistency training งานนี้อาจแสดงให้เห็นว่า แม้จะเดาโทเคนก่อนหน้าผิด LLM ก็ยังสามารถทำนายโทเคนถัดไปอีก n ตัวได้
อีกด้านหนึ่ง ในทางคณิตศาสตร์ p(x_t|x_1,...,x_t-1) ย่อมขึ้นอยู่กับ x_1 ถึง x_t-1 ทั้งหมดก็จริง แต่ในทางปฏิบัติ สำหรับการทำนาย x_t อาจต้องการเพียง x_1 ถึง x_t-2 และให้ความสนใจกับ x_t-1 น้อยมาก ดังนั้นจึงอาจทำนาย x_t ได้จาก x_1 ถึง x_t-2 ร่วมกับ x_t-1 ที่ไม่แม่นยำ
เนื้อหาน่าสนใจ เป็นไอเดียที่หลายคนน่าจะเคยนึกถึง แต่ตัวบทความและการนำเสนอก็จัดระเบียบมาได้ดี