Micro Diffusion - โมเดล Diffusion ขนาดเล็กสำหรับการเรียนรู้
(github.com/Siwoo4985)สวัสดีครับ/ค่ะ เมื่อประมาณหนึ่งเดือนก่อน ผม/ฉันได้สร้างและเผยแพร่โมเดล text Diffusion ขึ้นมาตั้งแต่ต้น พอช่วงหลังได้ไล่อ่าน GeekNews ก็พลันนึกขึ้นได้ เลยเพิ่งนำมาโพสต์ตอนนี้ครับ/ค่ะ
ที่มาของการสร้าง
หลังจากได้ดู MicroGPT ของ Andrej Karpathy ก็รู้สึกว่า “อ๋อ โค้ดสั้นขนาดนี้ก็อธิบายแก่นสำคัญของ GPT ได้เหมือนกันนะ” พอดีกำลังอยากศึกษา Diffusion อยู่ด้วย จึงเริ่มโปรเจกต์เชิงการศึกษานี้จากความคิดว่า “ถ้าทำโค้ดที่ช่วยให้เข้าใจ Diffusion ได้ด้วยแนวทางแบบเดียวกัน ก็น่าจะสนุกดี”
AR vs Diffusion: ต่างกันอย่างไร?
การสร้างข้อความในยุค LLM แทบทั้งหมดใช้แนวทาง Autoregressive (AR) คือทำนายโทเค็นทีละตัวจากซ้ายไปขวา
Discrete Diffusion กลับกัน โดยวางทั้งซีเควนซ์ไว้พร้อมกัน แล้วค่อย ๆ กู้คืนจาก noise (masking) อย่างเป็นลำดับ
ยกตัวอย่างชื่อ "emma":
Forward (การฝึก - เพิ่ม noise):
t=0 : e m m a ← ต้นฉบับ
t=25: e _ m a ← masked บางส่วน
t=50: _ _ m _ ← masked มากขึ้น
t=100: _ _ _ _ ← masked ทั้งหมด
Reverse (การสร้าง - ลบ noise):
t=100: _ _ _ _ ← เริ่มจากสถานะว่าง
t=75: _ m _ _ ← กู้คืนจากตำแหน่งที่มั่นใจก่อน
t=50: e m _ a
t=0 : e m m a ← เสร็จสมบูรณ์
ถ้า AR คือ “การเขียนคำทีละตัวอักษร” Diffusion ก็จะใกล้เคียงกับ “การแก้ปริศนาอักษรไขว้” มากกว่า
โครงสร้างการใช้งาน
มีทั้งหมด 3 เวอร์ชันให้เลือกดูตามระดับความยาก
train_minimal.py— 2-layer MLP / ใช้แค่ NumPy (ง่ายที่สุด)train_pure.py— 3-layer MLP + skip connection / ใช้แค่ NumPytrain.py— 4-layer Transformer / ใช้ PyTorch
ทั้งสามเวอร์ชันใช้ diffusion loop เดียวกัน ต่างกันเฉพาะสถาปัตยกรรมของ denoiser
ข้อมูลสำหรับการฝึกคือชื่อภาษาอังกฤษ 32,000 ชื่อ และมีพารามิเตอร์ประมาณ 170K~239K
สามารถลองรันได้ทันที:
pip install numpy # เวอร์ชันขั้นต่ำ
python train_minimal.py
ยินดีรับ feedback หรือ PR ครับ/ค่ะ!
ยังไม่มีความคิดเห็น