CS336: การสร้างแบบจำลองภาษาตั้งแต่ต้น
(cs336.stanford.edu)- แบบจำลองภาษา เป็นรากฐานของแอปพลิเคชัน NLP สมัยใหม่ และเปิดพาราไดม์ใหม่ที่ให้ระบบอเนกประสงค์เพียงระบบเดียวรองรับงานย่อยที่หลากหลาย
- คอร์สนี้ให้ลงมือทำกระบวนการพัฒนาแบบจำลองภาษาทั้งหมดด้วยตนเอง ตั้งแต่ การรวบรวมและทำความสะอาดข้อมูล สำหรับ pretraining การสร้าง Transformer การฝึก ไปจนถึงการประเมินก่อนนำไปใช้งาน
- งานมอบหมายเริ่มจากการสร้าง tokenizer, สถาปัตยกรรมโมเดล, optimizer แล้วขยายไปสู่การปรับแต่ง GPU, การทำ FlashAttention2 บน Triton และโค้ดสำหรับการฝึกแบบกระจาย
- ผู้เรียนควรมีความชำนาญด้าน Python และซอฟต์แวร์เอนจิเนียริง, PyTorch, แนวคิดด้านระบบ เช่น memory hierarchy รวมถึงความรู้ด้านแคลคูลัส, พีชคณิตเชิงเส้น, ความน่าจะเป็นและสถิติ, และแมชชีนเลิร์นนิง
- เป็นวิชา 5 ยูนิตที่เน้นการลงมือสร้างจริง โดยจำกัดการอ้างอิงโค้ดที่มีอยู่แล้วและการใช้ LLM แก้โจทย์โดยตรง พร้อมแนะนำให้ ดีบักบน CPU ก่อน แล้วค่อยฝึกและทำ benchmark บน GPU
เป้าหมายและขอบเขตของรายวิชา
- แบบจำลองภาษาเป็นรากฐานสำคัญของแอปพลิเคชันประมวลผลภาษาธรรมชาติ (NLP) สมัยใหม่ และเปิดพาราไดม์ใหม่ที่ให้ระบบอเนกประสงค์เพียงระบบเดียวจัดการงานย่อยหลายแบบได้
- เมื่อสาขา AI, ML และ NLP เติบโตต่อเนื่อง ความเข้าใจเชิงลึกเกี่ยวกับแบบจำลองภาษาจึงมีความสำคัญทั้งต่อนักวิทยาศาสตร์และวิศวกร
- รายวิชานี้ได้แรงบันดาลใจจากวิชาระบบปฏิบัติการที่ให้สร้างระบบปฏิบัติการทั้งระบบตั้งแต่ต้น โดยให้นักศึกษาติดตามกระบวนการพัฒนาแบบจำลองภาษาด้วยตนเองครบทุกขั้นตอน
- เนื้อหาครอบคลุมตั้งแต่การรวบรวมและทำความสะอาดข้อมูล pretraining การประกอบโมเดล Transformer การฝึกโมเดล ไปจนถึงการประเมินก่อนนำไปใช้งานจริง
ทักษะที่จำเป็น
- งานมอบหมายส่วนใหญ่ทำด้วย Python และมีการเตรียมโครงพื้นฐานให้เพียงเล็กน้อยกว่าวิชา AI อื่น ๆ
- ปริมาณโค้ดที่ต้องเขียนมากกว่าวิชาอื่นอย่างน้อยในระดับเลขหลักเดียว ทำให้ความชำนาญด้าน Python และซอฟต์แวร์เอนจิเนียริงมีความสำคัญมาก
- สัดส่วนสำคัญของวิชาคือการรันแบบจำลองภาษาด้วยโครงข่ายประสาทเทียมบน GPU ของหลายเครื่องให้ได้อย่างรวดเร็วและมีประสิทธิภาพ
- คาดหวังความคุ้นเคยกับ PyTorch ในระดับสูง และความเข้าใจแนวคิดพื้นฐานด้านระบบ เช่น memory hierarchy
- ควรใช้งานส kýญลักษณ์และการคำนวณเมทริกซ์/เวกเตอร์ รวมถึงความน่าจะเป็น การแจกแจงแบบเกาส์เซียน ค่าเฉลี่ย ส่วนเบี่ยงเบนมาตรฐาน และพื้นฐานแมชชีนเลิร์นนิงกับดีพเลิร์นนิงได้อย่างคล่องแคล่ว
- เป็นรายวิชา 5 ยูนิตที่มีสัดส่วนการลงมือทำสูงมาก จึงควรจัดสรรเวลาให้เพียงพอ
โครงสร้างงานมอบหมาย
- Assignment 1 Basics ให้สร้าง tokenizer, สถาปัตยกรรมโมเดล และ optimizer ที่จำเป็นต่อการฝึกแบบจำลองภาษา Transformer มาตรฐาน พร้อมฝึกแบบจำลองภาษาขนาดเล็กขั้นต่ำ
- Assignment 2 Systems ให้โปรไฟล์และทำ benchmark โมเดลและเลเยอร์จาก Assignment 1 ด้วยเครื่องมือขั้นสูง, ปรับแต่ง FlashAttention2 ด้วยการทำ implementation บน Triton ของตนเอง และสร้างโค้ดสำหรับการฝึกแบบกระจายที่ประหยัดหน่วยความจำ
- Assignment 3 Scaling ให้ทำความเข้าใจหน้าที่ขององค์ประกอบแต่ละส่วนของ Transformer และใช้คำถามกับ API การฝึกเพื่อฟิต scaling law สำหรับการคาดการณ์การสเกลของโมเดล
- Assignment 4 Data ให้แปลง raw Common Crawl dump ให้เป็นข้อมูล pretraining ที่ใช้งานได้ และปรับปรุงประสิทธิภาพของโมเดลด้วยการกรองและลบข้อมูลซ้ำ
- Assignment 5 Alignment and Reasoning RL ใช้ supervised fine-tuning และ reinforcement learning เพื่อฝึก LM ให้ให้เหตุผลในการแก้โจทย์คณิตศาสตร์
- Optional Part 2 ของ Assignment 5 ให้สร้างและประยุกต์ใช้วิธีจัดแนวความปลอดภัย เช่น DPO
GPU compute และค่าใช้จ่าย
- หากเรียนตามจากที่บ้าน สามารถใช้ GPU compute จากผู้ให้บริการคลาวด์เพื่อทำงานมอบหมายให้เสร็จได้
- ณ วันที่ 28 มีนาคม 2026 ราคาแบบสาธารณะของ B200 GPU เดี่ยวคือ Modal $6.25/ชั่วโมง, Lambda Labs $6.69/ชั่วโมง, RunPod $4.99/ชั่วโมง, Nebius $5.50/ชั่วโมง หรือแบบ spot $3.05/ชั่วโมง, Together $7.49/ชั่วโมง
- Modal ให้ compute ฟรี $30 ต่อเดือน คิดค่าบริการเฉพาะ compute ที่ใช้งานจริง และทำให้การสลับจากการพัฒนาแบบโลคัลไปสู่การทดลอง GPU ขนาดใหญ่เป็นเรื่องง่าย
- เพื่อประหยัดค่าใช้จ่ายและเพิ่มความสะดวก แนะนำให้ดีบักความถูกต้องของ implementation บน CPU ก่อน จากนั้นค่อยใช้จำนวน GPU ตามที่งานมอบหมายแนะนำสำหรับการรันฝึกหรือทำ benchmark งานคำนวณบน GPU
การดำเนินรายวิชาและกติกาการส่งงาน
- การบรรยายจัดขึ้นวันจันทร์และพุธ 3:00–4:20pm ที่ Skilling Auditorium และมีวิดีโอบันทึกให้ใน YouTube playlist
- คำถามทั้งหมดที่เกี่ยวกับวิชาต้องถามในช่อง Slack สาธารณะ และประกาศทั้งหมดก็จะทำผ่าน Slack
- งานมอบหมายทั้งหมดต้องส่งผ่าน Gradescope ภายในกำหนดเวลา และไม่รับการส่งทางอีเมล
- สามารถส่งใหม่ได้กี่ครั้งก็ได้ก่อนถึงกำหนด และจะตรวจให้คะแนนเฉพาะฉบับส่งล่าสุด
- การส่งบางส่วนยังดีกว่าไม่ส่งเลย
- นักศึกษาแต่ละคนใช้ late day ได้ 6 วัน โดย late day 1 วันจะขยายเส้นตายออกไป 24 ชั่วโมง
- ใช้ late day ได้สูงสุด 3 วันต่อหนึ่งงานมอบหมาย
- หากเห็นว่ามีข้อผิดพลาดเชิงวัตถุวิสัยในการให้คะแนน สามารถยื่นคำร้องขอตรวจใหม่ผ่าน Gradescope ได้ภายใน 3 วันหลังประกาศคะแนน
นโยบายการทำงานร่วมกันและเครื่องมือ AI
- อนุญาตให้มี study group ได้ แต่ผู้เรียนแต่ละคนต้องเข้าใจและทำงานมอบหมายของตนเองให้เสร็จด้วยตนเอง และต้องส่งงานแยกกันคนละหนึ่งฉบับ
- หากทำงานเป็นกลุ่ม ต้องระบุชื่อสมาชิก study group ไว้ด้านบนของงานมอบหมาย
- อนุญาตให้ใช้พรอมป์ต์กับ LLM เช่น ChatGPT สำหรับคำถามด้านการเขียนโปรแกรมระดับล่างหรือคำถามเชิงแนวคิดระดับสูงเกี่ยวกับแบบจำลองภาษา
- ห้ามใช้ LLM แก้โจทย์โดยตรง
- ระหว่างทำงานมอบหมาย มีการแนะนำอย่างหนักแน่นให้ปิด AI autocomplete เช่น Cursor Tab และ GitHub CoPilot แต่อนุญาต autocomplete ที่ไม่ใช่ AI เช่น การเติมชื่อฟังก์ชันอัตโนมัติ
- เอกสารประกอบการสอนมีเนื้อหาที่จำเป็นสำหรับการทำ implementation ด้วยตนเองอยู่แล้ว ดังนั้นห้ามดูโค้ด implementation ที่มีอยู่บนอินเทอร์เน็ต เว้นแต่ในเอกสารงานมอบหมายจะอนุญาตไว้เป็นการเฉพาะ
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
เพิ่งเรียนคอร์สเวอร์ชันปี 2025 จบไปไม่นาน ดูวิดีโอและทำการบ้านเกือบทั้งหมด ยกเว้นบางส่วนที่ค่าใช้จ่ายสูง ต่อให้แค่สองการบ้านแรกก็ต้องใช้ทั้งความคิดและการดีบักอย่างมาก แม้จะมีพื้นฐาน deep learning เบื้องต้น อยู่บ้าง ก็ยังต้องค่อย ๆ ใช้เวลาหลังเลิกงานและวันหยุดอยู่หลายเดือน
นึกภาพแทบไม่ออกว่านักศึกษาของ Stanford ส่งการบ้านทุก 2 สัปดาห์กันได้อย่างไร อาจารย์และ TA ทุ่มเทมากจริง ๆ ทั้งการออกแบบคอร์ส สไลด์ที่สะท้อนแนวโน้มล่าสุด และการเตรียมการบ้านที่ยอดเยี่ยม ได้เห็นด้วยตัวเองว่าทุกอย่างประกอบกันอย่างไร ตั้งแต่องค์ประกอบเล็ก ๆ ไปจนถึงการสร้าง language model จริง และการตรวจสอบส่วนสำคัญของ pipeline ของ LLM ทำให้รู้สึกสำเร็จมาก
แต่ก็อยากให้มีคำอธิบายเรื่อง ข้อกำหนดของสภาพแวดล้อมการรัน ให้ชัดเจนกว่านี้ ตัว harness ทำงานได้ดีที่สุดบน Linux + NVIDIA GPU และดูเหมือนจะคาดหวัง CUDA เวอร์ชันหรือสถาปัตยกรรมบางอย่าง ซึ่งอาจเป็นเรื่องปกติสำหรับนักวิจัย แต่หาได้ยากในสภาพแวดล้อมส่วนตัว ถ้าจะทำตามที่บ้าน ทางเลือกถัดไปคือ Windows + WSL2 + NVIDIA GPU หรือเช่า GPU จากหลายแพลตฟอร์ม ซึ่งทั้งสองแบบก็ไม่ได้ง่ายหรือถูก และถ้ามีคำแนะนำสำหรับคนที่ไม่มี GPU ที่เข้ากันได้ว่าจะดึงประโยชน์จากคอร์สนี้ให้ได้มากที่สุดอย่างไร ก็น่าจะดี อีกอย่างที่ได้เรียนรู้คือบน Mac OS ถ้าไม่ระวังการวิเคราะห์หน่วยความจำให้ดี Python อาจค้างจนต้องรีบูตเครื่องได้
ในคอมเมนต์เหล่านี้ เรื่อง ค่าเช่า GPU ก็อาจถูกพูดเกินจริงไปบ้าง การพัฒนาส่วนใหญ่ทำบนเครื่องตัวเองได้ และค่อยใช้ GPU แบบ on-demand ช่วงสั้น ๆ ตอนที่จำเป็น การบ้าน 1 รันทั้งหมดบนเครื่องโลคัลได้โดยไม่ต้องมี GPU เลย และการบ้าน 1 กับ 2 ส่วนใหญ่ก็แก้ได้ด้วยการเช่าไม่กี่ชั่วโมง ต่อให้ไม่ระวังมากและใช้ GPU เช่าตลอด ค่าใช้จ่ายก็อยู่ราว 200 ดอลลาร์ และถ้ายอมลดขนาดปัญหาลง ก็ลดให้ต่ำกว่า 50 ดอลลาร์ได้ไม่ยาก คิดว่าน่าจะทำตารางอธิบายประเด็นเหล่านี้และวิธีปรับแต่งให้ชัดขึ้นได้
ถ้ามีฟีดแบ็กเพิ่มเติมหรือเจอปัญหา อยากให้เปิด issue ใน repository เพราะปัญหาที่เราไม่รู้ก็แก้ได้ยาก
ไม่กี่วันก่อนลองให้ Claude ช่วยเขียน เวอร์ชันปรับปรุงของ gpt-1 ขึ้นมา ผมไม่ใช่วิศวกรแมชชีนเลิร์นนิง เป็นแค่วิศวกรแบ็กเอนด์ธรรมดา สุดท้ายมันออกมาเป็นส่วนผสมระหว่าง gpt-1 กับ modded-nanogpt ของ KellerJordan
ผมสามารถทำซ้ำผลลัพธ์จากงานวิจัย gpt-1 ต้นฉบับได้บนเครื่องเกมมิงพีซี และก็ไม่ได้ต้องใช้ VRAM มากนัก ใช้ NVIDIA GeForce RTX 2060 SUPER เทรนแค่ 1 ชั่วโมงก็ทำซ้ำผลลัพธ์ได้เกือบทั้งหมดแล้ว ดังนั้นถ้าสนใจ pretraining ของ LLM ก็แนะนำให้ลองทำแบบนี้ดู
โค้ดอยู่ที่นี่: https://github.com/epoyraz/modded-gpt-1
หรือจะถาม Claude 4.8 หรือ Codex 5.5 ตรง ๆ ก็ได้
มีความทรงจำที่ดีกับ cs224d ที่ richardsocher เคยสอน คอร์สนี้เกิดขึ้นก่อนยุคทรานส์ฟอร์เมอร์ เลยดูเก่าไปนิดในตอนนี้ แต่ในเวลานั้นมันเป็นคอร์สเริ่มต้นที่ยอดเยี่ยมมากสำหรับการนำ deep learning ไปใช้กับงานประมวลผลภาษาธรรมชาติ
https://cs224d.stanford.edu
เขาบอกว่าเป็น “GPU compute สำหรับการเรียนด้วยตัวเอง” แต่ B200 ที่แนะนำเริ่มต้นที่ 4.99 ดอลลาร์ต่อชั่วโมง ฟังดูไม่น่าใช่ของที่จำเป็นจริงสำหรับการเริ่มต้น
ตอนนี้ผมก็กำลังลองสร้าง LLM ตั้งแต่ศูนย์เหมือนกัน และในช่วงแรก ๆ ก็ไม่เคยต้องใช้เกิน 4090 จาก Vast.ai
ปีนี้เราโชคดีที่สามารถจัดหา Blackwell GPU ให้กับนักศึกษา Stanford ได้ จึงทำให้คำอธิบายการบ้านเขียนโดยอิงจากสิ่งนั้นเป็นหลัก
ในทางกลับกัน ถ้ากำลังเรียนรู้วิธีออกแบบ compute kernel หรือ IP block และกำลังทดลอง ฮาร์ดแวร์ที่ต้องใช้ก็มักต้องแรงกว่าหรือมีความจุมากกว่า งานทดลองตั้งใจให้อยู่คนละฝั่งกับการ optimize คืออ่านง่าย มองภายในได้ง่าย และดีบักง่ายในทุกขั้นตอน จึงทำให้โมเดลหรือบิตสตรีมที่ได้มีขนาดพองขึ้นและยังไม่ถูก optimize
การรันโมเดลที่คนอื่นทำเสร็จและ optimize ให้ใช้บนอุปกรณ์อย่าง 4090 แล้ว ด้วยพรอมป์ต์ของตัวเองก็ถือเป็นการทดลองแบบหนึ่ง และทำได้ในต้นทุนต่ำ คล้ายกับการเอาบิตสตรีมของคนอื่นที่ออกแบบและสังเคราะห์มาสำหรับ FPGA ราคา 20 ดอลลาร์ ไปใส่บน FPGA ตัวเดียวกันแล้วป้อนสัญญาณอินพุตของตัวเองเข้าไป แต่การทดลองที่คุณจะได้ทำในคอร์สนี้ระหว่างเรียนรู้การออกแบบโมเดลของตัวเอง ไม่ใช่การทดลองแบบนั้น
คอร์สนี้น่าสนใจมาก แต่อยากรู้เรื่องวิชาพื้นฐานที่ต้องมีก่อนด้วย มีบอกไว้ว่าควรคุ้นเคยกับพื้นฐาน machine learning และ deep learning เลยอยากทราบว่ามีแหล่งเรียนแบบเน้นลงมือทำหรือมีประสบการณ์ดูวิดีโอบันทึกการสอนของ Stanford สำหรับหัวข้อนี้เพื่อเรียนด้วยตัวเองไหม
แต่ CS336 ครอบคลุมเทคนิคสมัยใหม่ล้ำหน้ามากกว่ามาก ดังนั้นในส่วนนั้นฉบับปี 2026 จึงสำคัญ
คอร์ส: https://web.stanford.edu/class/archive/cs/cs224n/cs224n.1246...
วิดีโอคอร์ส: https://www.youtube.com/playlist?list=PLoROMvodv4rOaMFbaqxPD...
ตำรา: https://web.stanford.edu/~jurafsky/slp3/
ยอดเยี่ยมจริง ๆ ตลอดเดือนที่ผ่านมา ผมก็ทำอะไรคล้าย ๆ กันอยู่ และตั้งเงื่อนไขท้าทายไว้ว่าจะไม่ใช้ไลบรารีใดเลยนอกจาก Python standard library ไม่ใช้แม้แต่ numpy
ผมเริ่มจาก Word2Vec แล้วสร้าง RNN กับ LSTM และตอนนี้กำลัง implement สถาปัตยกรรมทรานส์ฟอร์เมอร์ไปได้ประมาณครึ่งหนึ่งแล้ว
ผมตั้งกลุ่มขึ้นมาเพื่อเรียนคอร์สนี้ด้วยกันโดยใช้วิดีโอ YouTube และเอกสารการสอนที่เปิดเผยออนไลน์ เนื้อหายากแต่คุ้มค่า และเราเรียนกันในจังหวะ สัปดาห์ละ 1 วิดีโอการสอน
เริ่มกันมากกว่า 30 คน แต่พอถึงเซสชันสุดท้ายเหลืออยู่แค่ 8 คน
อยากลองทำ แต่กังวลว่ายังมีทักษะไม่พอสำหรับตอนนี้ บางทีสักวันอาจจะทำได้
สงสัยว่า GPU ขั้นต่ำ สำหรับตามเรียนคอร์สนี้จากที่บ้านคืออะไร ผมมี 5080 16GB อยู่ แต่จำเป็นต้องใช้มากกว่านี้จริง ๆ ไหม?
ผมทำการบ้านสองชุดแรกด้วยตัวเองตลอดหนึ่งปีและได้เรียนรู้อะไรมากจริง ๆ อยากรู้ว่าหลังจากนั้นได้ไปเรียนคอร์สอะไรต่อบ้าง
สิ่งที่รู้สึกว่ายังขาดใน CS336 คือวิธีถ่ายทอดองค์ประกอบของ reinforcement learning และในส่วนนั้นบทเรียนที่ 5 และ 6 ของ CME 295 ทำได้ดีกว่า
https://cme295.stanford.edu/syllabus/
ได้ยินมาว่าวิชา CME 296 ซึ่งเป็นคลาสเรื่อง diffusion model ก็ดีเหมือนกัน และดูเหมือนจะเหมาะเป็นก้าวถัดไป
https://cme296.stanford.edu/syllabus/