1 อธิบาย
ทุก step โมเดลปรับตัวเลขให้ error บนชุดเทรนลดลง แต่สิ่งที่เราต้องการคือผลดีบนข้อมูลที่มันไม่เคยเห็น จึงต้องกันข้อมูลส่วนหนึ่งไว้เช็ก (validation) ถ้า error ชุดเทรนลดแต่ validation เพิ่ม แปลว่าเริ่ม overfit: มันกำลังจำ noise
ความจุ (capacity) คือว่าโมเดลดัดตัวได้แค่ไหน ที่นี่คือ degree ของ polynomial degree 1 เป็นเส้นตรง จับรูป vignette ไม่ได้ (underfit) degree 10 ผ่านจุดเทรนเกือบทุกจุดแต่ส่ายไปมาระหว่างจุด (overfit)
RMSE = √ mean((model(x) − y)²) · train ↓ + validation ↑ = overfit2 ลงมือลอง
โจทย์: เลือกความจุแล้วเทรน ให้ error ชุด validation ต่ำกว่า 0.075
เส้นประขาวบนกราฟ = step ที่ validation ดีที่สุด นั่นคือ checkpoint ที่ควรเก็บ
3 เจาะลึก
คำศัพท์ที่ต้องรู้
step คือการปรับตัวเลขหนึ่งครั้ง epoch คือการที่โมเดลได้เห็นข้อมูลทั้งชุดครบหนึ่งรอบ batch คือจำนวนตัวอย่างที่ป้อนพร้อมกันในหนึ่ง step
จำนวน step รวมจึงเท่ากับ epochs × ขนาด dataset ÷ batch size เช่น 2,000 epochs, 8 คู่ภาพ, batch 4 = 4,000 steps
| คำ | ความหมาย |
|---|---|
| step | ปรับตัวเลขหนึ่งครั้ง |
| epoch | เห็นข้อมูลครบหนึ่งรอบ |
| batch size | ตัวอย่างต่อ step |
| checkpoint | ตัวเลขที่บันทึกไว้ ณ step หนึ่ง |
อ่านกราฟสองเส้น
error ชุดเทรนลดลงเกือบเสมอ เพราะโมเดลถูกปรับมาเพื่อมันโดยตรง error ชุด validation คือตัวแทนของข้อมูลที่ยังไม่เห็น ช่วงแรกทั้งคู่ลดด้วยกัน พอโมเดลเริ่มจำ noise เส้น validation จะหยุดลดหรือเริ่มเพิ่ม
ในบทเรียน degree 2–7 ได้ validation ราว 0.07 ส่วน degree 10 ได้ error ชุดเทรนต่ำมาก (ราว 0.006 ต่ำกว่า noise 0.05) แต่ validation ราว 0.19 นั่นคือภาพของ overfit
CopyCat ตั้งใจ "fit ช็อตเดียว"
ใน ML ทั่วไป overfit คือสิ่งที่ต้องหนี แต่ CopyCat มักถูกใช้ให้เก่งเฉพาะช็อตเดียว และนั่นเป็นข้อดี เพราะเฟรมในช็อตเดียวกันคล้ายกันมาก
สิ่งที่ยังต้องระวังคือ "ข้อมูลใหม่" ที่สำคัญ ซึ่งก็คือเฟรมอื่นในช็อตเดียวกันที่ไม่ได้อยู่ใน dataset ให้กันเฟรมแบบนั้นไว้เช็กเสมอ
กันเฟรมของช็อตเดียวกันไว้ 2–3 เฟรมสำหรับเช็ก ไม่ใส่ใน dataset
แก้ underfit กับ overfit
underfit: ผลเบลอหรือไม่ถึงเป้าแม้ในเฟรมตัวอย่าง ลองเทรนนานขึ้นหรือใช้โมเดลที่ใหญ่ขึ้น overfit: เฟรมตัวอย่างสวย แต่เฟรมอื่นเพี้ยน เพิ่มเฟรมที่หลากหลายขึ้น หรือใช้ checkpoint ก่อนหน้า
- 1เฟรมตัวอย่างยังไม่ดี = underfit
- 2เทรนนานขึ้น / โมเดลใหญ่ขึ้น
- 3ตัวอย่างดี แต่เฟรมอื่นเพี้ยน = overfit
- 4เพิ่มเฟรมหลากหลาย / checkpoint ก่อนหน้า
4 ในงานจริง
ทำใน Nuke
- ระหว่างเทรน CopyCat ดูกราฟ loss คู่กับ contact sheet ที่เขียนลงโฟลเดอร์ output
- contact sheet แสดง crop สุ่มเทียบ input, ผลของโมเดล และ Ground Truth ใช้เช็กทั้งคุณภาพและว่าคู่ภาพ align กัน
- ลองรัน Inference ด้วย .cat ของ checkpoint ต่าง ๆ บนเฟรมที่กันไว้ แล้วเลือกตัวที่ดีที่สุดด้วยตา
- ใช้ Merge (difference) เทียบผลกับเฟรมที่ทำมือไว้ เพื่อดูว่าต่างกันตรงไหน
พลาดบ่อย → แก้ยังไง
- ✗ เชื่อกราฟ loss อย่างเดียว (ดู AI2)✓ loss ต่ำอาจแปลว่าจำตัวอย่างได้ ต้องดูภาพบนเฟรมที่ไม่ได้เทรนด้วย
- ✗ เทรนนานที่สุดเท่าที่ทำได้ แล้วใช้ผลสุดท้ายเสมอ✓ checkpoint ก่อนหน้าอาจดีกว่า เทียบหลายตัวบนเฟรมที่กันไว้
- ✗ ไม่กันเฟรมไว้เช็กเลย ใส่ทุกเฟรมที่ซ่อมมือเข้า dataset✓ กันไว้ 2–3 เฟรม เพื่อให้มีตัววัดที่โมเดลไม่เคยเห็น
เช็กก่อนส่งช็อต
- มีเฟรมที่กันไว้เช็ก ซึ่งไม่อยู่ใน dataset
- อ่านกราฟ loss คู่กับ contact sheet
- เทียบ checkpoint อย่างน้อย 2 ตัวบนเฟรมที่กันไว้
- ผลบนเฟรมที่กันไว้ผ่านด้วยตาที่ขนาดเต็ม
5 เช็กตัวเอง
error ชุดเทรนลดต่อเนื่อง แต่ validation เริ่มเพิ่มหลัง step 500 แปลว่าอะไร
🔒 ตอบคำถามด้านบนก่อน แล้วการ์ดนี้จะเปิด
1. 1,000 epochs, dataset 12 คู่ภาพ, batch size 4 ได้กี่ step
2. error ชุดเทรนต่ำกว่าระดับ noise ในข้อมูลมาก แปลว่าอะไร
ตัวเลขมาจากไหน: polynomial แบบ Legendre เทรนด้วย Adam จริงบนข้อมูล 1 มิติที่เราสร้าง (ความสว่างแบบ vignette + noise 0.05, 12 จุดเทรน, 40 จุด validation, seed คงที่) CopyCat มักตั้งใจให้เข้ากับช็อตเดียว ซึ่งไม่ผิด เพราะ "ข้อมูลใหม่" ที่สำคัญคือเฟรมอื่นในช็อตเดียวกัน