ข้ามไปยังเนื้อหา
โมเดล 125M ที่เล่นเปียโนต่อจากคุณได้บน iPhone — และบทเรียนวิศวกรรมที่ใช้ได้กับโมเดลเล็กทุกตัว: DPO ดันคะแนนจาก 24.5% เป็น 69%
โมเดลใหม่

โมเดล 125M ที่เล่นเปียโนต่อจากคุณได้บน iPhone — และบทเรียนวิศวกรรมที่ใช้ได้กับโมเดลเล็กทุกตัว: DPO ดันคะแนนจาก 24.5% เป็น 69%

อ่าน 7 นาที ที่มา: Simon Edwardsson

20 สิงหาคม 2026 Simon Edwardsson เผยแพร่บันทึกการสร้าง RollTab — แอปที่เล่นเปียโนต่อจากสิ่งที่คุณเพิ่งเล่นไป แบบเดียวกับที่ GitHub Copilot เติมโค้ดให้ แต่ input คือคีย์บอร์ด MIDI และทุกอย่างรันบน iPhone โดยไม่ต้องต่อเน็ต

เหตุผลที่โพสต์นี้ขึ้นอันดับต้น ๆ ของ Hacker News (กว่า 500 คะแนน) ไม่ใช่เพราะเป็นแอปเปียโน แต่เพราะมันเป็น บันทึกวิศวกรรมโมเดลเล็กที่ครบถ้วนผิดปกติ — รวมทั้งส่วนที่ล้มเหลว ซึ่งหายากมากในบล็อกสายนี้ ผู้เขียนเรียกผลงานตัวเองว่า “GPT-2 แต่สำหรับเปียโน” และบทเรียนเกือบทุกข้อในนั้นย้ายไปใช้กับโดเมนอื่นได้ทันที

บทเรียนที่ 1: การออกแบบ tokenization สำคัญกว่าที่คิด

โจทย์แรกคือจะแทนโน้ตดนตรีเป็นโทเคนยังไง ผู้เขียนลองสองแบบก่อนจะทิ้งทั้งคู่:

  • แบบ note-on / note-off (แยกเหตุการณ์กดและปล่อยเป็นคนละโทเคน) — “มีแนวโน้มไหลออกนอกลู่” เกิดโน้ตค้างที่ไม่มีการปล่อย
  • แบบ grammar-masked — ช้าเกินไป เพราะต้องรัน transformer สี่รอบต่อหนึ่งโน้ต

ทางออกสุดท้ายคือ หนึ่งโน้ต = หนึ่งโทเคน ที่ประกอบด้วยห้าฟิลด์เชิงหมวดหมู่พร้อมกัน: [event_type, pitch_id, delta_id, duration_id, velocity_id] โดยแต่ละฟิลด์มี vocabulary แยกกัน (pitch 128 ค่าตามมาตรฐาน MIDI, delta_onset คือระยะเวลาจากโน้ตก่อนหน้า, duration, และ velocity ที่แบ่งเป็นช่วง ๆ) แล้วรวมเข้าด้วยกันด้วย additive embedding

ผลคือโมเดลเดินหน้าทีละ “หนึ่งโน้ตเต็ม” ต่อหนึ่ง forward pass ซึ่งคือเหตุผลที่มันเร็วพอจะทันการเล่นจริง ส่วน loss ก็คือผลรวมของห้าหัว: type_loss + pitch_loss + delta_loss + duration_loss + velocity_loss

รายละเอียดที่ชอบเป็นการส่วนตัวคือ การควอนไทซ์เวลาเป็น 24 ขั้นต่อโน้ตตัวดำ ซึ่งเลือกมาเพื่อเก็บจังหวะแบบ “เกือบแต่ไม่ตรงบีต” ของการเล่นจริง — ถ้าละเอียดน้อยกว่านี้ ดนตรีจะกลายเป็นเสียงหุ่นยนต์ทันที

บทเรียนที่ 2: ทำความสะอาดข้อมูล ชนะการเพิ่มข้อมูล

ชุดข้อมูลคือไฟล์ MIDI ไม่กี่แสนไฟล์ รวมราว 300 ล้านเหตุการณ์โน้ต ส่วนใหญ่เป็นเพลงคลาสสิกที่หมดลิขสิทธิ์แล้ว และประโยคที่ผู้เขียนย้ำคือ “การทำความสะอาดและคัดเลือกข้อมูลสำคัญกว่าการเพิ่มข้อมูลเข้าไปเฉย ๆ”

การทำความสะอาดรวมถึงการตัดข้อมูลซ้ำด้วย fingerprint ที่ไม่ขึ้นกับการย้ายคีย์ (transposition-invariant) และกรองไฟล์ที่มีหลายแทร็กแบบผิดปกติออก ส่วน augmentation ใช้การย้ายคีย์ทั้งเพลง ปรับความเร็วแบบสม่ำเสมอ และเขย่าค่า duration/velocity เล็กน้อย

ในรายการ “สิ่งที่ลองแล้วไม่เวิร์ก” มีข้อหนึ่งที่ควรอ่านซ้ำ: การเพิ่มชุดข้อมูลที่ใหญ่ขึ้นแต่สกปรกกว่า ทำให้ผลแย่ลง — ตรงข้ามกับสัญชาตญาณ “ข้อมูลเยอะไว้ก่อน” ที่คนส่วนใหญ่ยึด

บทเรียนที่ 3: validation loss โกหกได้

เทคนิคที่ผู้เขียนบอกว่าได้ผลคือ scheduled sampling — ค่อย ๆ เพิ่มสัดส่วนที่โมเดลต้องใช้คำทำนายของตัวเองแทนคำตอบจริงระหว่างเทรน จาก 0% ไปถึง 50%

ประเด็นสำคัญคือมัน ทำให้ validation loss แย่ลง แต่คุณภาพเวลาปล่อยให้โมเดลเล่นยาว ๆ ดีขึ้น เหตุผลตรงไปตรงมา: ตอนใช้งานจริงโมเดลต้องต่อยอดจากเอาต์พุตตัวเอง ถ้าเทรนโดยป้อนคำตอบจริงให้ตลอด (teacher forcing) มันจะไม่เคยเรียนวิธีกู้ตัวจากความผิดพลาดของตัวเอง — ปัญหา exposure bias คลาสสิกที่ยังหลอกหลอนงาน autoregressive ทุกประเภท

นี่คือเหตุผลที่ผู้เขียนสรุปว่า metric อัตโนมัติ (n-gram ของ pitch, entropy, ความหนาแน่นของโน้ต, การตรวจช่วงเงียบยาว) “มีประโยชน์สำหรับจับความล้มเหลวที่ชัดเจน แต่ไม่ดีพอจะใช้เลือกโมเดลที่ดีที่สุด”

บทเรียนที่ 4: DPO ให้ผลตอบแทนสูงสุด และวิธีสร้างข้อมูลก็สำคัญ

ขั้นที่ให้ผลมากที่สุดคือ Direct Preference Optimization หลังเทรนเสร็จ วิธีเก็บข้อมูล preference คือสร้างการเล่นต่อหลายเวอร์ชันจาก prompt เดียวกัน แล้วให้ Gemini 3.5 Flash เป็นผู้ตัดสินว่าอันไหนดีกว่า

รายละเอียดที่ควรจำสำหรับใครที่ใช้ LLM-as-judge: ผู้เขียนพบว่า การตัดสินแบบจับคู่เทียบ (pairwise) ได้ผลดีกว่าการให้คะแนนเป็นค่าสัมบูรณ์ และเขาลด position bias ด้วยการสลับลำดับแล้วเทียบซ้ำ — สองข้อนี้คือมาตรฐานที่คนมักข้าม

ตัวเลขผลลัพธ์:

การตั้งค่าคะแนน preference
โมเดลก่อนทำ DPO24.55%
DPO (β = 0.03)57.14%
DPO ชุดข้อมูล consensus (β = 0.03)69.05%

และค่า β = 0.10 “ดันแรงเกินไปจนแย่ลง” — บทเรียนเดิมที่เจอซ้ำในทุกงาน preference optimization คือ ดันให้ห่างจากโมเดลอ้างอิงมากไปแล้วโมเดลจะพัง

การประเมินใช้การสร้างการเล่นต่อจากเพลงที่กันไว้ โดย prompt ยาว 4–32 โน้ต ซึ่งพบว่า prompt สั้น 4 โน้ตยากที่สุด ส่วน 16–32 โน้ตให้ผลเสถียรกว่ามาก

บทเรียนที่ 5: ข้อจำกัดของ Core ML ที่คนทำ on-device ควรรู้

โมเดลสามขนาดถูกเทรน (33M, 64M, 125M) และตัว 125M คือตัวที่ปล่อยลงมือถือ ผ่านการแปลง PyTorch → Core ML พร้อมควอนไทซ์ INT8 ได้ความเร็วราว 108 โน้ตต่อวินาที บน iPhone 15 ซึ่งเร็วกว่าความเร็วที่มนุษย์เล่นได้มาก

ข้อจำกัดที่น่าสนใจที่สุดคือเรื่อง KV cache: Core ML ไม่เปิดให้เข้าถึง Q, K, V โดยตรง จึงทำ ring buffer ไม่ได้ ผลคือเมื่อ context ใกล้ครบ 512 โน้ต โมเดลต้อง สร้าง cache ใหม่ทั้งหมด (ตอน inference จึงลดหน้าต่างลงเหลือ 384 โน้ตแบบไดนามิกเพื่อจัดการเรื่องนี้) และการเปิดแอปครั้งแรกยัง “ช้าน่ารำคาญ” ระหว่างที่ runtime ของ Apple ปรับแต่งโมเดล

ผู้เขียนระบุปัญหาที่ยังเหลือตรง ๆ ว่า “บางครั้งมันวนซ้ำ และ prompt สั้น ๆ ยังยาก” ส่วนสิ่งที่ลองแล้วไม่เวิร์กมีทั้ง Mirostat (ได้ผลไม่ปะติดปะต่อ) และการเทรนใหม่แบบ born-again (ไม่ดีขึ้น)

แอป RollTab ดาวน์โหลดฟรีบน App Store สำหรับ iOS/iPad ที่ต่อคีย์บอร์ด MIDI — แต่ โค้ดและน้ำหนักโมเดลไม่ได้เปิด ซึ่งเป็นข้อจำกัดที่ต้องบอกให้ชัด บทความให้รายละเอียดพอจะทำตามได้ แต่ไม่ใช่ของที่หยิบมารันเองได้เลย

มุมมอง AI Curator

โพสต์นี้มีค่ามากกว่าข่าวโมเดลใหม่หลายชิ้นที่เราเขียนถึงในเดือนนี้ และเหตุผลคือมันเขียนสิ่งที่รายงานเทคนิคของแล็บใหญ่ไม่เคยเขียน: ลำดับความสำคัญของสิ่งที่ต้องทำเมื่อคุณไม่มี GPU เป็นพันตัว

ถ้าไล่ดูว่าอะไรให้ผลตอบแทนสูงสุดในโปรเจกต์นี้ จะได้ลำดับที่ขัดกับสิ่งที่คนส่วนใหญ่ทำ: การออกแบบ tokenization มาก่อน แล้วการทำความสะอาดข้อมูล แล้ว post-training ด้วย DPO — ส่วนการเพิ่มขนาดโมเดลกับการเพิ่มปริมาณข้อมูลอยู่ท้ายสุด ตัวเลข 24.55% → 69.05% นั้นได้มาโดยไม่แตะขนาดโมเดลเลยแม้แต่นิดเดียว

นี่คือสิ่งที่นักพัฒนาไทยควรเก็บไปใช้ที่สุด เพราะโจทย์จำนวนมากในไทยเป็นโจทย์เฉพาะทางที่ไม่มีโมเดลสำเร็จรูปรองรับ — การจำแนกเอกสารราชการ การแปลงคำพูดภาษาไทยผสมอังกฤษ การจัดหมวดสินค้าอีคอมเมิร์ซ — และเป็นโจทย์ที่โมเดล 100M–1B พารามิเตอร์ที่ออกแบบดี ๆ มักชนะการยิง API โมเดลยักษ์ ทั้งในแง่ต้นทุน ความเร็ว และความเป็นส่วนตัวของข้อมูล งบเทรนระดับนี้อยู่ในวิสัยที่ทีมเล็กหรือแม้แต่คนเดียวทำได้จริง

ประเด็นที่อยากขีดเส้นใต้เป็นพิเศษคือเรื่อง validation loss ที่แย่ลงแต่ผลลัพธ์ดีขึ้น ทีมที่เพิ่งเริ่มทำโมเดลมักยึด loss เป็นเข็มทิศเดียว แล้วทิ้ง checkpoint ที่ดีที่สุดไปโดยไม่รู้ตัว บทเรียนคือถ้าคุณกำลังทำงาน autoregressive ที่ผู้ใช้จะเห็นเอาต์พุตยาว ๆ คุณต้องมีวิธีประเมินที่ดูของจริง ไม่ใช่ดูแค่ตัวเลขบนหน้าจอ — และการใช้ LLM ตัวใหญ่มาตัดสินแบบจับคู่เทียบ อย่างที่โปรเจกต์นี้ทำ คือทางที่ถูกและเข้าถึงได้กว่าการจ้างคนมาให้คะแนนมาก

แหล่งข่าว

บทความนี้เรียบเรียงจากแหล่งข่าวต้นทาง — Simon Edwardsson

เนื้อหาบน blog นี้สร้างโดย AI โดยมีการกำกับบรรณาธิการจากมนุษย์

อ่านเพิ่มในหมวด โมเดลใหม่

Google เปิดตัว Gemini 4 Carbon ขึ้นอันดับ 1 Artificial Analysis v5 ด้วยคะแนน 59 แต่ยังให้ใช้แค่นักป้องกันไซเบอร์กลุ่มเล็ก
โมเดลใหม่

Google เปิดตัว Gemini 4 Carbon ขึ้นอันดับ 1 Artificial Analysis v5 ด้วยคะแนน 59 แต่ยังให้ใช้แค่นักป้องกันไซเบอร์กลุ่มเล็ก

Gemini 4 Carbon เปิดตัว 28 ต.ค. แซง Claude Opus 5.5 บน Intelligence Index v5 แค่ 1 คะแนน และตามหลังเพียง 3 คะแนนในดัชนี coding agent ราคาเปิดตัว $2/$10 แต่นักพัฒนาทั่วไปยังเรียกใช้ไม่ได้ ระหว่างที่ Google ค่อย ๆ เปิดผ่านโปรแกรม Fairwind

· อ่าน 5 นาที
Microsoft ปล่อย Mage-VL-Cowork โมเดล 4B คุมเดสก์ท็อปและเทอร์มินัลในตัวเดียว ได้ 66% บน OSWorld-Verified สัญญาอนุญาต Apache-2.0
โมเดลใหม่

Microsoft ปล่อย Mage-VL-Cowork โมเดล 4B คุมเดสก์ท็อปและเทอร์มินัลในตัวเดียว ได้ 66% บน OSWorld-Verified สัญญาอนุญาต Apache-2.0

Mage-VL-Cowork ขนาด 4B ของ Microsoft เลือกเองว่าจะคลิกหน้าจอหรือสั่ง bash ทำคะแนน OSWorld-Verified 66.0% ใกล้ค่าอ้างอิงมนุษย์ 72.4% ในตารางเดียวกัน แต่คำว่าดีที่สุดในขนาด 4B มีคู่เทียบบนตารางนี้แค่รุ่นเดียว

· อ่าน 4 นาที
Mistral ปล่อยน้ำหนัก Large 4 จริงแล้ว — 1T ราคาลดเกือบครึ่ง แต่บน AA ได้ 26 และสัญญาอนุญาตห้ามขายเป็น API ถ้าไม่มีใบอนุญาตแยก
โมเดลใหม่

Mistral ปล่อยน้ำหนัก Large 4 จริงแล้ว — 1T ราคาลดเกือบครึ่ง แต่บน AA ได้ 26 และสัญญาอนุญาตห้ามขายเป็น API ถ้าไม่มีใบอนุญาตแยก

Mistral ปล่อยน้ำหนัก Large 4 (Le Chonk) เมื่อ 29 ต.ค. เป็นรุ่นที่ฝึก RL ต่ออีกสามสัปดาห์หลัง preview ขนาด 1T ใช้พื้นที่ราว 1.06TB ราคา API ลดเหลือ $0.70/$2.10 Mistral นำ open-weight ด้าน coding แต่คะแนนรวม AA 26 ตามหลังโมเดลจีน และสัญญาอนุญาตกันธุรกิจ Model-as-a-Service

· อ่าน 5 นาที