- fast.ai สังเกตเห็นกราฟ loss ที่ดูเหมือนว่า LLM จดจำหลังเห็นตัวอย่างในชุดข้อมูลเพียงครั้งเดียว ระหว่าง fine-tune โมเดล Kaggle LLM Science Exam
- โดยทั่วไป neural network มักเรียนรู้อย่างค่อยเป็นค่อยไปตลอดหลาย epoch แต่ในการทดลองนี้ training loss ลดฮวบเป็นขั้นบันได ที่ขอบเขตของ epoch ซึ่งต่างจากประสบการณ์เดิม
- รูปแบบคล้ายกันนี้ปรากฏไม่ว่าจะใช้ Hugging Face
Trainer, LoRA หรือ full fine-tuning ทำให้มองว่าเป็นแค่ บั๊กของไลบรารี ได้ยาก - ในการทดลอง cyclical learning rate และ 1cycle การเปลี่ยนแปลงของ training loss, validation loss และ MAP@3 โดยรวมสอดคล้องกับ สมมติฐานเรื่องการท่องจำ และการที่ validation loss แย่ลงไม่ได้แปลว่าความแม่นยำลดลงทันที
- หาก LLM ที่ผ่าน pretraining มาเรียนรู้ได้เร็วมาก ก็ควรทบทวน กลยุทธ์การ fine-tuning เช่น catastrophic forgetting, data augmentation, data mixing และ dropout ใหม่
กราฟ loss ที่ต่างจากการเรียนรู้ของ neural network ทั่วไป
- ตัวจำแนกประเภทแบบ neural network จะดูอินพุตและ label คำตอบซ้ำ ๆ แล้วปรับความน่าจะเป็นของเอาต์พุต
- กระบวนการผ่านข้อมูลฝึกทั้งหมดหนึ่งรอบเรียกว่า epoch
- loss แสดงว่าโมเดลผิดมากแค่ไหน และให้โทษมากขึ้นกับการทำนายที่ผิดอย่างมั่นใจ
- โดยปกติช่วงต้นของการฝึก training loss จะลดลงอย่างรวดเร็วแล้วค่อย ๆ ชะลอ ส่วน validation loss จะดีขึ้นช้ากว่า
- โดยทั่วไปแค่ดูกราฟ loss มักไม่เห็นจุดเริ่มและจุดจบของ epoch ชัดเจน
- มีข้อจำกัดเชิงประสบการณ์ว่า neural network ต้องใช้หลาย epoch กว่าจะเรียนรู้ภาพใดภาพหนึ่งได้เพียงพอ
- fast.ai พบรูปแบบที่ต่างออกไประหว่างฝึกโมเดลแก้โจทย์วิทยาศาสตร์แบบปรนัยใน Kaggle LLM Science Exam
- ฝึก 3 epoch ด้วย ชุดข้อมูลคำถามขนาดใหญ่ ที่ Radek Osmulski สร้าง
- ที่ท้ายแต่ละ epoch เกิด การลดลงแบบขั้นบันได ซึ่ง training loss ลดลงอย่างฉับพลัน
จากสงสัยว่าเป็นบั๊ก สู่สมมติฐานเรื่องการท่องจำ
- ตอนแรกสงสัยว่าเป็นบั๊กในกระบวนการฝึก
- เช่น ถ้าโมเดลยังเรียนรู้ต่อระหว่างประเมิน validation set ก็อาจทำให้ดูเหมือนว่าโมเดลดีขึ้นทันทีหลัง validation
- จึงตรวจสอบความเป็นไปได้ว่าเป็นปัญหาของ Hugging Face
Trainerที่ใช้อยู่ก่อน
- นักพัฒนาโอเพนซอร์สใน Alignment Lab AI Discord ก็ตอบว่าเคยเห็นกราฟ loss คล้ายกัน
- ผู้ตอบกลุ่มแรกต่างก็ใช้
Trainerทำให้สมมติฐานเรื่องบั๊กของไลบรารีดูมีเหตุผล - ต่อมามีการแชร์กรณีที่เกิดกราฟแบบเดียวกันแม้ใช้ custom training loop
- ผู้ตอบกลุ่มแรกต่างก็ใช้
- ตรวจสอบด้วยว่าเป็นปรากฏการณ์เฉพาะของ LoRA หรือไม่ แต่ก็พบรูปแบบเดียวกันใน full fine-tuning
- ในชุมชน fine-tuning LLM กราฟ loss แบบนี้แทบจะเป็นปรากฏการณ์ที่พบได้ทั่วไปอยู่แล้ว
รูปแบบการท่องจำอย่างรวดเร็วที่เห็นในการทดลอง Kaggle
- คำอธิบายจากเพื่อนร่วมงานโอเพนซอร์สคือกราฟ loss แสดงถึง overfitting
- หมายความว่าโมเดลเรียนรู้จนจำอินพุตได้หลังเห็นเพียงหนึ่งหรือสองครั้ง ซึ่งตอนแรกดูเหมือนเป็นไปไม่ได้
- ในกราฟแรก loss ลดจาก 0.8 เหลือ 0.5 หลัง epoch แรก และจาก 0.5 เหลือต่ำกว่า 0.2 หลัง epoch ที่สอง
- ช่วงกลางของ epoch ที่สองและสามดูแทบไม่มีการเรียนรู้ใหม่เกิดขึ้น
- หากคำอธิบายนี้ถูกต้อง ก็เท่ากับว่าโมเดลแทบจดจำ training set ได้จากการเห็นแต่ละแถวเพียง 3 ครั้ง
- สัญญาณที่โมเดลได้รับในแต่ละโจทย์มีเพียงการเปรียบเทียบระหว่าง label คำตอบกับตัวเลือกของตัวเอง
- ถึงอย่างนั้น training loss ก็ลดลงอย่างมาก
การเปลี่ยนแปลงของ loss เมื่อดูผ่าน cyclical learning rate
- ฝึกโมเดล Kaggle เป็นเวลา 2 epoch โดยใช้ schedule แบบ cyclical learning rate อิงจากบทความปี 2015 ของ Leslie Smith เรื่อง Cyclical Learning Rates for Training Neural Networks
- กราฟของ epoch แรกคล้ายรูปแบบการเรียนรู้ทั่วไป
- warmup learning rate ในช่วง 10% แรก
- จากนั้นลด learning rate ตาม cosine schedule
- หลัง learning rate สูงพอ training loss และ validation loss ลดลงอย่างรวดเร็ว แล้วค่อย ๆ ชะลอลง
- ใน epoch ที่สอง เนื่องจากไม่ได้สับชุดข้อมูลใหม่ batch ช่วงต้นจึงกลับมาอีกครั้งที่ learning rate ต่ำ
- batch เหล่านี้ใน epoch แรกก็ถูกเห็นเฉพาะตอน learning rate ต่ำ ทำให้โมเดลยังเรียนรู้ได้ไม่มาก
- เมื่อใกล้จบ 10% แรก batch ที่เคยเห็นตอน learning rate สูงใน epoch แรกกลับมาอีกครั้ง ทำให้ training loss ลดฮวบ
- ในช่วงเดียวกัน validation loss แย่ลง
- มองได้ว่าโมเดลไม่ได้ generalize ได้ดีขึ้น แต่กำลัง ท่องจำ ข้อมูลฝึกและมั่นใจมากในคำตอบที่ถูก
- เนื่องจาก loss function ให้โทษมากกว่ากับคำตอบผิดที่มั่นใจ validation loss จึงแย่ลง
- ช่วงท้ายของกราฟ training loss กลับแย่ลงอีก
- การที่ training loss แย่ลงเมื่อใช้ learning rate ที่สมเหตุสมผลไม่ใช่ปรากฏการณ์ทั่วไป
- ตามสมมติฐานการท่องจำ อธิบายได้ว่าโมเดลไม่สามารถจดจำ batch ที่เคยเห็นตอน learning rate ต่ำได้อย่างมีประสิทธิภาพ และภาวะมั่นใจเกินไปจาก batch ก่อนหน้ายังคงต่อเนื่อง
- หลังจากนั้นเมื่อโมเดลปรับระดับความมั่นใจกลับมาให้สมเหตุสมผลมากขึ้น validation loss จึงลดลงอีกครั้ง
การทดลอง 1cycle และความต่างของตัวชี้วัดประเมินผล
- ในการทดลองถัดมา ใช้ 1cycle training เป็นเวลา 3 epoch
- warmup learning rate เพียงครั้งเดียวใน 10% ของ batch ช่วงเริ่มการฝึก
- ใน batch ที่เหลือลด learning rate ด้วย cosine schedule
- ไม่ทำ warmup และ decay แยกในแต่ละ epoch ซ้ำเหมือนการทดลองก่อนหน้า
- เพิ่ม LoRA rank เพื่อชะลอความเร็วการเรียนรู้
- กราฟผลลัพธ์โดยรวมสอดคล้องกับคำอธิบายก่อนหน้า แต่ validation loss เพิ่มขึ้นใน epoch 3 ไม่ใช่ epoch 2
- ในการทดลองก่อนหน้า training loss ลดลงถึงราว 0.2 ใน epoch ที่สอง ทำให้ทำนายอย่างมั่นใจมากได้
- ในการทดลอง 1cycle โมเดลเพิ่งไปถึงระดับความมั่นใจเช่นนั้นใน epoch ที่สาม และ validation loss ก็เพิ่มขึ้นตอนนั้น
- การที่ validation loss แย่ลงไม่ได้หมายความว่าเกิด overfitting จริงเสมอไป
- ตัวชี้วัดบน Kaggle leaderboard คือ Mean Average Precision @ 3 ซึ่งเป็น accuracy แบบอิงอันดับของคำทำนายปรนัย 3 อันดับแรก
- validation MAP@3 ราย batch ของการฝึกแบบ 1cycle ยังคงดีขึ้นเรื่อย ๆ ใน epoch สุดท้าย แม้ validation loss จะแย่ลง
- ดู log เพิ่มเติมและ notebook สำหรับทำซ้ำได้ใน รายงาน ของ Johno
เหตุผลที่การเรียนรู้จากตัวอย่างเดียวอาจเป็นไปได้
- ไม่มีกฎพื้นฐานใดบอกว่า neural network ไม่สามารถจดจำอินพุตจากตัวอย่างเดียวได้
- เพียงแต่นักวิจัยและผู้ปฏิบัติงานมองจากประสบการณ์ว่า neural network ต้องใช้ตัวอย่างจำนวนมาก
- หาก loss surface ที่ stochastic gradient descent (SGD) สำรวจมีความขรุขระ ก็ยากที่จะขยับครั้งเดียวได้ไกล
- มีปัจจัยที่ทำให้ loss surface เรียบขึ้นซึ่งเป็นที่รู้จักอยู่แล้ว
- Visualizing the Loss Landscape of Neural Nets ของ Li et al. ปี 2018 กล่าวถึงความสัมพันธ์ระหว่าง residual connection กับ loss surface
- LLM ที่ผ่าน pretraining มาอาจมี loss surface ที่เรียบมากในบริเวณใกล้ minimum loss
- งาน fine-tuning จำนวนมากในชุมชนโอเพนซอร์สอาจเกิดขึ้นในบริเวณนี้
- เรื่องนี้เชื่อมโยงกับสมมติฐานใน บทความ ULMFiT ปี 2018
- แนวคิดพื้นฐานของ ULMFiT คือโมเดลที่ทำ language modeling ได้ดีจะสร้างชั้นของนามธรรมและความสามารถภายในที่อุดมสมบูรณ์
- ชั้นเหล่านั้นสามารถนำไปใช้กับงานอื่นได้ด้วยการ fine-tune เพียงเล็กน้อย
- LLM ในปัจจุบันใหญ่กว่าโมเดลที่ ULMFiT กล่าวถึงมาก จึงอาจมีชั้นนามธรรมที่อุดมสมบูรณ์กว่า
- การ fine-tune โจทย์วิทยาศาสตร์แบบปรนัยอาจใกล้เคียงกับการดึงความสามารถและความรู้ที่มีอยู่แล้วในโมเดลออกมาใช้
- อาจไม่ต้องปรับ weight มากนัก
- pretrained language model ที่ต่อ random classification head ขนาดเล็กอาจอยู่ในตำแหน่งที่เคลื่อนที่ไปสู่ชุด weight ที่ดีได้อย่างราบรื่น
- ใน optimizer Adam gradient ที่สม่ำเสมอและเรียบอาจเพิ่ม effective dynamic learning rate จนนำไปสู่ step ขนาดใหญ่ได้
คำถามที่เกิดขึ้นต่อกลยุทธ์การ fine-tuning
- หากโมเดลเรียนรู้ได้เร็วมาก สมมติฐานพื้นฐานของวิธีฝึกแบบเดิมอาจสั่นคลอน
- โมเดลที่เรียนรู้ช้าสามารถดูข้อมูลหลากหลายเป็นเวลานานตลอดหลาย epoch แล้วค่อย ๆ ดึงข้อมูลที่ generalize ได้ออกมา
- โมเดลที่เรียนรู้เร็วอาจจดจำตัวอย่างที่เห็นทันทีและก่อให้เกิดปรากฏการณ์อื่น
- catastrophic forgetting อาจเด่นชัดขึ้น
- หลังเห็นตัวอย่างความสัมพันธ์ที่พบบ่อยมาก 10 ตัวอย่าง แล้วเห็น counterexample ที่พบน้อยกว่า 1 ตัวอย่าง โมเดลอาจจดจำ counterexample แทนที่จะลดการจำของ 10 ตัวอย่างเดิมลงเพียงเล็กน้อย
- ผลของ data augmentation ในการป้องกัน overfitting ก็อาจอ่อนลง
- หาก LLM สกัด representation ของข้อมูลอินพุตได้ดี ต่อให้ผสมด้วย paraphrasing หรือ back-translation ก็อาจเท่ากับได้รับข้อมูลเดียวกันโดยสาระสำคัญ
- แนวทางบรรเทาที่เป็นไปได้มี dropout และ stochastic depth
- dropout ถูกใช้บ้างอยู่แล้วในเทคนิค fine-tuning อย่าง LoRA
- stochastic depth ดูเหมือนว่ายังไม่มีกรณีใช้งานใน NLP ในระดับที่มีนัยสำคัญ
- อีกวิธีหนึ่งคือรักษา การผสมชุดข้อมูลที่หลากหลาย ไว้ตลอดการฝึก
- Llama Code ประสบกับ catastrophic forgetting ที่ความสามารถอื่นแย่ลงมาก ขณะที่ประสิทธิภาพด้านโค้ดดีขึ้น
- ตอนนั้นสัดส่วนข้อมูลที่ไม่ใช่โค้ดอยู่ที่ 10%
- หากเป็นการผสมใกล้เคียง 50/50 ก็อาจได้ประสิทธิภาพการเขียนโค้ดโดยไม่สูญเสียความสามารถเดิม
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
ขอบคุณที่เอาบทความนี้ไปโพสต์บน HN ผมเป็นหนึ่งในผู้เขียนร่วมของบทความนี้ และกระบวนการที่ได้ขุดคุ้ยปรากฏการณ์แปลก ๆ ที่เรียกว่า การจดจำอย่างรวดเร็วของ LLM ร่วมกับ Johno นั้นน่าสนใจมากจริง ๆ
ผมทำงานกับโครงข่ายประสาทมา 30 ปี และทำ fine-tuning โมเดลภาษามาตั้งแต่ปี 2017 แต่พฤติกรรมนี้น่าประหลาดใจมาก คนอื่น ๆ ก็เคยเห็นปรากฏการณ์คล้ายกันใน LLM แต่ผมยังไม่เคยเห็นการวิเคราะห์ในลักษณะนี้ และอาจมีบางอย่างที่เราพลาดไป
โมเดล 12B ประสิทธิภาพลดลงเฉลี่ย -87.3%, 84B ลดลง -61.6%, ส่วน 562B ลดลงเพียง -3.9% เหมือนเกือบจะได้ข้อสังเกตสำคัญบางอย่างแล้ว และชวนสงสัยว่าการหลีกเลี่ยงการลืมแบบหายนะอาจเป็นแค่ เรื่องของขนาด หรือไม่
ผมไม่ใช่นักวิจัย แต่เห็นได้ชัดว่า LLM ทั้งหมดไม่ได้มีโครงสร้างเหมือนกัน และแม้จะมีโครงสร้างคล้ายกัน ก็อาจวิวัฒน์จนทำงานเชิงฟังก์ชันต่างกันพอสมควรเมื่อรับอินพุตเดียวกัน แต่บทความจำนวนมากดูเหมือนปฏิบัติกับ LLM ราวกับเป็นสถาปัตยกรรมและโมเดลเดียวกัน
no_gradน่าจะคำนวณได้อย่างแม่นยำว่าโมเดล เรียนรู้ไปมากแค่ไหนในหนึ่งขั้นถ้าวาดกราฟความต่างระหว่าง loss ครั้งแรกกับครั้งที่สองในระดับ batch หรือระดับ observation/question ก็น่าจะได้ผลลัพธ์ที่น่าสนใจ
transformersก็มีคุยเรื่องคล้าย ๆ กัน และตอนนั้นก็สรุปว่า การจดจำ น่าจะเป็นเหตุผลที่เป็นไปได้มากที่สุด ดีใจที่เห็นอีกฝั่งมาถึงข้อสรุปเดียวกันhttps://github.com/huggingface/transformers/issues/18730
ไม่แน่ใจว่าผู้คนใช้คำว่า “over confident” ในความหมายนี้จริง ๆ หรือไม่ เป็นคำที่ชวนเข้าใจผิดพอสมควร และสิ่งที่เกิดขึ้นตรงนี้ควรเรียกว่า overfitting มากกว่า
ถ้ามองข้อมูลเป็นจุด ๆ โมเดลที่ generalize ได้ดีจะพยายามสร้างฟังก์ชันที่เรียบง่ายที่สุดซึ่งฟิตกับจุดข้อมูลฝึกได้ค่อนข้างดี แต่ถ้าฝึกต่อไป พารามิเตอร์อาจมีค่ามากขึ้นมาก และเส้นโค้งของฟังก์ชันอาจแกว่งอย่างรุนแรงไกลเกินช่วงข้อมูลจริงเพื่อพยายามผ่านข้อมูลฝึกให้ตรงเป๊ะ
ดังนั้นในเชิงเทคนิคมันฟิตกับข้อมูลฝึกได้ดีขึ้น แต่กลายเป็นฟังก์ชันประหลาดที่ให้เอาต์พุตสุดโต่งกับข้อมูลใหม่ ทำให้ความสามารถในการ generalize แย่เกือบที่สุด อย่างไรก็ตาม overfitting ไม่เหมือนกับ การจดจำ โมเดลขนาดใหญ่สามารถจดจำชุดข้อมูลขนาดเล็กได้โดยไม่เกิด overfitting ก็ได้ เพราะมีพารามิเตอร์จำนวนมากมากจนต้องเปลี่ยนแปลงเพียงเล็กน้อยเพื่อให้ฟิตกับข้อมูลฝึก ในกรณีนี้การฝึกหยุดลง แต่ไม่มีการ generalize เกิดขึ้น และกรณีแบบนี้เรียกว่า ภาวะกำหนดไม่พอ
ยังมีโมเดลที่ให้ทั้งเอาต์พุตและค่าความเชื่อมั่นด้วย ดังนั้น “ความมั่นใจเกินไป” จึงอาจใช้หมายถึงโมเดลทำนายค่าความเชื่อมั่นสูง หรือก็คือความแปรปรวนของข้อผิดพลาดต่ำ อย่างผิดพลาดได้ด้วย
argmaxกับความน่าจะเป็นของเอาต์พุตเป็นฟังก์ชัน นี่ไม่ใช่ overfitting เลย ความแม่นยำในการจัดประเภท บนข้อมูลที่ไม่เคยเห็น หรือก็คือชุดตรวจสอบความถูกต้อง ยังคงดีขึ้นอยู่ประเด็นสำคัญตรงนี้คือปัญหา การปรับเทียบ: https://en.m.wikipedia.org/wiki/Calibration_(statistics). หมายความว่าความน่าจะเป็นที่โครงข่ายประสาทส่งออกมาไม่ได้สะท้อนความน่าจะเป็นที่สังเกตได้จริง ถ้าประเมินความน่าจะเป็นต่ำเกินไปอย่างเป็นระบบจะเรียกว่า “มั่นใจน้อยเกินไป” ถ้าสูงเกินไปจะเรียกว่า “มั่นใจเกินไป”
ในกรณีนี้ แม้การปรับเทียบจะแย่ลงจน validation loss สูงขึ้น แต่ตัวจำแนกสำหรับข้อมูลที่ไม่เคยเห็นก็ยังอาจดีขึ้นได้
ในกรณีนี้ความแม่นยำบนข้อมูลตรวจสอบยังดีขึ้นเรื่อย ๆ แต่เมื่อผิด ก็ผิดด้วยความมั่นใจสูงกว่าเดิม เช่น เดิมทีตอบผิดว่าเป็น X ด้วยความมั่นใจ 60% ตอนนี้ยังตอบผิดว่าเป็น X อยู่ แต่แสดงความมั่นใจสูงขึ้นเป็น 70% อะไรทำนองนั้น จึงเป็น overfitting รูปแบบแปลก ๆ และคำที่เฉพาะเจาะจงกว่าอย่าง “มั่นใจเกินไป” ก็ดูเหมาะดี
ผมไม่ใช่ผู้เชี่ยวชาญด้าน LLM แต่จากมุมมอง machine learning ทั่วไป เรื่องนี้ไม่ได้แปลกใจขนาดนั้น
เรามี generative model ที่มีพารามิเตอร์หลายพันล้านตัว ซึ่งจัดสรรมวลความน่าจะเป็นบางส่วนให้กับตัวอย่าง fine-tuning อยู่แล้ว ตอนนี้ก็คำนวณ gradient ที่จะเพิ่มมวลความน่าจะเป็นนั้น แล้วขยับไปหนึ่งก้าวในทิศทางนั้น สุดท้ายสิ่งที่ผู้เขียนแปลกใจก็คือก้าวเดียวนั้นเพิ่มมวลความน่าจะเป็นของตัวอย่างได้มาก
แต่ generative model นั้น มีพารามิเตอร์มากเกินอย่างมหาศาล และก็ให้มวลความน่าจะเป็นกับตัวอย่าง fine-tuning อยู่ระดับหนึ่งแล้ว ถ้าในปริภูมิพารามิเตอร์หลายพันล้านมิติไม่มีทิศทางที่เพิ่มความน่าจะเป็นของตัวอย่างจำนวนค่อนข้างน้อยได้อย่างรวดเร็วต่างหากที่น่าประหลาดใจกว่า
ผมคิดว่านี่ไม่ได้เป็นผลลัพธ์ที่ตามมาค่อนข้างชัดเจนอยู่แล้วหรือ จากข้อเท็จจริงที่ว่า LLM ส่วนใหญ่ในปัจจุบันถูกฝึกแค่ หนึ่ง epoch
เพราะถ้าฝึกแค่หนึ่ง epoch ก็หมายความว่าแค่ไล่ดูข้อมูลเป็นครั้งที่สองก็มีความเสี่ยงเรื่อง overfitting แล้ว อย่างไรก็ตาม ดูจะขัดแย้งอยู่บ้างกับผลลัพธ์ของเปเปอร์นี้ [0] ที่พบว่าข้อมูลเก่ายังดีพอ ๆ กับข้อมูลใหม่อย่างน้อยจนถึง 4 epochs
[0]: https://arxiv.org/abs/2305.16264
อาจไม่เกี่ยวกันก็ได้ แต่ผมลองให้ ChatGPT เขียนโค้ดสำหรับควบคุมรายละเอียดตัวกรองคอลัมน์ของสเปรดชีต Excel ใน PowerShell แบบโปรแกรมได้
สิ่งที่ลองทั้งหมดใช้ไม่ได้ เกือบจะใกล้เคียงแล้วแต่ก็ยังไม่ทำงาน สุดท้ายผมหาโค้ด C# ที่แก้ปัญหาได้ เจอแล้วนำไปวางให้ ChatGPT อ่าน จากนั้นขอให้แก้ปัญหาใน PowerShell มันบอกว่าเข้าใจวิธีแก้ แล้วแก้สคริปต์ให้ และทำงานได้สมบูรณ์
ด้วยเหตุผลบางอย่าง พฤติกรรมนี้เป็นประสบการณ์ที่เปิดหูเปิดตาพอสมควร พอให้ข้อมูลที่ไม่เคยถูกเรียนรู้มาก่อนอยู่ในคำถาม มันก็แก้ได้ จากมุมมองการเรียนภาษา ผมเข้าใจว่ามันเป็นไปได้อย่างไร แต่ก็รู้สึกเจ๋งมากที่ LLM ทำเรื่องแบบนั้นได้
สิ่งเหล่านี้ถูกทำให้เป็นมนุษย์ได้ง่าย เพราะมันพูดและอธิบายได้ดี มันทำได้ดีจนเรายอมรับความสำเร็จมหัศจรรย์ขนาดใหญ่ของวิศวกรรมสถิติว่าเป็นเหมือนบล็อกพื้นฐานเล็ก ๆ แต่บล็อกนั้นคืออิฐทองคำ
การแปล แก้ไข สรุป ขยายความ และอนุมานต่อยอด จากภาษาธรรมชาติไปเป็นโค้ด จากข้อความไปเป็นเสียง จากภาพไปเป็นภาพ และจากภาษาธรรมชาติหนึ่งไปเป็นอีกภาษาหนึ่ง คือสิ่งที่โมเดลเหล่านี้ทำ “ความรู้” ที่อยู่ภายในเป็นเพียงบริบทเท่านั้น
ผมมอง vector embedding แตกต่างออกไปเล็กน้อย มันเป็นรูปแบบหนึ่งของ การจัดรายการเชิงความหมาย คล้าย Dewey decimal ที่ทำให้ค้นหาได้ แต่การค้นข้อมูลอย่าง “ประธานาธิบดีสหรัฐฯ ในปี 1984 คือใคร” จากโมเดลโดยตรงนั้น โดยส่วนตัวแล้วผมไม่ค่อยสนใจนัก
สงสัยว่าเคยมีการใช้ LLM เพื่อเสริม ข้อมูลฝึกของตัวเอง หรือไม่
ถ้าฝึก LLM ด้วยอินพุตจำนวนน้อย จากนั้นให้มันสร้างอินพุตสังเคราะห์จำนวนมากแล้วเพิ่มเข้าไปในข้อมูลฝึก จะเป็นอย่างไร ผมคิดถึงมันเหมือนการ “ฝัน” แบบหนึ่ง อาจแค่เพิ่มสัญญาณรบกวนก็ได้ แต่ LLM สามารถเสริมบริบทให้ตัวเองแล้วปรับปรุงผลลัพธ์ด้วยการ “คิดออกเสียง” ได้ ดังนั้นมันอาจทำแบบเดียวกันกับข้อมูลฝึกได้หรือเปล่า
อย่างไรก็ตาม การใช้โมเดลใหญ่สร้างข้อมูลฝึกสังเคราะห์เพื่อฝึกโมเดลอื่นที่เล็กกว่านั้นเป็นเรื่องปกติ วิธีนี้สามารถถ่ายโอนความรู้ของโมเดลหนึ่งไปยังอีกโมเดลหนึ่งได้
รู้สึกว่าชื่อเรื่องชวนให้เข้าใจผิด
ในบริบทของการเรียนรู้ การเรียนรู้จากตัวอย่างเดียว เป็นสิ่งที่พึงประสงค์ ส่วนการท่องจำไม่ใช่หรือ? อย่างแรกคือเป้าหมายที่ตั้งไว้เพื่อให้สอดคล้องกับวิธีเรียนรู้ของสัตว์ ส่วนอย่างหลังเป็นโหมดความล้มเหลวที่เกิดขึ้นบ่อย บทความดูเหมือนจะแสดงกรณีของการท่องจำที่ไม่ได้อธิบายไว้ มากกว่าการเรียนรู้
ตอนฝึก ViT ตั้งแต่ต้น ผมเคยเห็น กราฟ loss คล้าย ๆ กัน และมันกวนใจมาตลอด แต่มีเรื่องที่น่ากังวลกว่านั้นจึงไม่ได้ขุดลึก
ความแตกต่างคือ training loss จะสูงขึ้นระหว่างแต่ละ epoch การดิ่งลงอย่างฉับพลันระหว่าง epoch มากพอที่โดยรวมแล้ว training loss ลดลง และ validation loss ก็ลดลงต่อเนื่อง โมเดลเข้าใกล้ระดับล่าสุดพอสมควร เลยดูเหมือนว่า “ปกติ”
ผมไม่เคยฝึก convolutional neural network ในสเกลนี้ จึงไม่รู้ว่าปรากฏการณ์คล้ายกันเกิดขึ้นที่นั่นด้วยหรือไม่ แต่ถ้าเคยเกิด ก็คงมีใครพูดถึงแล้ว ดังนั้นผมจึงคิดว่ากราฟ loss แปลก ๆ แบบนี้อาจเป็นลักษณะเฉพาะของ โมเดลที่ใช้ Transformer ก็ได้
โมเดลดูเหมือนไปแทบไม่ถึงไหนอยู่พักใหญ่และไร้ประโยชน์โดยสิ้นเชิง แต่เมื่อถึงจุดหนึ่ง หลังผ่านรอบการฝึกหลายรอบ หากน้ำหนักพบจุดต่ำสุดบางจุดบนพื้นผิว error ได้ มันก็เริ่มทำงานได้ถูกต้องอย่างฉับพลัน เพราะ Transformer ได้เรียนรู้ abstraction ที่ใช้ได้กับข้อมูลอินพุตทั้งหมดจากมุมมองของกลไก attention ให้นึกถึงวิธีที่เรากวาดสายตาอ่านประโยค นี่เป็นคำอธิบายจากความทรงจำของบทความที่เคยเห็นใน HN จึงไม่ใช่คำอธิบายที่สมบูรณ์แบบ
ตอนนี้สงสัยว่านี่หมายความว่าการเรียนรู้หรือท่องจำข้อมูลอย่างบริบทแชตปัจจุบันแบบทันทีให้เป็นส่วนหนึ่งของน้ำหนักโมเดลนั้นมีประสิทธิภาพเชิงคำนวณหรือไม่
การเข้ารหัสแบบ one-shot ที่ฮิปโปแคมปัสทำได้ดีมาก ทำให้ประสบการณ์กลายเป็นความทรงจำที่ค้นคืนได้ซึ่งเชื่อมโยงกับแนวคิดเชิงความหมายที่เรียนรู้มาก่อนหน้า ในความเป็นจริง เมื่อเติบโตจากวัยเด็กสู่วัยผู้ใหญ่ การสร้างมโนทัศน์เชิงความหมายเกี่ยวกับเหตุการณ์ยิ่ง丰富ขึ้น ก็ยิ่งทำได้ดีขึ้น
หากการท่องจำเหตุการณ์ของ LLM ถูกเร่งด้วยกรอบความหมายเชิงลึกแบบนี้ สิ่งนี้จะเป็นเส้นทางไปสู่ หน้าต่างบริบทยาว ได้หรือไม่?
ถ้าเป็นโมเดลโลคัลที่เล็กกว่า GPT-3.5/4 ก็อาจเป็นไปได้ นอกจากนี้ยังต้องตัดสินใจว่าอะไรควรเก็บไว้เป็นความทรงจำระยะยาว และอะไรควรเป็นความทรงจำระยะสั้น
ถ้าเรื่องนี้เป็นจริง ก็ยิ่งสนับสนุนแนวคิดที่ว่า ชุดข้อมูลที่มนุษย์คัดสรร ซึ่งมีขนาดเล็กกว่าชุดข้อมูลสังเคราะห์ที่ LLM สร้างขึ้นมาก มีคุณค่าสูงกว่ามาก
ตัวอย่างคือ Apple Sim ซึ่งเป็นคลังโมเดล 3D ภายในอาคาร สามารถควบคุม renderer เพื่อสร้างข้อมูลหลายระดับ แล้วนำไปใช้กับภาพถ่ายจริงได้ วิธีนี้ถูกใช้กับภาพโดยรวมอยู่แล้ว ดังนั้น vector space จึงค่อนข้างเป็นธรรมชาติสำหรับ embedding หากพูดในเชิงพีชคณิต ก็ไม่จำเป็นต้องเพิ่มโครงสร้างมากนัก
หากโดเมนมีลักษณะเชิงพีชคณิตสูง ก็อาจสร้างตัวอย่างที่ถูกต้องขึ้นมาแบบสุ่มได้ และผมอยากแนะนำสถานการณ์แบบนั้นให้ทุกคน
อย่างไรก็ตาม ผมคิดว่าสักวันหนึ่งกฎที่ว่าไม่มีของฟรีจะเริ่มทำงาน และข้อมูลสังเคราะห์ก็ไม่ได้ใส่ใจกระบวนการสร้างข้อมูลของค่าผิดปกติอยู่เสมอไป
ChatGPT 4 ถูกใช้เป็น โมเดล oracle สำหรับฝึกโมเดล AI ทั่วไปอยู่แล้ว โมเดล oracle ที่ใหญ่จริง ๆ จะทำให้เกือบทุกอย่างไม่จำเป็น ยกเว้น input จากมนุษย์เพียงเล็กน้อย