โมเดลภาษาบรรจุแนวคิดนับพันล้านไว้ใน 12,000 มิติได้อย่างไร
(nickyoder.com)- ใน พื้นที่ฝังตัวมิติสูง สามารถแทนแนวคิดจำนวนมหาศาลได้โดยอาศัย กึ่งตั้งฉาก (quasi-orthogonality) แทนความตั้งฉากสมบูรณ์
- บทตั้งเสริม Johnson-Lindenstrauss รับประกันว่าสามารถฉายข้อมูลมิติสูงตามอำเภอใจลงสู่มิติที่ต่ำกว่าได้โดยแทบไม่สูญเสียข้อมูล
- ในกระบวนการหาค่าเหมาะที่สุด การออกแบบ ฟังก์ชันความสูญเสีย มีความสำคัญมาก เพราะฟังก์ชันความสูญเสียพื้นฐานอาจทำให้เกิดการจัดวางเวกเตอร์ที่ไม่มีประสิทธิภาพหรือมีอคติ
- ผลการทดลอง แสดงให้เห็นว่าความจุจริงของพื้นที่ฝังตัวนั้นใหญ่กว่าที่คาดกันในทางทฤษฎีมาก และสามารถรองรับแนวคิดตั้งแต่หลายล้านไปจนถึงหลายพันล้านรายการให้อยู่ร่วมกันได้อย่างเป็นธรรมชาติ
- การค้นพบนี้มีนัยเชิงปฏิบัติอย่างมากต่อ งานแมชชีนเลิร์นนิง เช่น การแทนข้อมูลและการลดมิติในการประมวลผลภาษาธรรมชาติและการออกแบบ embedding
บทนำ: คำถามเรื่องความจุของพื้นที่ embedding ในโมเดลภาษา
ในซีรีส์วิดีโอเกี่ยวกับโมเดลทรานส์ฟอร์เมอร์ของ 3Blue1Brown เมื่อไม่นานมานี้ Grant Sanderson ได้ตั้งคำถามที่น่าสนใจว่า พื้นที่ embedding 12,288 มิติของ GPT-3 จะบรรจุแนวคิดจากโลกจริงได้หลายล้านแนวคิดอย่างไร
ข้อสงสัยนี้เชื่อมโยงกับผลลัพธ์ทางคณิตศาสตร์อย่าง เรขาคณิตมิติสูง และ บทตั้งเสริม Johnson-Lindenstrauss (JL)
ระหว่างการสำรวจประเด็นนี้ ได้เกิดความเข้าใจใหม่เกี่ยวกับคุณสมบัติพื้นฐานของปริภูมิเวกเตอร์และการหาค่าเหมาะที่สุด และยังนำไปสู่การร่วมงานกับ Grant อีกด้วย
ความเป็นกึ่งตั้งฉากของเวกเตอร์และความจุของพื้นที่ embedding
- ในปริภูมิ N มิติ จะมีเวกเตอร์ที่ตั้งฉากกันอย่างสมบูรณ์ได้เพียง N ตัว
- แต่ในทางปฏิบัติ หากยอมให้มีความสัมพันธ์แบบ กึ่งตั้งฉาก (quasi-orthogonal) ที่เบี่ยงจาก 90 องศาเล็กน้อย (เช่น มุม 85~95 องศา) จำนวนเวกเตอร์ที่แทนได้ในปริภูมิเดียวกันจะเพิ่มขึ้นแบบทวีคูณ
- ในวิดีโอของ Grant มีการแสดงภาพว่าเวกเตอร์หน่วย 10,000 ตัวสามารถจัดวางในปริภูมิ 100 มิติให้เกือบตั้งฉากกันได้
- อย่างไรก็ตาม ระหว่างการทำซ้ำการทดลองเดียวกัน กลับพบกับกับดักเล็ก ๆ ในการออกแบบ ฟังก์ชันความสูญเสียสำหรับการหาค่าเหมาะที่สุด
ปัญหาและรูปแบบของฟังก์ชันความสูญเสีย
- ฟังก์ชันความสูญเสียพื้นฐาน:
loss = (dot_products.abs()).relu().sum() - บนยูนิตสเฟียร์จริง ๆ ฟังก์ชันความสูญเสียนี้ก่อให้เกิดปัญหาสองประการ
- Gradient Trap: เมื่อมุมของเวกเตอร์เข้าใกล้ 90 องศา กราดิเอนต์จะทำงานแรง แต่เมื่อเข้าใกล้ 0 องศาหรือ 180 องศา กราดิเอนต์จะเกือบเป็นศูนย์ ทำให้การปรับปรุงหยุดชะงัก
- ทางออกแบบ 99%: วิธีหาค่าเหมาะที่สุดจะลดความสูญเสียรวมด้วยการจัดวางที่เวกเตอร์แต่ละตัวตั้งฉากได้ดีต่อ 9,900 ตัวจาก 10,000 ตัว แต่เกือบขนานกับอีก 99 ตัว (กล่าวคือเป็นสำเนาของเวกเตอร์อ้างอิง)
- เมื่อมองภาพรวม วิธีแก้นี้ต่างจากสิ่งที่คาดหวังโดยพื้นฐาน จึงจำเป็นต้องใช้ฟังก์ชันความสูญเสียที่ประณีตกว่า
- จึงเปลี่ยนไปใช้ฟังก์ชันความสูญเสียที่มีการลงโทษแบบเอ็กซ์โปเนนเชียล: loss = exp(20*dot_products.abs()**2).sum()
- วิธีนี้ให้ผลที่ใกล้กับการกระจายตัวที่ต้องการมากกว่า (มุมคู่สูงสุดประมาณ 76.5 องศา)
บทตั้งเสริม Johnson-Lindenstrauss (JL): หลักประกันเชิงเรขาคณิต
- บทตั้งเสริม JL รับประกันว่าแม้จะฉายชุดจุดข้อมูลมิติสูงตามอำเภอใจลงสู่มิติที่ต่ำกว่าแบบสุ่ม ระยะทางแบบยูคลิดก็ยังคงถูกเก็บรักษาไว้เกือบเดิม
- สำหรับจุดจำนวน 1~N จุด ค่าคลาดเคลื่อน ε และมิติฉาย k
(1-ε)||u-v||² ≤ ||f(u)-f(v)||² ≤ (1+ε)||u-v||² - มิติต่ำสุดที่ต้องการคือ:
k ≥ (C/ε²) * log(N)
โดย C เป็นค่าคงที่ที่ใช้ปรับความน่าจะเป็นของความสำเร็จ - โดยทั่วไปมักตั้งค่า C แบบอนุรักษนิยมไว้ที่ 4~8 แต่ในวิธีฉายแบบพิเศษบางแบบ (เช่น Hadamard matrix หรือวิธีหาค่าเหมาะที่สุด) อาจทำให้ได้ C ที่เล็กกว่านี้
ด้านการประยุกต์ใช้งานจริง
- การลดมิติ:
- ตัวอย่าง) แปลงความชอบของลูกค้าอีคอมเมิร์ซจากมิติระดับจำนวนสินค้าหลายหมื่นรายการให้เหลือเพียงหลักพันได้อย่างมีประสิทธิภาพ
- นำไปใช้กับการวิเคราะห์ข้อมูลมิติสูงแบบเรียลไทม์และระบบแนะนำได้
- การวิเคราะห์ขีดจำกัดความจุของพื้นที่ embedding:
- แทนที่จะยึดกับความตั้งฉากสมบูรณ์ ก็สามารถแสดง สเปกตรัมของความเหมือน/ความต่างระหว่างแนวคิด ได้อย่างเป็นธรรมชาติภายในปริภูมิ
- ตัวอย่างคำจริง เช่น "archery", "fire", "gelatinous", "green" ซึ่งมีทั้งความหมายเชิงกายภาพและเชิงนามธรรมซ้อนทับกันในปริภูมิมิติสูง
การวิเคราะห์เชิงทดลองของความจุ embedding
- จากการหาค่าเหมาะที่สุดด้วยการแปลง Hadamard matrix เป็นต้น พบว่าค่า C อยู่ที่ 2.5~4 และในการหาค่าเหมาะที่สุดบน GPU อาจลดลงได้มากกว่านั้นอีก
- วิธีทดลอง: ฉาย standard basis vector จำนวน N ตัวเข้าสู่ปริภูมิ k มิติทีละลำดับ แล้วทำการหาค่าเหมาะที่สุดซ้ำ 50,000 ครั้ง
- ผลการสังเกต:
- ค่า C จะเพิ่มขึ้นจนถึงค่าสูงสุด (~0.9) เมื่อ N เพิ่มขึ้น แล้วจึงค่อย ๆ ลดลง
- เมื่ออัตราส่วน N/k สูงขึ้น C จะลดลงต่ำกว่า 0.2
- สิ่งนี้เกิดจากประสิทธิภาพของ sphere packing ในปริภูมิมิติสูง
- นั่นชี้ว่าความสามารถในการแทนแนวคิดจริง ๆ อาจมากกว่าขอบบนทางทฤษฎีเสียอีก
ความหมายเชิงปฏิบัติของ embedding ในโมเดลภาษา
- จำนวนแนวคิดที่บรรจุได้ขึ้นอยู่กับมิติ embedding k มุมตั้งฉากโดยประมาณ F (90°-มุมจริง) และค่า C โดยคำนวณได้เป็น
Vectors ≈ 10^(k * F² / 1500)
- k=12,288, F=1(89°) → 10^8
- F=2(88°) → 10^32
- F=3(87°) → 10^73
- F=5(85°) → เก็บเวกเตอร์ได้มากกว่า 10^200
- เพียง 86° ก็มีจำนวนมากกว่าจำนวนอะตอมในเอกภพที่สังเกตได้ (10^80)
- กล่าวคือ โมเดลภาษาจริงสามารถคงความหมายจำนวนหลายล้านรายการไว้ได้อย่างอุดมสมบูรณ์แม้มีจำนวนมิติไม่มากนักเมื่อเทียบกัน
การประยุกต์ใช้ในงานจริงและทิศทางในอนาคต
- การลดมิติอย่างมีประสิทธิภาพ:
- ผ่านวิธีการฉายแบบสุ่มที่ผสาน Hadamard transform, BCH coding เป็นต้น จึงสามารถลดมิติของข้อมูลขนาดใหญ่และคำนวณได้รวดเร็วโดยไม่ต้องทำ optimization ที่ซับซ้อน
- การออกแบบพื้นที่ embedding:
- ความเข้าใจเรื่องความจุของปริภูมิช่วยอธิบายได้ว่าโมเดลภาษาขนาดใหญ่อย่างทรานส์ฟอร์เมอร์สามารถเก็บรักษาความสัมพันธ์เชิงความหมายของแนวคิดละเอียดอ่อนอย่าง "Canadian" หรือ "Muppet-like" ไปพร้อมกันได้
- โดยสรุป มาตรฐาน embedding ปัจจุบัน (1,000~20,000 มิติ) เพียงพอสำหรับการแทนองค์ความรู้ของมนุษย์ และหัวใจสำคัญคือการ เรียนรู้การจัดวางที่เหมาะสมที่สุด ภายในปริภูมินั้น
บทสรุป
- จุดเริ่มต้นจากการสำรวจปัญหาการหาค่าเหมาะที่สุดเล็ก ๆ ในฟังก์ชันความสูญเสีย ได้นำไปสู่ความเข้าใจเชิงลึกต่อเรขาคณิตมิติสูงและโครงสร้างพื้นฐานของแมชชีนเลิร์นนิง
- บทตั้งเสริม JL ที่ตีพิมพ์ในปี 1984 กำลังทำหน้าที่เป็นแกนหลักของหลักการ embedding ในแมชชีนเลิร์นนิง การแทนข้อมูล และการลดมิติในปัจจุบัน
- พร้อมทั้งขอบคุณ Grant Sanderson, ช่อง 3Blue1Brown และ Suman Dev สำหรับความร่วมมือ และแบ่งปันความยินดีจากประสบการณ์วิจัยและการเขียนครั้งนี้
อ่านเพิ่มเติม
- Sphere Packings, Lattices and Groups – Conway & Sloane
- Database-friendly random projections: Johnson-Lindenstrauss with binary coins – Achlioptas
- Hadamard Matrices, Sequences, and Block Designs – Seberry & Yamada
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
นัยของคุณสมบัติทางเรขาคณิตนี้น่าตกใจจริง ๆ ลองคิดวิธีประเมินแบบง่าย ๆ ได้ว่าในปริภูมิ k มิติ เราจะใส่เวกเตอร์ที่เกือบตั้งฉากกันได้มากแค่ไหน ถ้าสนใจแค่มุมต่ำสุดระหว่างเวกเตอร์ สุดท้ายก็คือการวิเคราะห์เรื่อง spherical codes แต่บทความนี้กลับไม่อ้างอิงงานวิจัยเดิมเกี่ยวกับ spherical codes เลย และหลายส่วนก็ดูเหมือนเขียนโดย language model อีกทั้งยังมีความไม่สอดคล้องพื้นฐานจำนวนมากที่ทำให้ความน่าเชื่อถือของข้อสรุปลดลง ตัวอย่างเช่น ในกราฟที่แสดงค่า C ตาม K และ N แกน x คือ K หรือ N กันแน่? คำบรรยายบอกว่าแกน x คือ N (จำนวนเวกเตอร์) แต่ต่อมากลับอธิบายว่าได้ C=0.2 ใน “ปริภูมิที่ใหญ่มาก” ขณะที่ในกราฟ C=0.2 เกิดขึ้นเฉพาะตอน N=30,000 และ K=2 เท่านั้น — เท่ากับมีเวกเตอร์ 30,000 ตัวในปริภูมิ 2 มิติ! กลับกัน ถ้าแกน x คือ K บทความนี้ก็กำลังเอาผลที่วัดจากเวกเตอร์ 2 ตัวใน 30,000 มิติ ไป extrapolate เป็นกรณีเวกเตอร์ 10^200 ตัวใน 12,888 มิติ ซึ่งไม่มีเหตุผลเลย ผมอยากเข้าหางานของคนอื่นแบบเป็นบวกและเป็นมิตรนะ แต่ช่วงนี้กระแสบทความที่เขียนด้วย LLM บน Hacker News มันถาโถมหนักจริง ๆ
การบอกว่าอะไรบางอย่างถูกสร้างด้วย LLM นั้นทั้งพิสูจน์ไม่ได้ และสู้ชี้ตรง ๆ ว่า “มีข้อผิดพลาด” จะตรงประเด็นและมีความหมายกว่าเสียอีก ที่จริงการชี้ข้อผิดพลาดแบบนี้มีประโยชน์มากกว่า สำหรับรูปนั้น ผมก็คิดว่าแกน x น่าจะเป็น N
จากที่ผมไม่รู้จัก spherical codes มาก่อน ก็ทำให้รู้สึกว่าศัพท์ในสาขานี้ค่อนข้างเฉพาะทางมาก แม้แต่ Wikipedia ก็ดูเหมือนแทบไม่รู้อะไร และผลค้นหา Google ส่วนใหญ่ก็ลงเอยที่การจัดวางแบบ optimal packing คล้ายลูกกอล์ฟบนทรงกลมในมิติต่ำกว่า 32 อยู่ดี บ่อยครั้งคณิตศาสตร์ที่มีอยู่แล้วก็มักถูกค้นพบใหม่อีกครั้งเพราะซ่อนอยู่ใต้คำศัพท์เฉพาะที่ไม่ชวนให้เข้าใจ
เห็นด้วย อยากรู้ว่ามีบทความไหนที่อธิบายคุณสมบัติทางเรขาคณิตและข้อมูลของปริภูมิเวกเตอร์มิติสูง รวมถึง spherical codes ได้ดีกว่านี้บ้าง
จากกราฟที่คุณอ้างถึง ผมมองไม่เห็นว่า K=2 จะไปถึง C=0.2 เลย K=3 ก็หยุดแค่ C=0.3 ด้วยซ้ำ แต่ผมก็ยังไม่ค่อยเข้าใจว่าทำไมเรื่องนี้ถึงเป็นปัญหา ผู้เขียนน่าจะฉาย projected basis vectors จำนวน N ลงใน K มิติ และ C ก็ดูคล้ายค่าความผิดพลาดของการแมปจากปริภูมิ N ไปยังปริภูมิ K ถ้ามีเหตุผลว่าทำไมแนวคิดนี้ถึงไม่สอดคล้องกับกราฟ ผมอยากฟังเพิ่ม เพราะจากข้อโต้แย้งของคุณดูเหมือนยังไม่ได้แตะตัวแนวคิดนี้โดยตรง
ผมคิดว่าผู้เขียนโฟกัสกับกรณีที่เวกเตอร์ทุกตัวตั้งฉากสมบูรณ์มากเกินไป เลยประเมินระดับความผิดพลาดที่ยอมรับได้สูงเกินจริง สิ่งที่สำคัญจริง ๆ ไม่ใช่แค่ทำให้เวกเตอร์ที่ตั้งฉากกันยังคงเกือบตั้งฉาก แต่ต้องรักษาลำดับระยะห่างระหว่างเวกเตอร์ที่อยู่ไกลจากความตั้งฉากด้วย แม้ epsilon จะเล็กกว่านี้มาก ก็ยังอาจเกิดปัญหาได้จริง ดังนั้นคำกล่าวที่ว่า “อย่างที่งานนี้เสนอ แค่ราว 1,000~20,000 มิติก็เพียงพอจะบรรจุทั้งความรู้และการให้เหตุผลของมนุษย์” จึงมองโลกในแง่ดีเกินไป
ปกติเวกเตอร์จะถูก normalize ให้อยู่บนผิวของ n-sphere และระยะที่มีความหมายจริงในการใช้งานก็คือ cosine similarity เพราะฉะนั้นในทางปฏิบัติ “เกือบตั้งฉาก” จึงสำคัญ ระหว่างการฝึก เป้าหมายคือทำให้ตัวแทนที่ไม่มีความหมายแยกจากกันบนทรงกลมให้ “ตั้งฉาก” มากขึ้น และเมื่อต้องนำไปใช้บนฮาร์ดแวร์จริง ก็ยังมีข้อจำกัดด้านความละเอียดของ floating point ซึ่งยิ่งทำให้วิธีนี้ใช้ได้ดี โดยส่วนตัวแล้ว แนวคิดนี้ไม่ได้ถูกเสนอครั้งแรกโดยบล็อกหรือวิดีโอ YouTube นั้น ใน AI หรืออย่างน้อยในการฝึก neural network ความสำคัญของบทตั้งนี้ถูก C. Eliasmith พูดถึงตั้งแต่ราว 10 ปีก่อน และถูกศึกษามาตั้งแต่ก่อนที่เครือข่ายความรู้มิติสูงมากอย่าง GPT จะถูกฝึกได้จริงด้วยซ้ำ
ตรรกะของข้ออ้างต้นฉบับไม่ค่อยดี แต่ถึงอย่างนั้น ความสามารถในการแทนข้อมูลระดับราว 20,000 มิติก็ยังชวนให้มองในแง่ดีอยู่
ผมเองก็ไม่ได้คิดว่าเวกเตอร์ทั้งหมดจะตั้งฉากสมบูรณ์หรือเป็นอิสระจากกัน เรื่องการวัดระยะ ปริภูมิเส้นโค้ง (curvilinear space) และพิกัดเอียง (skew coordinate) ก็มีบทความน่าอ่านเหมือนกัน: https://news.ycombinator.com/item?id=41873650. มีคำถามพื้นฐานอย่าง “การวัดระยะเปลี่ยนไปแค่ไหนตามลำดับของคุณลักษณะ?”, “ถ้าสลับลำดับของแกนตั้งฉากทั้งหมด ผลลัพธ์ของอัลกอริทึมจะเปลี่ยนไหม?”, “คุณลักษณะในปริภูมิมิติสูงนั้นตั้งฉากกัน 90 องศาจริงทุกตัวหรือเปล่า?” ถ้าคุณลักษณะไม่ได้เป็นอิสระทางสถิติ ก็แทบเป็นไปไม่ได้เลยที่จะตั้งฉากสมบูรณ์จริง และประโยชน์ของการวัดระยะที่ตั้งอยู่บนสมมติฐานเรื่องความเป็นอิสระก็อาจมีข้อจำกัด โมเดลเชิงเส้นอย่าง naive Bayes, linear regression, logistic regression, LDA, PCA จะเชื่อถือได้น้อยลงเมื่อคุณลักษณะไม่เป็นอิสระ เทคนิคอย่าง L1 lasso หรือ L2 ridge regularization ก็มีความเสี่ยงเมื่อเจอข้อมูลที่มี outlier หรือไม่เป็นอิสระและไม่ตั้งฉาก [ความตั้งฉากสมบูรณ์] บีบอัดให้เกิดขึ้นแบบฝืน ๆ ได้ยาก จึงยากจะบอกว่าโมเดลเพียงพอแล้ว และในระดับพื้นฐานก็ยังมีคำถามว่า gbit สามารถเข้ารหัสพร้อมกันได้จริงหรือไม่
กลิ่นอาย ChatGPT ที่โชยมาจากบทความส่วนใหญ่ค่อนข้างรบกวนใจและทำให้โฟกัสยาก ผมเองก็ใช้ AI ช่วยเกลาภาษาอังกฤษ แต่จะสั่งไว้ไม่ให้เปลี่ยนโทนหรือรูปแบบมากเกินไป เพื่อพยายามเลี่ยงไม่ให้เป็นแบบนั้น ถึงอย่างนั้น ผมก็คิดว่าข้อสังเกตทางคณิตศาสตร์นี้น่าสนใจมาก มันชี้ไปถึงนัยพื้นฐานที่ช่วยให้มองเข้าไปในวิธีทำงานจริงของ large language model และระบบ AI อื่น ๆ ได้ ถ้าดูว่าข้อมูลมิติสูงถูกฉายลงสู่มิติต่ำโดยยังรักษาโครงสร้างไว้ได้อย่างไร ก็จะเห็นว่ากลไกแบบนี้คือหัวใจของประสิทธิภาพและการขยายสเกล
น่าแปลกดีที่ย่อหน้าที่สองของคุณกลับให้ความรู้สึกเหมือนผ่าน ChatGPT มาเหมือนกันทันที จากคำอย่าง “fascinating”, “crucial”, “delving” และโครงสร้างของย่อหน้า
อยากรู้ว่าตรงไหนที่ทำให้รู้สึกถึงกลิ่น GPT ชัด ๆ เพราะเป็นสไตล์ที่ชอบไล่เรียงหลายอย่างหรือเปล่า?
ทฤษฎีเชิงสัญชาตญาณแบบนี้ รวมถึงบทตั้ง Johnson-Lindenstrauss (JL) คือแกนหลักที่ทำให้งานวิจัยด้าน mechanistic interpretability เช่น SAEs (sparse autoencoders) ในสาย AI safety เป็นไปได้ หลายไอเดียในนี้ถูกรวบรวมไว้อย่างดีในงานของ Anthropic ปี 2022: https://transformer-circuits.pub/2022/toy_model/index.html
language model ไม่ได้ยัด “แนวคิด” ลงไปแบบตรึงตายในมิติ C ของเลเยอร์หนึ่งเลเยอร์เดียว (ดูเหมือนตัวเลข 12k จะถูกใช้ในความหมายทำนองนั้น) และก็ไม่จำเป็นต้องมีความตั้งฉากสมบูรณ์ระหว่างเวกเตอร์เพื่อแยกแยะและปฏิบัติต่อแนวคิดต่าง ๆ LLM ไม่ได้แค่ทำให้ระยะระหว่างแนวคิดในปริภูมิเวกเตอร์ห่างกัน แต่ความหมายยังซ้อนทับกันอยู่ทั่ว ๆ ด้วย นี่แหละคือหัวใจของ dense representation ถ้าฝึก sparse autoencoder คุณจะเห็นได้ว่านิวรอนใดเปิดใช้งานตามหัวข้ออะไร Neuronpedia แสดงภาพจริงแบบนี้ได้ดีมาก: https://www.neuronpedia.org/
งาน sparse autoencoder นั่นเองที่ตั้งอยู่บนแนวคิด “เกือบตั้งฉาก” แบบที่บทความนี้พูดถึง เดิมทีเรียกว่า ‘superposition hypothesis’: https://transformer-circuits.pub/2022/toy_model/index.html SAEs ทำหน้าที่แยก dense vector ออกเป็น “แนวคิด” แบบ sparse ที่เกือบตั้งฉากกันในปริภูมิ overcomplete วิธีนี้ใช้ได้ผลจริง และยังอาจนำไปใช้จับคู่ embedding space ระหว่าง LLM ต่างตัวได้อย่างมีประสิทธิภาพด้วย
ถ้าผ่อนเงื่อนไขของความตั้งฉากสมบูรณ์ลง เราจะยัดข้อมูลได้มากขึ้นมาก โดยพื้นฐานแล้วคือการจับกลุ่มข้อมูลเพิ่มเติมแบบ (เศษส่วนของมิติ) เข้ากับมิติเดิม พูดอีกอย่างคือ แนวคิดจำนวนมากไม่ได้ตั้งฉากสมบูรณ์ต่อกัน แต่มีการซ้อนทับหรือสหสัมพันธ์กันในระดับหนึ่ง เพราะอย่างนั้น เนื้อหาในบทความจึงไม่ได้พลิกโลกมากนัก และการใช้คำอย่าง “remarkable”, “fascinating”, “profound” อย่างพร่ำเพรื่อก็ให้อารมณ์แบบ LLM ที่พยายามดึงผู้อ่านอยู่หน่อย ๆ
เรื่องเล็กน้อยแต่สนุกดี: คุณเองก็สามารถเก็บแนวคิดนับพันล้านไว้ในปริมาณพื้นที่ประมาณนี้ได้เหมือนกัน ต่อให้สนใจแค่ 4 บิตต่อคอมโพเนนต์ของเวกเตอร์ เวกเตอร์ 12000 มิติแบบ fp4 ก็มีขนาดราว 6KB ซึ่งพอ ๆ กับข้อความ UTF-8 หลายหน้า หรือประมาณ embedding 64K ของข้อความ 3K โทเคน จำนวนความเป็นไปได้ของ “ความคิด” ที่แทนได้แบบนี้มีมหาศาล เวลาประมวลผลหนึ่งโทเคน แต่ละเลเยอร์ก็ผสม “ความคิด” ก่อนหน้าเข้ากับ attention และข้อมูลที่เรียนรู้ผ่าน FFN ราว 60 ครั้ง ด้วยเหตุนี้ระบบทั้งชุดจึงทำงานซับซ้อนได้ เช่น แปลง Bash เป็น Python หรือแก้โจทย์คำ แน่นอน ผมไม่ได้คาดหวังว่ามันจะมีประสิทธิภาพด้านพื้นที่ 100% มันต้องทำงานได้ดีเมื่อผสมเวกเตอร์ด้วย “ความแรง” ที่ต่างกัน และการฝึกก็ไม่ได้ลู่เข้าหาการบีบอัดที่มีประสิทธิภาพสูงสุดเสมอไป แต่ถึงมองขีดจำกัดเชิงทฤษฎีเป็นแค่เพดานบน มันก็ยังทำให้เกิดความรู้สึกใหม่ว่าในเวกเตอร์มิติสูงมาก เราอาจอัดอะไรที่ใช้เรียกว่า “ความคิด” ได้แน่นขนาดไหนในทางปฏิบัติ
สัญชาตญาณของผมง่ายกว่านั้นมาก — ถ้าสมมติว่าแนวคิดมีโครงสร้างแบบลำดับชั้นอยู่บ้าง ก็พอจะคำนวณคร่าว ๆ ได้ว่าในปริภูมิ 12000 มิติจะมีแนวคิดได้กี่แบบ ถ้าคิดว่าแต่ละแนวคิดในบางมิติจะตั้งฉากอย่างน้อยหนึ่งแกนกับแนวคิดอื่นทั้งหมด นั่นแปลว่าจะมีฟังก์ชันที่แยกเชิงเส้นระหว่างสองแนวคิดได้เสมอ แม้ cosine distance จะไม่ได้มากพอก็ตาม ในกรณีสุดโต่ง แบบนี้อาจไปได้ถึง 12,000! แนวคิดเลย ซึ่งมากเกินพอสำหรับ taxonomy ทั่วไป
การจะทำให้เป็น 12,000! แนวคิดได้ ต้องมีการจับคู่ลำดับให้แต่ละแนวคิดกับมิติ แต่ในโมเดลจริง ลำดับของมิติไม่มีความหมาย กล่าวคือ [weight_1, weight_2,...] กับ [weight_2, weight_1,...] เหมือนกันทุกประการภายในโมเดล ในทางปฏิบัติ language model จะเหมือนมีแค่ค่าบวก ค่าลบ หรือ 0 ในแต่ละแกน ซึ่งเท่ากับประมาณ 3^12,000 แนวคิด จริง ๆ แล้วในเวกเตอร์ส่วนใหญ่แทบทุกแกนจะเกือบเป็น 0 หมด ยกเว้นไม่กี่สิบแกน (เพราะข้อจำกัดด้านเวลาในการฝึก)
ตัวเลขนั้นใหญ่กว่าจำนวนอะตอมในเอกภพทั้งหมด (10^80) มากอย่างมหาศาล (ประมาณ 10^43741)
ตรงที่ว่า “cosine distance ไม่ได้มากนัก” นั่นแหละคือข้อจำกัดสำคัญอยู่แล้ว
ถ้าเคยเล่นเกม 20 Questions ก็จะรู้ว่าเราไม่จำเป็นต้องใช้ 1000 มิติเพื่อแทนแนวคิดนับพันล้าน เวกเตอร์ขนาดมหึมาแบบนี้ยังเก็บข้อมูลที่ซับซ้อนกว่าแนวคิดนับพันล้านได้อีกมาก ที่จริง บทกวีทั้งบทพร้อมตำแหน่งคำพิมพ์ผิดก็สามารถถูกแทนและค้นคืนได้ด้วยเวกเตอร์แบบนี้ อย่างกรณีที่เอาบทกวีไปให้ GPT แล้วถามหาตำแหน่งคำผิด ข้อมูลนั้นน่าจะถูกแยกแยะไว้อย่างชัดเจนในบางจุดของเลเยอร์ภายใน
จริง ๆ แล้วนั่นไม่ใช่งานของเวกเตอร์เดี่ยว แต่เป็นสิ่งที่ทั้งโมเดลทำร่วมกัน โมเดลทั้งตัวทำงานคล้ายเวกเตอร์ระดับล้านล้านมิติแบบหนึ่ง
ถ้าใช้เวกเตอร์แบบไบนารี 20 มิติก็แทนแนวคิดได้เกินหนึ่งล้านเล็กน้อย และ 30 มิติก็ได้หนึ่งพันล้านแนวคิดแล้ว
แม้หลายคอมเมนต์จะชี้ช่องโหว่ของบทความนี้ไปมากแล้ว แต่ผมขอเพิ่มข้อสังเกตพื้นฐานสุด ๆ อีกข้อ: คำกล่าวว่าปริภูมิ 12k มิติเก็บแนวคิดได้ 10^200 นั้นเหลวไหลเกินไป ปริภูมิเวกเตอร์ 12k มิติอาจเก็บค่าจำเพาะแยกกันได้มากมายก็จริง แต่ไม่ได้แปลว่าสิ่งเหล่านั้นล้วนเป็น “แนวคิด” ข้ออ้างแบบนี้เกินเลยมาก ผมว่าแม้แต่ Shannon ก็คงอยากทักเรื่องนี้ชัด ๆ
ความผิดพลาดหลักคือ ในโลกจริงไม่ได้มี “แนวคิด” อยู่เป็นหมื่นล้านด้วยซ้ำ “แนวคิด” แบบที่มนุษย์ใช้ กับ “instance” หรือ “entity” เชิงกลไกนั้นเป็นคนละอย่างกันโดยสิ้นเชิง instance อาจมีได้ไม่สิ้นสุด แต่จำนวนแนวคิดเชิงนามธรรมที่เราใช้คิดจริง ๆ นั้นจำกัดกว่ามาก