Make your own Neural Network #1

Thana Hongsuwan
3 min readDec 25, 2023

--

บทความนี้เรียบเรียงจากหนังสือ Make your own Neural Network

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

แต่คอมพิวเตอร์ไม่ได้คิดจริงๆ เหมือนกับสมองมนุษย์คิด พวกมันเป็นแค่เครื่องจักรที่ทำงานตามชุดคำสั่งที่กำหนดไว้ ดังนั้นจะเหมาะสมกว่าถ้าบอกว่าคอมพิวเตอร์มีการทำงานแบบนี้

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

“แค่คูณเลขเหรอ ไม่เห็นน่าประทับใจเลย!” คุณอาจจะคิดแบบนั้น

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

เดี๋ยวเรามาเพิ่มความซับซ้อนขึ้นอีกนิดนึงนะ

ลองจินตนาการถึงเครื่องจักรที่แปลงกิโลเมตรเป็นไมล์ เหมือนตัวอย่างต่อไปนี้:

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

ความสัมพันธ์แบบเส้นตรงระหว่างกิโลเมตรและไมล์นี้ทำให้เรามีเบาะแสเกี่ยวกับการคำนวณลึกลับว่ามันควรอยู่ในรูปแบบ “ไมล์ = กิโลเมตร x c” โดยที่ c เป็นค่าคงที่ เรายังไม่รู้ว่า c มีค่าเท่าไร

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

เราจะทำอย่างไรเพื่อหาค่าคงที่ c ที่หายไป? ลองใส่ค่าอะไรสักอย่างเข้าไปดูสิ! ลองใส่ c = 0.5 ดูสิว่าจะเกิดอะไรขึ้น

ตอนนี้เรามี ไมล์ = กิโลเมตร x c โดยที่ กิโลเมตร คือ 100 และ c คือการคาดเดาของเรา ตอนนี้ที่ 0.5 ทำให้ได้ 50 ไมล์ โอเค นั่นไม่เลวเลยนะ สำหรับการเลือก c = 0.5 แบบสุ่ม แต่เรารู้ว่ามันไม่ค่อยแม่นยำเท่าไหร่ เพราะตัวอย่างความจริงอันดับ 2 บอกเราว่าคำตอบควรเป็น 62.137 เราผิดไป 12.137 นั่นคือข้อผิดพลาด ความแตกต่างระหว่างคำตอบที่เราคำนวณได้กับความจริงที่แท้จริงจากรายการตัวอย่างของเรา

เมื่อรู้ค่าความผิดพลาดแล้วจะทำยังไงต่อไป เรารู้แล้วว่าคำตอบของเราผิด และผิดไปเท่าไหร่ แต่แทนที่จะท้อแท้ พวกเราใช้ข้อผิดพลาดนี้เพื่อชี้นำการคาดเดาค่า c ครั้งที่สองให้ดีขึ้นกว่าเดิม ลองดูข้อผิดพลาดนั้นอีกครั้ง เราขาดไป 12.137 เนื่องจากสูตรการแปลงกิโลเมตรเป็นไมล์เป็นแบบเส้นตรง ไมล์ = กิโลเมตร x c เราจึงรู้ว่าการเพิ่ม c จะทำให้ได้ผลลัพธ์ที่สูงขึ้น ลองขยับ c ขึ้นจาก 0.5 เป็น 0.6 แล้วดูว่าจะเกิดอะไรขึ้น เมื่อ c ถูกตั้งไว้ที่ 0.6 เราจะได้ ไมล์ = กิโลเมตร x c = 100 x 0.6 = 60 นั่นดีกว่าคำตอบก่อนหน้าที่ 50 เห็นได้ชัดว่าเรากำลังคืบหน้า! ตอนนี้ข้อผิดพลาดเหลือเพียง 2.137 ซึ่งอาจเป็นข้อผิดพลาดที่เรายอมรับได้

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

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

ลองทำอีกครั้ง ผลลัพธ์ 60 ยังเล็กเกินไป เราจะปรับค่า c ขึ้นอีกครั้งจาก 0.6 เป็น 0.7

โอ๊ะโห! เราไปไกลเกินไปจนเลยคำตอบที่ถูกแล้ว ข้อผิดพลาดก่อนหน้านี้ของเราคือ 2.137 แต่ตอนนี้มันกลายเป็น 7.863 เครื่องหมายลบเพียงแค่บอกว่าเราเลยเป้าหมายไป ไม่ใช่ขาดไป จำไว้ว่าข้อผิดพลาดคือ (ค่าที่ถูกต้อง — ค่าที่คำนวณได้)

โอเค ดูเหมือน c = 0.6 ดีกว่า c = 0.7 มาก เราอาจจะพอใจกับข้อผิดพลาดเล็กน้อยจาก c = 0.6 และจบการฝึกซ้อมนี้ได้ แต่มาลองต่ออีกนิดนึงสิ ทำไมไม่ลองปรับ c ขึ้นไปนิดเดียว จาก 0.6 เป็น 0.61

เยี่ยม! ดีขึ้นกว่าเดิมเยอะเลย ตอนนี้เราได้ผลลัพธ์เป็น 61 ซึ่งผิดไปเพียง 1.137 จากค่าที่ถูกต้องคือ 62.137

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

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

เชื่อหรือไม่! สิ่งที่เราเพิ่งทำไปคือเดินผ่านกระบวนการหลักของ Neural Network เราได้ฝึกเครื่องจักรให้เก่งขึ้นเรื่อย ๆ ในการให้คำตอบที่ถูกต้อง

น่าคิดตรงที่เราไม่ได้แก้ปัญหาอย่างแม่นยำในขั้นเดียว เหมือนที่เราทำในปัญหาคณิตศาสตร์หรือวิทยาศาสตร์ตอนเรียนบ่อย ๆ แทนที่จะเป็นแบบนั้น เราใช้วิธีการที่ต่างออกไปโดยการลองคำตอบหนึ่ง แล้วปรับปรุงมันซ้ำ ๆ บ่อย ๆ บางคนใช้คำว่า “วนซ้ำ” ซึ่งหมายถึงการปรับปรุงคำตอบทีละน้อยอย่างต่อเนื่อง

จบไปกับแนวคิดเบื้องต้นของ Neural Network

--

--

Thana Hongsuwan
Thana Hongsuwan

Written by Thana Hongsuwan

Maker สมัครเล่น สนใจเทคโนโลยีด้าน Hardware เช่น Arduino, ESP8266, ESP32, Internet of Things, Raspberry P, Deep Learning

No responses yet