Review : Neural Network Demystified part 1

ซีรีย์ชุดนี้จะเป็นการรีวิวและเป็นการโน้ตแลบเป็นเวอร์ชั่นภาษาไทยจากคลิปวิดีโอจากช่อง Welch Labs เกี่ยวกับ Neural Network ในโพสนี้จะพูดเกี่ยวกับ Data และ Architecture

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

Table

 

จากตารางด้านบนจะเห็นได้ว่าเราต้องการจะทำนายว่าถ้าเรานอน 8 ชั่วโมงและทบทวนหนังสือ 3 ชั่วโมง จะได้คะแนนสอบเท่าไร โดยเราจะทำนายโดยใช้ข้อมูลที่มีอยู่ก่อนหน้านี้แล้วก็คือในส่วนของเทรนนิ่ง ลักษณะแบบนี้เรียก machine learning แบบ supervised คือต้องมีการให้ input และ output มาล่วงหน้าเพื่อใช้ในการเทรน

ปัญหานี้เราจะเรียก Regression problem คือค่าที่ทำนายออกมาเป็นค่าแบบ continuous หรือค่าทศนิยม ไม่ใช่ทำนายออกมาว่าเป็นกรุ๊ป A B หรือ C ถ้าแบบนั้นจะเรียก Classifying problem ทีนี้โมเดล Machine Learning มีหลายตัวมากที่สามารถใช้แก้ปัญหาได้ เช่น Support Vector Machine, Guassian Processes, Artificial Neural Network, Random forests, Classification+Regression Trees และอื่นๆอีกมากมาย แต่ในซีรีย์ชุดนี้จะเลือกในส่วนของ Artificial Neural Network(ANN) โครงข่ายประสาทเทียม ซึ่งได้แรงบันดาลใจจากเซลล์ประสาทในสมองของมนุษย์ที่มีส่วนรับและส่งกระแสไฟฟ้าไปยังเซลล์ประสาทตัวอื่นๆ จากภาพด้านล่างเป็นการเปรียบเทียบระหว่างโครงข่ายประสาทของจริงกับของเทียมที่ประสบความสำเร็จในการแก้ปัญหาที่ซับซ้อน เช่นการทำ Image Classification, Natural Language Processing เป็นต้น

Biological vs Artificial Neural Network

 

กลับมาที่ตารางของเรา เราต้องมีการ normalization หรือการ Scaling  ข้อมูลทั้งหมดให้อยู่ในช่วงเดียวกัน ในที่นี้คือ 0 ถึง 1 ซึ่งง่ายสุด โดยคำนวนได้จาก

x_{norm}=\frac{X}{max(X)} และ y_{norm}=\frac{y}{max(y)} โดยที่ max(y) ในที่นี้เท่ากับ 100 คือค่ามากที่สุดของ y ที่เป็นไปได้ ด้านล่างคือโค้ด python ของการกำหนดค่า X และ y และการทำ normalization ตามลำดับ

ผมใช้ python version 3 ซึ่งจะมีไลบรารี่ numpy มาให้ไม่ต้องติดตั้งเองเพียงแต่ import เข้ามาก็ใช้ได้เลย ส่วน ฟังก์ชั่น amax นั้นเป็นการหาค่ามากที่สุดโดยสามารถระบุได้ว่าจะหาค่ามากสุดในแนวแกนใด ในโค้ดเป็นการค่ามากสุดในแต่ละหลัก

ANN

จากภาพด้านบน เราจะเอาเทรนนิ่งดาต้า(วงกลมสีส้ม) มาทำการเทรนผ่าน ANN ซึ่งประกอบไปด้วย Neuron คือโหนด และ Synapse คือเส้น(edge)ที่ออกจากโหนด ประกอบกันหลายชั้นซึ่งเรียกว่า hidden layers หรือที่เรียกว่า deep learning หน้าที่ของ Synapse คือการนำค่า input มาคูณกับค่า weight แล้วก็ส่งผลลัพธ์ออกมา หน้าที่ของ Neuron จะซับซ้อนกว่า Synapse หน่อยนึงคือจะเป็นการเอาผลลัพธ์จาก Synapse หลายตัวๆมารวมกัน

ANN2และนำมาผ่าน sigmoid activation function  เป็นกราฟรูปตัว s ซึ่งมีค่าเอ้าท์พุตอยู่ในช่วง 0…1 คล้ายๆสเตปฟังก์ชั่นไบนารี่ 0 และ 1 เพื่อเลียนแบบเซลล์ประสาทว่าจะส่งสัญญาณต่อไปนิวรอนตัวถัดไปหรือไหม และค่าที่อยู่ในช่วง 0…1 ยังไปสอดคล้องกับความน่าจะเป็นได้อีกด้วย

จากภาพด้านล่างจะเห็นได้ว่า ถ้าค่าน้อยกว่า -6 จะเข้าใกล้ 0 คือ deactivate ถ้าค่ามากกว่า 6 จะเข้าใกล้ 1 เป็น activate ช่วง -6 ถึง 6 ถือว่าเป็นช่วงที่แคบมากๆที่กราฟจะพลิกจากฝั่ง 0 ไป 1

รวมไปถึงเป็นฟังก์ชั่นที่แปลงจาก linear เป็น non linear ซึ่งสามารถหาอนุพันธุ์ได้ รายละเอียดเชิงลึกอยู่ในกระทู้นี้ครับ (ทุกโหนดใน hidden layer ต้องผ่าน sigmoid function รวมถึงเอ้าพุตy hat อีกด้วย)

ท้ายสุดเมื่อผ่านการคำนวนจาก hidden layer แล้วจะได้เอ้าพุตออกมาเป็น y hat(วงกลมสีเขียว) ซึ่งเป็น y ที่เกิดจากการประมาณ ไม่ใช่ y ตัวเดียวกับที่อยู่ในเทสติ้ง

บทความหน้าในซีรีย์ชุดนี้จะพูดถึง forward propogation ครับ

thanks : Welch Labs ที่ทำคลิปดีๆมาให้เราได้ศึกษากัน

Leave a Reply

Your email address will not be published. Required fields are marked *