เข้าใจแต่ละบทได้ใน สิบ บรร ทัด!

Manusaporn Treerungroj
Jan 30 · 5 min read

หนังสือ Machine Learning Yearning เขียนโดยอ. Andrew Ng เป็นหนังสือที่น่าสนใจ ประกอบไปด้วยเทคนิคต่างๆ ที่สาย data ควรรู้ วันนี้เราเลยมาสรุปสั้นๆ ให้อ่านกัน บทละไม่เกิน 10 บรรทัดจริงจริ๊ง! (ตั้งใจสรุปมากๆ ฮ่าๆ) 😝

หวังว่าจะช่วยให้ชาวนู๊บทุกคนย่อยหนังสือเล่มนี้ได้ง่าย และประหยัดเวลาขึ้นนะฮับ ปล. อ่านจบ = 1 ใน 5 ของหนังสือละนะ! 💁🏻

#1 — Why machine learning strategy

ในการทำ machine learning application สิ่งสำคัญที่เราต้องการคือ rapid progress ซึ่งหนังสือเล่มนี้แนะนำแนวทางต่างๆ ที่จำเป็น เช่น ถ้าเราสร้าง neural network model เพื่อจำแนกรูปแมว แต่ accuracy ยังไม่ดีพอ เราจะทำยังไงได้บ้าง?

รูปจากหนังสือ Machine Learning Yearning, Andrew Ng
  • เพิ่มจำนวน training data
  • เพิ่ม training data ที่หลากหลาย เช่น แมวในมุม, สีสัน, ท่าทาง ที่แตกต่างกัน
  • train model ให้นานขึ้น จำนวนรอบมากขึ้น
  • เพิ่ม/ลดขนาด neural network (จำนวน layer, hidden unit, parameter)
  • เพิ่ม regularization เช่น L2 regularization
  • เปลี่ยน architecture ของโมเดล เช่น activation function, จำนวน hidden unit

นอกจากนี้ก็ยังมีวิธีอื่นที่ทำให้ model มีประสิทธิภาพดีขึ้น ไว้จะพูดถึงในบทต่อๆ ไป

#2 — How to use this book to help your team

ถ้าเราเข้าใจ แต่เพื่อนร่วมทีมไม่เข้าใจ ก็อาจคุยกันไม่รู้เรื่อง ถ้าอยากให้เข้าใจตรงกัน ง่ายๆ เลย ก็ให้เอา chapter ของหนังสือนี้ให้เพื่อนอ่านเลยสิ! 🤷🏻‍♀️ เลยเป็นเหตุผลว่าทำไมถึงเขียนแต่ละ chapter สั้นๆ ให้อ่านง่ายๆ

#3 — Prerequisites and notation

อย่างน้อยขอให้เข้าใจ supervised learning ก่อน ซึ่ง keyword สำคัญๆ ได้แก่ linear regression, logistic regression และ neural network

หนังสือเล่มนี้เขียนโดยอ. Andrew Ng ซึ่งอ. มีสอนคอร์สออนไลน์ machine learning บน Coursera ด้วย

#4 — Scale drives machine learning progress

ไอเดีย neural network มีมานานเป็นสิบๆ ปีแล้ว แต่พึ่งมาทำได้จริงตอนนี้เพราะ 2 ตัวแปรสำคัญ คือ

  • Data availability ยุคดิจิตอลทำให้เกิดข้อมูลจำนวนมากขึ้น
  • Computational scale กำลังของคอมพิวเตอร์ในการประมวลผล network และ dataset ที่ใหญ่
(i), (ii), (iii) รูปจากหนังสือ Machine Learning Yearning, Andrew Ng

(i) เมื่อก่อนใช้ algorithm ทั่วไป perf ของโมเดลจะได้อยู่ประมาณนึง เพราะโมเดลมันตันแค่นั้น ให้ข้อมูลเยอะก็ไม่รู้จะจัดการกับข้อมูลยังไง

(ii) ถ้าเอาข้อมูลพวกนั้นไป train บน neural network แม้จะขนาดเล็ก (hidden unit, layer, parameter น้อยๆ) ก็ยังได้ perf ที่ดีกว่าแบบแรก

(iii) ยิ่ง network ใหญ่ขึ้น + จำนวนข้อมูลมากขึ้น ก็ยิ่งได้ perf ดีขึ้น (จริงๆ มีตัวแปรอื่นอีกนะ ไว้พูดเรื่อยๆ)


บทแรกๆ ของหนังสือเกริ่นไว้แค่นี้ ต่อไปจะเข้าสู่เรื่อง Setting up development and test sets ตั้งแต่บทที่ 5–12 (จนจบบทความนี้เลย)

#5 — Your development and test set

ปกติเราจะแบ่งข้อมูลเป็น 3 ส่วน

ตัวอย่างการแบ่งข้อมูลออกเป็น 3 ส่วน (80–10–10%)
  1. training set ไว้ให้โมเดลเรียนรู้
  2. development/validation set ไว้ tune parameter ต่างๆ ให้โมเดลเก่งขึ้น
  3. test set ไว้วัดผลโมเดลตอนจบ (ไม่ใช้ระหว่าง train นะ)

หลักในการเลือกข้อมูล คือ

  • เลือกข้อมูลที่ represent ข้อมูลทั้งหมดได้
  • ข้อมูลทั้ง 3 ส่วนควรมี distribution แบบเดียวกัน (พูดถึงในบทถัดไป)
  • แบ่งข้อมูลเป็น 3 ส่วนได้หลายแบบ ปกติจะ 70/15/15% หรือ 80/10/10% แต่ถ้าข้อมูลเยอะมากๆ หลักแสน-ล้าน จำนวน test set เยอะก็ไม่มีประโยชน์

#6 —Your dev and test sets should come from the same distribution

distribution คือยังไง? 🤔 สมมติว่า training กับ dev set เป็นรูปชัดๆ ที่เซฟมาจากเน็ตเพื่อเอามา train โมเดล แต่พอเจอ test set หรือตอนเอาโมเดลไปใช้จริง ดันเป็นรูปที่ user อัพโหลดเอง รูปก็จะต่างกัน เช่น ความละเอียดต่ำกว่า แสงน้อยกว่า แบบนี้เรียกว่า distribution ของข้อมูลต่างกัน

ตัวอย่างข้อมูล training, dev set กับ test set ที่มี distribution ต่างกัน

ถ้าใช้ข้อมูลที่ distribution ต่างกัน สิ่งที่จะตามมาคือ

  • โมเดล overfit กับ dev set
  • โมเดลอาจทำได้ดีแล้ว แต่ดันเจอ test set ที่ยากกว่า dev set จึงทำนายผิด
  • test set ไม่ได้ยากกว่า dev set เพียงแค่มันแตกต่างกัน ดังนั้น สิ่งที่เราทำทั้งหมดเพื่อ improve โมเดลบน dev set อาจเสียแรงเปล่า

#7 — How large do the dev/test sets need to be?

dev set ควรใหญ่มากพอที่จะทำให้เห็นความแตกต่างของ algorithm ที่ใช้ทดลอง (แม้จะต่างนิดเดียว) เช่น ถ้า algorithm A กับ algorithm B มี accuracy ต่างกัน 0.1% การใช้ dev set จำนวนน้อยๆ (เช่น 100 รูป) อาจไม่พอทำให้เห็นความต่าง 0.1% นั้น

ส่วน test set ควรใหญ่มากพอที่ทำให้วัดประสิทธิภาพของโมเดลได้อย่างมั่นใจ เมื่อก่อนจะใช้ test set ประมาณ 30% ของข้อมูลทั้งหมด แต่ช่วงหลังข้อมูลมีเยอะมาก หลักแสน-ล้าน การมีจำนวน test set เยอะมากๆ ไม่ได้ช่วยให้วัดประสิทธิภาพได้ดีขึ้น

#8 —Establish a single-number evaluation metric for your team to optimize

ค่า accuracy ที่ใช้วัดประสิทธิภาพโมเดล เป็นตัวอย่างนึงของตัววัดผลแบบ single-number เพราะเป็นการวัดโดยใช้ค่าเดียว ในขณะเดียวกัน ถ้าเราใช้ตัววัดผล precision กับ recall คู่กัน แบบนี้จะไม่เรียกว่า single-number

รูปจากหนังสือ Machine Learning Yearning, Andrew Ng

เพราะในการตัดสินใจว่าโมเดล A หรือ B ตัวไหนดีกว่ากัน ถ้าต้องพิจารณามากกว่า 1 ค่า จะทำให้เปรียบเทียบและตัดสินใจได้ยากกว่า เลยแนะนำให้หาทางรวมค่าพวกนั้นให้เป็นค่าๆ เดียวจะดีกว่า

เช่น ถ้าอยากดูค่า precision กับ recall จริงๆ ก็แนะนำให้ใช้ค่า F1 score แทน

รูปจากหนังสือ Machine Learning Yearning, Andrew Ng

#9 —Optimizing and satisficing metrics

ค่าที่เราเอามาวัดผลก็มีหลากหลาย ไม่เฉพาะค่าที่เป็น % เช่นค่า running time คือเวลาที่ใช้รันยิ่งน้อยยิ่งดี

รูปจากหนังสือ Machine Learning Yearning, Andrew Ng

ถ้าเราสร้างสูตรขึ้นมาเพื่อรวมค่า accuracy กับ running time แบบนี้

accuracy - 0.5*running_time

ก็คงจะแปลกๆ เพราะมันไม่ใช่ค่าที่จะเอามาเทียบใส่สมการกันตรงๆ

วิธีที่ดีคือ เราควรมอง running time เป็น satisficing metric ว่ารับได้ที่ค่าเท่าไหร่ เช่น ไม่เกิน 100ms ก็โอเคแล้ว และมอง accuracy เป็น optimizing metric คือค่าที่เราต้อง improve จะทำให้เราโฟกัสได้ดีขึ้น

#10 — Having a dev set and metric speeds up iterations

รูปจากหนังสือ Machine Learning Yearning, Andrew Ng

อันนี้คือ circle เวลาเราทำจริง เริ่มจาก (1) คิดไอเดียขึ้นมา (2) เอาไป code จริง (3) ดูผลว่าไอเดียเวิร์คมั้ย แล้วก็คิด/ปรับไอเดียใหม่

ถ้าทำแต่ละ iteration ได้เร็ว ก็จะเสร็จ process ได้เร็ว ดังนั้นการมี metric ที่ช่วยวัดผล experiment จึงสำคัญ

ลองคิดว่าเราทำ image classifier โดยไม่มี metric ใดๆ แล้วทำแอพขึ้นมาทดสอบอัพรูปเอง นับจำนวนถูกผิดเอง ก็จะเสียเวลาในขั้นวัดผล experiment โดยไม่จำเป็น

#11 —When to change dev/test sets and metrics

ปกติ dev/test และ metric จะถูกตั้งขึ้นตั้งแต่วีคแรกที่เริ่มทำโปรเจ็ค ทำไปซักระยะอาจเกิดเหตุการณ์ classifier A วัดผลออกมาดีกว่า classifier B แต่รู้สึกว่า classifier B เอาไปใช้จริงได้ดีกว่า ถ้างี้เราควรเริ่มพิจารณาเปลี่ยน dev/test set หรือ metric ได้แล้ว

source

ซึ่งสาเหตุที่ทำให้วัดผล classifier A ออกมาดีกว่ามี 3 อย่าง คือ

  1. distribution ของข้อมูลจริงที่จะเจอ ต่างจาก dev/test set
  2. โมเดลอาจจะ overfit บน dev set ไปแล้ว เลยวัดผลออกมาได้ดี
  3. metric ไม่ได้วัดในสิ่งที่เราต้องการจะวัดเพื่อไป optimize โมเดล

ซึ่งการเปลี่ยน dev/test set ระหว่างที่ทำ เป็นเรื่องปกติที่เกิดขึ้นได้

#12 —Takeaways: Setting up development and test sets

จบแล้ววว พาร์ทการจัดการข้อมูล training, dev และ test set สรุปได้ดังนี้จ้า

  • เลือก dev set กับ test set ที่เป็นตัวแทนของข้อมูลที่จะเจอจริงๆ และอยู่บน distribution เดียวกัน
  • เลือก metric แบบ single-number ถ้ามีมากกว่า 1 metric ให้หาทางรวมเข้าด้วยกัน หรือกำหนดเป็น satisficing กับ optimizing metric
  • ML เป็นการทำ process หลายๆ iteration จนกว่าจะได้อันที่พอใจ ซึ่ง 2 ข้อบนทำให้แต่ละ iteration ใช้เวลาน้อยลง
  • ตอนเริ่มโปรเจ็ค ควรตั้ง dev/test set กับ metric ให้ได้เร็วๆ เช่น ภายใน1 อาทิตย์
  • กฏ 70%/30% ที่ใช้แบ่งข้อมูลอาจไม่จำเป็นละ ถ้าเรามีข้อมูลเยอะมากๆ
  • dev set ควรใหญ่พอที่จะทำให้เห็นความแตกต่างของ algorithm ที่ใช้ทดลอง และ test set ควรใหญ่มากพอที่ทำให้วัดประสิทธิภาพของโมเดลได้อย่างมั่นใจ
  • สุดท้ายถ้า dev set กับ metric พาเราไปผิดทาง ก็เปลี่ยนมันซะ!

Noob talk

จบแล้วค่ะสำหรับพาร์ทแรก เป็นยังไงกันบ้าง จับได้เปล่าว่าบทไหนเกิน 10 บรรทัดบ้าง? 😝 ตรงไหนมึนๆ ใจเย็นๆ ค่อยๆ อ่านนะคะ มีแอบ ref บางคำศัพท์ไว้ให้ด้วย

ถ้าใครอยากอ่านหนังสือฉบับเต็มๆ ของอ. Andrew ไปตำกันได้เลยนะะ 👇🏻👇🏻

ไว้เจอกับพาร์ท Basic Error Analysis ในบทความต่อไปนะค้า~

Noob Learning

It’s good to be noob so we can learn and have fun ;)

Manusaporn Treerungroj

Written by

Noob Learning

It’s good to be noob so we can learn and have fun ;)

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade