Deep Learning แบบฉบับคนสามัญชน EP 1 : Neural Network History

Mr.P L
mmp-li
Published in
6 min readMar 2, 2019

Deep Learning แบบง่ายๆเพราะนี้คือแบบฉบับคนสามัญชน

https://www.zdnet.com/article/what-is-deep-learning-everything-you-need-to-know/

บทนำ

และแล้วบทความนี้ก็ได้กำเนิดขึ้น หลังจากที่ซีรีย์บทความ ML ก่อนหน้านี้ได้จบลงเรียบร้อย ก็เฝ้ารอคอยจังหวะและโอกาสที่จะได้ปล่อยบทความ Deep Learning และแล้ววันนี้ก็มาถึง….

ทำไมต้องแบบสามัญชน

เพราะตัวผมเองเคยนั่งอ่านบทความและนั่งดูคนที่เทพๆอธิบายเรื่อง Deep Learning หรือจะนั่งฟังเพื่อนผมคุยเรื่อง Deep Learning เมื่อต้นปี 2018 เอาจริงๆนะ ไม่รู้เรื่องงง

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

บางคนต้องการจะรู้แค่ Neural Network คืออะไร

บางคนแค่อยากจะรู้ CNN คืออะไร

บางคนอยากจะลองรันโค้ดเล่นๆขำๆ (มีเหรอ?)

บทความนี้จึงได้กำเนิดขึ้นโดยแยกเป็น parts ทั้งหมด 5 parts โดยใครสนใจหัวข้อไหนก็สามารถไปอ่านได้เลยไม่ต้องอ่านเรียงติดกันเหมือนบทความ Machine Learning ก่อนหน้านี้แล้ว แต่ถ้าใครอยากจะเข้าใจแบบ 100% บทความนี้ก็มีวาร์ปไปเรียนคอร์สที่ใช้อ้างอิงบทความนี้ให้แล้ว และยิ่งถ้าใครอ่านบทความ Machine Learning ก่อนหน้ามาแล้วก็จะยิ่งเข้าใจได้ไวมากยิ่งขึ้นกับ Deep Learning อย่างแน่นอน

บทความนี้เป็นบทความต่อเนื่องจาก Machine Learning 0–100

ซึ่งบทความนี้จะหยิบยกเอาเทคนิคและคำศัพท์มาจากบทความก่อนหน้ายกตัวอย่างเช่น Over/Under fitting, Evaluate, Classification, Regression เป็นต้นโดยอาจจะมีการอ้างอิงไปยังบทความเก่าๆ หากตกหล่นตรงไหนไปก็ขออภัยมา ณ ที่นี้ด้วย

Requirement ก่อนที่จะเริ่มกัน

  • สามารถเขียน python ได้ (python 3) รู้จัก syntax และสามารถทำความเข้าท่ายากของ python ได้ในระดับหนึ่ง
  • ใช้งาน jupyter notebook / google colab เป็น สามารถรันแต่ละเซลของ jupyter ได้ก็พอแล้ว ไม่ต้องเล่นท่ายากเป็นก็ได้
  • เคยอ่าน/ลงมือทำ Machine Learning มาก่อนจะดีมาก
  • บทความนี้จะใช้งาน python package สำหรับสร้าง Deep Learning ที่ชื่อว่า Keras (ใช้ง่าย เหมาะสำหรับมือใหม่)

สิ่งที่จะสอนในบทความซีรีย์นี้

โดยที่บทความนี้จะอ้างอิงมาจากคอร์ส 2 อันได้แก่

Deep Learning Explained By Microsoft

โดยจะเป็นในส่วนเนื้อหาทฤษฏีส่วนในการลงมือทดลองจะเป็นอีกคอร์สคือ

Deep Learning Fundamentals with Keras By IBM

โดยคอร์สตัวนี้จะเป็นการอ้างอิงในส่วนของแลปนั้นเอง

สอบผ่านทั้ง 2 แล้ว คอร์สนี้ไว้ใจได้ 555555

จุดเริ่มต้น Neural Network ?

ถ้าเกิดเราย้อนไปดูประวัติศาสตร์ของ NN จริงๆแล้วมีมานานนนนนน มากแล้ว (1940s) โดยในยุคแรกๆยังเป็นเพียงแค่ 1 hidden และถ้าต้องการทำนายว่าเป็นคลาสอะไร จำนวน Neurons (ก้อนกลมๆภายใน hidden layer) ก็จะมีจำนวนเท่ากับคลาสที่มี โดยในยุคนั้นมีข้อจำกัดมากมายไม่ว่าจะเป็น ความแรงของคอมพิวเตอร์, จำนวนข้อมูลที่เอาไว้ฝึกโมเดล , ไม่มีอัลกอเทพๆช่วยฝึกโมเดล ทำให้มันค่อยๆหายไปและกลับมาฮิตมากในปัจจุบัน โดยเราก็จะเล่าเหตุการณ์สำคัญๆที่เกิดขึ้นและประวัติของเจ้า Neural Network กันในบทความนี้

ข้อแตกต่างระหว่าง Machine Learning และ Deep Learning

จุดที่เห็นได้ชัดเลยก็คือการทำ Feature extraction ที่ตัว Deep learning จะทำด้วยตนเอง แต่ถ้าเป็น Machine Learning เราจะต้องทำด้วยตนเองก่อนที่จะนำไปเข้าโมเดลของเรา

ซึ่ง Deep Learning จะพยายามหาจุดเด่นของ Input โดยอัตโนมัติ

อีกข้อเลยก็คืออายุของมัน จะเห็นได้ว่า ML มันอยู่มานานแล้วและ Deep Learning กำลังมา เพราะฉนั้นคนจึงให้ความสนใจและพัฒนา DL มากในช่วงไม่กี่ปีมานี้

แต่ข้อเสียของ Deep Learning เลยก็คือ มันใช้ทรัพยากรเยอะ ไม่ว่าจะเป็นทรัพยากรของคอมพิวเตอร์ที่รันมัน หรือจะเป็นจำนวนข้อมูลที่ต้องการ หาก Neural network ของเรามี Architecture ที่ใหญ่มาก เราก็จำเป็นจะต้องมีข้อมูลที่เยอะมากเช่นกัน

เทคโนโลยีเด่นๆที่เกิดขึ้นด้วย Neural Network

AlphaGo (Deep Mind)เอไอที่สามารถเอาชนะผู้เล่นโกะอันดับ 1 ของโลก ไป 4–1 เกม ซึ่งมันสามารถเอาชนะไปได้อย่างสวยงาม สามารถรับชมสารคดีใน Netflix

OpenAI เอาชนะผู้เล่นมืออาชีพของ Dota2 ในรูปแบบทีม 5–5 โดยมันจะบอกโอกาสในการเอาชนะเกมนี้ได้ด้วย เป็นเอไอที่น่ากลัวมากๆ เพราะเมื่อคนเราเล่นเกมจะเกิดความกดดันและต้องใช้ความสามัคคีแต่นี้คือ AI มันไม่มีอารมณ์ ความรู้สึก เป้าหมายเดียวของมันคือชนะเกมนี้เท่านั้น

Tesla self driving car รถยนต์ที่ไร้คนขับก็เป็นอีกหนึ่งเทคโนโลยีที่มี AI ในการประมวลผลเบื้องหลัง ก็เป็นอีกหนึ่งเทคโนโลยีที่กำลังมาแรงมากๆ แต่น่าเสียดายยังไม่มีระบบขับอัตโนมัติในไทย

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

หรือจะเป็น GANs (Generative adversarial network) ที่สามารถสร้างอะไรขึ้นมาก็ตามที่เราสั่งไป ซึ่งเป็นเทคโนโลยีที่น่าสนใจมากๆ โดยจากในรูปจะเห็นว่าเราพิมพ์ว่าอยากได้ “นกสีขาวที่มีปีกสีดำและจะงอยปากสีเหลือง” เราก็จะได้รูปสิ่งๆนั้นมาทันที

Neural Network คืออะไร ? เกิดจากอะไร ?

Neural Network หรือ NN (โครงข่ายประสาทเทียม) คือ โมเดลทางคณิตศาสตร์หรือโมเดลทางคอมพิวเตอร์สำหรับประมวลผลสารสนเทศด้วยการคำนวณแบบคอนเนคชันนิสต์ (connectionist) แนวคิดเริ่มต้นของเทคนิคนี้ได้มาจากการศึกษาโครงข่ายไฟฟ้าชีวภาพ (bioelectric network) ในสมอง ซึ่งประกอบด้วย เซลล์ประสาท (neurons) และ จุดประสานประสาท (synapses) ตามโมเดลนี้ ข่ายงานประสาทเกิดจากการเชื่อมต่อระหว่างเซลล์ประสาท จนเป็นเครือข่ายที่ทำงานร่วมกัน

ซึ่งจะเห็นได้ว่า Neural network ที่เรากำลังจะเริ่มกันนั้นได้ลอกเลียนแบบมาจากทางไบโอนั้นเอง ซึ่ง

ส่วนประกอบของ Neural Network

Neurons (ก้อนกลมๆ)

ข้างใน Neuron จะต่างกันตาม layer ที่มันอยู่ โดยถ้าเป็น Input ข้างในตัวมันก็จะมีข้อมูลที่รับมา แต่ถ้าเป็น Hidden Layer ก็จะมีสมการที่ช่วยในการคำนวณเพื่อทำนายว่าเป็นคลาสอะไร หรือคำนวณแบบถดถอย (Regression) ก็ได้ แต่ถ้าเป็น Output ก็จะเป็นตัวที่บ่งบอกว่าเป็นคลาสอะไรนั้นเอง

Input Layer (สีเขียว)

มีหน้าที่ในการรับข้อมูลเข้ามาในโครงข่ายประสาทโดย Input Layer จะเพียงชั้นเดียวเท่านั้นและมีหน้าส่งข้อมูลไปยังชั้นถัดไป (Hidden Layer)

Hidden Layer (สีส้ม)

มีหน้าที่รับข้อมูลจาก Layer ก่อนหน้า จะสังเกตุว่า Hidden Layer สามารถมีจำนวนมากกว่า 1 ได้ และโดยพื้นฐาน ถ้าเรายิ่งต้องการความแม่นยำที่มากขึ้นเราก็จะเพิ่มจำนวนชั้นของ Hidden Layer และจำนวน Neurons ให้มากขึ้นก็จะช่วยได้ (ไม่เสมอไป)

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

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

โดยเมื่อเข้าเว็บไซต์ก็จะพบกับหน้าที่เราสามารถกำหนด Hidden Layer และจำนวน Neurons ได้นั้นเอง

โดยเมื่อกดเล่น ระบบจะทำการ Classification แยกจุดสองสีนั้นเอง โดยพื้นฐานถ้าเรากดเล่นโดยไม่ปรับปรุงอะไรเลย ก็น่าจะได้เหมือนกันๆ

ทีนี้เราทดลองโดยการลด Hidden Layer เหลือ 1 และจำนวน Neurons เหลือเพียง 1

แล้วลองรันดูก็จะพบว่า !! มันไม่สามารถทำการแยกได้ ส่วนสาเหตุว่าทำไมให้ทนอ่านไปอีกนิดนะ เดียวจะเจอเฉลยแล้ว

แต่ทีนี้ลองเพิ่มเป็น 4 hidden และ แต่ละ layer มี 4 neurons

แทบไม่ต่างอะไรจากแบบพื้นฐาน

ทำให้เห็นว่าไม่จำเป็นต้องเพิ่ม hidden layer หรือจำนวน neurons ในบางครั้งก็ได้ บางทีค่าน้อยๆก็ให้ผลลัพธ์ที่ดีได้

Output Layer

เป็น output layer ที่อยู่ท้ายสุดรอรับค่าจาก hidden layer อันสุดท้าย โดยในชั้น output นั้นแต่ละ neurons จะมีค่าน้ำหนักของคลาสอยู่เช่น เรามีประเภทของ output ทั้งหมดหมด 2 แบบคือ แมว กับ หมาเพราะฉนั้น output layer ของเราจะมี neurons 2 ตัว ตัวแรกอาจจะเป็นหมา neurons ตัวที่สองจะเป็นแมว โดยเมื่อข้อมูลผ่าน hidden layer ไปสู่ output ไปแล้ว neurons ทั้ง 2 ตัวจะมีค่าข้างในไม่เท่ากัน โดยที่

neuron ตัวไหนมีน้ำหนักมากกว่ากัน แสดงว่าเป็นคลาสนั้น

และใน hidden layer มีอีกสองสิ่งที่ถูกซ่อนไว้คือ bias และ weight

B1,B2 และ Wx

โดยทุกๆ hidden layer จะมี bias เชื่อมต่ออยู่เพื่อให้ทุกๆการคำนวณเพื่อส่งต่อมีความเท่าเทียมกัน ตีความหมายง่ายๆคือ ทุกๆ neurons ใน hidden layer จะต้องมี bias เข้าไปคำนวณเพื่อให้ decision boundary ไม่จำเป็นต้องผ่านจุด origin

ส่วน Weight จะเป็นน้ำหนักซึ่งมันจะส่งผลทุกๆ neurons มีค่า output ที่ไม่เท่ากัน ทำให้แต่ละคลาสมีน้ำหนักไม่เท่ากันเวลาคำนวณว่าเป็นคลาสไหน ทำให้เราสามารถแยกว่าข้อมูลนี้เป็นคลาสอะไรได้ด้วยการดูตัวเลขที่ output

โดยเนื้อหาต่อไปนี้จะเป็นการอ้างอิงจากหนังสือของ O’Reilly

ยุคที่ 1:ANN , LTU (1 layer perceptron)

ในยุคแรกของ Neural network ถูกคิดค้นโดย Rosenblatt ปี 1957 จะเป็นเพียงแค่ 1 layer มีความเรียบง่ายไม่มีความซับซ้อนใดๆ

https://www.oreilly.com/library/view/neural-networks-and/9781492037354/ch01.html

โดย 1 neuron จะทำนายได้แค่ 1 คลาส (คล้ายกับ Logistic Regression) ถ้าอยากมี output หลายๆคลาสก็ต้องมีหลายๆ LTU นั้นเอง โดยในตัว Neuron จะมี Weight Sum คือการรวมน้ำหนักที่ต่อเข้า Neuron ด้วยสมการเฉพาะตัว และมี Step function ในการคำนวณค่าออกมาว่าเป็นคลาสอะไร

https://www.oreilly.com/library/view/neural-networks-and/9781492037354/ch01.html

LTU Problem

ทีนี้มาถึงสาเหตุที่ทำไม LTU ถึงได้เลิกนิยมไปช่วงหนึ่งเพราะมันมีปัญหาตรงที่ทำนายได้แค่เส้นตรงนั้นเอง ในปี 1969 Marvin Minsky และ Seymour Papert ได้เขียน paper ออกมาโจมตีว่า “ a number of serious weaknesses of Perceptrons”

โดยถ้าข้อมูลของเราถูกแบ่งกันไว้อย่างเห็นได้ชัด สามารถเอาเส้นตรงแบ่งได้ก็จะไม่พบกับปัญหาชนิดนี้

ถ้าข้อมูลของเราเป็นประเภทที่ไม่สามารถเอาเส้นตรงมาแบ่งได้ละ ?

โจทย์ปัญหาของ LTU เราเรียกว่า XOR Problem

เราจะแยกจุดสีฟ้ากับสีเหลืองออกจากกันอย่างไรถ้าใช้เส้นตรง ?

https://www.oreilly.com/library/view/neural-networks-and/9781492037354/ch01.html

มันไม่สามารถทำได้ ถ้าเราใช้เส้นตรงจะทำให้ความแม่นยำมันกลายเป็น 50/50 ทำให้หลายๆคนเลิกสนใจ Neural Network ไปชั่วขณะ

ยุคที่ 2:การมาถึงของ Multi-layer Perceptron

ปัญหา XOR problem ก็ได้ถูกแก้ไขด้วย Multi-Layer Perceptron นั้นคือการเพิ่ม hidden layer เข้าไป และมี output layer และเชื่อมติดกัน (ต่างกับ LTU หลายๆอันมารวมกันนะ)

https://www.oreilly.com/library/view/neural-networks-and/9781492037354/ch01.html

Backpropagation ได้ถือกำเนิด

หลังจากมีการเพิ่ม MLP เข้าไป Neural network ก็ตันๆไปจนกระทั่งถึงปี 1986 Rumelhart ได้ตีพิมพ์ paper อัลกอริทึมที่ชื่อว่า “Backpropagation”

ปกติ Neural Network เราจะเรียกว่า Feed Forward / Forward pass คือการไปข้างหน้า หมายความว่าปกติแล้ว NN จะรับข้อมูลจาก Input Layer สร้างน้ำหนัก(W) แล้วประมวลผลผ่าน Hidden Layer แล้วออกที่ Output เลย แต่ทีนี้เราให้มันย้อนกลับจาก output กลับมาที่ input โดยที่ Backpropagation หน้าที่ของมันแปลเป็นไทยง่ายๆคือ

ปรับค่าน้ำหนัก(W)ในแต่ละเส้นอีกครั้งโดยดูจาก error/cost ที่เกิดขึ้นในแต่ละ neurons

การมาถึงของ Optimization Algorithms

จากการมาถึงของ Backpropagation เราจะปรับน้ำหนักในแต่ละจุดให้ดีขึ้นเพื่อให้ได้ค่าที่แม่นยำมากยิ่งขึ้นกว่าเดิมแต่วิธีการหาค่าน้ำหนัก(W)ใหม่คือการใช้สิ่งที่เรียกว่า Optimization Algorithms แค่ชื่อก็แปลเป็นไทยได้ว่า “อัลกอริทึมการเพิ่มประสิทธิภาพ” ซึ่งหน้าที่ของมันคือปรับปรุงค่าต่างๆใน neural network ทำให้ output ของเราให้ใกล้เป้าหมายมากขึ้น

โดยเราจะคุ้นๆหูกันดีกับ Gradient Descent ซึ่งเป็น 1 ใน หลายๆอัลกอริทึมของ Optimizer

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

โดยจุดประสงค์ของการเลือกใช้ optimize function คือไปให้ใกล้กับจุดหมายปลายทางให้ใกล้ที่สุดและต้องไว ! ซึ่ง SGD สอบตก เราจึงไม่นิยมใช้ SGD กันอีกต่อไปแล้ว

คุณไม่ได้ไปต่อ SGD !

ใครอยู่กลางดาวและถึงก่อนชนะ

แต่ลองสังเกตุดีๆว่า SGD มันไม่ออกนอกเส้นทางเลย นั้นก็เป็นข้อดีของมันคือไม่หลุดออกนอกลู่นอกทาง เพียงแค่มันช้าเท่านั้นเอง

เมื่อมี backpropagation ก็ต้องมี Activation Function

ทีนี้เมื่อเราใช้ backpropagation แล้วเราก็ไม่สามารถใช้ step function ได้อีกต่อไปเราจึงเปลี่ยนมาใช้ Activation Function (ฟังก์ชั่นการกระตุ้น) มาคำนวณหลังจากที่คำนวณ Weight ของ neuron เสร็จแล้วเพื่อหาว่าเป็นคลาสนี้หรือไม่โดยค่าที่ออกมาจะเป็นความน่าจะเป็นว่าใช่คลาสนั้นหรือไม่ และจะเป็นน้ำหนักให้กับ neurons ตัวถัดไปนั้นเอง

ซึ่ง activation function มีให้เลือกเยอะมากหนึ่งในนั้นคือ Sigmoid ที่อยู่ใน Logistic Regreesion ซึ่งเคยเขียนอธิบายไปแล้วในบทความนี้

ซึ่งปัจจุบันตัวที่ฮิตก็คือ ReLu ซึ่งถ้าคำนวณน้ำหนักแล้วติดลบมันก็จะแสดงออกอย่างชัดเจนเลยว่าไม่ใช่คลาสนั้น (เมื่อ X ≤ 0 ก็จะได้ probability of this class = 0)

https://www.oreilly.com/library/view/neural-networks-and/9781492037354/ch01.html

Algorithm ที่น่าสนใจที่มี Neural Network เป็นส่วนประกอบ

เมื่อเรามาถึงในยุคปัจจุบันเราก็ได้มีอัลกอริทึมย่อยๆของ Neural Network อีกจำนวนมากเช่น

Convolution Neural Network (CNN) เป็นอัลกอริทึมที่เน้นใช้กับรูปภาพโดยจะดึงจุดเด่นของภาพนั้นๆออกมาได้ เพื่อนำมาจำแนก (Classification) ว่าเป็นคลาสอะไร

CNN Layer architecture

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

RNN Layer architecture

สรุป

Neural Network เป็นสิ่งที่ลอกเลียนมาจากเซลสมองของเรา โดยจุดแตกต่างของ Neural Network กับ Machine Learning เลยก็คือ Deep Learning ไม่จำเป็นต้องคัดแยก Feature อีกต่อไป สามารถนำ Input ไปใส่ใน Deep learning ได้เลย

โดยทั้งหมดที่กล่าวมาในบทความนี้เป็นเพียงแค่น้ำจิ้มสำหรับ Deep Learning ซึ่งยังมีเทคนิคและสิ่งที่จะต้องรู้อีกมากมายเกี่ยวกับ Deep Learning ซึ่งในบทความซีรีย์นี้เราจะกล่าวถึงแค่ พื้นฐาน(Activation,Optimize Function,Dropout,ฯลฯ), MLP , CNN , RNN + LSTM ซึ่งเพียงเท่านี้ก็น่าจะเพียงพอแล้วสำหรับพื้นฐานของ Deep Learning ซึ่งหวังว่าผู้อ่านบทความนี้จะได้ความรู้ไม่มากก็น้อย

บทความถัดไป

Deep Learning แบบสามัญชน EP 2 Optimization Algorithms & Activation Function : เรียนกันลึกๆ เหมือนเรือดำน้ำ

Github : https://github.com/peeratpop/Deep_learning_easy_style

Medium : https://medium.com/@pingloaf

Linkedin : https://www.linkedin.com/in/peerat-limkonchotiwat/

--

--

Mr.P L
Editor for

Lifestyle of Programmer & IoT (Node-RED|Blynk) & Data Science (ML,DL,NLP) and Whatever I want to do | cat can coding too | Ph.D. -> VISTEC -> IST