เจาะลึกโครงสร้าง Convolutional Neural Network

AI แบบเคลียร์
3 min readNov 15, 2020

--

Convolution Neural Network คือหนึ่งในโครงสร้าง Deep Learning ที่นิยมในการใช้ประมวลผลภาพและได้รับการยอมรับมากมาย ความสามารถของเธอนั้นเป็นที่ประทับใจถึงขั้นปลุกชีพ Neural Network ขึ้นมาอีกครั้งหลังจากถูกเมินมานานหลายปี เธอทำได้อย่าง เราจะมาดูกัน

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

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

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

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

CNN เธอก็เข้ามาทำข่าวเรื่องนี้ เอ้ย! ไม่ใช่! บีอิ้งไม่ได้พูดถึงสำนักข่าว CNN!

Convolution Neural Network ต่างหาก! และเธอมาขจัดปัญหาตรงเรื่องขั้นตอนการค้นหา feature เราไม่ต้องเสียเวลาทำตรงนี้แล้ว

ไม่เพียงเท่านี้! ความแม่นยำเธอยังแตะ 99% ซึ่งมัน ‘ว้าว’ มาก แบบมาก เธอมาแก้ปัญหาถึงสองจุด

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

เจ้า CNN มันจะช่วยดึง feature ที่ดีที่สุดให้เราได้ดีกว่าเราไปดึงเอง เพราะ Neural Network มี parameter จำนวนมากที่เราต้องเทรน

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

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

เมื่อ CNN สามารถดึง feature ที่ดีที่สุดได้ จึงได้ผลข้างเคียงที่ว่าความแม่นยำเพิ่มขึ้น ซึ่งผลข้างเคียงนี้ดีต่อเรา ดังนั้น CNN จึงโด่งดังเป็นพลุแตก และทำให้ Neural Networks กลับมาเป็นที่นิยมอีกครั้ง นักวิจัยก็หันมาวิจัยเรื่องนี้มากขึ้น วงการเอไอก็พัฒนามามากขึ้น มีคนกล่าวถึงมากขึ้นอย่างที่เป็นอยู่ในทุกวันนี้

ทั้งๆที่ในอดีตก็เคยใช้ Neural Networks กับภาพ แต่ทำไม CNN ถึงให้ผลดีกว่ามาก

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

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

ชั้น Convolution นี้มีแรงบันดาลใจมาจากการ Convolution ภาพที่ใช้กันมากใน Image Processing แต่ไม่เหมือนกันซะทีเดียว แต่ในชั้นนี้จะมีการสร้างสมมติฐานหนึ่ง นั่นคือ สำหรับข้อมูลภาพใดๆแล้วพิกเซลที่อยู่ใกล้กันโดยรอบจะมีความหมายต่อกัน และพิกเซลที่อยู่ไกลกันจะไม่มีความหมายต่อกัน

การคูณประสานทำได้โดยเลือกบริเวณของภาพ input ที่มีขนาดเท่ากับขนาด filter แล้วคูณกันในตำแหน่งที่ตรงกัน จากนั้นนำค่าทั้งหมดมาบวกกันได้เพียงค่าเดียว แล้วนำผลลัพธ์ที่ได้ ไปใส่ในตำแหน่งพิกเซลตรงกลางของภาพ output แล้วไล่ทำแบบนี้ไปทั้งภาพ สามารถศึกษาเพิ่มเติมได้ที่ลิ้งค์นี้ค่ะ

https://towardsdatascience.com/a-beginners-guide-to-convolutional-neural-networks-cnns-14649dbddce8

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

จากนั้นผ่านเข้าชั้น Max pooling ชั้นนี้ไม่มีอะไรมากก็แค่ลดขนาดข้อมูลให้เล็กลงโดยการดึงเอา output ที่มีค่ามากที่สุด เพราะมีการตอบสนองต่อ filter มากที่สุดแล้วผ่านไปที่ชั้นถัดไป

ในชั้นถัดไปจากนั้นก็รับ Output จาก Max pooling แล้วไปเข้าชั้น Convolution ใหม่ ซึ่ง Output ในชั้นนี้ก็ยังนำเอาบริเวณรอบๆมาพิจารณาเหมือนเดิม แต่ความพิเศษคือ ไม่ได้พิจารณาจากพิกเซลแต่ละพิกเซลในภาพ Input แล้ว แต่กลายเป็นพิจารณาจาก Output ของชั้นก่อนหน้าที่มีการพิจารณาจากพิกเซลรอบๆอีกที ซึ่งปกติเราจะเรียก Output ที่ผ่านชั้น Convolution ว่า feature ซึ่ง feature จากชั้นแรกๆจะเป็น feature ง่ายๆเช่น เส้นตรง เส้นโค้ง เพราะจากภาพ พิกเซลข้างๆเป็นเพียงพื้นที่เล็กๆ ทำให้ได้แค่ขอบเส้นตรง เส้นโค้งสั้นๆ หรือข้อมูลสีพื้นที่นั้นในภาพสี จากนั้นเมื่อผ่าน Max pooling แล้วไปเข้า Convolution ชั้นถัดไปจะเริ่มประกอบเป็นชิ้นส่วนต่างๆสะสมไปเรื่อยๆ เช่นตัวอย่างงานแยกภาพที่มีใบหน้าหรือไม่มีใบหน้า feature ชั้นถัดไปจะประกอบมาเป็น หู ตา จมูก ปาก ซึ่งเริ่มแสดงสิ่งที่เป็นคุณลักษณะของใบหน้า จากนั้นชั้นถัดไปจะรวมทุกอย่างกลายเป็นใบหน้า ตรงนี้สามารถดูภาพประกอบเพื่อความเข้าใจได้

ซึ่งตรงนี้ศัพท์เทคนิคเรียกว่ามีการดึง feature แบบ hierarchical feature extraction คือดึงเป็นชั้นไปเรื่อยๆ ชั้นแรกๆจะได้อะไรที่เป็นพื้นฐาน แล้วค่อยๆประกอบไปจนซับซ้อนมากขึ้น

ทั้งหมดนี้เราบังคับให้ CNN เรียนที่ดึงออกมาเองค่ะ โดยการตั้งโครงสร้าง ซึ่งเหมือนตั้งกรอบให้กับ CNN ว่าใน Input บริเวณใกล้เคียงจะส่งผลต่อ Output จุดนั้นๆ

หากไม่ตั้งกรอบตรงนี้ ก็เหมือนกับว่าในสายตา Neural Network แล้ว Input แต่ละจุดเป็นอิสระต่อกัน Output ในแต่ละจุดอาจจะหรืออาจจะไม่ขึ้นอยู่กับ Input ในบริเวณรอบๆ ทำให้ไม่สามารถการันตีว่า Neural Network ของเราจะเรียนรู้ความสัมพันธ์แบบนี้ได้ การกำหนดจากความรู้ของเราไปเลยจึงเป็นการการันตี และสามารถลดจำนวนเซลล์นิวรอนลงได้ด้วย ตรงนี้ก็เลยเปรียบเสมือนการไปรบแบบมีกลยุทธ์ จะสามารถลดจำนวนกำลังพลทหารได้

ที่กล่าวมาข้างต้นคือชั้นดึง feature ค่ะ ซึ่งคิดเป็น 80–90% ของจำนวนชั้นทั้งหมดค่ะ

Image source: https://paperswithcode.com/methods/category/convolutional-neural-networks

บอกแล้วว่า feature สำคัญมากกกกกกก

เมื่อได้ feature แล้วเราก็เอาเข้าตัวแยก หรือเรียกว่า Classifier อะไรก็ได้ ซึ่งส่วนมากก็เอาเข้า Neural Network(Fully connected) ขนาดเล็กๆต่อค่ะ ให้ทำหน้าที่แยก ซึ่งในยุคแรกก็มีการใช้ SVM เหมือนกัน แต่ที่มาใช้ Neural Network ขนาดเล็กๆแทนก็เพราะว่ามันเป็นประเภทเดียวกันกับชั้นแรกๆ จะได้เทรนทีเดียวทั้งหมด

CNN ก็มีเรื่องราวประมาณเท่านี้ ถ้ายังไม่เคลียร์ก็คอมเม้นถามกันเข้ามาได้ค่ะ

สำหรับตอนนี้ก็จบเพียงเท่านี้ค่ะ พบกันใหม่ตอนหน้าค่ะ

สามารถติดตามกันได้ที่

Facebook: AI แบบเคลียร์ ตีแผ่ทุกไอเดียเบื้องหลังสมการ

Tiktok: ai.beeying

Youtube: AI แบบเคลียร์ๆ

--

--

AI แบบเคลียร์
AI แบบเคลียร์

Written by AI แบบเคลียร์

จากไอเดียสู่สมการ จากสมการสู่โค้ด จากโค้ดสู่โซลูชั่นการใช้งานจริง

No responses yet