- อธิบายโครงสร้างและหลักการทำงานของโมเดล Transformerด้วยภาพ พร้อมแสดงให้เห็นว่ากลไก Attentionช่วยปรับปรุงการเรียนรู้แบบขนานและประสิทธิภาพการแปลได้อย่างไร
- โมเดลประกอบด้วยสแตกของ Encoder และ Decoder โดยแต่ละ Encoder มี 2 ชั้นคือ Self-Attention และ Feedforward Neural Network
- อธิบายขั้นตอนการคำนวณ Self-Attentionแบบทีละขั้นในระดับเวกเตอร์และเมทริกซ์ และขยายเป็นMulti-Head Attentionเพื่อให้เรียนรู้พื้นที่การแทนค่าที่หลากหลาย
- แสดงภาพองค์ประกอบสำคัญอย่างเป็นรูปธรรม เช่น Positional Encoding, Residual Connection, Layer Normalization และ Masked Attention ของ Decoder
- บทความนี้เป็นแหล่งข้อมูลสำคัญที่ช่วยให้เข้าใจแนวคิดพื้นฐานของ Transformer ได้ง่าย และถูกใช้ในการบรรยายและตำราของมหาวิทยาลัยชั้นนำอย่าง MIT และ Stanford
ภาพรวมของ Transformer
- Transformer คือโมเดลการแปลด้วยโครงข่ายประสาทเชิงกลที่อิงกับ Attention ซึ่งให้ประสิทธิภาพสูงกว่า Google Neural Machine Translation แบบเดิมในบางงาน
- ข้อดีสำคัญคือทำ parallelization ได้ง่าย และได้รับการแนะนำให้เป็นreference modelของ Google Cloud TPU
- โมเดลประกอบด้วยสแตกของ Encoder และ Decoder โดยแต่ละ Encoder มีโครงสร้างเหมือนกันแต่ไม่แชร์น้ำหนักร่วมกัน
- อินพุตของ Encoder จะผ่านชั้น Self-Attentionเพื่อรวมข้อมูลบริบท แล้วจึงผ่านFeedforward Neural Network
- Decoder นอกจากจะมีโครงสร้างแบบเดียวกับ Encoder แล้ว ยังมีชั้น Encoder-Decoder Attentionเพื่อโฟกัสไปยังส่วนที่เกี่ยวข้องของประโยคอินพุต
การไหลของเทนเซอร์และ Embedding
- ประโยคอินพุตจะถูกแปลงเป็นเวกเตอร์ 512 มิติสำหรับแต่ละคำผ่านอัลกอริทึม Word Embedding
- แต่ละชั้นของ Encoder รับและประมวลผลลิสต์ของเวกเตอร์ที่มีขนาดเท่ากัน โดยความยาวประโยคถูกกำหนดเป็นไฮเปอร์พารามิเตอร์
- ชั้น Feedforwardประมวลผลเวกเตอร์ของแต่ละตำแหน่งอย่างอิสระ จึงสามารถทำการคำนวณแบบขนานได้
แนวคิดของ Self-Attention
- Self-Attention ทำให้แต่ละคำอ้างอิงคำอื่นในประโยคเพื่อเรียนรู้การแทนค่าที่ดีขึ้น
- ตัวอย่าง: ในประโยค “The animal didn’t cross the street because it was too tired” คำว่า “it” เชื่อมโยงกับ “animal”
- ต่างจากการเก็บ hidden state ของ RNN, Transformer รวมข้อมูลบริบทด้วยSelf-Attention
ขั้นตอนการคำนวณ Self-Attention
- สร้างเวกเตอร์ Query, Key, Value จากแต่ละ word embedding (มิติ 64)
- คำนวณคะแนนความสัมพันธ์ระหว่างคำแต่ละคำด้วยdot productของ Query และ Key
- นำคะแนนไปหารด้วย √64 แล้วใช้ softmaxเพื่อทำ normalization เป็นการกระจายความน่าจะเป็น
- คูณคะแนน softmax กับแต่ละเวกเตอร์ Value แล้วรวมผลเพื่อสร้างเอาต์พุต Attention สุดท้าย
- ในการใช้งานจริง กระบวนการนี้มักทำด้วยการคำนวณแบบเมทริกซ์เพื่อเพิ่มประสิทธิภาพ
Multi-Head Attention
- ใช้Attention head หลายตัว (ค่าเริ่มต้น 8 ตัว) เพื่อเรียนรู้พื้นที่การแทนค่าที่หลากหลาย
- แต่ละ head มีเมทริกซ์น้ำหนัก Q/K/V แยกจากกัน
- นำเอาต์พุตจากหลาย head มาต่อกัน (concat) แล้วรวมด้วยเมทริกซ์น้ำหนักเพิ่มเติม WO
- ทำให้โมเดลสามารถจับหลายแง่มุมของบริบทได้พร้อมกัน
Positional Encoding
- เนื่องจาก Transformer ไม่ได้จัดการลำดับโดยตรง จึงเพิ่มเวกเตอร์ตำแหน่งเข้าไปในแต่ละ word embedding
- เวกเตอร์ตำแหน่งถูกสร้างด้วยฟังก์ชัน sin และ cos เพื่อให้ข้อมูลระยะห่างเชิงสัมพัทธ์ระหว่างคำ
- วิธีนี้สามารถขยายไปใช้กับประโยคที่ยาวกว่าข้อมูลฝึกได้
- ในอัปเดตปี 2020 ยังมีการแนะนำวิธีสลับแทรกสัญญาณทั้งสองชุด (interleave) ด้วย
Residual Connection และ Normalization
- ในแต่ละ sublayer (Self-Attention, Feedforward) จะมีการใช้Residual ConnectionและLayer Normalization
- โครงสร้างนี้ช่วยป้องกันปัญหา gradient หายไปและเพิ่มเสถียรภาพของการฝึก
โครงสร้างของ Decoder
- Decoder รับเวกเตอร์ Key/Value จากเอาต์พุตของ Encoder เพื่อทำEncoder-Decoder Attention
- ใช้maskingเพื่อจำกัดไม่ให้อ้างอิงคำในอนาคต
- ในตอนท้ายจะสร้างการกระจายความน่าจะเป็นของคำผ่านLinear layerและSoftmax layer
- ตัวอย่าง: หากขนาด vocabulary เท่ากับ 10,000 เอาต์พุตเวกเตอร์แต่ละตัวจะถูกแปลงเป็นการกระจายความน่าจะเป็น 10,000 มิติ
การฝึกและฟังก์ชันความสูญเสีย
- ระหว่างการฝึก จะเปรียบเทียบการกระจายความน่าจะเป็นของเอาต์พุตโมเดลกับการกระจายคำตอบที่ถูกต้อง (one-hot encoding)
- ใช้cross-entropyหรือKL divergenceในการคำนวณความคลาดเคลื่อน และปรับน้ำหนักด้วย backpropagation
- ใช้beam searchเพื่อเก็บตัวเลือกการแปลหลายแบบไว้พร้อมกันและเพิ่มความแม่นยำ
งานวิจัยต่อยอดและแหล่งอ้างอิง
- งานวิจัยที่เกี่ยวข้อง: Attention Is All You Need, Training Tips for the Transformer Model, Self-Attention with Relative Position Representations เป็นต้น
- แหล่งข้อมูลด้านการพัฒนา: แพ็กเกจ Tensor2Tensor, คู่มือ Harvard NLP PyTorch, Colab Notebook
- หลังจากนั้น Transformer ได้ต่อยอดเป็นฉบับขยายของ LLM-book.com (Chapter 3) ซึ่งครอบคลุมโมเดลสมัยใหม่อย่าง Multi-Query Attention และ RoPE positional embedding
บทสรุป
- Transformer คือโครงสร้างที่อิงกับ Attention และทำงานแบบขนานได้ ซึ่งกลายเป็นโมเดลแกนหลักของ deep learning ยุคใหม่
- บทความนี้เป็นแหล่งข้อมูลสำคัญที่อธิบายโครงสร้าง คณิตศาสตร์ และสัญชาตญาณของ Transformer ด้วยภาพ และถูกใช้เป็นเอกสารอ้างอิงในการสอนของมหาวิทยาลัยชั้นนำอย่าง Stanford, MIT และ Harvard
1 ความคิดเห็น
ความเห็นจาก Hacker News
ตอนที่เรียนพื้นฐานของทรานส์ฟอร์เมอร์ ฉันได้อ่านบทความนี้ การทำภาพประกอบช่วยได้มากจริงๆ
แต่ในงานจริงที่ต้อง นำ LLM ไปใช้ การรู้โครงสร้างของทรานส์ฟอร์เมอร์แทบไม่มีประโยชน์เลย มีแค่ ความสบายใจทางจิตใจ จากการพอเข้าใจการทำงานภายในแบบคร่าวๆ
การพยายาม อธิบายพฤติกรรมของ LLM ด้วยโครงสร้าง เป็นเหมือนกับดัก เพราะโมเดลรุ่นใหม่ๆ แสดง emergent phenomena ที่คาดเดาไม่ได้จากเรื่องอย่าง reinforcement learning
เมื่อก่อนฉันเคยมั่นใจว่า LLM คงไม่เก่งคณิตศาสตร์หรือการเขียนโค้ด แต่ก็ผิดถนัด สุดท้ายแล้วการอนุมานความสามารถของโมเดลจากโครงสร้างเพียงอย่างเดียวมีข้อจำกัด
ช่วงนี้ระหว่างพักร้อนก็กำลังทบทวนด้วยการลองเขียนทรานส์ฟอร์เมอร์เองด้วย PyTorch อยู่ ทั้งน่าสนใจและสนุกมาก
ถ้าจะเริ่มต้น ขอแนะนำ LLMs from Scratch ของ Sebastian Raschka
ถ้าใครเคยอ่านหนังสือของ Jay Alammar ที่ออกในปี 2024 แล้ว อยากรู้ว่ายังน่าแนะนำไหมในมุมมองที่อัปเดตล่าสุด
เพราะมันทำให้เกิดสัญชาตญาณในการมองเห็นข้อจำกัดของโมเดลได้ ตอนหนึ่งฉันเคยได้ยินคำแนะนำนี้โดยตรงจาก Clem Delangue ของ Hugging Face หลังจากนั้นก็ศึกษาโครงสร้าง LLM อย่างลึกขึ้น และมันช่วยได้มากจริงๆ
ฉันก็ให้คำแนะนำแบบเดียวกันกับคนที่จบ coding bootcamp — ต่อให้ทำงานได้ด้วยแค่ Python และ React แต่ถ้าเข้าใจ สถาปัตยกรรมคอมพิวเตอร์และภาษาระดับล่าง ด้วย ก็จะกลายเป็นนักพัฒนาที่แข็งแกร่งกว่าเดิมมากในระยะยาว
โทเค็นไม่ใช่เศษคำ และสำหรับการประมวลผลภาษาหรือภาพ ความหมายพวกนี้มีอยู่แค่ในขั้นตอนรับอินพุตเท่านั้น ฉันคิดว่าความเข้าใจผิดแบบนี้เป็นสาเหตุที่ทำให้คนประเมินศักยภาพของทรานส์ฟอร์เมอร์ต่ำเกินไป
แต่จริงๆ แล้วนี่กลับเป็นปรากฏการณ์ที่ช่วยยกระดับคุณภาพของโค้ด ด้วย positional encoding ของ causal transformer โมเดลสามารถทิ้งโทเค็นชั่วคราวไว้เพื่อใช้ในการอนุมานเฉพาะจุด แล้วลืมมันได้ง่าย
พูดอีกแบบคือมันทำงานเหมือน scratchpad แบบใช้ครั้งเดียว ทางแก้คือเอาต์พุตของ LLM ควรถูก post-process ไม่ใช่ไปกดให้โมเดลสร้างคอมเมนต์น้อยลง
หลังจาก ChatGPT เปิดตัว สัดส่วนของคนทั้งสามกลุ่มนี้แทบไม่เปลี่ยนเลย และก็ไม่ค่อยมีใครถูกโน้มน้าวด้วยหลักฐาน
งานภาพของทีม Transformer Explainer ยอดเยี่ยมมาก
พอดู Transformer Explainer ควบคู่กับวิดีโอของ 3blue1brown ก็เข้าใจได้ชัดเจนมากขึ้น
ผู้เขียน Jay Alammar มาแสดงความคิดเห็นเองและแนะนำแหล่งเรียนรู้เกี่ยวกับทรานส์ฟอร์เมอร์ที่ดีอื่นๆ
ลิงก์ที่เกี่ยวข้อง
ตอนนี้มีสื่ออธิบายทรานส์ฟอร์เมอร์มากเกินไป จนให้ความรู้สึกเหมือน บทสอน monad
บางคนคิดว่าตัวเองเข้าใจแล้ว แต่จริงๆ ยังสับสนอยู่ และก็พยายามเผยแพร่ความเข้าใจนั้นออกไปอย่างกว้างขวาง
ตอนเรียนคณิตศาสตร์หรือแนวคิดด้านวิศวกรรมอิเล็กทรอนิกส์ คำอธิบายแรกมักจะยาก แต่พอได้เจอหลายเวอร์ชัน สุดท้ายความเข้าใจก็จะลึกขึ้น
หรือว่าฉันอาจตามยุคไม่ทันเอง แต่อยากรู้ว่าทรานส์ฟอร์เมอร์ได้ แทนที่โครงสร้าง deep learning แบบเดิมอย่าง U-net ไปหมดแล้วหรือยัง
ตัวอย่างเช่น CNN ก็ยังทรงพลังอยู่มาก โดยเฉพาะใน งานวิชันเฉพาะทางอย่างภาพทางการแพทย์ ที่อาจเหมาะกว่า
สำหรับโมเดลแบบ rotation-invariant, graph neural network หรือ point cloud model ทรานส์ฟอร์เมอร์อาจยิ่งไม่เหมาะ
กล่าวคือยังมี สถาปัตยกรรมทางเลือก อีกหลากหลาย
งานวิจัยที่เกี่ยวข้อง: CNNs can still do just as well
ฉันมีหนังสือเล่มนี้อยู่ และตอนที่ทีมตัดสินใจจะเอา LLM เข้ามาใช้ในระบบ มันเป็นเหมือน เส้นชีวิต เลยจริงๆ
ท้ายที่สุด LLM คือ ระบบสังเคราะห์ที่เลียนแบบการให้เหตุผลแบบมนุษย์ ดังนั้นถึงจะรู้โครงสร้างภายใน ก็ยังคาดเดารูปแบบความผิดพลาดได้ยาก
การอาศัยประสบการณ์และการทดลองเพื่อจับทางยังสำคัญกว่า
ฉันคิดว่าสุดท้ายแล้วภายในของทรานส์ฟอร์เมอร์จะ มีความสำคัญน้อยลงเหมือนภายในของคอมไพเลอร์
นักพัฒนาส่วนใหญ่จะสนใจแค่ว่า “จะเอาไปใช้อย่างไร” มากกว่าการทำงานภายใน
เช่นเดียวกับระบบปฏิบัติการ คอมไพเลอร์ หรือฮาร์ดแวร์อย่าง GPU/TPU ทรานส์ฟอร์เมอร์ก็ต้องได้รับการปรับปรุงอย่างต่อเนื่อง ดังนั้นบทบาทของคนที่มีความรู้แบบนี้ยิ่งสำคัญขึ้นด้วยซ้ำ
เป็นบทความที่ยอดเยี่ยม และดูเหมือนว่าจะเป็นแรงบันดาลใจให้กับโปรเจกต์ Illustrated Evo 2 ในช่วงหลัง
ลิงก์บล็อก NVIDIA Research
ผู้คนมักคิดว่า Key/Query/Value เป็นแนวคิดพิเศษมาก แต่จริงๆ แล้วทรานส์ฟอร์เมอร์ก็เป็นแค่ โครงสร้างขยายของการคูณเมทริกซ์ เท่านั้น
ถ้าเลเยอร์หนึ่งของโครงข่ายประสาททั่วไปคือ
matrix * inputทรานส์ฟอร์เมอร์ก็แค่คำนวณinput * MatrixA,input * MatrixB,input * MatrixCแล้วนำมารวมกันสุดท้ายทุกอย่างก็เป็นเพียง การทำซ้ำของการดำเนินการกับเมทริกซ์ รายละเอียดเพิ่มเติมดูได้ที่ บล็อก PyTorch
attention ก็ถูกเรียนรู้โดยไม่ผูกกับตำแหน่งเช่นกัน และเปลี่ยนช่วงใหญ่ของอินพุตให้เป็นค่าใหม่ โดยมีหลาย head ที่เรียนรู้แง่มุมต่างๆ พร้อมกัน เป็นแนวคิดที่คล้ายกับ kernel ของ convolution
คู่มือนี้ยาวและครอบคลุมมาก ลองใช้ร่วมกับเครื่องมืออย่าง Claude Code เพื่อสร้าง pseudocode ของ PyTorch จะช่วยให้เข้าใจแนวคิดในเชิงภาพได้มาก
เป็นแหล่งเรียนรู้ที่เหมาะกับการนั่งจมอยู่กับมันหลายชั่วโมง