1. Convolutional Neural Network คืออะไร
Convolutional Neural Network (CNN) หรือ โครงข่ายประสาทแบบคอนโวลูชัน เป็นโครงข่ายประสาทเทียมหนึ่งในกลุ่ม bio-inspired โดยที่ CNN จะจำลองการมองเห็นของมนุษย์ที่มองพื้นที่เป็นที่ย่อยๆ และนำกลุ่มของพื้นที่ย่อยๆมาผสานกัน เพื่อดูว่าสิ่งที่เห็นอยู่เป็นอะไรกันแน่การมองพื้นที่ย่อยของมนุษย์จะมีการแยกคุณลักษณะ (feature) ของพื้นที่ย่อยนั้น เช่น ลายเส้น และการตัดกันของสี ซึ่งการที่มนุษย์รู้ว่าพื้นที่ตรงนี้เป็นเส้นตรงหรือสีตัดกัน เพราะมนุษย์ดูทั้งจุดที่สนใจและบริเวณรอบ ๆ ประกอบกัน
Source: https://adeshpande3.github.io/A-Beginner%27s-Guide-To-Understanding-Convolutional-Neural-Networks/ |
ถ้าเราเปรียบว่ากรอบสีเหลี่ยมสีเหลืองนั้น คือพื้นที่ที่มนุษย์กำลังให้ความสนใจอยู่ แต่เราสามารถรับรู้ได้ว่าสิ่งนี้คือหนู เพราะเรากวาดสายตามองรอบๆ
2. Feature Extraction
แนวคิดของ CNN นั้นค่อนข้างเป็นแนวคิดที่ดีมาก แต่สิ่งที่ซับซ้อนของมันคือระบบการคำนวณที่สอดคล้องกับ Concept ของมันเองและต้องมีคณิตศาสตร์มารองรับ โดยการคำนวณตามแนวคิดนี้ใช้หลักการเดียวกันกับ คอนโวลูชันเชิงพื้นที่ (Spatial Convolution) ในการทำงานด้าน Image Processingการคำนวณนี้จะเริ่มจากการกำหนดค่าใน ตัวกรอง (filter) หรือ เคอร์เนล (kernel) ที่ช่วยดึงคุณลักษณะที่ใช้ในการรู้จำวัตถุออก โดยปกติตัวกรอง/เคอร์เนลอันหนึ่งจะดึงคุณลักษณะที่สนใจออกมาได้หนึ่งอย่าง เราจึงจำเป็นต้องตัวกรองหลายตัวกรองด้วย เพื่อหาคุณลักษณะทางพื้นที่หลายอย่างประกอบกัน
2.1 ลักษณะของ Filter
สำหรับ Filter ของภาพดิจิทัลนั้น โดยปกติแล้วจะเป็นตารางสองมิติที่มีขนาดตามพื้นที่ย่อยๆที่เราอยากพิจารณา สมมุติว่าถ้าเราต้องการหาเส้นตรงทะแยงสีขาว ตัวกรองของเราอาจจะอยู่ในลักษณะนี้ตัวกรอง 3x3 สำหรับหาเส้นตรงทะแยงสีขาว |
ซ้าย: filter เลื่อนไปบน input. ขวา: ผลลัพธ์การคำนวณซึ่งออกมาเป็น Feature map. Source: https://towardsdatascience.com/applied-deep-learning-part-4-convolutional-neural-networks-584bc134c1e2 |
2.2) Stride และ Padding
Stride เป็นตัวกำหนดว่าเราจะเลื่อนตัวกรอง (filter) ไปด้วย Step เท่าไร (ตัวอย่างด้านล่างกำหนด Stride เท่ากับ 1)เราสามารถกำหนดค่าของ Stride ให้มากขึ้นก็ได้ ถ้าเราต้องการให้การคำนวนหาคุณลักษณะมีพื้นที่ทับซ้อนกันน้อยขึ้น แต่อย่างไรก็ตามการกำหนดค่าของ Stride ที่มากขึ้นจะทำให้เราได้ผังคุณลักษณะ (feature map) ที่มีขนาดเล็กลง
Padding จากรูปด้านล่างเราจะพื้นที่สีเทารอบๆ Input พื้นที่เหล่านี้เป็นพื้นที่ที่เรามักเติมเข้าไป โดยอาจจะเป็นเติม 0 หรือค่าต่างๆเข้าไป เพื่อให้เวลาในการทำ CNN นั้น Feature Map ที่ได้ยังคงมีขนาดเท่ากับ Input
แล้วเราทำ Padding เพื่ออะไร ?
ในบางปัญหา Input ที่อยู่ตามขอบภาพอาจมีความสำคัญที่ส่งผลต่อการตัดสินใจบางอย่าง เราจึงจำเป็นต้องเก็บคุณลักษณะตามขอบของรูปภาพไว้ด้วย2.3 Max Pooling
ก่อนอื่นเรามองลองดูหนึ่งในปัญหาของการทำ CNN กันก่อน สมมติเราใช้ CNN ด้วยขนาดตัวกรอง 3x3 พิกเซล แต่เรารู้ดีว่าเวลาเรามองภาพแล้วเราตอบได้ว่ามันคืออะไร เพราะเรามองไปในบริเวณที่กว้างกว่านั้นSource: http://202.143.144.83/~skb/computor/ganjana/east_china_data.htm |
มนุษย์เราจำแนกวัตถุ โดยอาศัยทั้งการดูที่รายละเอียดเล็ก ๆ และการดูแบบคร่าวๆ บนพื้นที่ใหญ่ ลองสังเกตการจำแนกแมวในภาพสองภาพนี้
ในภาพบนแม้จะมีแมวหลายตัว แต่เราแยกแมวพวกนี้ออกจากกันได้ง่ายๆ ด้วยการดูสีหรือพื้นที่ใหญ่ๆ บนตัวแมว ในขณะที่แมวทางภาพล่างสองตัวนี้เรากลับ ต้องลงไปดูรายละเอียดเล็กๆ เช่นตาและจมูก เพื่อแยกให้ออกว่ามีแมวกี่ตัว
Multiscale Analysis จากปัญหาด้านบนเราจะเห็นว่าเป็นไปได้ยากมากหากเราต้องอาศัยข้อมูลที่หยาบหรือละเอียดอย่างใดอย่างหนึ่งในการจำแนกวัตถุ ดังนั้นในการฝึกเครื่องเราจึงจะเป็นต้องมีข้อมูลทั้งหยาบและละเอียดควบคู่กันไป
ตอนนี้เรารู้แล้วว่าเราจำเป็นต้องคำนวณภาพในหลายสเกล แต่ปัญหาที่สำคัญคือเราจะทำให้การคำนวณอยู่ในรูปหลายสเกลได้อย่างไร หากเราใช้ตัวกรองขนาด 3x3 เรากำลังจะจัดการกับรายละเอียดเล็กๆ (ภาพใหญ่มีรายละเอียดมาก จึงถือว่าเป็นสเกลละเอียด) แต่ด้วยตัวกรองขนาดเท่าเดิม หากทำกับภาพที่ขนาดเล็กลงแล้ว มันจะครอบคลุมพื้นที่วัตถุเดิมมากขึ้น ดังนั้นถ้าโครงข่ายเราควรจะต้องมีการย่อรูปประกอบด้วย เราก็จะสามารถเข้าถึงความสามารถด้านการวิเคราะห์หลายความละเอียดได้
Pooling คือความสามารถในการย่อรูปแบบหนึ่ง ซึ่งมีสองประเภทหลักที่นิยมกันคือ max pooling และ mean pooling
Max Pooling เป็นตัวกรองแบบหนึ่งที่หาค่าสูงสุดในบริเวณที่ตัวกรองทาบอยู่มาเป็นผลลัพธ์ โดยเราจะเตรียมตัวกรองในลักษณะเดียวกับการทำ Feature Extraction ของ CNN มาทาบบนข้อมูลแล้วเลือกค่าที่สูงที่สุดบนตัวกรองนั้นมาเป็นผลลัพธ์ใหม่ และจะเลื่อนตัวกรองไปตาม Stride ที่กำหนดไว้ โดยขนาดตัวกรองของการทำ max pooling จะนิยมเรียกกันว่า pool size
ทำไมเราจึงไม่เลือกการตัดพิกเซล แทนการทำ Max pooling ละ ?
คำตอบคือการตัดพิกเซลมันจะได้เฉพาะเรื่องการเปลี่ยนขนาดภาพ แต่ที่เราต้องการคือการเก็บคุณลักษณะเด่นที่ตัวกรอง CNN ที่ทำไว้ใช้ต่อไป ถ้าตัดออกไปเฉย ๆ โดยไม่มีการคัดสรร เราอาจจะได้ค่าคุณลักษณะที่เหลืออยู่ในผลลัพธ์ที่ไม่สะท้อนถึงลักษณะที่สำคัญในภาพ แต่ถ้าเราใช้ Max Pooling ค่าคุณลักษณะที่เด่นที่สุดจะถูกเก็บไว้คำนวณต่อสรุป Keywords
- Convolutional Neural Network (CNN) = จำลองการมองเห็นของมนุษย์ที่มองพื้นที่เป็นที่ย่อยๆ และนำกลุ่มของพื้นที่ย่อยๆมาผสานกัน เพื่อดูว่าสิ่งที่เห็นอยู่เป็นอะไรกันแน่
- Feature = คุณลักษณะของพื้นที่ย่อยนั้น เช่น ลายเส้น และการตัดกันของสี
- Filter หรือ Kernel = ตาราง 2 มิติ ที่เอาไปทาบเพื่อดึงคุณลักษณะที่สนใจออกมาได้หนึ่งอย่าง
- Anchor = ตำแหน่งตรงกลางใน filter
- Feature Map = ตาราง 2 มิติที่เกิดจากเลื่อนตัวกรองไปเรื่อยๆจนครบทุกพิกเซลที่สามารถเลื่อนได้ในภาพ
- Stride = เป็นตัวกำหนดว่าเราจะเลื่อน filter ไปด้วย step เท่าไร การกำหนดค่าของ stride ที่มากขึ้นจะทำให้เราได้ feature map ที่มีขนาดเล็กลง
- Padding = พื้นที่ที่เราเติมขยายกรอบออกไป อาจจะเติม 0 เพื่อให้เลื่อน filter ครบแล้ว feature map มีขนาดเท่าเดิม เพราะบางรูป วัตถุที่ต้องการเก็บคุณลักษณะอยู่ติดขอบ
- Pooling = ความสามารถในการย่อรูปแบบหนึ่ง
- Max Pooling = เป็น filter แบบหนึ่งที่หาค่าสูงสุดในบริเวณที่ filter ทาบอยู่มาเป็นผลลัพธ์
Sign up here with your email
ConversionConversion EmoticonEmoticon