โครงข่ายประสาทเทียมแบบคอนโวลูชัน หรือ CNN คือโครงข่ายประสาทเทียมที่มองหารูปแบบเล็ก ๆ ในบริเวณใกล้เคียง แล้วค่อยรวมรูปแบบเหล่านั้นให้กลายเป็นรูปแบบที่ใหญ่ขึ้น ในงานภาพ เลเยอร์แรก ๆ มักตรวจจับขอบหรือมุม เลเยอร์กลาง ๆ ตรวจจับพื้นผิวหรือส่วนประกอบ และเลเยอร์ที่ลึกกว่าจะใช้สัญญาณเหล่านั้นเพื่อช่วยในการทำนายขั้นสุดท้าย
แนวคิดสำคัญคือการใช้ค่าน้ำหนักร่วมกัน แทนที่จะเรียนรู้น้ำหนักแยกสำหรับทุกคู่ของตำแหน่งพิกเซล CNN จะนำตัวกรองขนาดเล็กชุดเดิมไปใช้ซ้ำในหลายตำแหน่ง วิธีนี้ทำให้ต้นทุนต่ำกว่า dense layer ที่ทำงานกับภาพดิบมาก และช่วยให้ตรวจจับรูปแบบชนิดเดียวกันได้ในหลายตำแหน่ง
โครงข่ายประสาทเทียมแบบคอนโวลูชันทำอะไร
ใน fully connected layer เอาต์พุตแต่ละตัวอาจขึ้นกับค่าอินพุตทุกค่าพร้อมกัน แต่ CNN มีโครงสร้างมากกว่า มันใช้เคอร์เนลขนาดเล็ก ซึ่งมักเรียกว่า filter เพื่อมองทีละบริเวณย่อยเฉพาะที่
สำหรับอินพุตช่องสัญญาณเดียว และเคอร์เนลขนาด ตัวหนึ่ง ค่าเอาต์พุตหนึ่งตำแหน่งเขียนได้เป็น
นี่คือแนวคิดเรื่องผลรวมถ่วงน้ำหนักเฉพาะบริเวณที่อยู่เบื้องหลัง convolutional layer ในไลบรารี machine learning หลายตัว การคำนวณที่นำไปใช้จริงในเชิงเทคนิคคือ cross-correlation มากกว่าคอนโวลูชันทางคณิตศาสตร์แบบกลับด้าน แต่สัญชาตญาณในการใช้งานเหมือนกัน คือเคอร์เนลจะเลื่อนไปทั่วอินพุตและสร้าง feature map ออกมา
feature map บอกให้รู้ว่ารูปแบบที่เรียนรู้ได้นั้นปรากฏเด่นชัดตรงไหนบ้าง
ทำไมการใช้ตัวกรองร่วมกันจึงช่วยได้
ถ้าขอบแนวตั้งแบบเดียวกันปรากฏใกล้มุมซ้ายบนของภาพหรือใกล้กึ่งกลางภาพ โดยทั่วไปเราก็อยากให้โมเดลสังเกตเห็นได้เหมือนกัน CNN รองรับสิ่งนี้ด้วยการใช้พารามิเตอร์ของตัวกรองชุดเดิมซ้ำในหลายตำแหน่ง
สิ่งนี้มีผลในทางปฏิบัติ 2 อย่าง:
- ลดจำนวนพารามิเตอร์ที่ต้องเรียนรู้เมื่อเทียบกับ dense layer ที่ใช้กับภาพดิบ
- กระตุ้นให้โครงข่ายตรวจจับรูปแบบเฉพาะบริเวณที่เกิดซ้ำ แทนที่จะจดจำเพียงตำแหน่งคงที่ตำแหน่งเดียว
การใช้ซ้ำนี้เป็นหนึ่งในเหตุผลที่ทำให้ CNN มีประสิทธิภาพกับงานด้านภาพ
สถาปัตยกรรม CNN พื้นฐานมีหน้าตาอย่างไร
CNN พื้นฐานมักมีรูปแบบดังนี้:
- convolution layer
- activation เช่น ReLU
- pooling หรือ downsampling แบบเลือกใช้
- convolution block เพิ่มเติม
- final prediction layer
เลเยอร์แรก ๆ มักจับโครงสร้างเฉพาะบริเวณที่เรียบง่าย ส่วนเลเยอร์ที่ลึกกว่าจะรวมการตอบสนองเหล่านั้นให้เป็นคุณลักษณะที่ใหญ่ขึ้นและเฉพาะกับงานมากขึ้น
pooling ไม่ใช่สิ่งจำเป็นเสมอไป แต่เมื่อใช้ มันจะย่อมิติเชิงพื้นที่ลงเพื่อให้เลเยอร์ถัดไปทำงานกับตัวแทนข้อมูลที่กะทัดรัดขึ้น ตัวอย่างที่พบบ่อยคือ max pooling ซึ่งเก็บค่าที่มากที่สุดไว้ในแต่ละบริเวณย่อย
ถ้า stride เท่ากับ และ padding เท่ากับ อินพุตขนาด ที่ใช้เคอร์เนลขนาด จะให้เอาต์พุตขนาด กฎเรื่องขนาดนี้มีประโยชน์มากเวลาตรวจสอบว่าตัวอย่างคำนวณสมเหตุสมผลหรือไม่
ตัวอย่างคำนวณ: feature map ของ CNN ถูกสร้างอย่างไร
พิจารณาภาพอินพุตขนาด นี้:
ใช้เคอร์เนลขนาด นี้:
สมมติว่า stride เป็น และไม่มี padding เนื่องจากอินพุตมีขนาด และเคอร์เนลมีขนาด เอาต์พุตจึงต้องมีขนาด ค่าเอาต์พุตแต่ละตำแหน่งคือผลรวมของบริเวณย่อยขนาด หนึ่งบริเวณ เพราะทุกค่าของเคอร์เนลเท่ากับ
ค่าเอาต์พุตมุมซ้ายบนคือ
บริเวณย่อยที่เลื่อนไปทางขวาหนึ่งก้าวคือ
ดังนั้น
เมื่อคำนวณครบทุกตำแหน่งที่เป็นไปได้ จะได้
เอาต์พุตนี้คือ feature map ค่าที่มากแสดงว่าตำแหน่งนั้นเป็นจุดที่เคอร์เนลพบรูปแบบที่ตรงกันอย่างชัดเจน ในที่นี้ตัวกรองตอบสนองแรงที่สุดตรงบริเวณที่มีบล็อกสว่างขนาด ครบพอดี
ถ้าตอนนี้ใช้ ReLU จะไม่มีอะไรเปลี่ยน เพราะทุกค่าไม่ติดลบอยู่แล้ว และถ้าต่อด้วย max pooling ที่มี stride เท่ากับ เอาต์พุตหลัง pooling จะเป็น
สิ่งนี้ไม่ได้สร้างข้อมูลใหม่ มันเพียงเก็บการตอบสนองที่แรงที่สุดในบริเวณใกล้เคียงและลดขนาดกริดเชิงพื้นที่ลง
ตัวอย่างนี้เรียบง่าย แต่แสดงกลไกหลักได้ชัดเจน: ตัวกรองเลื่อนไป คำนวณผลรวมถ่วงน้ำหนักเฉพาะบริเวณ และสร้างแผนที่ว่ารูปแบบนั้นปรากฏตรงไหนบ้าง
CNN เรียนรู้อะไรระหว่างการฝึก
เคอร์เนลด้านบนถูกกำหนดขึ้นด้วยมือ แต่ใน CNN จริง ค่าของตัวกรองจะเรียนรู้จากข้อมูล การฝึกจะปรับค่าเหล่านั้นเพื่อให้ feature map ที่ได้มีประโยชน์ต่อโจทย์
ถ้าโจทย์คือการจำแนกภาพ โครงข่ายจะเรียนรู้ตัวกรองที่ช่วยแยกคลาสออกจากกัน ถ้าโจทย์คือ segmentation หรือ detection เลเยอร์ท้าย ๆ ก็จะถูกฝึกให้เหมาะกับเอาต์พุตแบบนั้นแทน กลไกพื้นฐานยังเหมือนเดิม คือ forward pass, loss, backpropagation และการอัปเดตพารามิเตอร์
ข้อผิดพลาดที่พบบ่อยเมื่อเรียน CNN
คิดว่า CNN แปลว่า "ตัวจำแนกภาพ" เท่านั้น
ภาพเป็นตัวอย่างมาตรฐานก็จริง แต่แก่นของ CNN คือโครงสร้างเฉพาะบริเวณและการใช้ตัวกรองร่วมกัน ถ้าค่าที่อยู่ใกล้กันมีความสำคัญ แนวคิดเดียวกันนี้ก็อาจมีประโยชน์นอกเหนือจากงานภาพได้
คิดว่า pooling จำเป็นเสมอ
มันพบบ่อย แต่ไม่ใช่สากล บางสถาปัตยกรรมลดขนาดเชิงพื้นที่ด้วย strided convolution แทน และบางแบบก็เก็บรายละเอียดเชิงพื้นที่ไว้ได้นานกว่า
มองข้าม stride และ padding
ขนาดของ feature map ขึ้นกับการเลือกสองอย่างนี้ ถ้าคุณเปลี่ยน stride หรือ padding คุณไม่ได้เปลี่ยนแค่รูปร่างของเอาต์พุต แต่ยังเปลี่ยนด้วยว่าแต่ละหน่วยจะมองเห็นบริเวณใกล้เคียงแบบไหน
มองเลเยอร์นี้เป็นแค่สูตรคำนวณ
สูตรคอนโวลูชันสำคัญก็จริง แต่สถาปัตยกรรมก็สำคัญเช่นกัน CNN ทำงานได้เพราะคอนโวลูชัน การกระตุ้น การซ้อนเลเยอร์ และการฝึก ทำงานร่วมกันทั้งหมด
โครงข่ายประสาทเทียมแบบคอนโวลูชันมีประโยชน์เมื่อใด
CNN ถูกใช้อย่างแพร่หลายในงาน computer vision เช่น การจำแนกภาพ การตรวจจับวัตถุ และ segmentation นอกจากนี้ยังพบในงานประมวลผลสัญญาณและงานลำดับบางประเภทที่รูปแบบเฉพาะบริเวณมีความหมาย
มันมีประโยชน์เป็นพิเศษเมื่ออินพุตมีโครงสร้างแบบกริดหรือมีความเป็นเพื่อนบ้านตามลำดับที่ชัดเจน ถ้าเงื่อนไขนี้อ่อนมาก สถาปัตยกรรมแบบอื่นอาจเหมาะกว่า
แบบจำลองความคิดที่ช่วยให้เข้าใจ CNN ได้ง่ายขึ้น
ลองมอง CNN เป็นตัวตรวจจับรูปแบบที่เริ่มจากสิ่งเล็ก ๆ และค่อยเป็นนามธรรมมากขึ้นเมื่อความลึกเพิ่มขึ้น เลเยอร์หนึ่งถามว่า "รูปแบบเล็ก ๆ นี้ปรากฏตรงนี้หรือไม่?" ส่วนเลเยอร์ถัดไปถามว่า "รูปแบบง่าย ๆ เหล่านี้รวมกันเป็นสิ่งที่มีความหมายมากขึ้นได้หรือไม่?"
นี่จึงเป็นเหตุผลว่าทำไมการทำความเข้าใจ CNN จะง่ายขึ้นเมื่อคุณโฟกัสที่ feature map ไม่ใช่แค่คำว่า "convolution"
ลองทำเวอร์ชันของคุณเอง
คงอินพุตเดิมไว้ แต่เปลี่ยนเคอร์เนลเป็น
คำนวณ feature map ใหม่ แล้วดูว่าบริเวณใดให้การตอบสนองบวกหรือลบขนาดใหญ่ การเปลี่ยนเล็กน้อยนี้ช่วยให้เห็นชัดขึ้นมากว่าตัวกรองต่างกันตรวจจับรูปแบบต่างกันอย่างไร
ต้องการความช่วยเหลือในการแก้โจทย์?
อัปโหลดคำถามของคุณแล้วรับคำตอบแบบทีละขั้นตอนที่ผ่านการตรวจสอบในไม่กี่วินาที
เปิด GPAI Solver →