Byte Latent Transformer: แพตช์ที่ขยายสเกลได้ดีกว่าโทเค็น
(ai.meta.com)- Byte Latent Transformer(BLT) คือสถาปัตยกรรม LLM ระดับไบต์ที่เรียนรู้จากไบต์ดิบโดยไม่ใช้การทำโทเค็นด้วยคลังคำศัพท์แบบคงที่ แต่ยังให้ประสิทธิภาพเทียบเคียง LLM ที่อิงโทเค็นได้ในสเกลขนาดใหญ่
- แกนสำคัญคือการจัดกลุ่มไบต์เป็น แพตช์ ที่มีขนาดไดนามิกแทนการใช้โทเค็นแบบคงที่ และจัดสรรคำนวณกับความจุของโมเดลมากขึ้นให้กับตำแหน่งที่มีเอนโทรปีของไบต์ถัดไปสูง
- Meta ได้ทำการศึกษาการสเกลโดย ควบคุม FLOP ไปจนถึง 8B พารามิเตอร์ และ 4T ไบต์สำหรับการฝึก เพื่อยืนยันความสามารถในการขยายสเกลของโมเดลระดับไบต์
- ยิ่งข้อมูลคาดเดาได้มากเท่าไร ระบบก็จะเลือกแพตช์ที่ยาวขึ้นเพื่อเพิ่ม ประสิทธิภาพในการฝึกและการอนุมาน และยังมีการปรับปรุงเชิงคุณภาพทั้งด้านการอนุมานและการทำให้ทั่วไปกับกรณีหางยาว
- ภายใต้ต้นทุนการอนุมานคงที่ แนวทาง BLT ที่เพิ่มทั้งขนาดแพตช์และขนาดโมเดลพร้อมกันแสดงให้เห็นถึง การสเกลที่ดีกว่าโมเดลแบบอิงโทเค็น
โครงสร้าง LLM ระดับไบต์ที่ BLT นำเสนอ
- Byte Latent Transformer(BLT) คือสถาปัตยกรรม LLM ระดับไบต์ที่ใช้ ไบต์ดิบ เป็นหน่วยอินพุตแทนการทำโทเค็นด้วยคลังคำศัพท์แบบคงที่
- ในการตั้งค่าขนาดใหญ่ BLT ให้ประสิทธิภาพเทียบเท่า LLM แบบอิงโทเค็น พร้อมทั้งแสดงการปรับปรุงที่ชัดเจนด้านประสิทธิภาพการอนุมานและความทนทาน
แพตช์แบบไดนามิกกลายเป็นหน่วยคำนวณ
- BLT เข้ารหัสไบต์เป็น แพตช์ ที่มีขนาดไดนามิก และใช้แพตช์เหล่านี้เป็นหน่วยหลักในการคำนวณ
- การแบ่งแพตช์เกิดขึ้นแบบไดนามิกโดยอิงจาก เอนโทรปี ของไบต์ถัดไป
- จุดที่ความซับซ้อนของข้อมูลสูงขึ้นจะได้รับการจัดสรรคำนวณและความจุของโมเดลมากขึ้น
- เมื่อข้อมูลคาดเดาได้ ระบบจะเลือกแพตช์ที่ยาวขึ้นเพื่อลดการคำนวณ
การทดลองสเกลแบบควบคุม FLOP
- Meta ได้ดำเนินการศึกษา การสเกลแบบควบคุม FLOP กับโมเดลระดับไบต์
- ขนาดการทดลองสูงสุดอยู่ที่ 8B พารามิเตอร์ และ 4T ไบต์สำหรับการฝึก
- ผลลัพธ์แสดงให้เห็นว่าโมเดลที่เรียนรู้จากไบต์ดิบโดยไม่ใช้คลังคำศัพท์แบบคงที่ก็สามารถขยายสเกลได้
ผลลัพธ์ด้านประสิทธิภาพและการทำให้ทั่วไป
- วิธีการเลือกแพตช์ยาวแบบไดนามิกช่วยปรับปรุงทั้ง ประสิทธิภาพการฝึก และ ประสิทธิภาพการอนุมาน
- ในผลลัพธ์เชิงคุณภาพ พบการปรับปรุงทั้งด้านการอนุมานและ การทำให้ทั่วไปกับกรณีหางยาว
- ภายใต้ต้นทุนการอนุมานคงที่ BLT แสดงการสเกลที่ดีกว่าโมเดลแบบอิงโทเค็น
- ใช้วิธีเพิ่มทั้งขนาดแพตช์และขนาดโมเดลไปพร้อมกัน
เอกสารอ้างอิง
- Download the Paper: ดาวน์โหลดงานวิจัย Byte Latent Transformer
1 ความคิดเห็น
ความคิดเห็นใน Hacker News
paper: https://scontent-sjc3-1.xx.fbcdn.net/v/t39.2365-6/470135129_...
ช่วงฤดูร้อนที่ BERT ออกมา ผมทำงานอยู่ที่สตาร์ทอัพแห่งหนึ่งที่ใช้โมเดล CNN แบบอิงตัวอักษรเพื่อทำ classification
ในทีมคิดกันเยอะมากเรื่องรูปแบบ representation ทางเลือก คนอื่น ๆ ในทีมชอบ word vector แต่ผมไม่ค่อยชอบ เอกสารที่เราจัดการมีคำที่ไม่มีในพจนานุกรมโผล่มาบ่อย คำเหล่านั้นสำคัญ และถ้าทิ้งไปก็น่าจะทำให้งานล้มเหลว
เนื่องจากเราก็กำลังสร้าง “foundation model” อยู่เหมือนกัน ปัญหาจึงไม่ใช่แค่คำจะกลายเป็น out-of-vocabulary ในโมเดลสุดท้ายเท่านั้น แต่ยังรวมถึงการกลายเป็น out-of-vocabulary ในขั้น foundation model ที่มีต้นทุนการฝึกสูงกว่าด้วย
โมเดลแบบอิงตัวอักษรทำ classification ได้ค่อนข้างดี แต่เพราะมีความเชื่อว่าการเก็บ “พจนานุกรม” ไว้ในโครงข่ายประสาทไม่ใช่วิธีใช้ neural network ที่ดี จึงคาดหวังกับ token กันมาก
อีกด้านหนึ่ง ผมมั่นใจว่าวิธีอย่าง Word2Vec ไม่มีอนาคต ถึงขั้นเคยออกจากโปรเจกต์ก่อนหน้าที่กำลังฝึก RNN ให้เขียน abstract ปลอมของ case report ใน PubMed เพื่อสร้าง foundation model สำหรับการทำความเข้าใจข้อความ
ตอน byte-pair encoding ออกมา ผมยังจำได้ว่าในที่ประชุม ผมพูดว่านี่เป็นวิธี tokenization แบบแรกในบรรดาวิธีที่เราดูแล้วที่ผมสนับสนุนได้
แต่พูดตามตรง ผมก็ยังคิดอยู่ดีว่าคงดีถ้าทำงานในระดับตัวอักษรได้
token เป็นแค่วิธีแก้ขัด ส่วนใหญ่ทำงานได้ดี แต่เวลามันใช้ไม่ได้ก็เห็นชัดมาก
[1] https://arxiv.org/abs/2103.06874
ในโลกจริง ผู้คนสร้างและใช้คำที่ไม่มีในพจนานุกรมเพื่อสื่อสารกันทุกวัน เช่น “notify” อยู่ในพจนานุกรม แต่ “notifier” ที่หมายถึง “สิ่ง/ช่องทางที่ใช้แจ้งใครสักคน” ไม่มี และโค้ดที่ส่งอีเมลแจ้งเตือนก็กลายเป็น “email notifier” จากนั้นก็จะต่อไปเป็น notifier สำหรับข้อความ SMS, สายโทรศัพท์, callback จาก call center อะไรทำนองนี้
ทุกอุตสาหกรรมและทุกองค์กรมีศัพท์เฉพาะ คำปรับแต่งเองที่ไม่มีในพจนานุกรม และตัวย่อที่แยกความหมายได้ไม่ดี
ถ้าจัดการการสื่อสารในโลกจริงไม่ได้ และทำได้แค่ตอบแบบ คำในพจนานุกรม ที่ผ่านการขัดเกลาในห้องแล็บ ผมก็ไม่รู้ว่าผลลัพธ์จาก machine learning จะมีประโยชน์ได้อย่างไร
หวังว่าจะไปได้สวย tokenizer ควรหายไปได้แล้ว
น่าสนใจที่มันเป็นโครงสร้างแบบลำดับชั้น แต่มีแค่สองชั้น การเพิ่มชั้นให้มากขึ้นดูเป็นทิศทางธรรมชาติของงานวิจัยต่อยอด
อ้างอิง: ผมเคยคอมเมนต์แบบนี้ในโพสต์อื่นที่เกี่ยวข้อง[1] แล้วผู้เขียนตอบแบบนี้
“ผมเป็นผู้เขียนครับ :), คิดว่าเป็นทิศทางที่น่าลองมาก! แต่ไม่ใช่แค่งานจะเยอะเกินไปถ้าทำทีเดียว เรายังต้องระวังด้วยว่าจะจัดสรรงบ FLOP ให้กับทั้ง hierarchy อย่างไร ถ้ามีสองชั้น เราสามารถทำให้ชั้นหนึ่ง (byte/local encoder) มีประสิทธิภาพด้าน FLOP และอีกชั้นหนึ่ง (patch/global encoder) ใช้ FLOP หนักได้ นอกจากนี้ยังต้องหาวิธีรวม patch ให้เป็นหน่วยที่ใหญ่ขึ้นด้วย ถึงอย่างนั้นก็มีทิศทางให้แตกแขนงจากตรงนี้อีกเยอะครับ!”
[1] https://news.ycombinator.com/item?id=42413430
ใช้โมเดลขนาดเล็กทำนายความเป็นไปได้ของตัวอักษรถัดไปในสตริงอินพุตเพื่อสร้าง patch
ถ้าสตริงอินพุตคือ “Lazy dog jumped over a fence.” ก็ใช้โมเดลทำนายความเป็นไปได้ของตัวอักษรแต่ละตัว
เช่น อาจมั่นใจ 100% ว่าตัวอักษรถัดไปคือ “a” หรืออาจเป็น “a” 10%, “b” 10% อะไรทำนองนั้น
จากนั้นนำค่าประมาณของตัวอักษรมามัดรวมกัน จะรวมกี่ตัวก็ขึ้นอยู่กับให้ความไม่แน่นอนรวมของแต่ละกลุ่ม หรือก็คือ entropy ใกล้เคียงกัน
แบบนี้ก็จะกลายเป็น patch หรือ “token”
เขาใช้เฉพาะ entropy ของ byte ถัดไป แล้วดูว่ามันเกิน threshold หรือไม่ (global constraint) หรือมากกว่า entropy ของ byte ก่อนหน้าตาม threshold อีกค่าไหม (approximate monotonicity constraint)
ดังนั้นอย่างที่เห็นในภาคผนวก E sequence ที่ยาวและซ้ำ ๆ จึงอาจนำไปสู่ patch ที่ยาวผิดปกติ
สิ่งที่ผมอยากรู้จริง ๆ คือ โมเดล byte-level CNN ขนาดเล็กที่ใช้ context 2 byte ในรูป 3(f) ซึ่งไม่ได้ถูกพูดถึงเลยในส่วนอื่นของ paper
โพสต์ที่เกี่ยวข้องล่าสุด:
Meta FAIR แชร์งานวิจัย โมเดล และ dataset ใหม่ - https://news.ycombinator.com/item?id=42412360 - ธันวาคม 2024, 61 คอมเมนต์
หมายความว่าสิ่งเดียวที่ใช้สอนโมเดล หรือก็คือ loss เป็นแค่การทำนายความน่าจะเป็นใน space ของ byte เดี่ยว ๆ ใช่ไหม?
ถ้าผมไม่ได้เข้าใจผิด นั่นแปลว่าแค่นั้นก็เพียงพอแล้ว ซึ่งดูมีอนาคตมาก
เท่าที่ผมเข้าใจ วิธีนี้ไม่ได้แค่กำจัด tokenization แต่ยังเอา sampling ออกไปด้วยไม่ใช่หรือ?
sampling อาจเป็นปัญหาน่าปวดหัวของ LLM แต่ก็เปิดให้ใช้ประโยชน์ที่น่าสนใจได้ เช่น บังคับไวยากรณ์เพื่อให้โมเดลส่ง JSON ที่ valid เสมอ, ปรับ temperature เพื่อให้ได้ distribution ที่หลากหลายขึ้น, หรือใช้ XTC sampling
ใน BLT สิ่งที่เทียบเท่ากันคืออะไร?
ผมนึกออกแค่วิธีเพิ่ม byte ที่อนุญาต/ห้ามเป็น input เพิ่มให้ decoder แล้ว decode ซ้ำจนกว่าจะได้ output ที่ valid แต่อาจมีวิธีที่ง่ายและ obvious กว่านี้ก็ได้
เหมือนกับโมเดลที่ใช้ BPE แค่คำนวณ softmax เฉพาะ byte ที่อนุญาตใน output layer แล้ว sample จากตรงนั้นก็พอ
แบบนี้แปลว่า AI สามารถ pretrain กับ binary ได้ด้วยหรือเปล่า?
เราคิดว่าจุดจบคือ AI เขียนโค้ดแทนเรา แต่บางทีอาจยึดครองได้ด้วยวิธีที่ง่ายกว่านั้นมาก
น่าสนใจว่าแนวทางเชิงภาษาศาสตร์และแนวทางอิงประสบการณ์ตกกระแสไปมากแค่ไหน
มนุษย์แม้จะทำได้ แต่โดยปกติไม่ได้อ่านทีละตัวอักษร เรามีรากศัพท์ และเข้าใจการผันคำ tokenization ไม่สามารถจำลองประสบการณ์แบบนี้ได้ โดยเฉพาะเมื่อดู token ที่ปรากฏใน vocabulary ของ LLM และการเข้ารหัสระดับตัวอักษรหรือ byte ก็เช่นกัน
มนุษย์มีหลายวิธีในการ parse คำ อาจเข้าใจทั้งประโยคได้ในครั้งเดียว อ่านเป็นวลี อ่านทีละคำ หรือถอดเสียงคำใหม่ทีละตัวอักษรก็ได้
มี paper น้อยมากที่กล่าวอย่างชัดเจนว่าวิธีใดดีเพราะมันจำลองวิธีที่มนุษย์ทำงานหรือรับรู้โลก
ยิ่งเราพึ่งพา LLM มากขึ้น ผมคิดว่าเราจะยิ่งอยากปรับโมเดลให้ใกล้เคียงกับประสบการณ์ของเรามากขึ้น แล้วข้อผิดพลาดที่โมเดลสร้างออกมาก็น่าจะเข้าใจได้ง่ายขึ้นด้วย
ประโยคที่ว่า “ต่างจาก tokenization, BLT ไม่มี vocabulary คงที่สำหรับ patch” ถ้าผมเข้าใจถูก หมายความว่า patch vocabulary ยังไม่เป็นที่รู้ก่อนการฝึก
หลังจากการฝึก establish patch vocabulary แล้ว ตอน inference ก็น่าจะใช้ vocabulary คงที่ชุดเดียวกัน ไม่อย่างนั้นผมไม่รู้ว่ามันจะทำงานได้อย่างไร
ถูกไหม?