AutoThink: เพิ่มประสิทธิภาพ LLM แบบโลคัลด้วยการให้เหตุผลแบบปรับตัว
(news.ycombinator.com)- เป็นเทคนิคที่ช่วยให้ LLM แบบโลคัลปรับจำนวน โทเค็นสำหรับการให้เหตุผล ตามความยากของคำถาม เพื่อสร้างคำตอบที่มีประสิทธิภาพมากขึ้นด้วยทรัพยากรเท่าเดิม
- แทนที่จะให้ “เวลาคิด” เท่ากันกับทุกคำถาม จะแบ่งเป็นความซับซ้อนระดับ HIGH/LOW แล้วจัดสรรโทเค็น 70~90% ให้กับการให้เหตุผลที่ซับซ้อน และ 20~40% ให้กับคำถามง่าย ๆ
- ใช้ steering vector ที่อิงจาก Pivotal Token Search ในเปเปอร์ Microsoft Phi-4 เพื่อชี้นำรูปแบบการให้เหตุผล เช่น ความแม่นยำเชิงตัวเลข การแก้ไขตนเอง และการสำรวจอย่างละเอียดถี่ถ้วน
- บน DeepSeek-R1-Distill-Qwen-1.5B คะแนน GPQA-Diamond เพิ่มจาก baseline 21.72% เป็น 31.06% คิดเป็นการปรับปรุงสัมพัทธ์ 43% และ MMLU-Pro เพิ่มจาก 25.58% เป็น 26.38%
- ทำงานได้กับโมเดลให้เหตุผลแบบโลคัล เช่น DeepSeek, Qwen และโมเดลที่ fine-tune เอง โดยใช้โทเค็นน้อยกว่าแนวทางมาตรฐานและ ไม่พึ่งพา API
การปรับทรัพยากรการให้เหตุผลตามแต่ละคำถาม
- AutoThink เป็นเทคนิค adaptive resource allocation ที่จัดสรรทรัพยากรการให้เหตุผลของ LLM แบบโลคัลแตกต่างกันไปในแต่ละคำถาม
- ขั้นแรกจะแยกคำถามเป็นความซับซ้อนระดับ HIGH หรือ LOW จากนั้นปรับสัดส่วนโทเค็นสำหรับการให้เหตุผลตามระดับความซับซ้อน
- การให้เหตุผลที่ซับซ้อน: 70~90% ของโทเค็นทั้งหมด
- คำถามง่าย ๆ: 20~40% ของโทเค็นทั้งหมด
- steering vector มาจาก Pivotal Token Search และช่วยนำทิศทางการให้เหตุผลของโมเดลระหว่างการสร้างข้อความ
- พฤติกรรมที่ชี้นำรวมถึง ความแม่นยำเชิงตัวเลข, การแก้ไขตนเอง และการสำรวจอย่างละเอียดถี่ถ้วน
- การใช้งานประกอบด้วยสองแกนหลัก
- เฟรมเวิร์กจำแนกแบบปรับตัว ที่เรียนรู้หมวดหมู่ความซับซ้อนใหม่ได้โดยไม่ต้องฝึกใหม่
- การใช้งานแบบโอเพนซอร์สของ Pivotal Token Search
ผล benchmark และขอบเขตการใช้งาน
- แสดงผลลัพธ์ต่อไปนี้บน DeepSeek-R1-Distill-Qwen-1.5B
- GPQA-Diamond: 31.06%, ปรับปรุงสัมพัทธ์ 43% เมื่อเทียบกับ baseline 21.72%
- MMLU-Pro: 26.38%, เพิ่มขึ้นจาก baseline 25.58%
- ใช้โทเค็นน้อยกว่าแนวทางมาตรฐาน
- AutoThink ใช้ได้กับโมเดลให้เหตุผลแบบโลคัลโดยทั่วไป
- ตัวอย่างโมเดล: DeepSeek, Qwen, โมเดลที่ fine-tune เอง
- ไม่มี dependency กับ API
- เอกสารที่เกี่ยวข้อง
1 ความคิดเห็น
ความคิดเห็นใน Hacker News
ผมขอเปิดเผยว่าแรงจูงใจของ AutoThink เริ่มจากประสบการณ์ที่เห็นโมเดลสาย reasoning เดิมๆ ใช้ทรัพยากรคำนวณสิ้นเปลือง—แม้แต่คำถามง่ายมากอย่าง ‘2+2 เท่าไหร่?’ ก็ยังใช้ ‘เวลาในการคิด’ มากพอๆ กับการพิสูจน์คณิตศาสตร์ซับซ้อน ทำให้เห็นความไม่มีประสิทธิภาพได้ชัดเจน สิ่งที่น่าประหลาดใจคือ เมื่อเอาสองอย่างที่ทดลองแยกกันอยู่ ได้แก่ adaptive classification (เรียนรู้หมวดหมู่ใหม่ได้โดยไม่ต้องฝึกซ้ำ) และ Pivotal Token Search ที่ Microsoft เปิดซอร์สในงานวิจัย Phi-4 มารวมกัน พร้อมใส่การจัดสรรงบประมาณโทเคนแบบไดนามิก ก็ได้การเพิ่มประสิทธิภาพที่มากกว่าคาดมาก ในทางปฏิบัติ จำนวนโทเคนที่ใช้โดยเฉลี่ยกลับลดลง เพราะคิวรีง่ายๆ จบได้เร็วกว่ามากจริงๆ และจะเพิ่มการคำนวณให้เฉพาะคิวรีที่ซับซ้อนเท่านั้น จุดเทคนิคที่น่าสนใจมีอยู่ไม่กี่ข้อ เช่น steering vector มีขนาดเล็กกว่า 1MB ต่อหนึ่งแพตเทิร์น จึงแทบไม่มีภาระด้านหน่วยความจำ กระบวนการจัดประเภทเพิ่มความหน่วงเพียงราว 10ms (น้อยมากจนแทบมองข้ามได้) และการเลือก target layer มีความสำคัญมาก (ในโมเดลส่วนใหญ่ เลเยอร์ช่วงกลางประมาณ 15~20 ให้ผลดีที่สุด) สิ่งที่อยากได้ฟีดแบ็กคือ—ประสบการณ์กับแนวทาง adaptive ที่คล้ายกัน, แพตเทิร์น reasoning ที่น่าจะ steer ได้มีประโยชน์กว่าเดิม, และไอเดียเรื่องการตรวจหา target layer ที่เหมาะสมที่สุดโดยอัตโนมัติ ถ้ามีข้อสงสัยเรื่องการติดตั้งใช้งานหรือผลลัพธ์ ถามมาได้ทุกอย่าง
ตอนนี้ก็ไม่แน่เสมอไปแล้วนะ เคยลองใช้ Gemini 2.5 Pro หรือยัง—กับคำถามง่ายๆ มันแทบไม่ ‘คิด’ เลย แต่ถ้าเป็นคำถามเขียนโค้ดจะตอบยาวเหมือนบทความตรรกะเต็มรูปแบบ o3 ก็ดูเหมือนจะเป็นแบบเดียวกัน
ขอยินดีด้วย! ทุกความพยายามในการทำให้ LLM มีประสิทธิภาพขึ้นเป็นเรื่องที่น่ายินดีมาก จนถึงตอนนี้ผมทำ optimization แบบขี้เกียจๆ โดยให้ Mac Mini M4 รันคิวรีง่ายๆ ด้วยโมเดล MLX และส่งคิวรีซับซ้อนไปให้ Nvidia 4090—ประสิทธิภาพของ M4 เทียบกับ Nvidia น่าทึ่งจริงๆ ผมคิดว่า Apple เดินมาถูกทางกับ MLX จะไปอ่าน AutoThink เพิ่มและมีแผนจะเอาไปรวมใน workflow ส่วนตัวด้วย
ผมคิดว่าน่าลองวิธีแทรก ‘คำตอบจาก non-reasoning model’ ไว้หลังพรอมป์ต์ของผู้ใช้—เช่น “ต่อไปนี้คือสิ่งที่ non-reasoning model คิดไว้: ... นี่คือผลลัพธ์ที่ผู้ใช้ต้องการหรือไม่?” ถ้ากรณีที่เวอร์ชัน non-reasoning เพียงพอ โมเดล reasoning ก็อาจตัดสินใจตอบได้เร็วขึ้นด้วย
แม้แต่ Claude Sonnet 3.5 (ยังไม่ใช่เวอร์ชันล่าสุดอย่าง 3.7 หรือ 4 ด้วยซ้ำ) ก็ใช้เวลาประมวลผลต่างกันอย่างชัดเจนตามความซับซ้อนของคิวรี—เห็นได้ว่ามีการปรับเวลาในการประมวลผลแบบไดนามิก
สงสัยว่าจะจัดประเภทคำถามอย่างไรว่าเป็น ‘คำถามซับซ้อน’ หรือ ‘คำถามง่าย’ คำถามที่ดูง่ายภายนอกอาจยากมากจริงๆ ก็ได้ ตัวอย่างเช่น คำตอบจำนวนเต็มของ x³+y³+z³=42 เป็นปัญหาที่ใช้ทรัพยากรคำนวณนานกว่า 100 ปี หรือสมการอย่าง x/(y+z)+y/(z+x)+z/(x+y)=4 ก็ดูเรียบง่ายภายนอก แต่มีคำตอบขนาดมหาศาลระดับหลายพันล้านที่ต้องใช้ทฤษฎีเส้นโค้งวงรี ดูลิงก์คำตอบ
การจัดประเภทความยากของปัญหาก็เป็นทักษะอีกแบบหนึ่งในตัวมันเอง—เป็นความสามารถที่เรียนรู้ได้โดยแยกจากการลงมือแก้จริง เช่น เมื่อเห็นสมการด้านบน คุณควรสังเกตความยากสามอย่างได้ทันที (ขอบเขตจำนวนเต็ม, 3 ตัวแปร, สมการกำลังสาม) เมื่อองค์ประกอบทั้งสามอย่างนี้มารวมกัน ความยากจะพุ่งขึ้นมาก ถ้าเป็นจำนวนจริงหรือจำนวนเชิงซ้อน มีตัวแปรน้อยกว่า หรือมีดีกรีต่ำกว่า ก็จะแก้ง่ายกว่ามาก แน่นอนว่าก็ไม่ได้แปลว่าต้องยากเสมอไป แต่อาจเป็นปัญหาที่ยังแก้ไม่ได้ ผมเองไม่ได้มีความสามารถพอจะลงมือแก้ แต่ฝึกมาพอที่จะรู้ว่าควรไปหาข้อมูลจากไหน เลยจับสัญญาณได้ทันทีว่า ‘นี่มันยากมาก’ ผมคิดว่า LLM ก็น่าจะเรียนรู้ hint แบบนี้ เพื่อพัฒนาความสามารถในการจัดประเภทความยากของปัญหาได้โดยไม่ต้องแก้จริง (หรือไม่ก็อาจเรียนรู้ไปแล้ว)
ในกรณีนี้ ความยากของคิวรีนิยามจากจำนวนโทเคนที่โมเดลใช้เพื่อสร้างคำตอบที่ถูกต้องบนชุดข้อมูลคำตอบจริง (เช่น GSM8k) ตัว adaptive classifier จะฝึกจากชุดข้อมูลนี้ แล้วนำไปใช้จัดประเภทในขั้นตอนอนุมาน
ตอนที่ Claude 3.7 ออกสวิตช์
extended thinkingผมก็ทำ POC แบบ autothink คล้ายๆ กันเหมือนกัน—แถมชื่อว่า autothink ด้วยgithub.com/NiloCK/autothink
บล็อก think-toggles-are-dumb
เวอร์ชันของผมมี first pass ให้ LLM ให้คะแนนความยากของคิวรีเป็น 0~100 แล้วจัดสรรงบประมาณการคิดแบบเชิงเส้นตามคะแนนนั้น แน่นอนว่าเรียบง่ายกว่าเมื่อเทียบกับงานของ OP แต่ดีใจมากที่ได้เห็นผลเชิงปริมาณ—เป็นผลงานที่ทำออกมาได้ดีมาก!
รู้สึกว่าเป็น optimization ที่ควรเกิดขึ้นอยู่แล้ว เลยแปลกใจที่การเปลี่ยนแปลงนี้ยังไม่เกิดเร็วกว่านี้ อธิบายได้ดีและลงมือทำเองด้วย น่าประทับใจ
กับโมเดล reasoning อย่าง QwQ หรือ Qwen 3 พูดตรงๆ ว่าผมไม่ได้ใช้เวลามากกับการปรับปรุงผลลัพธ์ แต่ลองหลายพรอมป์ต์เพื่อจำกัดการปล่อย reasoning token ออกมาเท่านั้น Gemma 3 27B QAT แม้จะไม่ใช่โมเดล reasoning แต่ก็ทำตามคำสั่งได้ดีมากเมื่อใช้ใน LLM chain หรือ route จึงเอาไปใช้กับการจัดประเภทล่วงหน้า/ปรับภาษาให้เหมาะก่อน แล้วค่อยใช้ reasoning จริงในขั้นถัดไปก็ได้ นอกจากนี้ยังสามารถสลับแสดงคำตอบระหว่าง thinking tag หลายๆ อันได้ด้วย ในการทดลองโมเดลแบบนี้ ผมให้นิยาม ‘โทเคนที่กำลังคิด’ ว่าเป็นทุกโทเคนที่ทำหน้าที่เป็นหลักก้าวกลางในการแก้ปัญหา ไม่ใช่แค่โทเคนสรุปผลแยกต่างหาก ประสบการณ์ของผมคือ ถ้าสั่งให้ใช้บางโทเคนหรือบางรูปแบบถ้อยคำก่อน มักจะช่วยให้ผลดีขึ้น และวิธีที่ AutoThink ใช้โทเคนที่ทำผลงานดีที่สุดจากชุดข้อมูลโดยอัตโนมัติก็ดูน่าจะนำไปใช้เป็น optimization ที่ทั่วไปและมีประสิทธิภาพมากกว่าได้ อย่างไรก็ตาม ถ้าใช้ pivot token มากเกินไป ก็มีความเสี่ยงจะ overfit กับคำถาม benchmark เท่านั้น จึงอยากรอดูต่อว่าวิธีนี้จะ generalize ได้ดีแค่ไหน โดยส่วนตัวผมมองว่าการเลือกคำ/โทเคนอย่างระมัดระวังเป็น optimization ต้นทุนต่ำแต่ประสิทธิภาพสูงที่ช่วยยกระดับคุณภาพผลลัพธ์ได้มาก และคาดหวังกับความสามารถในการ generalize ของ AutoThink
สิ่งที่ยอดเยี่ยมมากคือ โมเดลขนาดเล็กทำให้ทีมเล็กๆ และนักวิจัยรายบุคคลสามารถพิสูจน์แนวทางหรืองานทดลองที่สร้างสรรค์ได้ง่ายขึ้น โดยไม่ต้องอิจฉา AI lab ขนาดใหญ่อีกต่อไป ยิ่ง SML (Small Language Model) แข่งขันได้มากขึ้น สิ่งที่ทำได้บนอุปกรณ์ก็จะขยายไกลเกินคาดยิ่งกว่าเดิม
ถ้าคุณโฮสต์โมเดลให้คนอื่นใช้ การประหยัดทรัพยากรคอมพิวต์กับคำถามที่ง่ายมากก็นับว่าดี ในกรณีนี้อาจมีข้อเสียคือโมเดลอาจใส่ใจคำถามที่ดูง่ายน้อยลง แต่ผมไม่ได้เป็นคนรับภาระค่าใช้จ่ายนั้นเอง ในทางกลับกัน ถ้าผมใช้โมเดลบนพีซีของตัวเอง ผมลงทุนกับ GPU ไปเยอะแล้ว ก็อยากใช้ทรัพยากรให้คุ้มที่สุด—การลดการคำนวณแม้แต่กับคิวรีง่ายๆ กลับเป็นสิ่งที่ผมไม่ต้องการ
เป็นประเด็นชวนคิดที่ดีมาก! พวกเราก็กำลังจะคุยกันภายในเรื่องการออกแบบ AI crawler ว่าควรรับรู้แบบยืดหยุ่นไหมว่าแต่ละเว็บไซต์ที่เข้าไปเยี่ยมควรยิงคิวรีมากหรือน้อยต่างกัน อนึ่ง พวกเราคือ samaritanscout.org เป็นโปรเจกต์เสิร์ชเอนจินที่รวบรวมโอกาสอาสาสมัครในชุมชนทั้งหมดจากเว็บไซต์ไม่แสวงกำไรหลากหลายแห่งมาไว้ในที่เดียว
ผมเพิ่งเริ่มเข้ามาในโลก LLM และ AI ได้ไม่นาน แต่รู้สึกสนใจโปรเจกต์นี้มาก แนวคิดที่ AutoThink ปรับความพยายามในการคำนวณเพื่อให้ AI ‘คิดได้ฉลาดขึ้น’ ตามความยากของปัญหานั้นน่าประทับใจและเข้าใจได้ง่ายมาก—เปรียบได้กับคนที่ตอบ 2+2 ได้ทันที แต่จะใช้เวลาคิดจริงจังเฉพาะตอนเจอโจทย์ยาก แม้ผมจะยังไม่เข้าใจรายละเอียดเทคนิคอย่างงบประมาณโทเคนหรือ steering vector มากนัก แต่ก็หลงใหลในแนวทางที่ทั้งเร็วขึ้นและฉลาดขึ้นพร้อมกันแบบนี้ จะติดตามต่อไป
ผมคิดว่าใน LLM ควรหลีกเลี่ยงการใช้คำว่า ‘คิด’ หรือ ‘อนุมาน’—ทั้งสองคำมีความหมายเฉพาะและพื้นฐานทางปรัชญาอยู่ แต่ความจริงแล้ว LLM ไม่ได้คิดหรือให้เหตุผลแบบนั้น มันใกล้เคียงกับวิธีคอมพิวติ้งที่ใช้การคำนวณเพิ่มขึ้น (เวลาโปรเซสเซอร์มากขึ้น) เพื่อสร้างผลลัพธ์มากกว่า
ตอนนี้มันสายไปแล้ว ภาษามันเปลี่ยนไปแล้ว เหมือนในอดีตคำว่า “computer” เคยหมายถึงมนุษย์ที่คำนวณ แต่ทุกวันนี้ความหมายย้ายมาเป็นเครื่องจักรโดยสมบูรณ์แล้ว กรณีนี้ก็เป็นการเปลี่ยนความหมายของคำแบบเดียวกัน
เปรียบเทียบกับ “ping”—เวลาพูดว่า ping ไปยัง IP address เราไม่ได้ส่งคลื่นเสียงไปกระทบตัวถังโลหะจริงๆ แต่ก็ใช้ในเชิงเปรียบเปรยให้สอดคล้องกับการทำงานจริง ถ้าเป็นอุปมาอุปไมยที่มีประโยชน์ ก็ไม่จำเป็นต้องตรงกับความจริงแบบ 1:1 จึงจะใช้กันได้ในชีวิตประจำวัน
โลกทัศน์ของผมในระดับหลักการเป็นวัตถุนิยมและกำหนดนิยม แต่ในชีวิตประจำวันก็ผสมความเป็นอัตถิภาวนิยมและความรู้สึกทางจิตวิญญาณอยู่นิดหน่อย ในมุมมองเชิงปฏิบัติ การให้คุณลักษณะเหมือนมนุษย์ (anthropomorphic) กับเครื่องมือเหล่านี้ชั่วคราว ช่วยให้บทสนทนาไหลลื่นขึ้นและทำความเข้าใจเครื่องมือได้อย่างเป็นธรรมชาติ วิธีนี้บางครั้งก็มีข้อจำกัด แต่เมื่อถึงจุดนั้น ผมคิดว่าเราก็สลับไปใช้กรอบวิเคราะห์ที่เข้มงวดกว่านี้ได้ไม่ยาก