5 คะแนน โดย GN⁺ 2024-01-04 | 1 ความคิดเห็น | แชร์ทาง WhatsApp

Encoder

  • อธิบายกระบวนการแปลงข้อความเป็นเวกเตอร์ และกระบวนการเพิ่มข้อมูลตำแหน่งลงใน embedding ที่ได้จากกระบวนการนั้น
  • เป้าหมายคือการสร้าง embedding ที่จับข้อมูลเชิงความหมายของข้อความอินพุต

1. Text Embedding

  • แปลง "Hello World" เป็นเวกเตอร์เพื่อสร้าง embedding
  • กำหนดค่าตามใจให้แต่ละโทเคนเพื่อสร้างเวกเตอร์

2. Positional Encoding

  • เพิ่ม positional encoding ลงใน embedding เพื่อใส่ข้อมูลตำแหน่งของคำ
  • ใช้เวกเตอร์แบบคงที่เพื่อกำหนดชุดตัวเลขที่มีรูปแบบเฉพาะและสม่ำเสมอให้แต่ละตำแหน่ง

3. การรวม Positional Encoding กับ Embedding

  • นำ positional encoding มาบวกกับ embedding เพื่อสร้างเมทริกซ์ใหม่สำหรับใช้เป็นอินพุตของ encoder

Self-attention

  • อธิบาย attention ซึ่งเป็นกลไกที่ทำให้โมเดลสามารถโฟกัสกับบางส่วนของอินพุตได้
  • ใช้ multi-head attention เพื่อให้สามารถโฟกัสข้อมูลพร้อมกันในพื้นที่การแทนความหมายที่หลากหลาย

4.1 การกำหนดเมทริกซ์

  • กำหนดเมทริกซ์ K, V, Q สำหรับแต่ละ attention head

4.2 การคำนวณคีย์ คิวรี และค่า

  • คำนวณเมทริกซ์ key, query และ value โดยนำ embedding อินพุตคูณกับเมทริกซ์น้ำหนัก

4.3 การคำนวณ Attention

  • คำนวณ inner product ของ query กับแต่ละ key vector แล้วหารผลลัพธ์ด้วยรากที่สองของมิติของ key vector
  • ใช้ฟังก์ชัน softmax เพื่อให้ได้น้ำหนัก attention
  • คูณน้ำหนัก attention กับแต่ละ value vector

Feed-forward layer

  • ใน encoder จะมีโครงข่ายประสาทแบบ feed-forward ตามหลัง self-attention layer
  • โครงข่ายนี้ใช้การแปลงเชิงเส้นสองครั้งและฟังก์ชันกระตุ้น ReLU

5.1 Feed-forward Layer พื้นฐาน

  • linear layer แรกจะขยายมิติของอินพุต จากนั้นใช้ฟังก์ชันกระตุ้น ReLU แล้ว linear layer ที่สองจะลดมิติกลับสู่เดิม

5.2 การรวมทุกขั้นตอนของ Encoder

  • เขียนโค้ด encoder block ที่รวมทั้ง multi-head attention และ feed-forward layer

5.3 Residual Connection และ Layer Normalization

  • residual connection คือการนำอินพุตของเลเยอร์มาบวกกับเอาต์พุต และ layer normalization คือเทคนิคการทำ normalization กับอินพุตของเลเยอร์

ความเห็นของ GN⁺

  • บทความนี้อธิบายคณิตศาสตร์ที่ซับซ้อนให้เรียบง่ายลง เพื่อช่วยให้เข้าใจโมเดล Transformer ในเชิงคณิตศาสตร์
  • โดยเฉพาะอย่างยิ่ง ช่วยให้เข้าใจหลักการทำงานของ self-attention mechanism และโครงข่ายประสาทแบบ feed-forward
  • แสดงให้เห็นว่าเทคนิคอย่าง residual connection และ layer normalization มีส่วนช่วยต่อเสถียรภาพและประสิทธิภาพของโครงข่ายประสาทอย่างไร พร้อมมอบมุมมองต่อวิธีแก้ปัญหาการฝึกของโครงข่ายประสาทเชิงลึก

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

 
GN⁺ 2024-01-04
ความเห็นจาก Hacker News
  • "ความลึกลับ" ของทรานส์ฟอร์เมอร์คือ แทนที่จะใช้ลำดับเชิงเส้นของน้ำหนักคงที่และค่าในแต่ละเลเยอร์ มันใช้เมทริกซ์ 3 ชุดที่ได้จากการคูณน้ำหนักที่เรียนรู้มาจากอินพุตเดียวกัน แล้วนำเมทริกซ์เหล่านี้มาคูณกันเอง วิธีนี้ทำให้ประมวลผลแบบขนานได้มากขึ้น แต่ก็มีข้อจำกัดมาก เพราะสูตร attention นั้นเป็นแบบคงที่

    • น่าจะยากที่จะเห็นความก้าวหน้าไปมากกว่านี้ จนกว่าจะมีวิธีทำให้กราฟการคำนวณถูกทำให้เป็นนามธรรมทั่วไปด้วยพารามิเตอร์ที่เรียนรู้ได้
    • ยังไม่แน่ใจว่าวิธีนี้จะเป็นไปได้ในความหมายดั้งเดิมหรือไม่ด้วยแนวทาง gradient แบบเดิม เพราะมีผลแบบความโกลาหลที่การเปลี่ยนแปลงเล็กน้อยทำให้ประสิทธิภาพเปลี่ยนไปมาก
    • อาจต้องมีบางอย่างอย่าง genetic algorithm หรือ PSO เกิดขึ้นภายใน
  • ถ้าต้องการแนวทางที่แห้งกว่า เป็นทางการกว่า และกระชับกว่า ให้ดู "The Transformer Model in Equations" ของ John Thickstun เนื้อหาทั้งหมดอยู่ในหน้าเดียวโดยใช้สัญลักษณ์ทางคณิตศาสตร์มาตรฐาน

  • พออ่านบทความแล้วก็เกิดคำถามขึ้นมา

    • เวกเตอร์ที่สอดคล้องกับ "Hello" และ "World" ดูเหมือนสุ่ม แต่ก็เหมือนจะมีรูปแบบบางอย่าง
    • สงสัยว่าการที่เลข 2 ซ้ำในเวกเตอร์มีความหมายหรือไม่ หรือจริง ๆ แล้วทั้งชุดนั้นมีเอกลักษณ์เฉพาะเป็นชุดรวม
  • อยากหางานวิจัยหรือบทความที่อธิบายว่าทำไมทรานส์ฟอร์เมอร์ซึ่งทำงานเป็นเพียง "ตัวทำนายโทเค็นถัดไป" ถึงยังจัดการกับคำหรือ subword/token ที่ไม่อยู่ในชุดข้อมูลฝึกได้

    • เช่น กรณีสร้างตารางใน pandas ที่มีคอลัมน์ชื่อ "sdsfs_ff", "fsdf_value" หรือสร้างตัวอย่างที่ไม่มีอยู่ในชุดข้อมูลฝึก แล้วขอให้ LLM สร้างเอาต์พุตที่คล้ายกัน
    • ถ้ามีลิงก์ที่พูดถึง positional embedding ด้วยก็คงดี เพราะยังไม่เคยได้คำตอบที่น่าพอใจเกี่ยวกับการใช้ sine/cosine และเรื่อง (การคูณ เทียบกับ การเปรียบเทียบ)
  • บทช่วยสอนทรานส์ฟอร์เมอร์อาจเป็นบทช่วยสอน monad แบบใหม่ก็ได้ เป็นแนวคิดที่เข้าใจยาก แต่ก็เหมือนหลายอย่างในวิทยาการคอมพิวเตอร์ ที่ต้องพยายามทำความเข้าใจและฝึกกับตัวอย่างถึงจะเข้าใจ

  • ฉันรู้จักคำศัพท์บางคำ

  • ในฐานะคนที่เคยเขียน ANN ตั้งแต่ต้นโดยไม่ใช้ TensorFlow คำอธิบายนี้ก็ยังทำให้งงอยู่ดี

    • ตอนที่ขอให้ ChatGPT อธิบายวิธีดัดแปลง ANN พื้นฐานเพื่อทำ self-attention โดยไม่ใช้คำว่าเมทริกซ์หรือเวกเตอร์ มันอธิบายได้ง่ายมากจริง ๆ
    • ฉันชอบคิดทุกอย่างในแง่ของโหนด น้ำหนัก และเลเยอร์ เมทริกซ์กับเวกเตอร์ทำให้โยงกับสิ่งที่เกิดขึ้นจริงใน ANN ได้ยากขึ้น
    • วิธีที่คุ้นเคยในการเขียน ANN คือแต่ละโหนดอินพุตเป็นสเกลาร์ แต่ขั้นตอน feed forward ดูเหมือนการคูณเวกเตอร์-เมทริกซ์ เพราะมันคือการเอาโหนดอินพุตทั้งหมดไปคูณกับน้ำหนักแล้วนำมาบวกกัน
  • ชอบเว็บไซต์ Quarto มาก เห็นผู้ใช้ Python ใช้ Quarto เพื่อการเผยแพร่มากขึ้น

  • สงสัยว่าในขั้นตอนที่ 7 ของดีโคเดอร์ ควรเป็น Z_encoder_decoder = layer_norm(Z_encoder_decoder + Z_self_attention) แทน Z_encoder_decoder = layer_norm(Z_encoder_decoder + Z) หรือไม่ และในขั้นตอนที่ 8 ของดีโคเดอร์มี layer_norm หลุดหายไปหรือเปล่า

  • สงสัยว่า LLM ใช้โครงข่ายประสาทเทียมหรือไม่ และอะไรคือสิ่งที่ประกอบกันเป็น "นิวรอน" กล่าวคือมีโครงสร้างโค้ดที่รองรับนิวรอนอยู่หรือไม่ หรือมันเป็น "แค่" คณิตศาสตร์ที่ซับซ้อนเท่านั้น