สวัสดีครับทุกคน สำหรับเพื่อนๆ ที่เพิ่งเริ่มต้นศึกษา AI และ Deep Learning อาจจะมีข้อสงสัยต่างๆ มากมายในหลายๆ ประเด็น ในบทความนี้เราจะพยายามสรุปคำถาม-คำตอบความเข้าใจขั้นพื้นฐาน เพื่อให้เพื่อนๆ ได้ความกระจ่างและเริ่มต้นศึกษาได้อย่างมั่นใจครับ
จริงๆ แนวคิดเรื่อง neuron หรือโมเดลที่จำลองสมองมนุษย์บน computer ซึ่งเป็นแก่นของ Deep Learning นั้นมีมาตั้งแต่ยุคต้นๆ ของ AI ตั้งแต่สมัย 1960 และแนวคิดหลักๆ ในการ optimize Neural Networks (Backpropagation) ก็ตีพิมพ์ในช่วง 1980
อย่างไรก็ดี ช่วงระหว่างปี 1960-2000 แนวคิด Neural Networks ยังไม่โดดเด่นเหนือแนวคิดอื่น ทำให้แนวคิดอื่นที่เรียบง่ายกว่า เช่น ต้นไม้ตัดสินใจ (Decision Tree) หรือ มีคณิตศาสตร์ที่รองรับมากกว่า เช่น Support Vector Machine เป็นที่นิยมมากกว่า โดยประสิทธิภาพความแม่นยำนั้นไม่ต่างจาก (Shallow) Neural Networks มาก
แต่เมื่อนักวิจัยสามารถ implement Deep Learning บน GPU ได้สำเร็จในปี 2012 ก็เป็นที่ประจักษ์ชัดเจนว่า Deep Neural Networks นั้นมีศักยภาพสูงกว่าโมเดลอื่นๆ โดยเฉพาะในกรณีที่ input ซับซ้อนมากๆ เช่น รูปภาพ เสียง ภาษา ฯลฯ เพื่อนๆ ดูช่วงระหว่างรอยต่อในปี 2012 เพิ่มเติมได้ในบทความนี้ครับ
machine พยายามเรียนรู้ “ความรู้” จาก “ข้อมูล” ซึ่งความรู้ที่ได้อาจไม่ถูกต้อง 100% ขออุปมาอุปมัยเสมือน เราพาเด็กเล็กไปเที่ยวสวยสาธารณะ และเห็นต้นไม้นับร้อยต้น
ภาพต้นไม้นับร้อยต้นนี้ คือ “ข้อมูล” ที่ให้เด็กสร้าง “ความรู้” เกี่ยวกับต้นไม้ (machine ก็เช่นเดียวกัน)
ซึ่งความรู้เหล่านี้อาจไม่ถูกต้อง 100% (ทั้งนี้เพราะข้อมูลที่เห็นเพียงต้นไม้ในสวนสาธารณะเท่านั้น) โดยทั่วไป คุณภาพของความรู้ขึ้นอยู่กับ
กล่าวโดยสรุป การออกแบบ learning pipeline ครอบคลุมตั้งแต่เรื่อง training / validation split (การแบ่งกลุ่มข้อมูลเพื่อสอน และทดสอบ ) , metric specification (การออกแบบการวัดผล), การออกแบบโมเดลจากโจทย์ที่มีประสิทธิภาพ ซึ่งเรื่องเหล่านี้ต้องอาศัยประสบการณ์อย่างมากและมักไม่มีในหนังสือเรียน ซึ่งพวกเราจะเรียนรู้ได้จากการแก้ไขปัญหาจริงและจาก top scientists ระดับโลกบน Kaggle ครับ
งานด้านโปรแกรมมิ่งทั่วไปผ่าน Keras และการใช้งาน Open Source อื่นๆ อาจไม่ต้องการคณิตศาสตร์มากเท่าใดนักขอเพียงเพื่อนๆ มีความเข้าใจในหลักการพื้นฐานของสถาปัตยกรรม Neural Networks ประเภทต่างๆ ว่าข้อมูลที่ต้องใช้สอนเป็นอย่างไร และผลลัพธ์จาก Networks เหล่านั้นให้อะไรบ้าง
อย่างไรก็ดี สำหรับผู้ที่สนใจจะพัฒนาตัวเองไปเป็นระดับ AI Master ซึ่งต้องมีการดัดแปลงสถาปัตยกรรม Neural Networks ให้เหมาะสมและมีประสิทธิภาพสูงสำหรับงานเฉพาะด้านนั้น ควรต้องเข้าใจคณิตศาสตร์พื้นฐานบางอย่างเป็นอย่างดีเลยครับ
โดยคณิตศาสตร์พื้นฐานที่ควรรู้นั้น Andrew Ng ผู้ซึ่งเป็นปรมาจารย์ท่านนึงในวงการ ได้ให้คำตอบเรื่องนี้ไว้ในกระทู้นี้ครับ
ซึ่งสรุปได้ย่อๆ ว่าเพื่อให้เข้าใจ Deep Learning อย่างลึกซึ้งและประยุกต์ใช้งานได้อย่างถูกต้อง เพื่อนๆ ก็ต้องรู้คณิตศาสตร์บ้างแต่เป็นเพียงคณิตศาสตร์พื้นฐานระดับปริญญาตรีเท่านั้น ไม่จำเป็นต้องเป็นคณิตศาสตร์ขั้นสูง หรือต้องจบสายคณิตศาสตร์มาแต่อย่างใดครับ
ซึ่ง Andrew แนะนำให้แม่น 3 วิชานี้เป็นหลักครับ : Linear Algebra (ความรู้เกี่ยวกับเมตริกซ์และ Linear Space), Multivariable Calculus (หาอนุพันธ์และกฎลูกโซ่) และ Probability & Statistics ซึ่งทั้งหมดนี้เพื่อนๆ ที่ีไม่มั่นใจสามารถเรียนและทบทวนจากอาจารย์ที่ขึ้นชื่อว่าสอนได้ดีมากที่สุดคนนึงของโลกที่นี้ครับData Science และ Big Data อาจพูดได้ว่าเป็นแขนงที่เกือบจะเป็นเรื่องเดียวกับ Machine Learning หรือการวิเคราะห์ข้อมูลด้วยสถิติทั้งหลาย (อาจไม่จำเป็นต้องจำต้องเป็น Deep Learning) เพียงแต่ว่าในศาสตร์ของ Data Science และ Big Data นั้นจะเน้นเรื่องการประมวลผล จัดเก็บ และจัดเตรียมข้อมูลที่มีปริมาณมหาศาลเป็นพิเศษ ในขณะที่ฝั่ง Machine Learning มักจะสมมติว่าข้อมูลสอนถูกจัดเตรียมมาให้แล้วโดยอัตโนมัติ นอกจากนี้งานด้าน Big Data อาจยุ่งเกี่ยวกับการเซ็ตระบบเพื่อใช้เครื่องคอมพิวเตอร์จำนวนหลายเครื่องร่วมกับคำนวณข้อมูลปริมาณมหาศาลเหล่านี้
อนึ่ง เพื่อนๆ สามารถลองเรียนรู้ Data Science Project แบบปฏิบัติจริงได้ทีนี่ครับ
ในการจะเข้าใจลึกซึ้ง ต้องเรียนที่คอร์สที่ดีที่สุดในโลก (เรียนได้ฟรี) บน coursera จาก Andrew Ng เลยครับ https://www.coursera.org/specializations/deep-learning
ถ้าจำเป็นต้องรีบใช้แบบไม่มีเวลาเรียน ให้ทำความเข้าใจแบบหลักวิศวกรรม นั่นคือหลัก input-output
หลักการคือต้องเข้าใจว่า input และ output ของโมเดลต่างๆ ครับ หลายๆ โมเดลนั้นมี input/output แบบเดียวกัน ใช้แทนกันได้ ก็อาจจะสนใจเฉพาะโมเดลที่ประสิทธิภาพสูงสุดในกลุ่มก็พอ เช่น สนใจ EfficientNet โดยไม่ต้องสนใจ VGG, ResNet, Inception เป็นต้น ทั้งนี้บางโมเดลมีขนาดใหญ่ อาจต้องใช้ GPU ที่มี Memory มากพอ ก็ต้องเลือกขนาดของโมเดลให้เหมาะสมด้วยครับ
ตัวอย่าง
Input : ข้อมูลแบบตาราง excel , Output : ตัวเลข -- ใช้ multi-layers neural networks แบบพื้นฐานที่สุด หรือใช้เทคนิก Machine Learning อื่นๆ ที่ไม่ใช่ Deep Learning เช่น Decision Tree, SVM, Boosting
Input : รูปภาพ , Output : ตัวเลข หรือ รหัสจำแนกประเภท -- VGG, ResNet, Inception, EfficientNet
Input : รูปภาพ , Output : รูปภาพที่แสดงจุดสำคัญ (Mask) -- UNet, Mask-RCNN, PSP-Net
Input : ข้อมูลที่เป็นลำดับ (เช่น time series, texts หรือ เสียง) , Output : ตัวเลข หรือ รหัสจำแนกประเภท -- LSTM, GRU, Transformers, BERT, RoBerta
Input : ข้อมูลที่เป็นลำดับ (เช่น time series, texts หรือ เสียง) , Output : ข้อมูลที่เป็นลำดับ (เหมือน input) เช่น งานแปลภาษา หรือย่อความ หรือเปลี่ยนเสียง-- Encoder-Decoder เช่น Bart, T5
นอกจากนี้เรายังสามารถนำโมเดลข้างต้นมาเรียงต่อกันเองได้ตามความคิดสร้างสรรค์ของเราคล้ายการเล่น LEGO เช่น ถ้า input เราเป็น video ซึ่งเป็นทั้งภาพและลำดับ เราก็สามารถนำ EfficientNet มารวมกับ LSTM ได้เป็นต้น
สุดท้ายนี้มาดูรายละเอียดเพิ่มเติมกับโมเดลสำคัญๆ ในบทความของเราที่อัพเดตเรื่อยๆ ได้ที่นี่ครับ
AI ฉลาดกว่ามนุษย์? อาจต้องตอบว่า ณ ปี 2020 "จริงบางส่วน" ก่อนอื่นเราต้องแยกความฉลาดเป็นสองแบบ คือแบบ "เฉพาะทาง" กับแบบ "ทั่วไป"
ความฉลาดเฉพาะทาง (หรือบางครั้งเรียก ปัญญาประดิษฐ์ "แบบแคบ" - Artificial Narrow Intelligence [ANI] ) หมายถึง AI ที่ Focus งานใดงานหนึ่งเพียงงานเดียว เช่น การเล่นเกมส์ การแก้โจทย์ปัญหา การดูฟิล์ม X-Ray การแปลภาษา การจำหน้าคน เป็นต้น งานเหล่านี้เราเห็นบ่อยในข่าวและงานวิจัยใหม่ๆ ต้องยอมรับว่าในหลายงาน AI นั้นเก่งใกล้เคียงผู้เชี่ยวชาญที่เป็นมนุษย์แล้ว
และเนื่องจากธรรมชาติของคอมพิวเตอร์นั้นทำงาน "ไม่ผิดพลาด" ทำให้ในแง่ของการเล่นเกมส์นั้น AI เก่งกว่ามนุษย์ ดูบทความ "วิเคราะห์ 20 ปีหลังเหตุการณ์ประวัติศาสตร์ “AI” ชนะ “แชมป์โลกหมากรุก” ได้เป็นครั้งแรกในประวัติศาสตร์มนุษยชาติ " ที่นี่ครับ
อย่างไรก็ดี เมื่อไรก็ตามที่ต้องรวมความรู้หลายๆ ด้านเข้าด้วยกัน มักพบได้ว่า AI นั้น "โง่" อย่างไม่ได้เรื่อง ตัวอย่างเช่น แม้แต่ ChatBot ที่ได้ชื่อว่าเก่งที่สุดในปี 2019 อย่าง DiabloGPT ก็ยังคุยกับเราไม่รู้เรื่อง ตอบคำถามไม่ตรงคำถามตลอดเวลา แสดงให้เห็นว่า AI รู้เฉพาะข้อมูลแคบๆ ที่ถูกสอนมาเท่านั้น ลองเล่น Chatbot จากมหาลัยชั้นนำของโลกได้ที่นี่ครับ http://visualchatbot.cloudcv.org/
การจะสร้าง AI ให้มีความรู้หลากหลายเหมือนมนุษย์นั้น เร่ียกว่า Artificial General Intelligence หรือ AGI ซึ่งทางทีม ThaiKeras ได้มีโอกาสเข้าร่วมงาน Conference AI ที่ได้ชื่อว่าดีที่สุดอย่าง ICLR ปี 2020 นักวิจัยทั่วโลกยังเห็นตรงกันว่ายังต้องพัฒนาอีกหลายสิบปีครับ
ดูวิดิโอ "ANI vs. AGI" (ภาษาไทย) เพิ่มเติมที่นี่ครับ
จริงๆ แล้ว AI ในอุดมคติจะมีโมดูลอื่นๆ นอกจาก Learning ด้วย เช่น Knowledge Base, Decision Making และอื่นๆ แต่เนื่องจากงานวิจัย Deep Learning นั้นได้ผลลัพธ์ที่ดีมากๆ ในช่วง 10 ปีที่ผ่านมา ทำให้กลบข่าวงานวิจัยด้านอื่นไปแทบจะหมดสิ้น
ดูวิดิโอ "ส่วนประกอบของ AI" (ภาษาไทย) ที่นี่ครับ
ดั้งเดิมนั้น Keras คือ programming platform ที่ช่วยให้เราเรียนรู้วิธีการเขียน Deep Learning ได้อย่างง่ายดายและรวดเร็วที่สุดครับ จึงเป็นที่มาของชื่อเว็บของเรา ที่ต้องการให้เพื่อนๆ ชาวไทยสามารถเรียนรู้การเขียนโปรแกรม deep learning ได้โดยไม่เสียเวลา
ล่าสุดตั้งแต่ปี 2019 มานั้น ทาง Tensorflow ซึ่งเป็น platform มาตรฐานจาก google โดยตรง ได้ตัดสินใจผลักดัน Keras ให้เป็น API มาตรฐานของ Tensorflow (ตั้งแต่ version 2.0) โดยสมบูรณ์ ดังนั้นด้วยการสนับสนุนและพัฒนาจากทีม google โดยตรง เราจึงมั่นใจได้ว่าการฝึกเขียน Keras นั้นจะไม่ล้าสมัยแน่นอน
Tensorflow คือ Programming Platform ที่ทาง Google พัฒนาขึ้นด้วยตนเองจึงมีประสิทธิภาพสูง รวมทั้งคุณภาพของเอกสารการใช้งานต่างๆ นั้นก็เพียบพร้อม
อย่างไรก็ดี การใช้งาน Tensorflow นั้นค่อนข้างซับซ้อนและต้องอาศัยเวลาในการเรียนรู้พอสมควร ในเวลาต่อมา F. Chollet ซึ่งก็เป็นนักวิจัยที่ Google Lab จึงได้คิดพัฒนา platform ใหม่ที่เรียกว่า Keras ขึ้นมาเพื่อเอาไว้เรียกใช้งาน Tensorflow ในเบื้องหลังและให้พวกเราเขียนโปรแกรมผ่าน Keras ได้โดยแทบจะไม่ต้องยุ่งกับ Tensorflow อนึ่ง ปัจจุบัน Google ประกาศสนับสนุน Keras อย่างเป็นทางการ (ตั้งแต่ Tensorflow 2.0 เป็นต้นมา) ทำให้ Keras จะพัฒนาควบคู่ไปพร้อมกับ Tensorflow ทำให้ผู้ใช้ไม่ต้องกลัวว่าจะล้าสมัยครับ
ในสมัยใหม่นี้ การเขียนโปรแกรมแตกต่างไปจากสมัยไม่กี่ปีก่อน ที่เราจำเป็นต้องซื้อเครื่องคอมพิวเตอร์ ลงโปรแกรมเพื่อเขียนโปรแกรม และ setup tools/libraries ต่างๆ ที่เกี่ยวข้องกับการเขียนโปรแกรมในเครื่องของเรา เพราะเราไม่ต้องทำอะไรพวกนั้นแล้ว เริ่มเขียนได้ทันทีขอแค่มีอินเตอร์เน็ต!!
เริ่มได้ยังไง ในเมื่อเราไม่มีเครื่อง ?
การเขียนโปรแกรมสมัยใหม่ เรียกว่าเขียนบน Cloud นั่นคือ ผู้ให้บริการ Cloud เช่น Google, Amazon หรือ Kaggle นั้นได้ setup เครื่องและสิ่งจำเป็นทั้งหมดให้เราแล้ว สิ่งที่เราทำเพียงแค่เข้า web แล้วเราก็สามารถเริ่มเขียนผ่านเว็บได้ทันที “เสมือน” เรามีเครื่องที่ setup เสร็จแล้ว (คำว่า “เสมือน“ นี้ จึงเป็นที่มาของคำว่า “Virtual Machine”) โดย web browser จะส่งข้อมูลที่เราเขียนไปยัง cloud และส่ง output จาก cloud มาให้เราที่ browser นั่นเอง
บน Kaggle นั้นนอกจากให้เราใช้ VM ฟรีๆ แล้ว ยังเป็น VM คุณภาพสูงที่มี GPU/TPU ในตัว (ปี 2020) ซึ่งจริงๆ แล้วค่าเช่าแพงมากๆ นอกจากนี้เรายังสามารถก้อปปี้โปรแกรมของคนอื่นที่เขียนเสร็จแล้ว มาเขียนต่อบน VM ของเราเอง ซึ่งทำให้การเขียนโปรแกรมนั้นง่ายขึ้นกว่าสมัยก่อนนับสิบเท่า ดังนั้น ยุคนี้นับเป็นยุคทองของการเขียนโปรแกรมอย่างแท้จริงครับ
สมัยก่อนเราคิดว่า CPU (จากค่ายดัง Intel / AMD) คือสมองของคอมพิวเตอร์ ในช่วงปี 2008 นักวิจัยได้ค้นพบว่า GPU ที่อยู่ใน Graphic Card (ปกติใช้ช่วยทำให้แสดงผลกราฟฟิกสวยงาม ใช้เล่นเกมส์) สามารถนำมาช่วยให้การเรียนรู้ของ Machine Learning ทำได้เร็วขึ้นมาก และประสบความสำเร็จในปี 2012 กับการประยุกต์ใช้ในโมเดล AlexNet (บทความนี้ครับ)
ปัจจุบัน (อัพเดตเมษายน 2020) GPU จากค่าย NVIDIA จึงกลายเป็นส่ิงที่ขาดไม่ได้ในการสร้างโมเดล Deep Learning โดย Cards ที่เราหาซื้อได้ทั่วไปคือ GTX 1080 , GTX 2070 และ GTX 2080 สามารถใช้งานได้ดี ได้ในปัญหาส่วนใหญ่ครับ รุ่นที่กำกับว่า ti เช่น 2080ti จะมีหน่วยความจำและประสิทธิภาพเพิ่มขึ้นและราคาก็จะเพิ่มขึ้นตามมา
ในกรณีที่เราเช่า Cloud บน GCP ของ Google หรือ AWS ของ Amazon รุ่น GPU จะมีให้เลือกไล่ตามประสิทธิภาพจากน้อยไปมากคือ K80, P100, T4, V100 เป็นต้น แนะนำให้ใช้ตั้งแต่รุ่น P100 ขึ้นมาครับ
ส่วน TPU คือ Hardware ที่ Google ออกแบบเองเพื่อมาใช้ทดแทน GPU โดย TPU รุ่น V3-8 ที่ให้ใช้ฟรีบน Kaggle มีความเร็วราวๆ V100 4-8 ตัวรวมกัน (ค่าเช่าเป็นแสนต่อเดือน) นับว่าเป็นโอกาสทองที่พวกเราจะได้ใช้ Hardware ระดับสูงฟรีๆ ครับ โดย TPU จะใช้งานง่ายที่สุดบน TF2.x และ Keras เนื่องจาก Google เป็นผู้ออกแบบเอง
โดยทาง ThaiKeras มองว่า TPU เป็นอนาคตของวงการนี้แน่นอนครับ และทีมงานก็กำลังศึกษาให้เชี่ยวชาญเพื่อจะแชร์ความรู้ให้เพื่อนๆ ต่อไปในอนาคต
ผู้สนใจสามารถเริ่มหัดใช้ TPU ฟรีๆ ได้ที่นี่ครับ https://www.kaggle.com/c/flower-classification-with-tpus/
ในปี 2020 นั้นเริ่มแน่ชัดแล้วว่ามีเพียง Keras+Tensorflow และ Pytorch เท่านั้นที่เป็นทางเลือกของ Machine Leraning Engineers มืออาชีพ โดย Keras นั้นใช้งานได้ง่ายที่สุด ในขณะที่ Pytorch จะอนุญาตให้เรา control training flow ได้ง่ายกว่าซึ่งเหมาะสำหรับนักวิจัย แต่ก็ไม่มี official API ที่ง่ายเหมือน Keras
แม้นจะมีนักวิจัยพยายามออกแบบ API สำหรับ Pytorch เช่น Catalyst, Lightning เป็นต้น แต่ API เหล่านี้ยังไม่ได้รวมกับ Pytorch อย่างเป็นทางการเหมือน Keras+Tensorflow ดังนั้น ซึ่งอาจเกิดประเด็นที่นักวิจัยอาจเลิกพัฒนา API เหล่านี้ในอนาคต
สำหรับประสิทธิภาพในแง่ของความเร็วนั้นบน GPU, ส่วนใหญ่Tensorflow มักสูสีกับ Pytorch ในขณะที่ Keras จะช้ากว่าเล็กน้อย อย่างไรก็ดีปัจจุบัน Google / Kaggle มี Hardware TPU ที่เร็วกว่า GPU ในท้องตลาดนับสิบเท่า และสามารถใช้งานได้ง่ายดายด้วย Keras เนื่องจากออกแบบมาพร้อมๆ กัน
ในแง่ของคุณภาพความแม่นยำของโมเดล Keras, Pytorch มักให้ผลใกล้เคียงกัน ดังจะเห็นได้จากผู้ชนะบน Kaggle มักมีทั้งผู้ใช้ Keras / Pytorch สลับกันไป
อย่างที่เกริ่นในบทความนี้ เราต้องมี GPU, Libraries และ Data ถึงจะเริ่มต้นฝึกได้ และโชคดีมากๆ ที่ในปัจจุบันเรามี ทางเลือกฟรีๆ 2 ทางใช้ร่วมกันได้ และมีทางเลือกประหยัดมากๆ อีก 1 ทาง
เมื่อได้เครื่องที่ถูกใจแล้ว ก็สามารถเริ่มต้นจาก Keras Workshops ต่างๆ ของ ThaiKeras เราได้ครับ ซึ่งมีทั้ง Workshops บน images, texts, NLP และ signal งานด้านการแพทย์ งานศิลปะ หรือพื้นฐาน numpy ให้ได้ฝึกกันตามถนัด
https://thaikeras.com/category/workshop/
อย่างไรก็ดีเพื่อนๆ ควรจะมีพื้นฐาน Machine Learning ก่อนเล็กน้อยนั่นคือรู้จักโมเดลต่างๆ เพื่อจะได้เข้าใจโค้ดใน workshops ได้อย่างกระจ่างครับ โดยลองเรียนในคอร์สที่เราแนะนำครับ
https://thaikeras.com/2019/onlinecourses/