Lesson 06 · คาบบ่าย 28 ต.ค. (วิดีโอ 0:04–0:47) · ~25 นาที

Pretrained model และ Fine-tuning

โยงกับสไลด์ DL 57–66, 81

เป้าหมายบทนี้: อธิบาย transfer learning และเลือกวิธีใช้ pretrained 3 แบบ (freeze, fine-tune ทั้งหมด, zero-shot) ให้เหมาะกับโจทย์
คลิปบรรยายที่ตรงกับบทนี้

1ทำไมไม่เริ่มจากศูนย์

สไลด์ DL 58: สัตว์ประหลาดที่ไม่เคยเห็น ถามว่าเป็นสัตว์บกหรือสัตว์น้ำ
สไลด์ 58ดูว่าเราตอบได้จากความรู้เดิม

เราบอกได้ว่าเป็นสัตว์น้ำเพราะมีความรู้เดิมว่าสัตว์บกต้องมีขา ไม่ใช่หางแบบนี้ นี่คือ transfer knowledge จากอดีต ไม่ได้เริ่มจากศูนย์

Deep learning หนึ่งตัวมีพารามิเตอร์ ~144 ล้านตัว ถ้าเทรนให้ดีต้องมีภาพเป็นแสนเป็นล้านรูป ซึ่งในงานจริงของเราไม่มีให้

การเทรนจากศูนย์ (from scratch) คือสุ่ม weight เริ่มต้น ส่วนผลลัพธ์ของการเทรนคือ weight = ความรู้

โมเดลที่ถูกเทรนมาก่อนแล้วกับข้อมูลปริมาณมหาศาล (เช่น ImageNet 14 ล้านรูป 1,000 คลาส) เราดาวน์โหลด weight ตั้งต้นมาต่อยอด เรียกว่า fine-tune = Pretrained model + เทรนเพิ่มกับงานใหม่ ข้อดีคือข้อมูลและเวลาน้อยลง

ImageNet มี 14 ล้านรูป เคยเห็นหมามาก่อนแน่ ๆ รถกระบะก็เห็นมาแล้ว ความรู้เรื่องเส้น ขอบ ท่าทาง ติดมาแล้วในชั้น conv จึงไม่ต้องเริ่มใหม่

2ทำอย่างไรเมื่อจำนวนคลาสเปลี่ยน

สไลด์ DL 63: Fine-tuning: ถ้าจำนวนคลาส output ต่างจากโมเดลเดิม ทำอย่างไร 1) fine-tune เฉพาะ classification layer 2) fine-tune ทั้งหมด
สไลด์ 63ดูสองทางเลือกในสไลด์

โมเดลเดิมถูกเทรนให้ตอบ 1,000 คลาส แต่งานเราอาจมีแค่ 2 คลาส (หมา/แมว) → ต้องตัด output layer เดิมแล้วต่อ "หัว" (head) ใหม่ของเราเอง

ท่าทำอะไรใช้เมื่อ
1. Freeze + เทรนเฉพาะ headล็อก weight ส่วนสกัดฟีเจอร์ไว้ เทรนแค่ output layerข้อมูลของเราคล้ายข้อมูลที่ pretrain มา (general) · เบา เร็ว ไม่ต้อง back-prop ทั้งโมเดล
2. Fine-tune ทั้งหมดปรับ weight ทั้ง feature extractor และ headข้อมูลต่างจากที่ pretrain มากหรือมีข้อมูลมากพอ (เช่น ภาพแพทย์)
3. Zero-shotไม่เทรนเลย เรียก API โยนรูปถามโมเดลใหญ่มาก (เช่น foundation / VLM)

ท่าที่ 1 คือ fine-tune เฉพาะ classification layer ถ้าข้อมูลของเราไม่ได้ต่างจาก general data ที่เทรนมามากนัก ก็ไม่จำเป็นต้องอัปเดตทั้งหมด

ทำไมอยากทำท่าแรก: เบากว่า ไม่เสียเวลา back-prop ไปทั้งโมเดล ในโค้ดตัวอย่างอาจารย์ถามว่ามีการคำนวณ gradient และอัปเดต weight ไหม คำตอบคือมีเฉพาะที่หัว

สรุปให้จดไว้ 3 รูปแบบ: (1) หยิบโมเดลมาเทรน (CNN หรือ ViT ที่ไม่ใหญ่มาก) จะเทรนแค่หัวหรือทั้งหมดก็ได้ (2) ทางสายกลาง: freeze ตัวใหญ่ที่เก่งแล้วใช้สกัดฟีเจอร์ แล้วเทรนหัวเอง (3) โมเดลใหญ่มากจน zero-shot ได้ เรียก API โยนรูปถามได้เลย

ลองสลับท่า ดูว่า layer ไหนถูกล็อก เทรน หรือสุ่มเริ่มต้น และสัดส่วน weight ที่ต้องอัปเดต

3ทางสายกลาง: โมเดลที่ใหญ่เกินไปจะ fine-tune

สไลด์ DL 81: DINOv3 Meta AI 2025: self-supervised ViT, up to 7B params, 1.7B images
สไลด์ 81ดู "no human labels needed"

DINO มี 7 พันล้านพารามิเตอร์ เทรนไม่ไหว เก่งเพราะเห็น 1.7 พันล้านรูป (Meta มีข้อมูลทั้งโลก) จึง ไม่มีใคร fine-tune แล้ว ใช้ DINO เป็น encoder สกัด embedding แล้วเทรนแค่หัวที่เราต่อเอง

อาจารย์ใบ้ว่า DINO เป็น self-supervised (ไม่ต้องใช้ label ในการ pretrain) ถ้าต้องการเทรนเอง ให้เลือกโมเดลที่เล็กที่สุดในตระกูล (เช่น CNN เล็ก ๆ) ถ้าเงินเยอะ ไม่อยากเทรนก็ใช้ zero-shot ผ่าน API

4โหลด pretrained มาใช้จากไหน

สไลด์ DL 66: Hugging Face (ข่าว NVIDIA ซื้อ Hugging Face)
สไลด์ 66ดูว่า Hugging Face เป็นแหล่งรวมโมเดล

Hugging Face คล้าย GitHub สำหรับโมเดล: เรา publish repo แล้วแชร์ได้ โมเดลก็แชร์เป็นเพจได้ ในโค้ดสมัยใหม่ ไม่ต้องต่อโครงเอง เรียกชื่อโมเดล เช่น EfficientNet ข้างหลังต่อโครงไว้เสร็จแล้ว (วิดีโอ 0:21:36 โค้ดตัวที่สองใช้ pretrained จาก Hugging Face)

อาจารย์ถามเรื่อง weight ที่เลือกว่า pretrain จากข้อมูลอะไร ถ้าเป็น ImageNet ก็เป็นข้อมูลทั่วไป ถ้าโจทย์เราเป็นภาพแพทย์ ควรเลือกโมเดลที่ pretrain มากับข้อมูลทางการแพทย์

ถ้าโหลด weight ที่ pretrain ด้วยข้อมูลแพทย์ มันก็จะเก่งเรื่อง medical data แล้วอาจเอาไป fine-tune ต่อกับข้อมูลของเราอีกที

ไม่ควรเลือกโมเดลจากขนาดอย่างเดียว ต้องดูด้วยว่า pretrain มาจากข้อมูลโดเมนไหน (ย้ำอีกครั้งในบท LLM ที่ MedGemma / WeatherNext)

การบ้านที่อาจารย์สั่ง: อ่านโค้ด self-study 1 และ 2.1/2.2 สรุปส่งใน MyCourseVille ในห้องสอบไม่ออกเขียนโค้ด DL แต่ใช้ในโปรเจกต์ (วิดีโอ 0:23:04)

5ลองทำ

อ่านเพิ่ม / ที่มา

ติดตรงไหน ถาม Claude ได้เลย บอกเลขบทกับเลขข้อมาด้วย