Overfitting กับการแก้ปัญหา
Overfitting คือการที่ Model ที่ได้จากการใช้ Training Data set มีค่าความถูกต้องในการบ่งบอกคลาสเป้าหมายสูง แต่เมื่อนำไปใช้กับข้อมูล Test Data set ได้ค่าความถูกต้องต่ำ หรือ กล่าวอีกนัยหนึ่งคือ ตัวแบบที่ได้เป็นการเรียนรู้ข้อมูลจาก Training Data set ดีมาก แต่ไม่สามารถนำไปใช้กับข้อมูลที่ไม่เคยพบมาก่อนได้ดี โดยการแก้ปัญหา Overfitting ก็คือการลดความซับซ้อนในการปรับ Parameter โดยทุกโหนดจากรูปนั้น มันมีอิทธิพลมากจนเกินไป จึงทำการสุ่มตัดไปอย่างใดอย่างหนึ่ง เพื่อลดความซับซ้อนที่มากเกินไปที่จะก่อให้เกิดการ Overfitting
จากภาพ Under- and Over-fitting example ถ้าลดความซับซ้อนในการปรับค่าน้อยจนเกินไป ก็จะเกิดปัญหา Under-fitting แต่ถ้า ปรับค่าน้อยจนเกินไป ก็จะเกิดปัญหา Over-fitting ดังนั้นในการปรับค่าของ Parameter ควรทำให้เหมาะสม เพื่อให้ได้ Good Compromise
การแก้ปัญหา Overfitting
Data set fasion mnist ซึ่งเป็นชุดข้อมูลที่เก็บรูปภาพ ดังนั้นเพื่อเป็นการลดจำนวนพารามิเตอร์ที่สามารถปรับค่าได้ ให้เหลือน้อยที่สุด ด้วยการ Dropout ที่ใช้ในการแก้ปัญหา Overfitting
Train data เพื่อดูการกระจายตัวของข้อมูลในแต่ละ Class
Test data เพื่อดูการกระจายตัวของข้อมูลในแต่ละ Class
ภาพจากการสุ่มเลือก Train data
ภาพจากการสุ่มเลือก Test data
Label Data และ Normalization Data
แบ่งข้อมูลเป็นส่วนของ train valid และtest
สร้าง model
-ทั้งหมด 32 แผ่น แผ่นละ 3*3
- model.add(MaxPooling2D((2, 2))) เพื่อลดขนาดของภาพให้ขนาดเล็กลง เป็นการ process ภาพไม่ได้อยู่ในส่วนของการทำนาย
- kernel_size=(3, 3), #กำหนดขนาดภาพ
สร้างModel เพื่อทำ Classification
conv2d_37 (Conv2D) >>> 3*3*32+32 = 320
conv2d_38 (Conv2D) >>> 3*3*64*32+64 = 18496
conv2d_42 (Conv2D) >>> 3*3*128*64+128 = 73856
dense_6 (Dense) >>> 1152*128+128 = 147584
dense_7 (Dense) >>> (128*10)+10= 1290
จำนวน parameter ทั้งหมด 320+8496+73856+147584+1290 = 241,546
Train Model
ประสิทธิภาพ Model
จากภาพแสดงให้เห็นว่า ค่า Validation loss อยู่ในภาวะ Overfitting ดังนั้นจะต้องแก้ปัญหานี่ด้วยการ Drop out ข้อมูลบางส่วน เพื่อลดจำนวน Node
นิยาม model ใหม่โดยเพิ่มการ Drop out ในแต่ละขั้น
model.add(MaxPooling2D((2, 2)))
ตัดออก หรือ drop out อยู่ที่ 25%
model.add(MaxPooling2D(pool_size=(2, 2)))
ตัดออก หรือ drop out อยู่ที่ 25%
model.add(Conv2D(128, (3, 3), activation=’relu’))
ตัดออก หรือ drop out อยู่ที่ 40%
model.add(Dense(128, activation=’relu’))
ตัดออก หรือ drop out อยู่ที่ 30%
Train Model
ดูประสิทธิภาพ Model ใหม่ หลัง drop out
ผลที่ได้หลังจากการแก้ปปัญหา overfitting เห็นได้ว่า ค่า Validation loss ลดลงเรื่อยๆ ถึงแม้จะทำให้ค่า Accuracy ลดลงก็ตาม