2 คะแนน โดย GN⁺ 2023-09-07 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • 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 เรียบขึ้นซึ่งเป็นที่รู้จักอยู่แล้ว
  • 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 ความคิดเห็น

 
GN⁺ 2023-09-07
ความคิดเห็นจาก Hacker News
  • ขอบคุณที่เอาบทความนี้ไปโพสต์บน HN ผมเป็นหนึ่งในผู้เขียนร่วมของบทความนี้ และกระบวนการที่ได้ขุดคุ้ยปรากฏการณ์แปลก ๆ ที่เรียกว่า การจดจำอย่างรวดเร็วของ LLM ร่วมกับ Johno นั้นน่าสนใจมากจริง ๆ
    ผมทำงานกับโครงข่ายประสาทมา 30 ปี และทำ fine-tuning โมเดลภาษามาตั้งแต่ปี 2017 แต่พฤติกรรมนี้น่าประหลาดใจมาก คนอื่น ๆ ก็เคยเห็นปรากฏการณ์คล้ายกันใน LLM แต่ผมยังไม่เคยเห็นการวิเคราะห์ในลักษณะนี้ และอาจมีบางอย่างที่เราพลาดไป

    • ใน论文 Palm-E (https://palm-e.github.io/) มีประเด็นที่น่าสนใจว่า เมื่อปลดล็อก LLM แล้วฝึกด้วยข้อมูลภาพใหม่เท่านั้น ก็เกิด การลืมแบบหายนะ ในงานประมวลผลภาษาธรรมชาติอย่างมากตามคาด แต่ยิ่งขนาดของ LLM ก่อนฝึกใหญ่ขึ้น ผลกระทบดังกล่าวก็ยิ่งลดลงอย่างมาก
      โมเดล 12B ประสิทธิภาพลดลงเฉลี่ย -87.3%, 84B ลดลง -61.6%, ส่วน 562B ลดลงเพียง -3.9% เหมือนเกือบจะได้ข้อสังเกตสำคัญบางอย่างแล้ว และชวนสงสัยว่าการหลีกเลี่ยงการลืมแบบหายนะอาจเป็นแค่ เรื่องของขนาด หรือไม่
    • ผมคิดว่าการไม่ระบุว่า โมเดลฐาน คืออะไรเป็นความผิดพลาดใหญ่ และไม่ควรเหมารวมว่านี่เป็นปรากฏการณ์ของ LLM โดยทั่วไป
      ผมไม่ใช่นักวิจัย แต่เห็นได้ชัดว่า LLM ทั้งหมดไม่ได้มีโครงสร้างเหมือนกัน และแม้จะมีโครงสร้างคล้ายกัน ก็อาจวิวัฒน์จนทำงานเชิงฟังก์ชันต่างกันพอสมควรเมื่อรับอินพุตเดียวกัน แต่บทความจำนวนมากดูเหมือนปฏิบัติกับ LLM ราวกับเป็นสถาปัตยกรรมและโมเดลเดียวกัน
    • Jeremy ผมชอบงานของคุณเสมอ สาขาความเชี่ยวชาญของผมคือดาราศาสตร์ จึงขอเสริมในเชิงเทคนิคว่า ตัวอย่าง MOND ที่อธิบายไว้ตรงนี้ จริง ๆ แล้วตัวเลือก (E) ควรเป็นคำตอบที่ถูกต้อง
    • Jeremy ถ้าคำนวณ loss ของ batch หนึ่งครั้ง อัปเดต gradient แล้วคำนวณ loss ของ batch เดิมอีกครั้งด้วย no_grad น่าจะคำนวณได้อย่างแม่นยำว่าโมเดล เรียนรู้ไปมากแค่ไหนในหนึ่งขั้น
      ถ้าวาดกราฟความต่างระหว่าง loss ครั้งแรกกับครั้งที่สองในระดับ batch หรือระดับ observation/question ก็น่าจะได้ผลลัพธ์ที่น่าสนใจ
    • น่าสนใจมาก ก่อนหน้านี้ใน issue ของ Hugging Face 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 สูงขึ้น แต่ตัวจำแนกสำหรับข้อมูลที่ไม่เคยเห็นก็ยังอาจดีขึ้นได้
    • เราไม่ใช้คำว่า overfitting กับโมเดลที่ความแม่นยำดีขึ้น ผมคิดว่ามันชวนให้เข้าใจผิด
    • ผมคิดว่าเป็น overfitting แบบหนึ่ง เพราะ loss ของชุดฝึกดีขึ้น แต่ loss ของชุดตรวจสอบแย่ลง เพียงแต่มันต่างจาก overfitting ทั่วไปที่ความแม่นยำของชุดตรวจสอบแย่ลง
      ในกรณีนี้ความแม่นยำบนข้อมูลตรวจสอบยังดีขึ้นเรื่อย ๆ แต่เมื่อผิด ก็ผิดด้วยความมั่นใจสูงกว่าเดิม เช่น เดิมทีตอบผิดว่าเป็น 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

    • ขอแก้เล็กน้อย LLM สาธารณะจำนวนไม่น้อยถูกฝึกมากกว่าหนึ่ง epoch เล็กน้อยเป็นอย่างน้อย และโดยทั่วไปจะรัน หลาย epoch กับชุดย่อยข้อมูลบางชนิด เช่น Wikipedia
    • ไม่ได้ฝึกแค่หนึ่ง epoch บน ข้อมูลคุณภาพสูง จะรันหลาย epoch ทีม Llama ของ Meta ก็แสดงให้เห็นว่าเมื่อฝึกมากขึ้น ด้วยโทเคนมากขึ้น loss ก็ยังลดลงต่อเนื่อง
  • อาจไม่เกี่ยวกันก็ได้ แต่ผมลองให้ ChatGPT เขียนโค้ดสำหรับควบคุมรายละเอียดตัวกรองคอลัมน์ของสเปรดชีต Excel ใน PowerShell แบบโปรแกรมได้
    สิ่งที่ลองทั้งหมดใช้ไม่ได้ เกือบจะใกล้เคียงแล้วแต่ก็ยังไม่ทำงาน สุดท้ายผมหาโค้ด C# ที่แก้ปัญหาได้ เจอแล้วนำไปวางให้ ChatGPT อ่าน จากนั้นขอให้แก้ปัญหาใน PowerShell มันบอกว่าเข้าใจวิธีแก้ แล้วแก้สคริปต์ให้ และทำงานได้สมบูรณ์
    ด้วยเหตุผลบางอย่าง พฤติกรรมนี้เป็นประสบการณ์ที่เปิดหูเปิดตาพอสมควร พอให้ข้อมูลที่ไม่เคยถูกเรียนรู้มาก่อนอยู่ในคำถาม มันก็แก้ได้ จากมุมมองการเรียนภาษา ผมเข้าใจว่ามันเป็นไปได้อย่างไร แต่ก็รู้สึกเจ๋งมากที่ LLM ทำเรื่องแบบนั้นได้

    • เป็นเกร็ดที่น่าสนใจ ผมมองว่าตอนนี้มีแนวโน้มร่วมกันที่ผู้คนให้ความสำคัญกับ การค้นคืนความรู้ จากโมเดลมากเกินไป และประเมินส่วนที่เป็น “โมเดลภาษา” ต่ำเกินไป
      สิ่งเหล่านี้ถูกทำให้เป็นมนุษย์ได้ง่าย เพราะมันพูดและอธิบายได้ดี มันทำได้ดีจนเรายอมรับความสำเร็จมหัศจรรย์ขนาดใหญ่ของวิศวกรรมสถิติว่าเป็นเหมือนบล็อกพื้นฐานเล็ก ๆ แต่บล็อกนั้นคืออิฐทองคำ
      การแปล แก้ไข สรุป ขยายความ และอนุมานต่อยอด จากภาษาธรรมชาติไปเป็นโค้ด จากข้อความไปเป็นเสียง จากภาพไปเป็นภาพ และจากภาษาธรรมชาติหนึ่งไปเป็นอีกภาษาหนึ่ง คือสิ่งที่โมเดลเหล่านี้ทำ “ความรู้” ที่อยู่ภายในเป็นเพียงบริบทเท่านั้น
      ผมมอง vector embedding แตกต่างออกไปเล็กน้อย มันเป็นรูปแบบหนึ่งของ การจัดรายการเชิงความหมาย คล้าย Dewey decimal ที่ทำให้ค้นหาได้ แต่การค้นข้อมูลอย่าง “ประธานาธิบดีสหรัฐฯ ในปี 1984 คือใคร” จากโมเดลโดยตรงนั้น โดยส่วนตัวแล้วผมไม่ค่อยสนใจนัก
  • สงสัยว่าเคยมีการใช้ LLM เพื่อเสริม ข้อมูลฝึกของตัวเอง หรือไม่
    ถ้าฝึก LLM ด้วยอินพุตจำนวนน้อย จากนั้นให้มันสร้างอินพุตสังเคราะห์จำนวนมากแล้วเพิ่มเข้าไปในข้อมูลฝึก จะเป็นอย่างไร ผมคิดถึงมันเหมือนการ “ฝัน” แบบหนึ่ง อาจแค่เพิ่มสัญญาณรบกวนก็ได้ แต่ LLM สามารถเสริมบริบทให้ตัวเองแล้วปรับปรุงผลลัพธ์ด้วยการ “คิดออกเสียง” ได้ ดังนั้นมันอาจทำแบบเดียวกันกับข้อมูลฝึกได้หรือเปล่า

    • ใช่ งานวิจัยช่วงหลังจำนวนมากใช้ เอาต์พุตของ LLM เป็นข้อมูลฝึก และเป็นทิศทางวิจัยที่ประสบความสำเร็จมาก
    • โดยพื้นฐานแล้ว RLHF ก็คือสิ่งนั้น ใช้ชุดข้อมูลขนาดเล็กที่มนุษย์คัดกรอง ซึ่งบอกว่าเอาต์พุตที่ดีและไม่ดีคืออะไร เป็นแนวทางให้ LLM ฝึกตัวเอง ด้วยเอาต์พุตของตัวเองเท่านั้น
    • ที่น่าสนใจคือข้อสรุปนี้ตรงข้ามกับคอมเมนต์พี่น้องที่มองว่าคลังข้อมูลเล็ก ๆ ที่มนุษย์คัดกรองอาจมีประสิทธิภาพกว่าชุดข้อมูลสังเคราะห์ขนาดใหญ่
    • หากโมเดลฝึกด้วยข้อมูลเดียวกันที่มันสร้างเอง จะไม่มี ข้อมูลใหม่ ถูกเพิ่มเข้าสู่ระบบ มันจะย้ำเสริมทั้งสิ่งที่ตอบถูกอยู่แล้วและสิ่งที่ตอบผิดอยู่แล้ว จึงไม่น่าจะดีขึ้น
      อย่างไรก็ตาม การใช้โมเดลใหญ่สร้างข้อมูลฝึกสังเคราะห์เพื่อฝึกโมเดลอื่นที่เล็กกว่านั้นเป็นเรื่องปกติ วิธีนี้สามารถถ่ายโอนความรู้ของโมเดลหนึ่งไปยังอีกโมเดลหนึ่งได้
    • ลองทำสิ่งต่อไปนี้เองก็จะหาคำตอบได้ ให้โมเดลบางตัวสร้างข้อมูลสุ่ม แล้วฟิต linear regression หรือการแจกแจงอื่น จากนั้นสุ่มตัวอย่างจากการแจกแจงนั้นและเพิ่มเข้าไปในชุดฝึก
  • รู้สึกว่าชื่อเรื่องชวนให้เข้าใจผิด
    ในบริบทของการเรียนรู้ การเรียนรู้จากตัวอย่างเดียว เป็นสิ่งที่พึงประสงค์ ส่วนการท่องจำไม่ใช่หรือ? อย่างแรกคือเป้าหมายที่ตั้งไว้เพื่อให้สอดคล้องกับวิธีเรียนรู้ของสัตว์ ส่วนอย่างหลังเป็นโหมดความล้มเหลวที่เกิดขึ้นบ่อย บทความดูเหมือนจะแสดงกรณีของการท่องจำที่ไม่ได้อธิบายไว้ มากกว่าการเรียนรู้

  • ตอนฝึก ViT ตั้งแต่ต้น ผมเคยเห็น กราฟ loss คล้าย ๆ กัน และมันกวนใจมาตลอด แต่มีเรื่องที่น่ากังวลกว่านั้นจึงไม่ได้ขุดลึก
    ความแตกต่างคือ training loss จะสูงขึ้นระหว่างแต่ละ epoch การดิ่งลงอย่างฉับพลันระหว่าง epoch มากพอที่โดยรวมแล้ว training loss ลดลง และ validation loss ก็ลดลงต่อเนื่อง โมเดลเข้าใกล้ระดับล่าสุดพอสมควร เลยดูเหมือนว่า “ปกติ”
    ผมไม่เคยฝึก convolutional neural network ในสเกลนี้ จึงไม่รู้ว่าปรากฏการณ์คล้ายกันเกิดขึ้นที่นั่นด้วยหรือไม่ แต่ถ้าเคยเกิด ก็คงมีใครพูดถึงแล้ว ดังนั้นผมจึงคิดว่ากราฟ loss แปลก ๆ แบบนี้อาจเป็นลักษณะเฉพาะของ โมเดลที่ใช้ Transformer ก็ได้

    • ต้นฉบับบอกว่า LLM ต้องการ การทำ abstraction ที่ทรงพลัง ซึ่งโดยพื้นฐานแล้วเครือข่าย Transformer ก็เป็นเช่นนั้น และเห็นได้ชัดเมื่อฝึกตั้งแต่ต้น
      โมเดลดูเหมือนไปแทบไม่ถึงไหนอยู่พักใหญ่และไร้ประโยชน์โดยสิ้นเชิง แต่เมื่อถึงจุดหนึ่ง หลังผ่านรอบการฝึกหลายรอบ หากน้ำหนักพบจุดต่ำสุดบางจุดบนพื้นผิว error ได้ มันก็เริ่มทำงานได้ถูกต้องอย่างฉับพลัน เพราะ Transformer ได้เรียนรู้ abstraction ที่ใช้ได้กับข้อมูลอินพุตทั้งหมดจากมุมมองของกลไก attention ให้นึกถึงวิธีที่เรากวาดสายตาอ่านประโยค นี่เป็นคำอธิบายจากความทรงจำของบทความที่เคยเห็นใน HN จึงไม่ใช่คำอธิบายที่สมบูรณ์แบบ
    • เคยเห็นกราฟ training loss ของคนอื่นที่ขึ้นระหว่าง epoch แล้วร่วงลงแรง ๆ ตอนจบ epoch เช่นกัน ไม่เคยเจอเอง และไม่รู้สาเหตุเลย
    • หลัง epoch แรก เวลาเฉลี่ยนับจากครั้งล่าสุดที่รายการข้อมูลปัจจุบันถูกใช้ฝึกจะสั้นในช่วงต้น epoch และยาวขึ้นเรื่อย ๆ ระหว่างที่ epoch ดำเนินไป ผมคาดว่าเวลานั้นจะมีสหสัมพันธ์เชิงบวกกับ loss ของ iteration ปัจจุบัน
    • ถ้า loss สูงขึ้นตั้งแต่ epoch แรก ก็ดูแปลกอยู่
  • ตอนนี้สงสัยว่านี่หมายความว่าการเรียนรู้หรือท่องจำข้อมูลอย่างบริบทแชตปัจจุบันแบบทันทีให้เป็นส่วนหนึ่งของน้ำหนักโมเดลนั้นมีประสิทธิภาพเชิงคำนวณหรือไม่
    การเข้ารหัสแบบ one-shot ที่ฮิปโปแคมปัสทำได้ดีมาก ทำให้ประสบการณ์กลายเป็นความทรงจำที่ค้นคืนได้ซึ่งเชื่อมโยงกับแนวคิดเชิงความหมายที่เรียนรู้มาก่อนหน้า ในความเป็นจริง เมื่อเติบโตจากวัยเด็กสู่วัยผู้ใหญ่ การสร้างมโนทัศน์เชิงความหมายเกี่ยวกับเหตุการณ์ยิ่ง丰富ขึ้น ก็ยิ่งทำได้ดีขึ้น
    หากการท่องจำเหตุการณ์ของ LLM ถูกเร่งด้วยกรอบความหมายเชิงลึกแบบนี้ สิ่งนี้จะเป็นเส้นทางไปสู่ หน้าต่างบริบทยาว ได้หรือไม่?

    • อาจเป็นไปได้ แต่ยังมีหลายอย่างที่ไม่รู้ ปัญหาคือการท่องจำแบบทันทีจะมาพร้อมกับ การลืมอย่างหายนะ ของข้อมูลอื่นหรือไม่ และจะควบคุมอย่างไรระหว่างการท่องจำเนื้อหาล่าสุดกับการจดจำเนื้อหาเก่า
    • เป็นแค่ความคิดของมือใหม่ แต่ผมชอบไอเดียนี้ ต้องมีสำเนาโมเดลของตัวเองที่เปลี่ยนแปลงได้ และโดยปกติมันใหญ่มาก อีกทั้งต้องใช้ backpropagation จึงต้องใช้การคำนวณเพิ่มขึ้นเล็กน้อย
      ถ้าเป็นโมเดลโลคัลที่เล็กกว่า GPT-3.5/4 ก็อาจเป็นไปได้ นอกจากนี้ยังต้องตัดสินใจว่าอะไรควรเก็บไว้เป็นความทรงจำระยะยาว และอะไรควรเป็นความทรงจำระยะสั้น
  • ถ้าเรื่องนี้เป็นจริง ก็ยิ่งสนับสนุนแนวคิดที่ว่า ชุดข้อมูลที่มนุษย์คัดสรร ซึ่งมีขนาดเล็กกว่าชุดข้อมูลสังเคราะห์ที่ LLM สร้างขึ้นมาก มีคุณค่าสูงกว่ามาก

    • ฝ่ายที่มีข้อมูลมากที่สุดจะชนะ หากข้อมูลมีโครงสร้าง ก็สามารถใช้ประโยชน์จากสิ่งนั้นอย่างมากเพื่อสร้าง ข้อมูลสังเคราะห์ ได้
      ตัวอย่างคือ Apple Sim ซึ่งเป็นคลังโมเดล 3D ภายในอาคาร สามารถควบคุม renderer เพื่อสร้างข้อมูลหลายระดับ แล้วนำไปใช้กับภาพถ่ายจริงได้ วิธีนี้ถูกใช้กับภาพโดยรวมอยู่แล้ว ดังนั้น vector space จึงค่อนข้างเป็นธรรมชาติสำหรับ embedding หากพูดในเชิงพีชคณิต ก็ไม่จำเป็นต้องเพิ่มโครงสร้างมากนัก
      หากโดเมนมีลักษณะเชิงพีชคณิตสูง ก็อาจสร้างตัวอย่างที่ถูกต้องขึ้นมาแบบสุ่มได้ และผมอยากแนะนำสถานการณ์แบบนั้นให้ทุกคน
    • Google ไปถึงข้อสรุปนั้นเมื่อราว 2 ปีก่อน แต่จนถึงตอนนี้ก็ยังไม่ได้แสดงผลลัพธ์ที่ชัดเจน คำสำคัญข้างต้นคือ คัดสรร
    • น่าจะมี ตัวชี้วัดคุณค่า บางอย่างที่ถ่วงดุลระหว่างปริมาณกับคุณภาพ และในช่วงที่เราเข้าใจการทำงานของเทคโนโลยีได้เพียงระดับกลาง ๆ แบบตอนนี้ ก็น่าจะใช้ตัวชี้วัดนั้นให้เป็นประโยชน์ได้ กล่าวคือยังมีผลประโยชน์ที่เป็นไปได้จากข้อมูลสังเคราะห์
      อย่างไรก็ตาม ผมคิดว่าสักวันหนึ่งกฎที่ว่าไม่มีของฟรีจะเริ่มทำงาน และข้อมูลสังเคราะห์ก็ไม่ได้ใส่ใจกระบวนการสร้างข้อมูลของค่าผิดปกติอยู่เสมอไป
    • เห็นด้วยได้ยาก ผมกลับมองว่า AI ในยุค ULMFiT ได้ยุติความจำเป็นของข้อมูลที่มนุษย์คัดสรรในที่สุดแล้ว
      ChatGPT 4 ถูกใช้เป็น โมเดล oracle สำหรับฝึกโมเดล AI ทั่วไปอยู่แล้ว โมเดล oracle ที่ใหญ่จริง ๆ จะทำให้เกือบทุกอย่างไม่จำเป็น ยกเว้น input จากมนุษย์เพียงเล็กน้อย
    • ทำไมเราถึงทำได้แค่ตั้งทฤษฎีเกี่ยวกับสิ่งเหล่านี้? ทำไมเราจึงไม่รู้ว่าสิ่งเหล่านี้ ทำงานอย่างไรและเพราะอะไร?