ยินดีต้อนรับสู่บทความใหม่ในชุดการเรียนการสอน Machine Learning : เรียนรู้ให้ลึกขึ้นกับเครือข่ายประสาทเทียม และ TensorFlow
เครือข่ายประสาทเทียมเป็น ระบบ Algorithm ที่ได้รับแรงบันดาลใจมาจากเครือข่ายประสาทที่อยู่ในสมอง ของคุณ (เครือข่ายประสาทชีวภาพ) ในยุคเริ่มแรก Artificial Neural Network เป็นงานวิจัยที่เกิดจากการผ่าสมองของสิ่งมีชีวิตแล้วศึกษาการทำงานของระบบประสาทที่อยู่ภายใน
เครือข่ายประสาทเทียมที่ผมจะอ้างถึงตอนนี้ แท้ที่จริงแล้วไม่ใช่คอนเซ็ปต์ใหม่อะไรเลย ไอเดียนี้เริ่มมีมาตั้งแต่ปี 1940 แล้ว แต่มีสิ่งที่ทำให้มันกลับมาอยู่ในความสนใจของสาธารณะชนและนักวิจัยอีกครั้งก็คือประสิทธิภาพของมันนั้นเอง เมื่อเปรียบเทียบกับ อัลกอริทึมอย่างเครื่องเวคเตอร์สนับสนุน (Support Vector machine) (SVM) แล้ว Algorithm อย่าง เครือข่ายประสาทเทียมได้รับความนิยมมาก จนถึงกลางยุค 90 เมื่อ SVM ถูกเอามาเพิ่มความสามารถใหม่ๆ (เทคนิคของ SVM เช่นกันถูกคิดขึ้นมานานแล้วก่อนที่มันจะ ถูกนำไปใช้จริง) อย่างเช่นเทคนิค "Kernel" ทำให้ SVM มีความสามารถในการทำงานร่วมกับชุดข้อมูลที่ไม่สามารถแยกได้เป็นแบบเชิงเส้น (ไม่มีความเป็น linearity ) ด้วยKernelนี้ เครื่องจักรเว็กเตอร์สนับสนุน (Support Vector Machine) จึงมีการพัฒนาไปด้านหน้าอีกครั้งอย่างมาก โดยทิ้งห่าง Neural Network ไว้ด้านหลังและจนเกือบจะทำให้ Neural Network ไม่มีอะไรน่าสนใจ เพราะว่าผลลัพท์ทางการปฏิบัติของ Neural Network ค่อนข้างกากกว่า SVM เป็นอย่างมาก จนกระทั่งปี 2011 ที่เครือ ข่ายประสาทเทียมเชิงลึก (Deep Neural Network) เริ่มที่จะมีผลลัพธ์ดีกว่า เครื่องเวคเตอร์สนับสนุน SVM โดยการใช้เทคนิคใหม่นี้ทำให้ Deep Neural Network มีความพร้อมใช้งานกับชุดข้อมูลที่ขนาดใหญ่ขึ้น และคอมพิวเตอร์ที่มีประสิทธิภาพมากขึ้น (ก่อนหน้าที่จะมี Technic ที่เรียกว่า Deep Neural Network นี้ การใช้ Neural Network กับ ข้อมูลขนาดใหญ่ขึ้นไม่ได้ทำให้ประสิทธิภาพของ Network แต่อย่างใด)
นี่เป็นเหตุผลที่ว่าทำไมหากคุณมีแผนที่จะเรียนรู้เรื่องต่างๆของสาขาของ Machine Learning การเข้าใจโมเดลอันอื่นๆเป็นเรื่องที่ค่อนข้างจะสำคัญ ในการแก้ไขและเปลี่ยน แปลง Model ในแบบใหม่ๆ ซึ่งในตอนนี้เรามีคอมพิวเตอร์ที่สามารถใช้งานเครือข่ายประสาทเทียมได้อย่างแท้จริง เรามีสถานการณ์ที่ค่อนข้างน่าสนใจเนื่องจากผู้คนได้ ขบคิดเรื่องนี้มานานหลายทศวรรษแล้ว มันไม่ใช่เรื่องแปลกใหม่อะไรถ้าใครจะทำงานวิจัยและตีพิมพ์มันออกมาในสาขาของ Deep Neural Network และพบว่ามี คนทำงานวิจัยแบบนั้นอยู่แล้ว
โมเดลของเครือข่ายประสาทเป็นคอนเซ็ปต์ที่ง่ายมากๆ ไอเดียก็คือการเลียนแบบ เซลล์ประสาท (Perceptron) และในเซลล์ประสาท โดยพื้นฐานคุณจะมี dendrites (รับข้อมูลกระแสไฟฟ้าจาก Node อื่น ), nucleus , axon (ปล่อย output) และ terminal axon (ปล่อย output ไปยัง Node อื่นๆ)
ต่อไป สำหรับเครือข่าย คุณจำเป็นที่จะต้องมีเซลล์ประสาท 2 ตัว เซลล์ประสาท จะส่งต่อข้อมูลผ่านทาง synapse ระหว่าง dendrites ของอันหนึ่งกับ terminal axon ของอีกอันหนึ่ง
ด้วยเหตุนี้ นี่คือวิธีการทำงานของเซลล์ประสาทที่นักประสาทวิทยาศึกษามา ตอนนี้นักวิทยาศาสตร์คอมพิวเตอร์เข้ามาทำงานต่อ จากความคิดดังกล่าว ดังนั้น เราจะเสนอโมเดลของเซลล์ ประสาทเทียมที่มีหน้าตาเหมือน :
เป็นอันเสร็จสิ้น หลังจากนั้นเพื่อให้เซลล์ประสาทของคุณวาดติดกันได้เยอะๆ โดยทั่วไปแม้ว่าเราจะวาดสิ่งที่ ง่ายกว่าด้านบนและถ้าคุณลอง google ภาพเครือข่ายประสาทคุณอาจจะเห็นบางอย่าง เช่น :
วงกลม คือ เซลล์ประสาทหรือ nodes และใน node ก็จะมีการทำงานกับข้อมูล และเส้นเชื่อมต่อพวกมันจะมีน้ำหนัก (weight) แต่ละคอลัมน์เป็นชั้น (Layer) ชั้นแรกของข้อมูลของคุณ คือเลเยอร์ข้อมูลเข้า (input layer) จากนั้นยกเว้นกรณีที่ผลลัพธ์ของคุณเป็นข้อมูลขาเข้าเลย คุณมีเลเยอร์ที่ซ่อนอยู่ (Hidden Layer ) อย่างน้อยหนึ่งLayer ถ้าคุณมีเลเยอร์ที่ถูกซ่อน 1 อัน ดังนั้น คุณจะมีเครือข่ายประสาทเทียมแบบปกติคือไม่ใช่ Deep Neural Network ถ้าคุณเลือกที่จะมีเลเยอร์ที่ซ่อน(Hidden Layer) อยู่มากมายคุณจะมีเครือข่ายประสาทเทียมที่เชิงลึก(Deep Neural Network ) ง่ายไหม? อย่างน้อยๆ ก็ในแนวคิดนั้นเอง ดังนั้นด้วยโมเดลนี้ คุณมีข้อมูล input คุณทำการน้ำหนัก (weight)มัน และส่งมัน ผ่านไปยังการทำงานในเซลล์ประสาท การทำงานในเซลล์ประสาท คือ ฟังก์ชั่น(Function) และเกณฑ์(Threshold) ซึ่งเรียกว่า Activation Function โดยทั่วไปแล้วก็คือผลรวมของค่าทั้งหมด หลังจากการน้ำหนักด้านบนหรือด้านล่างของค่าที่กำหนด ถ้าเป็นเช่นนั้น คุณจะส่งสัญญาณ (1) ออกหรือถ้าไม่มีอะไรถูกตาม Threshold ก็ Output (0) นั่นคือน้ำหนักและส่งผ่าน ไปยังเซลล์ประสาทต่อไปและการทำงานประเภทเดียวกันจะถูกเรียกใช้ในการที่จำคำนวณนี้
เพราะน้ำหนักที่พวกเขาสุ่มในการเริ่มต้น และมีเอกลักษณ์เฉพาะสำหรับแต่ละ อินพุทไปยัง node/เซลล์ประสาท ใน “feed forward” ดั้งเดิม (ชนิดที่เบสิคที่สุด ของคุณ) เครือข่ายประสาท , คุณมีการส่งผ่านข้อมูลผ่านทางเครือข่ายที่คุณได้ สร้างขึ้นและคุณก็เปรียบเทียบผลลัพธ์กับสิ่งที่คุณหวังว่าผลลัพธ์จะใช้ข้อมูล ตัวอย่างของคุณ จากตรงนี้ คุณจำเป็นที่จะต้องปรับน้ำหนักเพื่อช่วยให้คุณได้รับ output ที่ตรงกับ output ที่คุณตั้งใจเอาไว้ การกระทำการส่งข้อมูลผ่านเครือข่าย ประสาทเทียมเรียกว่าเครือข่ายประสาทเทียมแบบส่งกำลัง (feed forward neural network) ข้อมูลของเราไปจากอินพุตไปจนถึงเลเยอร์ตามลำดับจากนั้นจะส่งออก เมื่อเราถอยหลังและเริ่มปรับน้ำหนักเพื่อลดการสูญเสีย/ค่าใช้จ่ายนี้ เรียกว่าการ เผยแพร่กลับ
นี่เป็นปัญหาการ optimization ใหม่ เรียกคืนเครื่องเวกเตอร์สนับสนุนปัญหาการ optimization จากบทเรียนไม่กี่แบบที่ผ่านมาและวิธีการที่เราอธิบายว่าเป็นปัญหา การ optimization ที่เพิ่มขึ้นออกมาที่ดี ถึงแม้ว่าเราจะมีตัวแปร 2 อัน ปัญหาการ optimization ของพวกเราเป็นรูปร่างของถ้วยที่สมบูรณ์แบบ ดังนั้น เราจะต้องรู้ ทั้งคู่เมื่อเรามาถึงการ optimization และยังใช้ขั้นตอนที่ยิ่งใหญ่เพื่อที่จะทำให้การ ดำเนินการนั้นมันถูกต้อง ด้วยเครือข่ายประสาท นี่ไม่ใช่กรณีในทางปฏิบัติ จริงๆคุณกำลังมองหาสิ่งอื่นๆอีก เช่น มีตัวแปรนับแสนหรือหลายล้านตัวขึ้นไป วิธีแก้ปัญหาเดิมคือการใช้การไล่ระดับสีไล่ระดับแบบสุ่ม แต่มีตัวเลือกอื่นๆ เช่น AdaGrad และ Adam Optimizer โดยไม่คำนึงว่างานนี้เป็นงานที่ต้องคำนวณ ขนาดใหญ่
ตอนนี้คุณก็จะเห็นแล้วว่าทำไมเครือข่ายประสาทถึงถูกเก็บไว้ที่ซ้ายสุดของตู้หนังสือมากกว่าครึ่งศตวรรษ เมื่อไม่นานมานี้เรามีอำนาจและสถาปัตยกรรมในเครื่องของ เรา แม้จะพิจารณาการดำเนินการเหล่านี้และชุดข้อมูลที่มีขนาดเหมาะสมเพื่อให้ ตรงกัน สิ่งที่ดีคือแม้ว่าเราจะใช้เวลาในช่วงครึ่งศตวรรษ เพื่อปรัชญาในหัวข้อนี้และ ได้มีการทำผลงานมากมายเกี่ยวกับปัจจัยพื้นฐานแล้ว แต่ก็ต้องมีการใช้งานและ ทดสอบ
น่าสนใจพอสมควรเช่นเดียวกับที่เราไม่เข้าใจสมองของมนุษย์อย่างสมบูรณ์เราไม่ เข้าใจจริงๆว่าทำไมหรือวิธีที่เครือข่ายประสาทได้รับผลลัพธ์ที่น่าสนใจเช่นนี้ ผ่าน การขุดและวิเคราะห์จำนวนมากเราสามารถทำให้บางสิ่งบางอย่างกระจัดกระจาย แต่เนื่องจากตัวแปรและมิติต่างๆเราไม่ค่อยรู้อะไรมากนักเกี่ยวกับสิ่งที่เกิดขึ้นเรา เห็นผลดีและมีความสุข แม้ตัวอย่างแรกของเราจะเป็นหลักการพื้นฐาน แต่จะมี ผลลัพธ์ที่ดีมากสำหรับสิ่งที่ทำอยู่
สำหรับงานจำแนกประเภทที่เรียบง่ายเครือข่ายประสาทมีความใกล้เคียงกับ สมรรถนะของอัลกอริทึมแบบอื่น ๆ แม้แต่บางอย่างเช่น K เพื่อนบ้านที่ใกล้ เคียงที่สุด ความงามที่แท้จริงในโครงข่ายประสาทมีข้อมูลที่ใหญ่กว่ามากและคำถาม ที่ซับซ้อนมากขึ้นซึ่งทั้งสองแบบนี้ทำให้โมเดล machine learning อื่นๆ รู้สึกอับอาย ตัวอย่างเช่นปัจจุบันเครือข่ายประสาทสามารถทำสิ่งต่างๆเช่นตอบคำถาม :
Jack อายุ 12 ปี Jane อายุ 10 ปี Kate อายุมากกว่า Jane แต่เด็กกว่า Jack แล้ว Kate อายุเท่าไหร่?
คำตอบ คือ 11 และรูปแบบการเรียนรู้ลึกๆ สามารถคิดออกได้โดยที่คุณไม่ได้สอน มันเกี่ยวกับวิธีทำตรรกะส่วนหนึ่ง คุณเพียงแค่ส่งข้อมูลดิบเข้าไปซึ่งอาจเป็นคำหรือ ตัวอักษร เครือข่ายประสาทจะทำส่วนที่เหลือ และคุณจำเป็นที่จะต้องใช้ตัวอย่าง เป็นล้าน ผมหมายถึงประมาณครึ่งพันล้านเพื่อความถูกต้องในอุดมคติ
คุณจะได้รับตัวอย่างเป็นล้านๆจากสิ่งนี้ได้จากที่ไหน? คุณมีตัวเลือกบางอย่าง ตัวเลือกหนึ่งด้วยข้อมูลภาพ คือ ImageNet ซึ่งทำงานได้เหมือน wordnet ใน องค์กรของสิ่งต่างๆ หากคุณไม่คุ้นเคยคุณสามารถกระตุ้นไปรอบๆเพื่อให้ได้ แนวคิด ทุกๆอย่างที่นี่ฟรี ต่อไปสำหรับข้อมูลข้อความ จุดหยุดแรกๆควรจะ เป็นบางสิ่งที่เหมือนกับ wikipedia data dumps นี่เป็นประโยชน์สำหรับงาน การเรียนรู้ที่ลึกซึ้งมากขึ้น ไม่มากนักสำหรับข้อมูลที่ติดฉลากถัดไปสำหรับข้อมูล ข้อความที่มากขึ้น ทำไมคุณถึง ไม่ไปหาเว็บไซต์ที่รวบรวมข้อมูลและวิเคราะห์ ข้อมูลสำหรับคุณอยู่แล้ว? ถ้าสิ่งนี้มันฟังดูน่าสนุก ไปดูที่ CommonCrawl ชุดข้อมูลนี้ไม่ใช่เรื่องตลก อย่างไรก็ตาม petabytes ของมันก็มีค่าของข้อมูล สำหรับสิ่งนี้ ผมไม่ได้รู้ทั้งหมด อีกตัวเลือกหนึ่ง คือ บางสิ่งบางอย่างที่เหมือน Tatoeba ซึ่งมีทั้งฉลากและแม้แต่การแปลบางอย่าง ซึ่งค่อนข้างที่จะมีประโยชน์ เมื่ออันอื่นๆทั้งหมดล้มเหลว คุณสามารถลองสร้าง ชุดข้อมูลของคุณเองได้ แต่ ความต้องการของขนาดค่อนข้างท้าทาย นอกจากนี้คุณ สามารถถามได้ตลอดเวลา ในประสบการณ์ของผม มันมีชุดข้อมูลสำหรับบางสิ่งบางอย่าง คุณจะต้องหามัน หลายๆครั้ง Google ทำให้คุณล้มเหลวเมื่อพยายามหาชุดข้อมูล แต่ผู้คนสามารถ ช่วยคุณได้ ในขณะนี้คุณอาจลองถามใน Machine Learning subreddit อาจเป็นไป ได้ว่า 90% ของสิ่งที่เกิดขึ้นมีเครือข่ายประสาทเทียมเกี่ยวข้องอยู่ด้วยและทุกคน จำเป็นที่จะต้องรู้เกี่ยวกับชุดข้อมูลขนาดใหญ่
ตอนนี้ ทำไมบริษัทต่างๆเช่น Facebook และ Google จึงมีขนาดใหญ่มากใน AI และเครือข่ายประสาทเทียม โดยเฉพาะอย่างยิ่ง พวกเขามีปริมาณข้อมูลที่จำเป็น ต้องทำเพื่อทำสิ่งที่น่าสนใจบางอย่าง
ตอนนี้เราออกจากทางนั้นได้แล้ว เราจะมีวิธีการที่เราจะได้ทำงานเกี่ยวกับเครือข่าย ประสาทเทียมอย่างไร? เรากำลังจะใช้ TensorFlow ซึ่งเป็นแพคเกจใหม่ที่ค่อนข้าง ใหม่จาก Google ซึ่งยังอยู่ในช่วงเบต้าในขณะที่เขียนข้อมูลนี้ มีชุดอื่นๆ ที่ใช้ สำหรับ Learning Machine เช่น Theano หรือ Torch แต่มันทำงานในทิศทาง เดียวกัน เราจำเป็นที่จะต้องเลือกอย่างหนึ่ง ผมเลือก Tensorflow ในการเรียน การสอนอันถัดไป เราจะต้องติดตั้ง Tensorflow ถ้าคุณติดตั้ง Tensorflow เรียบร้อยแล้ว คุณสามารถข้ามการเรียนการสอนอันต่อไปได้เลย (ใช้แถบนำทาง ด้านข้างหรือเพียงคลิกไปที่ ถัดไป ให้เลื่อนไปที่ด้านล่างแล้วคลิกถัดไปอีกครั้ง)
There exists 1 quiz/question(s) for this tutorial. [https://pythonprogramming. net/+=1/] for access to these, video downloads, and no ads.
การเรียนการสอนถัดไป : https://pythonprogramming.net/installing-tensorflow-machine-learning-tutorial/?completed=/neural-networks-machine-learning-tutorial/
References :
https://pythonprogramming.net/neural-networks-machine-learning-tutorial/
Tag ที่น่าสนใจ: neural_networks artificial_neural_network machine_learning deep_neural_network support_vector_machine svm linearity kernel classification regression feature_engineering perceptron synapse activation_function threshold
หากมีข้อผิดพลาด/ต้องการพูดคุยเพิ่มเติมเกี่ยวกับบทความนี้ กรุณาแจ้งที่ http://m.me/Expert.Programming.Tutor
085-350-7540 (DTAC)
084-88-00-255 (AIS)
026-111-618
หรือทาง EMAIL: NTPRINTF@GMAIL.COM