φυβλαςのβλογ
phyblas的博客



โครงข่ายประสาทเทียมเบื้องต้น บทที่ ๒๐: โครงข่ายประสาทแบบคอนโวลูชัน (CNN)
เขียนเมื่อ 2021/03/24 20:48
แก้ไขล่าสุด 2021/09/28 16:42

ต่อจาก บทที่ ๑๙

ในบทนี้จะเข้าสู่เรื่องของโครงข่ายประสาทแบบคอนโวลูชัน (卷积神经网路, convolutional neural network) หรือนิยมเรียกย่อว่า CNN

โครงข่ายปราสาทเทียมชนิดนี้นิยมใช้ในการวิเคราะห์ภาพหรืออนุกรมเวลาซึ่งเป็นข้อมูลที่มีความต่อเนื่อง มีการใช้งานที่กว้างขวางมากมาย




ว่าด้วยเรื่องของข้อมูลที่มีความเกี่ยวพันเชิงตำแหน่งหรือลำดับ

ข้อมูลบางประเภทเป็นตัวแปรที่มีความต่อเนื่องเกี่ยวพันกันเชิงตำแหน่งหรือลำดับหรือเวลา เช่น รายได้ในแต่ละเดือน ซึ่งอาจวาดเป็นกราฟได้แบบนี้



ในข้อมูลนี้เมื่อทำการวิเคราะห์เราคงไม่ได้สนแค่ว่าแต่ละเดือนมีค่าเท่าไหร่บ้าง แต่สนใจความสัมพันธ์ของเดือนที่อยู่ติดกันด้วย เช่นเดือน 2 เพิ่มจากเดือน 1 แต่เดือน 3 ลดลงเล็กน้อย เป็นต้น

ข้อมูลที่แสดงลำดับการเปลี่ยนแปลงของค่าตามเวลาแบบนี้เรียกว่าอนุกรมเวลา (时间序列, time series)

  ข้อมูลลักษณะแบบนี้ ความสัมพันธ์ระหว่างค่าของจุดข้างเคียงกันมีความสำคัญ และลำดับข้อมูลก็มีความสำคัญ

แต่ในโครงข่ายประสาทแบบเพอร์เซปตรอนหลายชั้นแบบเดิมนั้นข้อมูลทั้งหมดจะถูกป้อนเข้ามาในฐานะข้อมูลตัวแปรหนึ่งเหมือนๆกันหมด

นั่นคือ แต่ละจุดบนเส้นกราฟ จะถูกนำมาแยกใส่ในแต่ละช่องข้อมูล ไม่ได้ถูกใส่ในฐานะเส้นต่อเนื่อง อาจมองภาพได้เป็นแบบนี้



ค่าในแต่ละเซลล์ของโครงข่ายประสาทนั้นแม้จะเห็นว่าเรียงลำดับกันอยู่ก็จริง แต่ลำดับนั้นไม่ได้มีความหมายอะไร ไม่ใช่ว่าเซลล์ที่อยู่ติดกันจะมีความใกล้ชิดกับเซลล์ข้างๆ ต่อให้สลับลำดับกันไปก็ไม่มีอะไรเปลี่ยนแปลง

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



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

โครงข่ายประสาทแบบคอนโวลูชันมีทั้งแบบหนึ่งมิติและสองมิติ หรือจำนวนมิติมากกว่านั้น ความซับซ้อนจะมากขึ้นตามลำดับ

คนส่วนใหญ่คงจะคุ้นเคยกับแบบสองมิติ เพราะเป็นที่ใช้แพร่หลายในการวิเคราะห์รูปภาพ ซึ่งรูปภาพเป็นข้อมูลสองมิติ

แต่ในที่นี้จะขอไปทีละขั้น โดยบทนี้จะเริ่มจากอธิบายแบบหนึ่งมิติก่อน โดยตัวอย่างที่พบได้ทั่วไปคือข้อมูลอนุกรมเวลา

ตัวอย่างหนึ่งสำหรับงานวิจัยที่ใช้คอนโวลูชันหนึ่งมิติวิเคราะห์คือการวิเคราะห์กราฟแสงของดาวเพื่อค้นหาดาวเคราะห์ อ่านรายละเอียดได้ใน https://phyblas.hinaboshi.com/20171216




โครงสร้างของโครงข่ายประสาทแบบคอนโวลูชัน

โดยทั่วไปแล้วโครงข่ายประสาทแบบคอนโวลูชันจะประกอบไปด้วย ๒ ส่วนคือ

- ส่วนคอนโวลูชัน ประกอบไปด้วย
-- ชั้นคอนโวลูชัน (convolutional layer)
-- ฟังก์ชันกระตุ้น อย่างเช่น ReLU
-- ชันบ่อรวมสูงสุด (max pooling layer)

- ส่วนเชิงเส้น ประกอบไปด้วย
-- ชั้นเชิงเส้น (affine layer)
-- ฟังก์ชันกระตุ้น อย่างเช่น ReLU ยกเว้นชั้นสุดท้ายใช้ Softmax หรือ Sigmoid


ตัวอย่างเช่นโครงสร้างแบบในภาพนี้



ชั้นคอนโวลูชัน (convolutional layer) กับชันบ่อรวมสูงสุด (max pooling layer) นั้นกำลังจะกล่าวถึงต่อไปในบทนี้ ส่วนชั้นที่เหลือมีเขียนอธิบายในบทก่อนหน้าไปแล้ว โค้ดจะใช้ตามในบทที่ ๑๑

ในโครงสร้างนี้ข้อมูลจะเริ่มเข้ามาในโครงข่ายประสาทโดยเริ่มผ่านจากส่วนคอนโวลูชัน ซึ่งอาจมีกี่ชั้นก็ได้ ในแต่ละชั้นจะประกอบไปด้วยชั้นย่อยที่ประกอบไปด้วยชั้นคอนโวลูชัน ตามด้วยฟังก์ชันกระตุ้นและชั้นบ่อรวมสูงสุด ทั้งหมดนี้นับรวมเป็น ๑ ชั้น

หลังจากผ่านส่วนคอนโวลูชันแล้วก็ยังจะต้องเข้าสู่ส่วนคำนวณเชิงเส้น ซึ่งส่วนนี้จะมีการคำนวณที่เหมือนกับเพอร์เซปตรอนหลายชั้นแบบธรรมดา คือประกอบไปด้วยชั้นเชิงเส้นตามด้วยฟังก์ชันกระตุ้น

ตัวอย่างในภาพนี้มีชั้นคอนโวลูชัน ๒ ชั้น ชั้นเชิงเส้น ๒ ชั้น รวมเป็น ๔ ชั้น

หากเขียนการคำนวณภายในแต่ละชั้นไปทีละขั้นก็อาจเขียนได้แบบนี้

ชั้น 1