Convolutional Neural Network (CNN) คืออะไร

คัดลอกจาก : บทความต้นทาง โดย Natthawat P.

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 สำหรับหาเส้นตรงทะแยงสีขาว
ตำแหน่งตรงกลางที่มีกรอบสีฟ้าคือ Anchor ที่เอาไว้ทาบบนพิกเซลของภาพข้อมูลเข้า ตัวกรองจะถูกทาบลงในพิกเซลแรกของภาพข้อมูลเข้า จากนั้นจะถูกเลื่อนไปทาบบนพิกเซลอื่นในภาพทีละพิกเซลจนครบทุกพิกเซลในภาพ เราอาจจะไม่ทาบตัวกรองบนพิกเซลที่อยู่ใกล้กรอบภาพ เพราะตัวกรองจะล้นออกไปนอกภาพ เมื่อเราเลื่อนตัวกรองไปเรื่อยๆจนครบทุกพิกเซลที่สามารถเลื่อนได้ในภาพ สิ่งที่เราได้นั้นจะเป็นสิ่งที่เรียกว่า ผังคุณลักษณะ (feature map)
ซ้าย: 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
จากภาพ จะเห็นว่าต่อให้รูปภาพมีขนาดสเกลที่เล็กลง แต่เราก็ยังสามารถมองออกว่ามันคือเครื่องปั้นดินเผา แสดงว่า เราจำแนกวัตถุชิ้นนี้ที่ความละเอียดต่ำลง แต่เรากำลังทำ CNN ที่ความละเอียดสูง

มนุษย์เราจำแนกวัตถุ โดยอาศัยทั้งการดูที่รายละเอียดเล็ก ๆ และการดูแบบคร่าวๆ บนพื้นที่ใหญ่ ลองสังเกตการจำแนกแมวในภาพสองภาพนี้

ในภาพบนแม้จะมีแมวหลายตัว แต่เราแยกแมวพวกนี้ออกจากกันได้ง่ายๆ ด้วยการดูสีหรือพื้นที่ใหญ่ๆ บนตัวแมว ในขณะที่แมวทางภาพล่างสองตัวนี้เรากลับ ต้องลงไปดูรายละเอียดเล็กๆ เช่นตาและจมูก เพื่อแยกให้ออกว่ามีแมวกี่ตัว

Multiscale Analysis จากปัญหาด้านบนเราจะเห็นว่าเป็นไปได้ยากมากหากเราต้องอาศัยข้อมูลที่หยาบหรือละเอียดอย่างใดอย่างหนึ่งในการจำแนกวัตถุ ดังนั้นในการฝึกเครื่องเราจึงจะเป็นต้องมีข้อมูลทั้งหยาบและละเอียดควบคู่กันไป

ตอนนี้เรารู้แล้วว่าเราจำเป็นต้องคำนวณภาพในหลายสเกล แต่ปัญหาที่สำคัญคือเราจะทำให้การคำนวณอยู่ในรูปหลายสเกลได้อย่างไร หากเราใช้ตัวกรองขนาด 3x3 เรากำลังจะจัดการกับรายละเอียดเล็กๆ (ภาพใหญ่มีรายละเอียดมาก จึงถือว่าเป็นสเกลละเอียด) แต่ด้วยตัวกรองขนาดเท่าเดิม หากทำกับภาพที่ขนาดเล็กลงแล้ว มันจะครอบคลุมพื้นที่วัตถุเดิมมากขึ้น ดังนั้นถ้าโครงข่ายเราควรจะต้องมีการย่อรูปประกอบด้วย เราก็จะสามารถเข้าถึงความสามารถด้านการวิเคราะห์หลายความละเอียดได้

Pooling คือความสามารถในการย่อรูปแบบหนึ่ง ซึ่งมีสองประเภทหลักที่นิยมกันคือ max pooling และ mean pooling

Max Pooling เป็นตัวกรองแบบหนึ่งที่หาค่าสูงสุดในบริเวณที่ตัวกรองทาบอยู่มาเป็นผลลัพธ์ โดยเราจะเตรียมตัวกรองในลักษณะเดียวกับการทำ Feature Extraction ของ CNN มาทาบบนข้อมูลแล้วเลือกค่าที่สูงที่สุดบนตัวกรองนั้นมาเป็นผลลัพธ์ใหม่ และจะเลื่อนตัวกรองไปตาม Stride ที่กำหนดไว้ โดยขนาดตัวกรองของการทำ max pooling จะนิยมเรียกกันว่า pool size



ทำไมเราจึงไม่เลือกการตัดพิกเซล แทนการทำ Max pooling ละ ?

คำตอบคือการตัดพิกเซลมันจะได้เฉพาะเรื่องการเปลี่ยนขนาดภาพ แต่ที่เราต้องการคือการเก็บคุณลักษณะเด่นที่ตัวกรอง CNN ที่ทำไว้ใช้ต่อไป ถ้าตัดออกไปเฉย ๆ โดยไม่มีการคัดสรร เราอาจจะได้ค่าคุณลักษณะที่เหลืออยู่ในผลลัพธ์ที่ไม่สะท้อนถึงลักษณะที่สำคัญในภาพ แต่ถ้าเราใช้ Max Pooling ค่าคุณลักษณะที่เด่นที่สุดจะถูกเก็บไว้คำนวณต่อ

สรุป Keywords

  1. Convolutional Neural Network (CNN) = จำลองการมองเห็นของมนุษย์ที่มองพื้นที่เป็นที่ย่อยๆ และนำกลุ่มของพื้นที่ย่อยๆมาผสานกัน เพื่อดูว่าสิ่งที่เห็นอยู่เป็นอะไรกันแน่
  2. Feature = คุณลักษณะของพื้นที่ย่อยนั้น เช่น ลายเส้น และการตัดกันของสี
  3. Filter หรือ Kernel = ตาราง 2 มิติ ที่เอาไปทาบเพื่อดึงคุณลักษณะที่สนใจออกมาได้หนึ่งอย่าง
  4. Anchor = ตำแหน่งตรงกลางใน filter 
  5. Feature Map = ตาราง 2 มิติที่เกิดจากเลื่อนตัวกรองไปเรื่อยๆจนครบทุกพิกเซลที่สามารถเลื่อนได้ในภาพ
  6. Stride = เป็นตัวกำหนดว่าเราจะเลื่อน filter ไปด้วย step เท่าไร การกำหนดค่าของ stride ที่มากขึ้นจะทำให้เราได้ feature map ที่มีขนาดเล็กลง
  7. Padding = พื้นที่ที่เราเติมขยายกรอบออกไป อาจจะเติม 0 เพื่อให้เลื่อน filter ครบแล้ว feature map มีขนาดเท่าเดิม เพราะบางรูป วัตถุที่ต้องการเก็บคุณลักษณะอยู่ติดขอบ
  8. Pooling = ความสามารถในการย่อรูปแบบหนึ่ง
  9. Max Pooling = เป็น filter แบบหนึ่งที่หาค่าสูงสุดในบริเวณที่ filter ทาบอยู่มาเป็นผลลัพธ์


Previous
Next Post »