2 คะแนน โดย GN⁺ 2024-02-05 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • หลังจากฝึก decoder-only Transformer ขนาดประมาณ 10 ล้านพารามิเตอร์ด้วย TinyShakespeare ผู้เขียนติดตามด้วยสถานะภายในและการทดลองว่าผลลัพธ์การคำนวณหลัง self-attention ถูกแปลงเป็นความน่าจะเป็นของโทเค็นถัดไปอย่างไร
  • สมมติฐานหลักคือ Transformer แต่ละบล็อกเชื่อมโยงพรอมป์เข้ากับชุดสตริงเฉพาะในคลังข้อมูลฝึก และ การแจกแจงความถี่ ของโทเค็นที่เกิดขึ้นจริงหลังสตริงเหล่านั้นใกล้เคียงกับการทำนายโทเค็นถัดไปของบล็อกนั้น
  • ขั้นตอนประมาณค่าที่นำไปใช้คือค้นหาสตริงฝึกที่คล้ายกับ เอาต์พุตของ feed-forward network ของแต่ละบล็อก รวมการแจกแจงอักขระที่ตามมา แล้วสร้างเอาต์พุตของโมเดลขึ้นใหม่ด้วยผลรวมถ่วงน้ำหนักแยกตามบล็อก
  • จากพรอมป์ความยาว 10 จำนวน 20,000 รายการ ค่าเฉลี่ย Hellinger distance ระหว่างเอาต์พุตประมาณค่ากับเอาต์พุตจริงของ Transformer อยู่ที่ประมาณ 0.17 และระยะห่างระหว่างโมเดลต้นฉบับกับโมเดลทางเลือกที่ฝึกด้วยโครงสร้างเดียวกันแต่ใช้ seed อื่นอยู่ที่ประมาณ 0.11 ± 0.08
  • การวิเคราะห์สนับสนุนการตีความว่าเอาต์พุต feed-forward มีน้ำหนักมากในการแปลงของบล็อก และ attention ทำหน้าที่แมปพรอมป์ไปยังคลาสสตริงฝึกที่ถูกต้อง แต่ยังไม่ทราบว่าสามารถทั่วไปออกไปนอกโมเดลขนาดเล็กได้หรือไม่

โมเดลที่ใช้ทดลองและคำถาม

  • นำ Transformer ขนาดประมาณ 10 ล้านพารามิเตอร์มาสร้างและฝึกตาม Let’s build GPT: from scratch, in code, spelled out ของ Andrej Karpathy
    • โค้ดหลักของโมเดลภาษาเป็นผลงานของ Karpathy ส่วนการวิเคราะห์ภายในและโค้ดช่วยเหลือเป็นการมีส่วนร่วมแยกต่างหาก
    • โค้ดที่เกี่ยวข้องอยู่ที่ transformer-experiments
  • โมเดลเป็น decoder-only Transformer ที่ประกอบด้วย 6 บล็อก
    • ข้อมูลฝึกคือ TinyShakespeare ซึ่งมีบทละคร Shakespeare 40,000 บรรทัด
    • หลังฝึกบน GPU RTX 4000 ประมาณ 1 ชั่วโมง โมเดลสามารถสร้างข้อความ Shakespeare ปลอมที่ดูสมเหตุสมผลเชิงโครงสร้างได้
  • โทเค็นไม่ใช่คำ แต่เป็น อักขระ
    • ขนาดคำศัพท์คือ 65 รายการ และโมเดลทำนายการแจกแจงความน่าจะเป็นของอักขระที่จะมาต่อจากพรอมป์อินพุต
    • เช่น หลัง 'my most gr' โมเดลทำนายอักขระถัดไปเป็น a ที่ 0.819, e ที่ 0.081, i ที่ 0.059
  • คำถามหลักไม่ใช่ self-attention เอง แต่คือผลลัพธ์หลัง attention ถูกแปลงเป็น ความน่าจะเป็นของโทเค็นถัดไป ขั้นสุดท้ายอย่างไร

โครงสร้างบล็อกและน้ำหนักของ feed-forward network

  • แต่ละ Transformer block มี multi-head self-attention และ feed-forward network
    • ตามโครงสร้าง PyTorch เอาต์พุตของบล็อกอยู่ในรูปที่เพิ่ม x + self.ffwd(self.ln2(x)) หลังจาก x + self.sa(self.ln1(x))
    • หากเขียนเป็นตัวแปรกลาง เอาต์พุตของบล็อกมองได้เป็น x + sa_out + ffwd_out
  • ในโมเดลที่วิเคราะห์ feed-forward network คิดเป็น 65.71% ของพารามิเตอร์ที่ฝึกได้ทั้งหมด
    • พารามิเตอร์ feed-forward: 7,089,408 ตัว
    • พารามิเตอร์ที่ฝึกได้ทั้งหมด: 10,788,929 ตัว
  • เอาต์พุตของ feed-forward network ดูเหมือนเป็น ปัจจัยหลัก ที่เปลี่ยนอินพุตของบล็อกให้เป็นเอาต์พุต
    • ในการทดลองต่อ ๆ มา เอาต์พุต feed-forward ส่งผลต่อการแจกแจงความน่าจะเป็นสุดท้ายมากกว่าเอาต์พุต self-attention เพียงอย่างเดียว

ค้นหาสตริงจากเอาต์พุต feed-forward ที่คล้ายกัน

  • ขั้นตอนประมาณค่าใช้ ความคล้ายของเอาต์พุต feed-forward ระหว่างพรอมป์กับสตริงในคลังข้อมูลฝึก
    1. ใส่พรอมป์เข้าโมเดลและบันทึกเอาต์พุตของ feed-forward network ในแต่ละบล็อก
    2. สำหรับแต่ละบล็อก ค้นหาสตริงในคลังข้อมูลฝึกที่มีเอาต์พุต feed-forward คล้ายกัน
    3. รวมการแจกแจงความถี่ของโทเค็นที่ตามหลังสตริงเหล่านั้น
    4. รวมการแจกแจงรายบล็อกแบบถ่วงน้ำหนักและ normalize เพื่อสร้างการแจกแจงความน่าจะเป็น
  • ในพรอมป์เดโม 'And only l' พบสตริงความยาว 10 จำนวน 94 รายการที่มี cosine similarity กับเอาต์พุต feed-forward ของบล็อก 1 ตั้งแต่ 0.95 ขึ้นไป
    • สตริงที่พบ เช่น hat only l, \nMy only l, I dearly l, ng Henry l, And only l โดยส่วนใหญ่ลงท้ายด้วย y l หรือ ly l
    • การแจกแจงความถี่แบบ normalize ของอักขระที่ตามหลังสตริงเหล่านี้คล้ายกับการทำนายอักขระถัดไปของโมเดลจริงมาก
  • ในตัวอย่าง 'And only l' ค่าประมาณกับการทำนายของโมเดลจริงสอดคล้องกันใกล้เคียง
    • โมเดล: i 0.437, o 0.204, a 0.195, e 0.160
    • ค่าประมาณ: i 0.389, o 0.250, a 0.222, e 0.139
    • Hellinger distance คือ 0.0711
  • บางกรณีใช้บล็อกเดียวแล้วล้มเหลว
    • สำหรับพรอมป์ 'hing tremb' หากใช้เฉพาะบล็อก 1 โมเดลทำนาย l ที่ 0.999 แต่ค่าประมาณเป็น e 0.543, l 0.343 ทำให้ Hellinger distance เป็น 0.6305
    • เมื่อสะท้อนทุกบล็อก ในตัวอย่างเดียวกันค่าประมาณทำนาย l ที่ 0.997 และ Hellinger distance ลดลงเป็น 0.0233

ขนาดการคำนวณและการปรับแต่งด้วยมือ

  • เพื่อประสิทธิภาพ การวิเคราะห์ทั้งหมดทำกับสตริงความยาว 10 เป็นหลัก
    • คลังข้อมูลฝึกมี 1,115,394 อักขระ และมี substring ความยาว 10 ที่ไม่ซ้ำกัน 858,923 รายการ
    • เอาต์พุต feed-forward เป็นเวกเตอร์ float32 ขนาด 384 มิติ และได้มาบล็อกละหนึ่งเวกเตอร์จาก 6 บล็อก
  • สุ่มเลือกสตริงความยาว 10 จำนวน 20,000 รายการมาใช้เป็นพรอมป์ทดลอง
    • คำนวณ cosine similarity รายบล็อกล่วงหน้าระหว่างแต่ละพรอมป์กับ substring ไม่ซ้ำกัน 858,923 รายการ และบันทึกลงดิสก์
    • เนื่องจากแมตช์ที่น่าสนใจไม่ปรากฏที่ cosine similarity ต่ำกว่า 0.7 จึงกรองล่วงหน้าเฉพาะค่าตั้งแต่ 0.7 ขึ้นไป
  • similarity threshold รายบล็อกกำหนดด้วยการปรับแต่งด้วยมือ
    • บล็อก 0: 0.95
    • บล็อก 1: 0.94
    • บล็อก 2: 0.85
    • บล็อก 3: 0.76
    • บล็อก 4: 0.81
    • บล็อก 5: 0.89
  • เมื่อรวมการแจกแจงความถี่รายบล็อก ก็ใช้น้ำหนักที่ปรับด้วยมือเช่นกัน
    • น้ำหนักที่ใช้คือ [0.01, 0.01, 0.1, 1.5, 6, 0.01]
    • แม้ลองค้นหาน้ำหนักด้วยวิธี deep learning แล้ว แต่ไม่ได้ผลดีกว่าการปรับแต่งด้วยมือ

การประเมินพรอมป์ 20,000 รายการ

  • คำนวณ Hellinger distance ระหว่างการแจกแจงประมาณค่ากับการแจกแจงเอาต์พุตของโมเดล สำหรับพรอมป์ทั้งหมด 20,000 รายการ
    • ค่าเฉลี่ย: 0.1677
    • ส่วนเบี่ยงเบนมาตรฐาน: 0.1215
    • ค่าต่ำสุด: 0.0013
    • ค่าสูงสุด: 0.9994
  • Hellinger distance ใช้วัดการทับซ้อนระหว่างการแจกแจงความน่าจะเป็น โดย 0 หมายถึงเหมือนกัน และ 1 หมายถึงไม่ทับซ้อนกัน
  • เพื่อเปรียบเทียบคุณภาพของค่าประมาณ ฝึกสถาปัตยกรรมเดียวกันเพิ่มอีก 3 ครั้งด้วย random seed อื่น
    • โมเดลต้นฉบับ seed: 1337, training loss โดยประมาณ 0.9334, validation loss 1.5063
    • Alternate 1 seed: 1442, training loss 0.9293, validation loss 1.5038
    • Alternate 2 seed: 88, training loss 0.9294, validation loss 1.4991
    • Alternate 3 seed: 99999, training loss 0.9339, validation loss 1.4941
  • ค่าเฉลี่ย Hellinger distance ระหว่างโมเดลต้นฉบับกับโมเดลทางเลือกอยู่ที่ประมาณ 0.11 ± 0.08
    • Original vs Alternate 1: 0.1064 ± 0.0823
    • Original vs Alternate 2: 0.1057 ± 0.0817
    • Original vs Alternate 3: 0.1053 ± 0.0828
  • ระยะห่างเฉลี่ย 0.17 ระหว่างค่าประมาณกับโมเดลสูงกว่าระยะห่าง 0.11 ระหว่างโมเดลทางเลือก แต่ยังอยู่ในช่วงส่วนเบี่ยงเบนมาตรฐาน จึงเป็นเหตุผลให้มองว่าค่าประมาณค่อนข้างดี

การตีความการทำงานภายใน Transformer

  • โมเดลมองได้เป็น การแปลงในปริภูมิ หลายขั้นหลัง embedding
    • Transformer 6 บล็อกแปลง embedding อินพุตเป็น embedding เอาต์พุตภายในปริภูมิ embedding 384 มิติ
    • LayerNorm สุดท้ายและ linear layer แปลงปริภูมิ embedding เป็นปริภูมิ logit 65 มิติ แล้ว softmax สร้างความน่าจะเป็นของโทเค็นถัดไป
  • การแปลงภายในบล็อกมองได้เป็นการบวกเวกเตอร์
    • เอาต์พุตบล็อกคือผลรวมของอินพุต x, เอาต์พุต self-attention sa_out และเอาต์พุต feed-forward ffwd_out
    • ในการวิเคราะห์พบว่าเวกเตอร์เอาต์พุต feed-forward โดยทั่วไปมี norm ใหญ่กว่าเอาต์พุต self-attention และในแต่ละบล็อก เอาต์พุตทั้งสองโดยมากชี้ไปในทิศทางคล้ายกัน
  • แม้เพิ่มเฉพาะเอาต์พุต feed-forward ทิศทางก็โดยมากคล้ายกับเวกเตอร์เอาต์พุตสุดท้าย
    • เอาต์พุตที่ใช้เฉพาะ feed-forward มี norm เล็กกว่า แต่ทิศทางใกล้กับเอาต์พุตเดิม
    • เนื่องจาก LayerNorm สุดท้าย ความต่างของ norm จึงไม่สำคัญมากต่ออินพุตของ linear layer สุดท้าย
  • ผลลัพธ์นี้ไม่ได้หมายความว่าสามารถตัดการคำนวณ self-attention ออกได้
    • feed-forward network รับเอาต์พุต self-attention รวมอยู่ในอินพุต เช่น ffwd_out = self.ffwd(self.ln2(x + sa_out)) ดังนั้นหากตัด self-attention ออก เอาต์พุต feed-forward เองก็จะเปลี่ยนไป

สมมติฐาน token subspace

  • embedding บางตัวสามารถทำให้โมเดลทำนายโทเค็นบางตัวได้เกือบแน่นอน
    • เช่น สามารถฝึก embedding ที่จะป้อนเข้าสู่ LayerNorm และ linear layer หลังบล็อกสุดท้าย เพื่อให้ความน่าจะเป็นของ token a เกือบเป็น 1
    • ตรึงน้ำหนัก Transformer ไว้และ optimize เฉพาะ embedding tensor
  • แต่ละโทเค็นไม่ได้มี embedding เพียงตัวเดียว แต่มี embedding ได้หลายตัว
    • ตีความสิ่งนี้เป็น embedding subspace ไม่เชิงเส้นที่ซับซ้อนซึ่งสอดคล้องกับแต่ละโทเค็น
    • สามารถฝึก embedding ที่ไม่ซ้ำกันหลายพันตัวสำหรับแต่ละโทเค็นได้อย่างง่ายดาย
  • แม้ยังไม่สามารถหา subspace ได้อย่างแม่นยำเชิงคณิตศาสตร์ แต่ในขั้นสุดท้าย linear approximation ทำงานได้ดี
    • นำ embedding ที่ฝึกไว้สำหรับแต่ละโทเค็นมาซ้อนกันแล้วทำ SVD
    • right singular vector ตัวแรกเพียงตัวเดียวทำหน้าที่เป็นการประมาณเชิงเส้น 1 มิติของ subspace ของโทเค็นนั้นได้ดี
  • หากนำเวกเตอร์ประมาณของ subspace สำหรับหลายโทเค็นมารวมเชิงเส้น จะสร้าง embedding ที่กระจายความน่าจะเป็นไปยังหลายโทเค็นได้
    • เมื่อบวกเวกเตอร์ประมาณของ a และ b จะได้การแจกแจงที่แบ่งความน่าจะเป็นให้สองโทเค็น
    • อย่างไรก็ตาม เนื่องจากความคลาดเคลื่อนของการประมาณ ความไม่ตั้งฉากกันของเวกเตอร์ subspace และความต่างของขนาด logit ระหว่างโทเค็น จึงไม่ได้เป็นการแจกแจง 50:50 อย่างสมบูรณ์

ความสอดคล้องระหว่างเอาต์พุต feed-forward กับ token subspace

  • เอาต์พุต feed-forward ถูกตีความว่าเป็นการปรับเอาต์พุตของบล็อกไปทาง token subspace เฉพาะบางตัว
    • โทเค็นเหล่านั้นตรงกับโทเค็นที่ขั้นตอนประมาณค่าทำนาย กล่าวคือโทเค็นที่ตามหลังสตริงฝึกซึ่งสร้างเอาต์พุต feed-forward คล้ายกัน
  • ในตัวอย่าง med me Aut หากดูเฉพาะบล็อกสุดท้าย ค่าประมาณทำนายว่า o เป็นโทเค็นถัดไปที่เป็นไปได้มากที่สุด และ h เป็นลำดับถัดมา
    • เมื่อนำเวกเตอร์เอาต์พุต feed-forward เดียวกันไปฉายบนการประมาณ token subspace โทเค็นที่คล้ายที่สุดก็เรียงเป็น o, h, i, u, y
  • ในตัวอย่าง if and thy ก็พบความสอดคล้องคล้ายกัน
    • ค่าประมาณเลือก space, s, newline เป็นโทเค็นทำนายหลัก
    • subspace ที่ align กับเอาต์พุต feed-forward มากที่สุดก็ใกล้เคียงกับลำดับ space, s, newline
  • กำหนดเกณฑ์ตามอำเภอใจและรวบรวมผลจากพรอมป์ทั้งหมด 20,000 รายการ
    • เกณฑ์คือ “subspace ของโทเค็นที่ครองมวลความน่าจะเป็น 90% ในการทำนายแบบประมาณค่า อยู่ในครึ่งบนของอันดับ cosine similarity กับเอาต์พุต feed-forward หรือไม่”
    • สำหรับบล็อกสุดท้าย มี 16,357 รายการ หรือ 81.78% ที่ผ่านเกณฑ์

ผล aggregate รายบล็อกและการเทียบกับ chance

  • เมื่อใช้การประมาณ subspace ที่ฝึกไว้ ณ ตำแหน่งแต่ละบล็อก อัตราผ่านเกณฑ์สูงขึ้นในบล็อกด้านหลัง
    • บล็อก 6: 16,357 รายการ, 81.78%
    • บล็อก 5: 10,142 รายการ, 50.71%
    • บล็อก 4: 7,760 รายการ, 38.80%
  • หากนำการประมาณ subspace ของขั้นสุดท้ายไปใช้กับทุกบล็อก จะได้ผลดีกว่า
    • บล็อก 6: 81.78%
    • บล็อก 5: 68.26%
    • บล็อก 4: 58.15%
    • บล็อก 3: 57.34%
    • บล็อก 2: 52.02%
    • บล็อก 1: 49.71%
  • ยังจำลองโอกาสที่เกณฑ์จะผ่านโดยบังเอิญจาก cosine similarity แบบสุ่มด้วย
    • บล็อก 6: 20.76% ± 0.25%
    • บล็อก 5: 20.55% ± 0.26%
    • บล็อก 4: 18.37% ± 0.24%
    • บล็อก 3: 18.20% ± 0.24%
    • บล็อก 2: 17.04% ± 0.23%
    • บล็อก 1: 16.31% ± 0.23%
  • ผลลัพธ์สูงกว่า chance มาก แต่ด้วย noise ในการวัดและข้อจำกัดของการประมาณ subspace จึงยังถือเป็น หลักฐานชี้ขาด ได้ยาก

บทบาทของ self-attention

  • ในการตีความนี้ การทำนายที่ดีขึ้นอยู่กับการแมปพรอมป์ไปยังคลาสสตริงที่ถูกต้องในคลังข้อมูลฝึก
  • แกนที่รับผิดชอบการแมปนั้นคือ self-attention
    • attention layer ระบุแพตเทิร์นระหว่างโทเค็นในพรอมป์
    • แพตเทิร์นอาจเป็นแพตเทิร์นสตริงง่าย ๆ เช่น y l ที่ท้ายข้อความ หรืออาจเป็นชนิดโทเค็นที่ทั่วไปกว่า เช่น สระหรือตัวพิมพ์ใหญ่ในตำแหน่งเฉพาะ
  • น้ำหนักที่ฝึกแล้วของ attention head กำหนดว่าจะตอบสนองต่อแพตเทิร์นใด
    • เมื่อเอาต์พุต attention head ผ่าน feed-forward network จะกลายเป็น representation ในปริภูมิ embedding ที่บรรจุข้อมูลการแจกแจงของโทเค็นซึ่งปรากฏหลังสตริงฝึกที่คล้ายกัน
  • โมเดลที่วิเคราะห์มี 6 บล็อก และแต่ละบล็อกมี 6 attention head จึงสามารถประเมินพรอมป์หนึ่งรายการกับแพตเทิร์นแฝงหลายแบบได้

สรุปและข้อจำกัด

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

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

 
GN⁺ 2024-02-05
ความคิดเห็นบน Hacker News
  • ประเด็นบางส่วนในโพสต์ต้นทางไม่น่าจะน่าประหลาดใจมากนักสำหรับคนที่เคยอ่าน https://people.math.harvard.edu/~ctm/home/text/others/shanno...
    หากไม่อ่าน วรรณกรรมพื้นฐาน ในสาขาของตนเอง แม้แต่ปรากฏการณ์ที่เกิดขึ้นเป็นผลลัพธ์ตามธรรมชาติของงานที่มีการจัดวางไว้แล้ว ก็จะดูเหมือนปริศนาที่อธิบายไม่ได้
    ถึงอย่างนั้น การทดลองก็ดูค่อนข้างละเอียดถี่ถ้วนตั้งแต่แรกเห็น และผมชื่นชมปริมาณงานรายละเอียดที่ใส่ลงไป
    มีจุดสมดุลที่ยากระหว่างการเรียนรู้ทฤษฎีที่มีอยู่กับการลองอนุมานขึ้นมาใหม่ตั้งแต่ต้น หากไม่มีฐานแบบดั้งเดิมก็อาจค้นพบสิ่งใหม่ได้ แต่หากมีฐาน ก็จะเข้าใจปรากฏการณ์บางอย่างได้ลึกขึ้น
    ในคอมเมนต์ที่นี่ ดูเหมือนมีหลายคนแปลกใจว่าโมเดลที่เพิ่ม log-likelihood ของลำดับให้สูงสุดเมื่อมีข้อมูลให้ จะไม่หลุดออกจากพฤติกรรมนั้นอย่างมหัศจรรย์ในตอน inference นี่คือโมเดลประมาณค่าความหนาแน่น แล้วจะคาดหวังให้มันท่อง Shakespeare ออกมาจากความว่างเปล่าหรืออย่างไร
    การกลับไปสู่พื้นฐานทำให้เข้าใจการทดลองแบบนี้ได้ดีกว่ามาก มีรากฐานทางคณิตศาสตร์ที่ชัดเจนมากอยู่แล้ว ซึ่งอธิบายเรื่องนี้ รวมถึงสิ่งที่เรียกว่าปรากฏการณ์อุบัติใหม่ได้
    หากเจาะจงกว่านั้น มีหลายระดับ และการที่ Shannon จัดการกับระบบเออร์โกดิกเป็นจุดเริ่มต้นที่ดี แม้ที่นี่จะมีส่วนที่คลาดเคลื่อนไปบ้าง แต่ก็ดูเป็นการเทียบเคียงที่ใกล้พอสำหรับทำความเข้าใจพลวัตโดยรวม

    • นักวิจัยทฤษฎีสารสนเทศที่ฉลาดมาก ๆ ได้มองโครงข่ายประสาทจาก มุมมองทฤษฎีสารสนเทศ มาหลายปีแล้ว และยังมีบทความชื่อดังออกมาด้วย แต่ก็ไม่ได้อธิบายโครงข่ายประสาทได้มากนัก ถึงอย่างนั้นก็น่าสนใจอยู่ดี
      ไม่ใช่เรื่องแปลกที่คนฉลาดจะพูดว่า “โครงสร้างทางคณิตศาสตร์นี้คล้ายกับไอเดียนั้น ถ้าเพิ่มหรือลดโครงสร้างอีกไม่กี่อย่างก็จะอธิบายได้ทั้งหมด” แต่ในความเป็นจริง เรายังไม่รู้อีกมาก
      ผมไม่เคยเห็นนักทฤษฎีในสาขานี้นำทฤษฎีมาแล้วสร้างสิ่งใหม่หรือให้การคาดการณ์ที่เป็นประโยชน์ได้ โดยทั่วไปคือทดลองโน่นนี่ไปเรื่อย ๆ ถ้ามันใช้ได้ ก็ค่อยใส่คำอธิบายที่ฟังดูสมเหตุสมผลภายหลังว่าทำไมถึงใช้ได้ และถ้าใช้ไม่ได้ก็กลบไว้
      เมื่อเร็ว ๆ นี้ก็มีบทความที่มอง transformer เป็นการทำ kernel smoothing: https://arxiv.org/abs/1908.11775
    • เข้าใจว่าต้องการจะสื่ออะไร แต่การที่มัน ลู่เข้า ผ่านเส้นทางทางเลือกที่มีความลึกต่างกันนั้นก็เป็นสัญญาณอย่างหนึ่งในตัวเอง
      การค้นพบซ้ำ ๆ ไม่จำเป็นต้องเป็นความสูญเปล่าเสมอไป แต่อาจเป็นกระบวนการยืนยันและตรวจสอบความจริงเชิงลึกที่มีได้หลายเส้นทางไปถึง
    • ในเธรดข้างเคียงอีกอัน มีการพูดคุยกันว่าการที่โครงข่ายประสาทถูกฝึกให้เข้ากับข้อมูลฝึกภายในช่วงความคลาดเคลื่อนหนึ่ง ๆ มีนัยต่อ ลิขสิทธิ์ อย่างไร
      ตำราทฤษฎีสารสนเทศจำนวนไม่น้อยได้ชี้ให้เห็นคุณสมบัติแบบ content-addressable ของเครือข่ายลักษณะนี้ไว้แล้ว[1] และด้วยเหตุผลนี้จึงถูกใช้กับแอปพลิเคชันอย่างการบีบอัดด้วย[2][3]
      ดังนั้นจึงไม่น่าแปลกใจที่เมื่อ NYT ใส่ข้อความจากบทความของตนเองไม่กี่ย่อหน้าเป็นพรอมป์ต์ให้โมเดลของ OpenAI มันก็สร้างซ้ำออกมาแทบจะเหมือนเดิม
      [1] https://www.inference.org.uk/itprnn/book.pdf
      [2] https://bellard.org/nncp/
      [3] https://pub.towardsai.net/stable-diffusion-based-image-compr...
    • ถ้าอย่างนั้นก็อดสงสัยไม่ได้ว่าทำไม Shannon ถึงสร้าง GPT ไม่ได้
  • ตอนที่เห็น Google ชี้ให้เห็นว่าสามารถทำให้ ChatGPT คายข้อมูลฝึกออกมาตรง ๆ ได้ ถ้าสั่งให้มันพูดคำเดิมซ้ำไปเรื่อย ๆ [0][1] ผมก็นึกถึงไอเดียเดียวกันเป๊ะ ดีใจที่มีคนเอาไปทำจริง
    จากตรงนี้มีคำถามเพิ่มอีกสองข้อ

    1. แนวทาง “AI เอ๋ย ช่วยจับ AI ให้หน่อย” แบบนี้ ประหยัดพลังงาน กว่าการใช้ gradient descent/backpropagation อัดข้อมูลฝึกเข้าไปในโมเดล แล้วรันบน AI coprocessor เฉพาะทางหรือเปล่า?
    2. ผลลัพธ์นี้จะใช้เป็นหลักฐานในคดีที่กำลังดำเนินอยู่กับ OpenAI และ Stability AI ได้ไหม?
      [0] เมื่อก่อนทำได้ ตอนนี้ OpenAI บล็อกการสร้างข้อความถ้าเติม context window ด้วยคำเดียว
      [1] https://arxiv.org/abs/2311.17035
    • แนวทางนี้ไม่น่าจะมีประสิทธิภาพกว่าการรันโมเดลต้นฉบับได้ เพราะต้องรันโมเดลต้นฉบับเพื่อให้ได้ activation แล้วต้องไปค้นหาสตริงในคลังข้อความที่คล้ายกับ activation นั้นเพื่อคำนวณ สถิติของโทเค็นถัดไป
      ขั้นตอนที่ข้ามไปไม่ได้มีมากนัก แถมยังมีงานเพิ่มเข้ามาอีกเยอะ
      ต่อให้แยกคลังข้อความสำหรับฝึกโมเดลกับคลังข้อความสำหรับค้นหาสตริงที่มี activation คล้ายกันออกจากกันโดยสิ้นเชิง ก็น่าจะได้ผลลัพธ์แทบเหมือนเดิมอยู่ดี ส่วนที่ยากคือการทำให้สตริงที่มีสถิติโทเค็นถัดไปคล้ายกันสร้าง activation ที่คล้ายกันตั้งแต่แรก
      ในค่าน้ำหนักรายชั้น [0.01, 0.01, 0.1, 1.5, 6, 0.01] สิ่งที่สำคัญที่สุดคือชั้นก่อนสุดท้าย และตอนนั้นอินพุตก็ถูกแปลงไปมากแล้ว ดังนั้นจึงไม่ควรคาดหวังว่าจะใช้สิ่งนี้แทน transformer ด้วยการ grep ข้อมูลฝึกแบบง่าย ๆ ได้
      เหตุผลที่ค่าน้ำหนักของชั้นก่อนสุดท้ายใหญ่กว่าชั้นสุดท้ายมาก น่าจะเป็นเพราะ induction head อาจเป็นโครงสร้างที่ทำหน้าที่คัดลอกสตริงซ้ำในอินพุตตามที่อธิบายใน https://transformer-circuits.pub/2021/framework/index.html โดยชั้นก่อนสุดท้ายกำหนดว่าจะต้องหาอะไร และชั้นสุดท้ายทำการคัดลอก
    • ถ้าหมายถึงไอเดียที่ว่าเอาต์พุตของ LLM เป็นไปตาม ความน่าจะเป็นของโทเค็นถัดไป ที่อิงจากข้อมูลฝึก นั่นเป็นข้อเท็จจริงพื้นฐานที่รู้กันดีอยู่แล้ว ผลลัพธ์นี้จึงไม่น่าจะกลายเป็นหลักฐานได้มากนัก
      คุณูปการของบทความนี้ ตามที่ผู้เขียนบอก คือการแสดงประเด็นนั้นให้ผู้อ่านสายเทคนิคที่กำลังสร้าง GPT เองเห็น โดยต่างจากบทความแนว “มันทำงานอย่างไร?” ที่โฟกัสไปที่ตัว transformer เอง
    • จากประสบการณ์ที่เคยลองก่อนจะถูกบล็อก มัน hallucinate สิ่งที่ดูเหมือนข้อมูลฝึกจริงออกมา
      พอดูละเอียด ๆ ก็เป็น README ของ GitHub ที่ไม่มีอยู่จริงและบริบทก่อนหลังไม่สอดคล้องกัน โบรชัวร์แนะนำที่แทบไม่มีสาระ บทสนทนาสุ่ม ๆ อะไรทำนองนั้น
    • น่าสนใจที่บทความ arXiv ที่ลิงก์มาปฏิบัติต่อเรื่องนี้ในฐานะ การโจมตี จริยธรรม และการเปิดเผยอย่างรับผิดชอบ
      แต่การกวาดเก็บทั้งอินเทอร์เน็ตไปเพื่อฝึกโมเดลแบบนี้ กลับไม่เคยถูกเรียกว่าเป็นการโจมตีเลย
    • ถ้างานชิ้นหนึ่งมีลิขสิทธิ์ เจ้าของก็ย่อมมีสิทธิ์ในไฟล์ zip ของงานนั้นด้วยเป็นธรรมดา
      ถ้าอย่างนั้น ทำไมเราจึงไม่ควรมองว่าเขามีสิทธิ์ใน การกระจายความน่าจะเป็นของตัวอักษร ภายในงานนั้นด้วย?
  • ทันทีที่ได้รู้จัก NanoGPT ของ Andrej Karpathy ผมก็ลองฝึกมันด้วย War and Peace ฉบับภาษารัสเซีย และน่าสนใจมากที่แม้จะเป็นโมเดลขนาดแค่ 3MB แต่มันก็จับ ไวยากรณ์รัสเซีย ได้เกือบหมด
    ภาษารัสเซียมีโครงสร้างสังเคราะห์และการผันคำที่ซับซ้อน เช่น หลังบุพบท “na” (“upon”) ต้องตามด้วยคำนามรูปกรรมตรง ซึ่งในคำนามเพศชายที่เป็นสิ่งมีชีวิตจะแสดงด้วย -a, ในคำนามไม่มีชีวิตจะไม่เติมท้าย, ในคำนามที่ลงท้ายด้วย “soft consonant” จะเป็น -ia, ในคำนามเพศหญิงจะเป็น -u เป็นต้น
    อีกอย่างคือกริยา “ใช้” หากตามด้วยคำนามที่ทำหน้าที่เป็นเครื่องมือ จะบังคับให้คำนามนั้นอยู่ในรูป instrumental case
    มันไม่ได้สมบูรณ์แบบและมีข้อผิดพลาด แต่ก็น่าสนใจที่ NanoGPT อนุมานกฎเฉพาะที่ซับซ้อนได้จากการฝึกเพียง 3 นาที ผมลองค้นหาประโยคตัวอย่างที่มันสร้างขึ้นในต้นฉบับแล้ว แต่ไม่พบประโยคที่ตรงกันทุกประการ
    อย่างไรก็ตาม แม้มันจะเข้าใจไวยากรณ์ได้ในระดับหนึ่ง แต่ในเชิงความหมายแล้วเป็นเรื่องไร้สาระล้วน ๆ

    • การผันคำลงท้ายคงเป็นหนึ่งในโทเค็นที่พบบ่อยที่สุดในข้อความฝึก จึงไม่ได้น่าประหลาดใจมากนัก
  • มี ภาพอธิบายแบบ 3D ที่ดีซึ่งแสดงระบบเดียวกัน และน่าจะอ่านประกอบกันแล้วได้ผลมาก
    LLM Visualization (https://bbycroft.net/llm)
    https://news.ycombinator.com/item?id=38505211

    • ผมขอบคุณความพยายามที่ใส่ลงไปใน visualization นี้ แต่ในฐานะคนที่ทำงานกับ neural network มา 9 ปี มันทำให้สับสนมากกว่าจะช่วย
      น่าจะเป็นเพราะพยายามแสดงทุกอย่างพร้อมกัน และไม่ผลักบางส่วนไปอยู่ในแนวคิดเชิงนามธรรม แต่ก็ไม่แน่ใจนัก
  • เป็นโปรเจกต์ที่ดี แต่โมเดลที่นำมาวิเคราะห์นั้น โดยทั้งขนาดและปริมาณข้อมูลฝึกแล้ว แทบจะเป็น โมเดลของเล่น
    ดังนั้นโมเดลนี้อาจประมาณได้ด้วยโมเดลที่ง่ายกว่า อาจเป็น n-gram language model แต่ก็คงยากที่จะถือว่ามันเป็นตัวแทนวิธีการทำงานของโมเดลภาษาที่ใหญ่กว่านี้

    • น่าจะถูกแล้ว ถ้าสร้างโมเดลที่เล็กกว่านี้ ก็น่าจะสร้างคำอธิบายที่ง่ายกว่ามากเกี่ยวกับวิธีการทำงานของมันได้
  • สงสัยว่าผู้เขียนกำลังอ้างว่า LLM เป็นตัวสร้างข้อความแบบ Markov chain หรือไม่
    กล่าวคือ หมายความว่าการแจกแจงความน่าจะเป็นของโทเค็นถัดไปที่ถูกสร้างขึ้น เท่ากับความน่าจะเป็นของลำดับโทเค็นนั้นในข้อมูลฝึกหรือเปล่า?
    ถ้าเป็นเช่นนั้น แปลว่าถ้า “แค่” สร้าง Markov chain จากข้อมูลฝึกดั้งเดิม ก็จะได้ประสิทธิภาพคล้ายกับ LLM หรือไม่?

    • LLM เป็น Markov chain ในความหมายต่อไปนี้
      สถานะคือเวกเตอร์โทเค็นที่มีความยาวเท่ากับความยาวบริบท และโมเดลอธิบายเมทริกซ์การเปลี่ยนสถานะ กล่าวคือ สำหรับเวกเตอร์โทเค็นที่มีขนาดเท่าความยาวบริบทที่กำหนด โมเดลจะให้ความน่าจะเป็นของเวกเตอร์โทเค็นถัดไปที่มีขนาดเท่าความยาวบริบท
    • ไม่ใช่ LLM ไม่ได้แค่คัดลอกข้อความเดิม แต่ใกล้เคียงกับการใช้ self-attention เพื่อ “จำแนกประเภท” ข้อความก่อน แล้วจึงใช้ Markov chain แบบเรียบง่าย
      ส่วนที่ยากคือการจำแนกว่า ข้อความใดในข้อมูลฝึกที่ “คล้าย” กับข้อความในพรอมป์
      หากยกตัวอย่างจากบล็อกโพสต์ จะเป็นดังนี้
      Original string: 'And only l'
      Similar strings: 'hat only l' 's sickly l' ' as\nthey l' 'r kingly l'
    • ในบทความระบุว่า “ได้ทำสิ่งที่เสนอว่า transformer ทำเป็นโค้ดเชิงคำสั่ง และสร้างเอาต์พุตที่คล้ายกับ transformer มาก”
      นี่หมายความว่าอาจมีวิธีข้าม transformer แล้วได้ผลลัพธ์เดียวกันได้ สงสัยว่าจะมีประสิทธิภาพกว่าหรือไม่
      ตัวอย่างเช่น เมื่อมีโมเดลพื้นฐานอยู่แล้ว อาจเป็นไปได้ที่จะฝึกสิ่งอื่นขึ้นมาเพื่อให้รันบนอุปกรณ์ที่เล็กกว่ามาก
  • ค่อนข้างยากที่จะเข้าใจว่าผู้เขียนอ้างว่าได้แสดงให้เห็นอะไรแน่
    อ่านหัวข้อ “Interpretation: Why Does the Approximation Work?” หลายครั้งแล้ว แต่รู้สึกเหมือนเป็นคำอธิบายเชิงกลไกของขั้นตอนใน transformer ยังไม่รู้ว่าประเด็นหลักคืออะไร

  • สงสัยว่าปรากฏการณ์ที่ attention และ FF displacement มักชี้ไปในทิศทางเดียวกันนั้นเป็นสิ่งที่รู้กันอยู่แล้วหรือไม่
    แค่การที่มันอยู่ใน latent space เดียวกันข้ามชั้นต่าง ๆ ก็น่าแปลกใจอยู่แล้ว ไม่ใช่ว่าเครือข่าย FF อาจทำการหมุนแบบใดก็ได้หรือ? คงเข้าใจอะไรผิดไปแน่ ๆ

    • เป็นการแสดงเวกเตอร์มิติสูงมากในรูปแบบ 2D
      ย่อมต้องมีบางอย่างตกหล่นไป และหนึ่งในสิ่งที่ตกหล่นก็คือการอธิบายการหมุนแบบใดก็ได้ในปริภูมิมิติสูงได้อย่างถูกต้อง
    • น่าจะลองตรวจสอบโดยเปลี่ยนการบวก attention ให้เป็นการสเกลดู