1 คะแนน โดย GN⁺ 2024-05-02 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • หากเปลี่ยนเป้าหมายมาตรฐานของ LLM อย่าง การทำนายโทเค็นถัดไป ไปเป็นการทำนายโทเค็นในอนาคตหลายตัวพร้อมกัน จะสามารถดึงประสิทธิภาพการสร้างโค้ดและภาษาธรรมชาติให้สูงขึ้นได้ แม้ใช้ข้อมูลงบประมาณการคำนวณเท่าเดิม
  • โครงสร้างใช้หลาย output head วางบน Transformer body ที่ใช้ร่วมกัน และในการอนุมานพื้นฐานจะใช้เฉพาะ head สำหรับโทเค็นถัดไป ทำงานเหมือนการสร้างแบบ autoregressive เดิม
  • ในโมเดลโค้ด โมเดล 13B parameters แก้ HumanEval ได้มากกว่าโมเดลทำนายโทเค็นถัดไปที่เทียบกันได้ 12% และแก้ MBPP ได้มากกว่า 17% โดยประโยชน์เห็นชัดขึ้นในโมเดลขนาดใหญ่
  • head เพิ่มเติมถูกนำไปใช้กับ self-speculative decoding โดยโมเดล 4-token prediction แสดงความเร็วอนุมานเพิ่มขึ้นสูงสุด 3× และโมเดล 8-byte prediction เพิ่มขึ้น 6.4×
  • ในงานสังเคราะห์ วิธีนี้เป็นประโยชน์ต่อ induction heads และการอนุมานเชิงอัลกอริทึม และอาจมีผลช่วยลดความต่างของ distribution ระหว่าง teacher forcing ตอนฝึกกับ autoregressive ตอนสร้าง

วิธีทำนายหลายโทเค็น

  • language modeling แบบเดิมลดค่า cross-entropy loss ของโทเค็นถัดไปหนึ่งตัวในแต่ละตำแหน่ง
  • การทำนายหลายโทเค็นขยายเป้าหมายการฝึกให้ทำนายโทเค็นถัดไป n ตัวพร้อมกันในแต่ละตำแหน่ง
  • โครงสร้างโมเดลแบ่งเป็นสามส่วน
    • Transformer body ที่ใช้ร่วมกันสร้าง latent representation ของบริบทที่สังเกตได้
    • output head อิสระ n ตัวทำนายโทเค็นอนาคตแต่ละตัวแบบขนาน
    • shared unembedding matrix คำนวณความน่าจะเป็นของโทเค็นสุดท้าย
  • วิธีอนุมานที่ง่ายที่สุดคือ autoregressive prediction ทั่วไปที่ใช้เฉพาะ head สำหรับทำนายโทเค็นถัดไป และสามารถทิ้ง head อื่นได้
  • output head เพิ่มเติมสามารถนำไปใช้กับ self-speculative decoding เช่น blockwise parallel decoding หรือ Medusa-like tree attention

การทำให้ใช้หน่วยความจำอย่างมีประสิทธิภาพ

  • การ implement แบบตรงไปตรงมาต้องเก็บ logit และ gradient ของแต่ละ head ทั้งหมดไว้ในหน่วยความจำ ทำให้การใช้หน่วยความจำ GPU สูง
  • ใน LLM ปัจจุบัน ขนาด vocabulary V ใหญ่กว่ามิติ latent representation d มาก ทำให้ logit vector เป็นคอขวดของหน่วยความจำ GPU
  • implementation ที่เสนอจะรัน forward/backward ของ output head แต่ละตัวแบบลำดับ หลังจาก forward pass ของ body ที่ใช้ร่วมกัน
    • logit และ gradient ของ head หนึ่งจะถูกปล่อยก่อนข้ามไปยัง head ถัดไป
    • body จะเก็บไว้เฉพาะ gradient สะสม
  • วิธีนี้ลด peak GPU memory usage จาก O(nV + d) เหลือ O(V + d) โดยไม่เพิ่มต้นทุน runtime

ผลการทดลองกับโมเดลโค้ด

  • การทดลองกับข้อมูลจริงเปรียบเทียบโมเดลทำนายโทเค็นถัดไปกับโมเดล n-token prediction โดยใช้จำนวนพารามิเตอร์เท่ากัน
    • หากเพิ่มเลเยอร์ n−1 ตัวใน head สำหรับทำนายอนาคต จะลบเลเยอร์ n−1 ตัวออกจาก body ที่ใช้ร่วมกัน
  • ฝึกโมเดลหกขนาดตั้งแต่ 300M ถึง 13B ตั้งแต่ต้นด้วย 91B code tokens เป็นอย่างน้อย
  • ในการประเมิน MBPP และ HumanEval โมเดลขนาดเล็กอาจแย่กว่าโมเดลฐาน แต่เมื่อ scale ใหญ่ขึ้น การทำนายหลายโทเค็นจะนำหน้า
  • โมเดล 13B แก้ปัญหาได้มากกว่าโมเดลทำนายโทเค็นถัดไปที่เทียบกันได้
    • แก้ปัญหาได้มากขึ้น 12% ใน HumanEval
    • แก้ปัญหาได้มากขึ้น 17% ใน MBPP
  • ใน ablation ที่ฝึกโมเดล 7B ด้วย 200B code tokens เปรียบเทียบ n=1, 2, 4, 6, 8
    • n=4 ดีที่สุดอย่างสม่ำเสมอใน pass@1, pass@10, pass@100 ของ HumanEval และ MBPP
    • ใน APPS/Intro นั้น n=6 นำหน้า
    • window size ที่เหมาะสมอาจต่างกันตาม distribution ของข้อมูลอินพุต

ความเร็วอนุมานและโมเดลระดับ byte

  • ใช้ greedy self-speculative decoding กับโมเดล 7B 4-token prediction และวัดความเร็ว decoding บน prompt ทดสอบโค้ดและภาษาธรรมชาติที่ไม่ได้ใช้ในการฝึก
  • ผลลัพธ์แสดงความเร็วเพิ่มขึ้น 3.0× ในโค้ด และ 2.7× ในข้อความ
    • ในโค้ด จากข้อเสนอ 3 ตัว มีโทเค็นที่ถูกยอมรับเฉลี่ย 2.5 ตัว
  • โมเดล 8-byte prediction ทำความเร็วอนุมานเพิ่มขึ้น 6.4×
  • ในการทดลอง byte-level tokenization ฝึก 7B byte-level transformer ด้วยข้อมูล 314B bytes ซึ่งเทียบเท่าประมาณ 116B tokens
  • โมเดล 8-byte prediction แก้ปัญหาได้มากกว่า next-byte prediction
    • แก้ปัญหาได้มากขึ้น 67% ใน MBPP pass@1
    • แก้ปัญหาได้มากขึ้น 20% ใน HumanEval pass@1
  • multi-byte prediction อาจเป็นเส้นทางในการฝึกโมเดล byte-level ให้มีประสิทธิภาพมากขึ้น

หลาย epoch, การ fine-tune และผลลัพธ์ภาษาธรรมชาติ

  • แม้ฝึกหลาย epoch ด้วยข้อมูลเดียวกัน การทำนายหลายโทเค็นยังคงได้เปรียบบางส่วนเหนือการทำนายโทเค็นถัดไป
    • MBPP pass@1 อยู่ที่ +2.4%
    • HumanEval pass@100 อยู่ที่ +3.2%
    • ตัวชี้วัดอื่นคล้ายกัน
  • ในการ fine-tune บน CodeContests โมเดล 7B ที่ pretrain ด้วย 4-token prediction ดีกว่าโมเดลฐานทำนายโทเค็นถัดไปใน pass@k โดยรวม
    • กรณี fine-tune โมเดล 4-token prediction ต่อด้วย loss n′=4 ตามเดิมก็ดีกว่าโมเดลฐาน
    • กรณีที่ลบ head เพิ่มเติมออกแล้ว fine-tune ด้วย next-token target ให้ผลดีที่สุดโดยรวม
  • ในภาษาธรรมชาติ ฝึกโมเดล 7B ด้วย 200B tokens และประเมิน benchmark มาตรฐาน NLP 6 รายการ
    • โมเดล 2-token prediction ใกล้เคียงกับโมเดลฐานทำนายโทเค็นถัดไป
    • โมเดล 4-token prediction มีประสิทธิภาพลดลงเล็กน้อย
    • อาจจำเป็นต้องใช้ขนาดโมเดลที่ใหญ่ขึ้น
  • การประเมินภาษาธรรมชาติแบบ generative แบ่งเป็นงานสรุปและงานคณิตศาสตร์
    • ใน summarization benchmark 8 รายการ โมเดล n=2 และ n=4 สูงกว่าโมเดลฐานทำนายโทเค็นถัดไปตาม ROUGE-L F1 ทั้งการฝึก 200B และ 500B tokens
    • ในการประเมิน GSM8K 8-shot ที่ 200B tokens นั้น n=2 นำหน้าโมเดลฐาน แต่หลัง 500B tokens รูปแบบกลับด้าน และ n=4 แย่กว่าโดยรวม

induction และการอนุมานเชิงอัลกอริทึมจากงานสังเคราะห์

  • induction คือรูปแบบที่เมื่อมี “AB” ในประโยค แล้วต่อมามี “A” ปรากฏอีก ก็จะทำนาย “B” ตามมา
  • ฝึกโมเดลขนาด 1M~1B nonembedding parameters ด้วยชุดข้อมูล children stories และวัด induction capability ด้วยชุดทดสอบที่ใส่ชื่อแบบ 2-token แบบสุ่ม
  • ในโมเดลขนาดเล็ก 30M หรือต่ำกว่า 2-token prediction loss ช่วยปรับปรุงการสร้าง induction capability อย่างมาก
    • ตั้งแต่ 100M ขึ้นไป ประโยชน์นี้หายไป
  • ในงานเลขคณิตพหุนาม ฝึกและประเมินนิพจน์ใน F7[X]/(X5) ซึ่งรวม unary negation, addition, multiplication, composition
  • การทำนายหลายโทเค็นเพิ่มความแม่นยำในทุกระดับ task difficulty และยังปรับปรุง out-of-domain generalization ได้มาก แม้ค่า absolute จะต่ำ
  • ผลของการเปลี่ยน next-token prediction เป็นการทำนายหลายโทเค็นมากกว่าการขยายโมเดลจาก 30M เป็น 100M

เหตุใดจึงอาจได้ผล

  • การทำนายหลายโทเค็นอาจบรรเทา distribution mismatch ระหว่างการฝึกแบบ teacher forcing กับ inference-time autoregressive generation
  • การทำนายโทเค็นถัดไปอาจมุ่งเน้นการทำนายระยะสั้นและละเลย dependency ระยะยาว
  • การทำนายหลายโทเค็นให้ implicit weight มากขึ้นแก่โทเค็นที่สัมพันธ์อย่างแรงกับโทเค็นที่ตามมา
    • สามารถตีความสิ่งนี้เป็นการเสริมแรงที่ choice point
    • มองว่าการสร้างข้อความที่มีประโยชน์ขึ้นอยู่กับการเลือกการตัดสินใจที่ถูกต้องที่ choice point
  • ในการพัฒนาเชิงทฤษฎีสารสนเทศ 2-token prediction ปรากฏในรูปที่เพิ่มความสำคัญของพจน์ mutual information ระหว่าง X และ Y มากกว่า next-token prediction

ข้อจำกัดและต้นทุน

  • งานที่ยังเหลือคือวิธีเลือก n โดยอัตโนมัติในการทำนายหลายโทเค็น, การใช้ loss scale และ loss balancing, การปรับ vocabulary size และการพัฒนา auxiliary prediction loss ที่ทำงานใน embedding space
  • การฝึกโมเดลทั้งหมดในการทดลองใช้รวมประมาณ 500K GPU hours
    • ฮาร์ดแวร์คือ A100-80GB และ H100
    • การปล่อยก๊าซรวมโดยประมาณอยู่ที่ราว 50 tCO2eq และถูก offset 100% ผ่าน sustainability program ของ Meta
  • เป้าหมายคือเพิ่ม compute และ data efficiency ของโมเดลภาษา แต่ต้องระวัง rebound effects และควรพิจารณาทั้งข้อดีและความเสี่ยงทางสังคมของ LLM

1 ความคิดเห็น

 
GN⁺ 2024-05-02
ความคิดเห็นจาก Hacker News
  • ในวงการนี้มีอะไรเกิดขึ้นมากเกินไป
    ถ้ามีแหล่งข้อมูลที่อธิบายตามลำดับเวลาเหมือนพาเยี่ยมชมโรงงานว่า คำอย่าง ข้อมูล, การฝึกล่วงหน้า, การฝึก, การอนุมาน, mixture of experts, RAG ปรากฏขึ้นตอนไหนในกระบวนการจริงก็คงดี
    ส่วนใหญ่ผมไม่รู้ว่าคำเหล่านี้อยู่ตรงไหนในภาพรวม และตอนเห็นคำว่าการฝึกล่วงหน้าครั้งแรก ผมนึกว่าเป็นกระบวนการจัดการข้อมูลก่อนฝึก แต่จริง ๆ แล้วมันก็เป็นการฝึกอีกแบบหนึ่ง

    • การไม่รู้ว่าคำเหล่านี้อยู่ตรงไหนในภาพรวมนั้น แม้แต่ ผู้เชี่ยวชาญและที่ปรึกษาด้าน AI จำนวนมากที่เห็นใน LinkedIn, Twitter, พอดแคสต์ก็เป็นเหมือนกัน
      วงการนี้มีอัตราสัญญาณต่อสัญญาณรบกวนต่ำมาก และแม้แต่เอกสารของผู้นำในอุตสาหกรรมอย่าง Langchain ก็มีกรณีที่ล้าสมัยไปแล้วหรือขัดแย้งกันเอง
      ตอนกระแสบล็อกเชนร้อนแรงก็คล้ายกัน จึงดูเหมือนเป็นลักษณะของขบวนรถไฮป์
    • รู้สึกทั้งเจ็บปวดและตื่นเต้นในเวลาเดียวกัน
      โดยเฉพาะอย่าง RAG ที่ความก้าวหน้าช่วงหลังเร็วมาก จนคงยากที่จะมีหนังสืออ้างอิงที่ทันสมัยอยู่ได้สักพัก ทำให้ยากจะรู้ว่าควรเริ่มจากตรงไหน
      ถึงอย่างนั้น เอกสารของเครื่องมือระดับสูงอย่าง LlamaIndex ก็พอเป็นจุดเริ่มต้นที่ดี เพราะไม่ได้อธิบายแนวคิดเองอย่างลึกซึ้งนัก แต่ช่วยให้เห็นว่ามันอยู่ตรงไหนในภาพรวม
      ส่วน YouTube ก็เหมือนเดิม คือเต็มไปด้วยคนที่ไม่ใช่ผู้เชี่ยวชาญจำนวนมหาศาลที่พยายามเรียกคลิกด้วยกระแสล่าสุด ผมจึงมองว่าไม่ค่อยเหมาะเป็นจุดเริ่มต้น
    • ลองดูบล็อกของ Lilian Weng: https://lilianweng.github.io/posts/2023-01-27-the-transforme...
    • แนะนำ Machine Learning Q and AI ของ Sebastian Raschka
    • ตอนนี้ผู้คนใช้เวลากับการสร้างของที่ห่วยมาก ๆ ใน AI มากเกินไป
      แน่นอนว่าทุกอย่างก็เป็นแบบนั้นแหละ แต่แทนที่จะพยายามปะผุสิ่งเหล่านั้น น่าจะดีกว่าถ้าสมมติว่าในอนาคตอันใกล้จะมี สิ่งที่ดีกว่า GPT-4 มาก ออกมา แล้วออกแบบผลิตภัณฑ์ที่แตกต่างบนสมมติฐานนั้น
  • สำหรับคนที่รู้จัก speculative decoding นี่โดยพื้นฐานแล้วคือการทำ speculative decoding ด้วยตัวเอง
    ยังคงนำลำดับ label ที่ทำนายได้ป้อนกลับเข้าเครือข่ายแบบ autoregressive และคงการทำนายไว้เฉพาะถึงจุดที่ตรงกัน
    ดังนั้นประสิทธิภาพจึงไม่ได้แย่ลง มีแต่เร็วขึ้น และในที่นี้เร็วขึ้นสูงสุด 3 เท่า ซึ่งถือว่าอยู่ในระดับปกติสำหรับ speculative decoding
    มันอาจดีขึ้นได้ด้วย multi-task learning แนวคิดการทำนาย target ที่อยู่ข้างหน้าไปหลายขั้นเป็น auxiliary loss นั้นมีมานานพอสมควรแล้ว และเป็นงานที่ดี

    • ปัญหาของ speculative decoding คือแทบไม่มีโมเดลที่รองรับ และการเพิ่มการรองรับต้องใช้ เวลา GPU เพิ่มเติม
      ถ้า speculative decoding ช่วยปรับปรุงประสิทธิภาพด้านการวางแผนได้ด้วย ก็น่าจะถูกนำไปใช้ได้ง่ายขึ้น
    • ประโยคที่ว่า “ประสิทธิภาพจึงไม่ได้แย่ลง มีแต่เร็วขึ้น” ทำให้งงเล็กน้อย
      speculative decoding ไม่ได้ลดประสิทธิภาพของโมเดลในแง่ความถูกต้องหรือคุณภาพของผลลัพธ์
      ในเชิงคณิตศาสตร์ การแจกแจงที่ถูกปรับแล้วซึ่งสุ่มตัวอย่างออกมาจะเหมือนกับเมื่อทำ regular autoregressive decoding และเหตุที่มีความต่างก็เป็นเพราะความสุ่มล้วน ๆ
      ถ้าใช้คำว่าประสิทธิภาพในความหมายของความเร็ว speculative decoding ก็อาจทำให้ช้าลงได้ แต่สำหรับอินพุตส่วนใหญ่และการเลือก draft model ที่เหมาะสม ไม่ควรเป็นเช่นนั้น
  • LLM ไม่ได้พิจารณา การแจกแจงความน่าจะเป็น ของชุด token ที่เป็นไปได้ทั้งหมดจนถึงความยาวเอาต์พุตหนึ่ง ๆ ในการทำนายลำดับหรือ? ผมนึกว่ามันทำแบบนั้นอยู่แล้ว
    ถ้าไม่ใช่ ก็น่าประหลาดใจที่มันยังทำงานได้ดีขนาดนี้
    เช่น ถ้าความเป็นไปได้และความน่าจะเป็นของลำดับ 2 บิตคือ 00: p=0.36, 01: p=0.04, 10: p=0.30, 11: p=0.30 ลำดับ 2 บิตที่เป็นไปได้มากที่สุดคือ 00
    แต่ถ้าทำนาย token ถัดไปเพียงตัวเดียว จะได้ 0: p=0.40, 1: p=0.60 ดังนั้นบิตถัดไปจะดูเหมือนเป็น 1 และเมื่อต้องทำนายบิตถัดจากนั้น ก็จะนำไปสู่จุดเริ่มต้นที่ไม่เหมาะที่สุด
    ในลำดับยาว ๆ ยิ่งการแจกแจงความน่าจะเป็นร่วมแยกเป็นการแจกแจงขอบได้ไม่ดีเท่าไร ข้อผิดพลาดก็จะยิ่งเด่นชัดขึ้นเท่านั้น
    คิดต่อไปแล้ว น่าจะมีงานศึกษาง่าย ๆ ที่เปลี่ยน loss function แบบ cross entropy ให้พิจารณาเฉพาะ token อนาคตลำดับที่ n ในข้อมูลฝึกข้อความ แล้วพล็อตความสัมพันธ์ระหว่างประสิทธิภาพของ LLM กับ n ได้
    ถ้าสมมติว่า LLM ปัจจุบันทั้งหมดเป็น n=1 สมมติฐานก็คือ เราน่าจะหลีกเลี่ยงการพุ่งขึ้นมหาศาลของทรัพยากรที่ต้องใช้ในการทำนายการแจกแจงความน่าจะเป็นร่วมตั้งแต่ token ถัดไป 1 ตัวไปจนถึง n ตัวได้เป็นส่วนใหญ่
    เพราะการทำนาย token ลำดับที่ n โดยตรงต้องอาศัยโมเดลข้อมูลที่ดีกว่าโดยนัย อย่างน้อยก็ในข้อความที่มนุษย์สร้างขึ้น และไม่ได้ใช้ได้กับข้อมูลทุกประเภท

    • น่าจะต้องมองจากมุมที่ต่างออกไปเล็กน้อย
      LLM ถูกออกแบบมาเพื่อ สุ่มตัวอย่าง ข้อความที่เป็นไปตามการแจกแจงของชุดฝึก ไม่ได้ถูกออกแบบมาเพื่อบอกข้อความ “ที่เป็นไปได้มากที่สุด” ที่ตามมา และจริง ๆ แล้วเราก็ไม่ได้ต้องการแบบนั้น
      เพราะจะทำให้ความหลากหลายของเอาต์พุตหายไป
      ในตัวอย่างนี้ ถ้าเป็นแอปแชต การสุ่ม 0 ใน 40% และ 1 ใน 60% ก็สมเหตุสมผล
      สำหรับการใช้งานอย่างถามตอบที่ประโยคที่เป็นไปได้มากที่สุดมีความสำคัญ beam search ก็ช่วยได้ตามที่คนอื่นพูดไว้
      อีกทั้งยังควรพิจารณาด้วยว่าโมเดลสามารถ “มองไปข้างหน้า” และคำนวณ token ในอนาคตไว้ล่วงหน้า แล้วนำสิ่งนั้นมาใช้กับการทำนาย token ปัจจุบันได้
      จริง ๆ แล้วมีงานวิจัยอย่าง [1] ที่พูดถึงเรื่องนี้
      สุดท้าย การทำนายทีละ token ไม่ใช่วิธีที่ผิด เพราะมนุษย์ก็ทำแบบนั้นเวลาพูด เราทำการ “มองล่วงหน้า” แบบนี้ในหัวก่อนพูด
      [1] https://arxiv.org/abs/2404.00859
    • จริง ๆ แล้วมันทำงานแบบนั้น และตอนทำนายที่อุณหภูมิต่ำก็กลายเป็นปัญหาจริง
      เท่าที่จำได้ ในผลลัพธ์ของ LLM จะเห็นรูปแบบแปลก ๆ เช่น “an” มักมีความเป็นไปได้น้อยกว่า “a” ทำให้มี คำนามที่ขึ้นต้นด้วยสระ น้อยกว่าที่คาดไว้
    • โมเดลภาษาจะแยกความน่าจะเป็นร่วม p(y, x) เป็น p(y, x) = p(y|x) p(x) ซึ่งถูกต้อง
      กล่าวคือ ถ้าฝึกโมเดลภาษาด้วยการแจกแจงใด ๆ แล้วสุ่มตัวอย่างที่ อุณหภูมิ 1 ก็จะได้การแจกแจงเดียวกันเป๊ะ
      ถ้าสุ่มตัวอย่างที่อุณหภูมิต่ำหรือแบบ greedy ก็แน่นอนว่าจะได้การแจกแจงที่ต่างออกไป
    • นี่โดยพื้นฐานแล้วเป็นปัญหา greedy sampling ของ decoder
      มีกลยุทธ์การสุ่มตัวอย่างเพื่อหาค่าเหมาะที่สุดเฉพาะที่หลายแบบ เช่น beam search และก็มีงานด้านการสุ่มตัวอย่างที่เป็นเชิงทั่วโลกมากขึ้นอย่าง speculative decoding อยู่มากเช่นกัน
    • คุณกำลังพูดปนกันระหว่าง cross entropy/surprisal ของ token ถัดไป ซึ่งเป็น loss ตอนฝึก กับสิ่งอย่าง beam search ซึ่งเป็นการ decoding เพื่อทำนายหลังฝึก
  • ปัจจุบัน LLM เริ่มใหม่ตั้งแต่ต้นสำหรับทุกโทเค็นเอาต์พุตจริงหรือ?
    ถ้าถามว่า “อะไรทำให้กล้วยมีสีเหลือง?” แล้วมันตอบว่า “Bananas are yellow due to a pigment called bromelain.” ตอนที่เอาต์พุตคำว่า “a” ผมคิดว่าแนวคิดเรื่อง pigment และ bromelain น่าจะถูกกระตุ้นอยู่ในโครงข่ายประสาทในระดับหนึ่งแล้ว
    ตอนนี้มันเปลี่ยนใจไปต่อเป็นคำตอบแบบ “an optical illusion...” ไม่ได้แล้ว จึงดูเหมือนว่ามันวางแผนล่วงหน้าไว้แล้วว่าจะพูดถึงสารสีที่ชื่อ bromelain
    ตอนที่ LLM เอาต์พุตคำว่า “a” มันจะนำงานที่ทำไปแล้วมาใช้กับคำตอบถัดไปได้ไหม? จะคงสถานะของโครงข่ายประสาทไว้เพื่อคำตอบถัดไปได้ไหม?

    • มองอีกแบบหนึ่ง เราอาจให้ GPT เติมประโยคต่อไปนี้ให้สมบูรณ์ได้
      “Bananas are yellow due to a” และ “Bananas are yellow due to an”
      กรณีแรกอาจตอบว่า “Bananas are yellow due to a pigment called bromelain.” ส่วนกรณีที่สองอาจตอบว่า “Bananas are yellow due to an organic compound called bromelain, which is a yellow pigment.”
      ไม่ว่าจะทางไหน แม้ GPT จะเลือก “a” หรือ “an” ก็อาจไม่กระทบต่อความหมายของคำตอบ
      แบบสุดโต่ง อาจมองได้ว่า LLM ทำงานด้วยฮิวริสติกโง่ ๆ ว่าโทเค็นถัดจาก “due to” มีโอกาสเป็น “a” 55% และ “an” 45%
      แน่นอนว่าความเป็นจริงซับซ้อนกว่านั้น แต่เพียงฮิวริสติกแบบนั้นก็อธิบายพฤติกรรมนี้ได้
      ถ้าไม่ได้ใส่ข้อเท็จจริงเกี่ยวกับ bromelain ไว้ในข้อมูลพรีเทรน LLM ก็อาจเติมต่อเป็นเนื้อหาอย่าง “an optical illusion” ได้จริง ๆ
      ผมจำได้ว่า GPT-3 เคยทำข้อผิดพลาดเชิงข้อเท็จจริงแบบนั้นค่อนข้างบ่อย แต่ดูเหมือนมันจะเรียนรู้กฎไวยากรณ์ของ “a” กับ “an” ได้
      อย่างที่กล่าวไป ผมไม่คิดว่าแนวคิดจำเป็นต้องถูกกระตุ้นไว้ล่วงหน้าจริง ๆ แต่ในความหมายเชิงนัยหรือเชิงอุบัติ อาจมีความเป็นไปได้ที่ การกระตุ้นล่วงหน้า แบบนั้นเกิดขึ้น
    • ในระดับหนึ่ง attention คือกลไกที่ทำให้การคำนวณของโทเค็นก่อนหน้ามีประโยชน์ในภายหลัง
      KV cache อาจมองได้ว่าเป็นตัวแทนของข้อความจนถึงตอนนี้และความคิดของโมเดลต่อข้อความนั้น
      เนื่องจากโมเดลภาษาเรียนรู้ทั้งลำดับไปจนจบ จึงคิดว่ามีโอกาสสูงที่เรื่องแบบนี้จะเกิดขึ้น
      การทำนายหลายโทเค็นส่งเสริมพฤติกรรมนี้อย่างชัดเจน แต่ทำได้เฉพาะภายในหน้าต่าง n โทเค็นเล็ก ๆ ที่นิยามไว้เท่านั้น
      ขณะเดียวกัน ยังมีงานอีกมากที่พยายามเพิ่มการใช้ประโยชน์จากการคำนวณของโมเดลภาษาแบบ transformer เช่น early exit, mixture of depths และโครงสร้างใหม่ ๆ อย่าง SSM
    • โดยปกติเอาต์พุตของ LLM จะสุ่ม sample จากโทเค็น/คำถัดไปไม่กี่ตัวที่มีความน่าจะเป็นสูงสุด แต่ตัวโมเดลเองไม่รู้ว่า sampler จะเลือกคำไหน
      น่าจะมีการวางแผนเชิงแนวคิดว่าหลัง “a” หรือผู้สมัครอื่น ๆ จะตามด้วยอะไรได้บ้าง แต่การคาดการณ์ระดับสูงเช่นนั้นจะถูกพิจารณาใหม่ตั้งแต่ต้นเมื่อสร้าง “a” ออกมาแล้ว
      โมเดลไม่เพียงสามารถเปลี่ยนใจหลังจากสร้างแต่ละคำแล้วเท่านั้น แต่จำเป็นต้องเป็นอย่างนั้นด้วย
      ดังนั้น “การวางแผน” แบบนี้จึงเปราะบางมาก และใกล้เคียงกับ แร็ปเปอร์ฟรีสไตล์ ที่สร้างสด ๆ มากกว่ามนุษย์ที่คิดอย่างลึกซึ้งก่อนเลือกคำตอบและสำนวน
    • บทความนี้น่าสนใจ: https://clementneo.com/posts/2023/02/11/we-found-an-neuron
    • เอาต์พุตของ LLM ส่วนใหญ่เป็นแบบ ความน่าจะเป็น
      LLM แกนหลักรับโทเค็นแล้วส่งออกชุดโทเค็นที่จัดอันดับสำหรับสิ่งที่จะตามมา พร้อม “ระดับความมั่นใจ”
      จากนั้นโดยปกติจะมีขั้นตอนการกรองและการค้นหา โดยนำโทเค็นที่จัดอันดับเหล่านั้นป้อนกลับเข้า LLM เพื่อให้ได้โทเค็นที่จัดอันดับเพิ่มเติม และสร้างต้นไม้ความน่าจะเป็นสั้น ๆ
      ตัวอย่างเช่น หากป้อนโทเค็น N อันดับแรกกลับเข้าไป แต่ละตัวก็จะสร้างชุดโทเค็น N อันดับแรกชุดใหม่
      จากนั้นดูต้นไม้นั้นแล้วทำการกรองพื้นฐาน เช่น เลือกกิ่งที่มีความมั่นใจรวมสูงสุด กิ่งที่มีโทเค็นซ้ำน้อยที่สุด หรือกิ่งที่มีโทเค็นตรงกับโทเค็นอินพุตน้อยที่สุด หรือโดยมากจะผสมเกณฑ์เหล่านี้เข้าด้วยกันและเพิ่มการสุ่มเลือกที่ถ่วงน้ำหนักด้วยความมั่นใจรวมเข้าไปด้วย
      ดังนั้นแม้จะให้พรอมป์เดียวกันกับ LLM ที่มีน้ำหนักคงที่สมบูรณ์หลายครั้ง ก็อาจได้เอาต์พุตต่างกัน
      กล่าวคือ หากตอบคำถามแบบเจาะจง โมเดลสามารถ “เปลี่ยนใจ” ได้ ทุกโทเค็นที่ถูกสร้างขึ้นจะเปิดโอกาสให้ตัวกรองเอาต์พุตเชิงความน่าจะเป็นเลือกเส้นทางใหม่จากบรรดาเส้นทางเอาต์พุตที่เป็นไปได้
  • อาจเป็นคำถามที่ซื่อมาก ๆ แต่ถ้าสมมติว่าเราสามารถสร้างเวกเตอร์ที่เข้ารหัสความหมายของทั้งประโยคได้ ทำไมถึงฝึก LLM ให้ทำนาย เวกเตอร์ประโยค นั้นแทนคำคำเดียวไม่ได้ล่ะ?

    • ผู้เขียนเองครับ เป็นประเด็นที่ดีมาก และเท่าที่เข้าใจ หลายทีมก็กำลังทำงานเรื่องนี้อยู่
      การฝึก ออโตเอนโคเดอร์ สำหรับภาษา จริง ๆ แล้วง่ายมาก เพราะปริมาณข้อมูลที่อยู่ในข้อความน้อยกว่าเมื่อเทียบกับภาพ/วิดีโอ
      ส่วนที่ยากคือการทำให้โมเดลโฟกัสที่ส่วนความหมาย เมื่อสัญญาณทั้งหมดมาจากการตรงกันเป๊ะในสเปซของโทเคน
      นั่นจึงนำไปสู่ไอเดียโครงสร้าง joint embedding predictive ของ Yann LeCun
      อีกทั้งงานเสริมให้สัญญาณมากขึ้นก็จริง แต่ก็มี trade-off ที่มันเบี่ยงโฟกัสอยู่เสมอ
      ในกรณีของเรา ถ้าจำนวนโทเคนที่ทำนายมากเกินไป เราเห็นว่าประสิทธิภาพลดลง
      ดังนั้นวิธีทำนายแบบ latent prediction จึงต้องจัดระเบียบให้ได้ว่าอะไรมีประโยชน์
    • ผมว่าไม่ใช่คำถามโง่ ๆ นะ
      ปัญหาคือหลังจากได้เวกเตอร์ที่แทนคำตอบแล้ว จะต้องมีบางอย่างเหมือนโมเดลอีกตัวที่แปลงคำตอบนั้นกลับเป็นรูปคำ
      อาจเป็นอะไรแบบ โมเดล diffusion สำหรับข้อความ
      นอกจากนี้ ฟังก์ชันที่โมเดล diffusion นี้ต้องประมาณไม่ใช่ฟังก์ชันหนึ่งต่อหนึ่ง อย่างดีที่สุดก็เป็นฟังก์ชันทั่วถึง และถ้าแย่กว่านั้นอาจไม่ใช่ฟังก์ชันในความหมายทางคณิตศาสตร์ด้วยซ้ำ
      เพราะสำหรับ embedding เดียว อาจมีข้อความที่เป็นไปได้จำนวนมาก และส่วนใหญ่ในนั้นอาจไม่ถูกต้องทั้งทางไวยากรณ์หรือความหมาย
      สุดท้าย embedding เป็น การแทนแบบมีการสูญเสีย ของข้อมูลบางอย่าง ดังนั้นฟังก์ชันผกผันจะทำให้สูญเสียนัยละเอียดและบริบทไปมาก
      LLM หลีกเลี่ยงปัญหาข้างต้นด้วยการทำนายโทเคนถัดไป—และตอนนี้คือ n โทเคนถัดไป—ในลักษณะที่รักษาความสอดคล้องในตัวเองกับคำถามและ n โทเคนก่อนหน้า และฟังก์ชันที่มันประมาณโดยทั่วไปควรใกล้เคียงกับฟังก์ชันทั่วถึง
    • ผมก็เป็นมือใหม่เหมือนกัน แต่ถ้าเข้ารหัส เรียนรู้ และสังเคราะห์เวกเตอร์ประโยค ความสามารถของ AI ในการสร้างของใหม่จะยกระดับจากระดับคำไปเป็นระดับประโยคหรือเปล่า?
      ตอนนี้โดยคร่าว ๆ มันจัดการกับคำ ดังนั้น AI จึงใช้ได้เฉพาะคำที่รู้ แต่สามารถสังเคราะห์ประโยคใหม่จากคำได้
      ถ้า AI ทำงานเป็นหน่วยประโยค มันจะไม่กลายเป็นแค่ท่องประโยคที่เคยเห็นมาแล้วหรือ? แบบนั้นอาจสังเคราะห์ย่อหน้าใหม่ได้ แต่ดูเหมือนจะสร้างประโยคใหม่ไม่ได้
      ในภาษาอังกฤษ ผมไม่แน่ใจว่า ประโยค เป็น abstraction ที่มีประโยชน์สำหรับ AI หรือไม่ สำหรับมนุษย์เองก็แค่พอใช้ได้อย่างเฉียดฉิว
      ถ้าดูแชต อีเมล หรือคอมเมนต์ YouTube ธรรมดา ๆ จะเห็นว่ามีจำนวนมากที่จริง ๆ แล้วไม่ใช่ประโยค หรือแม้แต่ไม่ใช้เครื่องหมายวรรคตอน
      ผมไม่คิดว่าประโยคสอดคล้องกับหน่วยของความหมาย
      ประโยคอาจมีสองคำ หรืออาจยาวครึ่งบทความวิชาการภาษาอังกฤษ ขึ้นอยู่กับผู้เขียน อาจคร่อมหกไอเดีย หรือมีแค่ไอเดียเดียวก็ได้
      จุดจบของประโยคโดยทั่วไปขึ้นกับนิสัยของผู้เขียนมากกว่าความหมาย
    • ผมเข้าใจว่า tokenization เป็นส่วนหนึ่งของคอขวด
      ถ้าแยกประโยคเป็นโทเคน แต่ละโทเคนก็จะได้การแทนเป็นเวกเตอร์
      ถ้าไปถึงระดับประโยค พจนานุกรมของโทเคนทั้งหมดก็คงกลายเป็นอนันต์
    • อย่างไรก็ยังต้องแปลงระหว่างเวกเตอร์คำกับเวกเตอร์ประโยคด้วยวิธีใดวิธีหนึ่ง
      อาจลองทำด้วยโมเดลที่เร็วกว่าได้ แต่คุณภาพเอาต์พุตน่าจะลดลง
  • ยังไม่ได้อ่านเปเปอร์ละเอียดมากนัก แต่มีคอมเมนต์เล็ก ๆ ด้านการเรียบเรียง
    ภาคผนวก L.2 น่าพอใจ แต่ผมรู้สึกว่าการให้เหตุผลแบบย่อใน 5.2 ยังหลวมไปหน่อย
    โดยเฉพาะตรงที่บอกว่า “ทิ้ง” H(Y | X) ใน H(X) + H(Y) = H(X | Y) + 2I(X ; Y) + H(Y | X) ยังไม่ชัดเจน
    ถ้าทำนายโทเคนที่สาม Z แล้ว H(Y | X) ก็ควรอยู่ในบริบท C แบบโดยนัย และดังนั้นไม่น่าจะทิ้งได้อย่างอิสระไม่ใช่หรือ?
    ในภาคผนวกก็ไม่ได้ทำให้เหตุผลนี้ชัดขึ้นเท่าไร
    อย่างไรก็ตาม ไม่ได้สับสนถึงขั้นสงสัยแก่นของข้ออ้าง โดยรวมเป็นปัญหาเรื่อง วิธีนำเสนอ มากกว่า

    • ขอบคุณสำหรับฟีดแบ็ก ถ้าพูดให้ดีกว่านี้ สุดท้ายแล้วตอนสร้างข้อความเราใช้เฉพาะ head สำหรับโทเคนถัดไป
      ถ้าอย่างนั้น ในเป้าหมาย 2 โทเคน H(X) + H(Y) ส่วนไหนคือ ข้อมูลเสริม ที่ช่วยการเรียนรู้ และส่วนไหนคือความสูญเปล่า?
      H(X | Y) และ I(X; Y) มีประโยชน์ต่อการสร้างโทเคนถัดไป แต่ H(Y | X) ตามนิยามแล้วคือปริมาณข้อมูลที่ไม่เกี่ยวข้องกับโทเคนถัดไป X
      ดังนั้นจึงพูดได้ว่า “การทำนายหลายโทเคนแลกข้อมูลที่มีประโยชน์ I(X; Y) ของ H(Y) กับการคำนวณที่สูญเปล่าสำหรับ H(Y | X)”
      แต่ต้องสังเกตว่า H(Y | X) คือเอนโทรปีของโทเคนถัดไปในการทำนาย Y จาก prefix (C, X)
      หากกลไก attention สามารถย้ายการคำนวณที่ทำไปแล้วเพื่อทำนาย Y|X ไปยังขั้นถัดไปได้ การคำนวณนั้นจริง ๆ แล้วอาจไม่ใช่ความสูญเปล่า แต่เป็น การคำนวณล่วงหน้า
  • ผมเคยอ่านบทความที่บอกว่า LLM มีเพียง หน้าต่าง 1 มิติ สู่โลกอย่างแท้จริง
    ทุกอย่างเป็นเพียงลำดับโทเคนเท่านั้น
    สิ่งอย่างการทำนายหลายตัวแบบนี้อาจช่วยขยายมุมมองนั้นเป็นราว ๆ 1.1 มิติ
    ไม่ว่าอย่างไร ก็มีเหตุผลจริง ๆ ว่าต้องขยายหน้าต่างนั้นให้เป็น 2 มิติขึ้นไปด้วยวิธีใดวิธีหนึ่ง

    • ในเชิงโครงสร้าง ดูเหมือนยังมีช่องให้ทำได้ดีกว่านี้มาก โดยเฉพาะในงานเขียนโค้ด
      เช่น ถ้ามีทรัพยากรระดับ FAIR และอยากฝึกโมเดลเขียนโค้ด Java ที่ดีจริง ๆ การฝึกให้ทำนาย AST แทนโทเคนก็ดูสมเหตุสมผล
      หากต้องทำนายคอมเมนต์ ชื่อตัวระบุ ฯลฯ ก็ยังคงต้องมีรูปแบบที่ผสานกับ LLM ทั่วไป แต่จะไม่โมเดลตัวโปรแกรมเองเป็นสตรีมโทเคน
      แทนที่จะเป็นแบบนั้น อาจให้ทำนายสิ่งอย่าง “เพิ่มบล็อก if”, “เพิ่มบล็อกเรียกเมธอดที่มีพารามิเตอร์ 4 ตัว”
      นอกจากนี้ยังอาจฝึกโมเดลให้กันตำแหน่งเฉพาะใน context window ไว้สำหรับข้อมูลอย่างสมาชิกของชนิดข้อมูลที่เคอร์เซอร์ปัจจุบัน และผสานลูป inference เข้ากับการวิเคราะห์สถิตแบบ IDE/LSP
      แบบนี้จะทำให้โมเดลเห็นข้อมูลได้มากกว่าที่อยู่ในข้อความจริง
      เหตุผลที่ตอนนี้ไม่ค่อยเห็นโมเดลแบบนี้ ผมคิดว่าเป็นเพราะต้นทุนวิจัยแบบนี้สูง และคนฝั่ง AI ล้วนเน้น Python เป็นหลัก ขณะที่ Python ไม่ได้ประโยชน์จาก IDE มากนัก
  • ในแมชชีนเลิร์นนิง คำว่า head ถูกใช้ไม่ค่อยสม่ำเสมอ จึงอาจทำให้สับสนได้
    ในเปเปอร์นี้มีทั้งแนวคิด multihead attention และ multiple output heads
    multihead attention คือการโฟกัสไปยังบริเวณต่าง ๆ ของอินพุตในสถาปัตยกรรม transformer และในที่นี้อุปมาเชิงชีววิทยาจะใกล้กับ “หัว” ในฐานะหน่วยประมวลผลกลาง
    output head หมายถึงเลเยอร์สุดท้ายของโครงข่ายประสาท และสามารถมีได้หลายอันที่ให้เอาต์พุตต่างกันบนพื้นฐานของเลเยอร์ก่อนหน้าชุดเดียวกัน
    อันนี้ก็เป็นอุปมาเชิงชีววิทยาแบบหลวม ๆ เช่นกัน แต่ใกล้กับหัวที่อยู่ปลายด้านหนึ่งของร่างกายมากกว่าหัวในความหมายแบบ CPU
    ทั้งสองอย่างไม่ใช่อุปมาเปรียบกับหัวเทปที่อ่านข้อมูล

  • LLM ดูเหมือนจะ “คิด” ในระดับหนึ่งด้วยวิธีป้อนเอาต์พุตของตัวเองกลับเข้าไปเป็นอินพุต ดังนั้นจึงมีการสังเกตมาอย่างต่อเนื่องว่าการบังคับให้โมเดล คิดออกเสียง ช่วยเพิ่มคุณภาพของการอนุมานได้
    กล่าวคือ การอนุมานแบบห่วงโซ่ความคิดแตกต่างจากการให้ตอบคำถามทันทีตรงที่มันทำให้โมเดลพูดทวนว่าถูกขอให้ทำอะไร แสดงกลยุทธ์ระดับสูงว่าต้องใช้ข้อมูลใดบ้างเพื่อจะตอบ พูดถึงข้อมูลที่รู้อยู่ และอธิบายว่าข้อมูลนั้นจะส่งผลต่อการอนุมานเบื้องต้นอย่างไร
    แต่การให้โมเดลทำนายหลายโทเคนถัดไปในแต่ละช่วงเวลา ทำให้กังวลว่าโดยเนื้อแท้แล้วอาจให้ผลตรงกันข้าม
    การพรอมป์แบบห่วงโซ่ความคิดดูเหมือนจะแสดงให้เห็นว่าโมเดล “ฉลาดกว่า” เมื่อมีโทเคน n + m ตัวเป็นอินพุต มากกว่าตอนมีเพียง n ตัว
    ดังนั้น การได้ 5 โทเคนถัดไปจาก n ที่กำหนด อาจให้ผลลัพธ์แย่กว่าการได้ 1 โทเคนถัดไปจาก n แล้วได้อีก 1 โทเคนถัดไปจาก n+1 ไปเรื่อย ๆ

    • ถ้ามีโมเดลที่ราคาถูกพอสำหรับ LLM มันก็จะสร้างโทเคนเท่าที่งานต้องการเสมอ
      ความจริงที่ว่าวิธีเฉพาะนี้ต้องใช้โทเคนมากขึ้นจึงไม่สำคัญ
      หากไม่มีโมเดลราคาถูก LLM ก็จะถูกครอบงำด้วยแนวโน้มที่จะตอบด้วยค่าประมาณแทนคำตอบจริงอยู่เสมอ
      อีกทั้งกลยุทธ์ speculative decoding ส่วนใหญ่จะให้เอาต์พุตเหมือนกับการรันโมเดลแบบลำดับ
      หากทำนายผิด โทเคนนั้นก็จะถูกทิ้ง และที่หายไปมีเพียงความเร็วที่เพิ่มขึ้นเท่านั้น
  • ถ้าทำนายโทเคน/คำที่ +1 และ +2 อย่างอิสระ ผลลัพธ์ยังจะออกมาถูกหลักไวยากรณ์ได้อย่างไร? ดูเหมือนจะพังบ่อยนะ?

    • การทำนาย +1 และ +2 จะถูกทิ้งไปเฉย ๆ และสร้างขึ้นมาเพื่อให้การฝึกมีประสิทธิภาพมากขึ้นเท่านั้น
      ในบทคัดย่อไม่ได้ระบุชัด แต่คำอธิบายรูปที่ 1 ระบุว่า “ระหว่างการอนุมาน จะใช้เฉพาะหัวเอาต์พุตของโทเคนถัดไปเท่านั้น และอาจเลือกใช้หัวอีกสามหัวเพื่อลดเวลาอนุมานได้”
      ถ้านำการทำนายลำดับสูงทั้งหมดมาใช้ ก็อาจใช้ทั้งสามหัวได้ แต่หากทำเช่นนั้นจะไม่สามารถใช้กลยุทธ์การสุ่มตัวอย่างทั่วไปได้
      ไม่รู้ว่ามีคนสักกี่คนที่รัน LLM จริง ๆ ด้วยอุณหภูมิ 0 นอกเหนือจากเบนช์มาร์ก และถ้าทำอะไรที่ดีกว่าการใช้อุณหภูมิก็อาจเป็นอีกเรื่องหนึ่ง
    • โทเคนลำดับที่ n+1 จะถูกทิ้ง หากเมื่อกำหนดโทเคนลำดับที่ n แล้วมันมีความเป็นไปได้ต่ำ