การประยุกต์ใช้ deep learning

“Deep Learning” หรือ “การเรียนรู้เชิงลึก” เป็นสาขาหนึ่งของ Machine Learning หากใครยังไม่ทราบว่า Deep Learning คืออะไรสามารถอ่านบทความ “Deep Learning คืออะไร”

แต่หากใครทราบแล้วและอยากที่จะลงลึงในสาขา Deep Learning แต่ไม่รู้ว่าจะเริ่มต้นอย่างไร วันนี้เรามี 7 ขั้นตอนสำหรับผู้ที่สนใจจะเริ่มต้นเรียนรู้ Deep Learing มาฝากกันครับ

Step 1: Deep Learning 101

หากเข้ามหาวิทยาลัยปี 1 ก็จะพบวิชาที่มีรหัส 101 เต็มไปหมด แน่นอนครับว่าวิชาที่ลงเรียนนั้นเป็นวิชาพื้นฐานเบื้องต้น หรือ Fundamental นั่นเองครับ และเนื้อหาเกี่ยวกับ Deep Learning ก็มีมากมายที่สามารถหาอ่านได้ในอินเตอร์เน็ต ซึ่งผมจะขอรวบรวมเป็น resource ให้ได้ไปศึกษาต่อกันเองครับ (แต่ถ้าหากมีเวลาจะพยายามเขียนเป็นบทความภาษาไทยและรวบรวมไว้ให้ได้อ่านกันครับ)

  • Neural Network History
  • DeepLearning.TV

เมื่อพอเข้าใจความหมายของ Deep Learning กันแล้ว ก็แนะนำให้อ่านบทแรกของหนังสือ Neural Networks and Deep Learning เขียนโดย Michael Nielsen ลองศึกษาตัวอย่างการทำ Deep Learning ให้อ่านตัวเลขที่เขียนด้วยลายมือ

  • Using neural nets to recognize handwritten digits

อันนี้แถมให้ครับ หากมีเวลาก็อ่านกันเพลินๆได้ “Applying deep learning to real-world problems” โดยบทความนี้จะแชร์ประสบการณ์ในการนำ Deep Learning ไปแก้ปัญหาที่เกิดขึ้นจริงในโลกของธุรกิจ

Step 2: Getting Technical

หลังจากเราเห็นภาพรวมของ Deep Learning กันมาแล้วก็ถึงเวลาลงลึกด้านวิชาการกันบ้าง (ขั้นตอนนี้อาจจะเป็นยาขมของใครหลายๆคน แต่หากผ่านไปได้ยาขมก็จะกลายเป็นขนมหวานทันที)

เมื่อตัดสินใจลงลึกด้าน Deep Learning แล้ว ก็คงหนีไม่พ้นคณิตศาสตร์หรือสูตรการคำนวณต่างๆ หากใครมาจากสายโปรแกรมเมอร์อาจจะคิดว่า Deep Learning ก็แค่เรียกใช้ library มาสร้าง model แล้วก็นำไปใช้งานได้ แบบนั้นมันง่ายไปครับ

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

แต่!!!….. เราก็คงไม่ไปรือตำราพีชคณิตสมัยเรียนมหาวิทลัยมานั่งอ่านกันใหม่ แต่เราจะดึงมาเฉพาะส่วนสำคัญๆ ที่จำเป็นเท่านั้นครับ :)

  • Linear Algebra Review (Machine Learning Course) โดย Andrew Ng
  • Algebra Review and Reference โดย Zico Kolter และ Chuong Do
  • Calculus 1: Introduction to the Derivative of a Function โดย Professor Leonard
  • Sigmoid function
  • Quoc Le’s Lectures on Deep Learning
Step 3: Backpropagation and Gradient Descent

อัลกอริทึม feed-forward neural networks ข้อมูลจะถูกส่งไปเพียงหนึ่งทิศทาง กล่าวคือไปข้างหน้าจาก input node ส่งผ่านไปยัง hidden nodes และก็จะส่งไปต่อยัง output nodes เมื่อได้ผลลัพธ์ออกมาก็จะนำมาคำนวณผลลัพธ์กับค่าเป้าหมาย เพื่อหาค่าผิดพลาด (error)

การทำงานข้างต้นเป็นรูปแบบการทำงานอย่างง่าย หรือเพียงแค่ 1 layer แต่ถ้าหากเป็น Neural networks แบบหลาย layer จะมีการใช้อัลกอริทึมแบบ Backwardpropagation (ส่งค่าแบบย้อนกลับ) เพื่อใช้ปรับปรุงค่าน้ำหนักของเครือข่าย และอัลกอริทึมที่บทบาทในการปรับค่าให้เหมาะสมที่สุดก็คือ Gradient Descent

  • Lecture Notes: Some notes on gradient descent โดย Marc Toussaint
  • A Step by Step Backpropagation Example โดย Matt Mazur
  • Neural Networks and the Backpropagation Algorithm
  • Neural Networks Demystified
Step 4: Getting Practical

ถ้าเป็นในมหาวิทยาลัย เมื่อเรียนทฤษฎีกันจนสมองบวมแล้ว ก็ถึงเวลาเข้า workshop ลงมือปฏิบัติกัน

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

ซึ่งเราจะใช้ Deep learning library ที่นิยมในปัจจุบันมา implement ตัวอย่างเช่น

  • TensorFlow เป็น library ที่พัฒนาโดย Google แบบ open source สำหรับการใช้งานด้าน Machine Learning
  • Theano เป็นอีกหนึ่ง library ด้าน Machine Learning ที่พัฒนาด้วยภาษา Python น่าสนใจอีกตัวหนึ่ง พัฒนาโดยมหาวิทยาลัย Montreal
  • Caffe พัฒนาโดย Berkeley Vision and Learning Center (BVLC) แห่งมหาวิทยาลัย University of California, Berkeley
  • Keras เป็น Neural Networks API ที่เขียนด้วย python จัดว่าเป็น library ที่ใช้งานง่ายตัวหนึ่ง ที่สามารถใช้ TensorFlow, CNTK หรือ Theano ในการช่วยทำงาน
  • Torch เป็น Machine Learning ที่พัฒนาด้วยภาษา Lua

สำหรับวิธีการใช้งาน รวมถึง tutorial สำหรับ library ต่างๆ สามาถหาอ่านได้ตามอินเตอร์เน็ตหรือลงเรียนคอร์สที่มีทั้งฟรีและเสียเงินครับ ;)

Step 5: Convolutional Neural Nets and Computer Vision

Computer Vision เป็นสาขาที่ว่าด้วยเรื่องเกี่ยวกับการพัฒนาให้คอมพิวเตอร์สามารถรับรู้หรือมองเห็นได้เหมือนกับตาของมนุษย์ และอัลกอริทึมที่นิยมในสายนี้ก็คือ convolutional neural networks

The convolutional neural network.
  • Deep learning with computer vision tutorial โดย Yoshua Bengio
  • Convolutional Neural Networks with TensorFlow
  • Training LeNet on MNIST with Caffe
  • Convolutional Neural Networks (LeNet) ด้วย Theano
  • (แถมสำหรับขาโหด) ImageNet Classification with Deep Convolutional Neural Networks เป็น paper เป็นการเทรนด์ โดยใช้ Deep Convolutional Neural Network ในการจำแนกรูปภาพขนาดใหญ่กว่า 1.2 ล้านรูป
Step 6: Recurrent Nets and Language Processing

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

  • Recurrent Neural Networks ด้วย TensorFlow
  • Recurrent Neural Networks ด้วย Theano
  • Implementing a CNN for text classification in TensorFlow
  • Convolutional Neural Networks for Sentence Classification (paper)
Step 7: Go Beyond

หากมาถึงขั้นนี้ได้ แสดงว่าคุณก็พร้อมแล้วที่จะออกสู่ทะเลกว้าง ปัจจุบันสาขา Deep Learning ยังมีหัวข้ออีกมากมายที่ให้ได้ศึกษาหรือนำมาพัฒนาต่อยอดได้อย่างหลากหลาย หรือจะลองศึกษาหัวข้อเชิงประยุกต์อื่นๆ เช่น Self-Driving Car เป็นต้น

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

UPDATE Jun 20, 2017 :ปรับปรุงและแก้ไขข้อผิดพลาดใน Step ที่ 3 ขอบคุณ Woratana Perth สำหรับข้อมูลและการแจ้งเตือนข้อผิดพลาด