คลังเก็บป้ายกำกับ: artificial neural network

การเลือกวิธีการสำหรับแก้ปัญหาทางปัญญาประดิษฐ์

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

แต่ผมก็เหมือนกับคนทั่วไป คือมีเวลาเท่ากับคนทั่วไป ดังนั้น ผมเลยต้องกำหนดปัญหาทางปัญญาประดิษฐ์ขึ้นมาก่อน แล้วค่อยคิดว่าจะเอาวิธีการไหนที่เหมาะสมมาแก้ปัญหา!!!

จากการศึกษาโดยส่วนตัวพบว่า วิธีการแก้ปัญหาทางปัญญาประดิษฐ์ที่นิยมใช้กันอย่างกว้างขวางในปัจจุบันนั้น มีอยู่ไม่กี่วิธีไม่ว่าจะเป็น Hidden Markov Model, Artificial Neural Network, Genetic Algorithm เป็นต้น และแต่ล่ะวิธีก็มี Algorithm ที่ถูกคิดค้นออกมาอีกเยอะแยะ ซึ่งบางอย่างก็แก้ปัญหาแบบเฉพาะเจาะจง แต่บางอย่างก็แก้ปัญหาได้กว้าง ๆ และรอให้มีผู้ค้นพบว่ามันควรจะใช้แบบเฉพาะเจาะจงในเรื่องใด ๆ

เดิมการแก้ปัญหาทางปัญญาประดิษฐ์ต่าง ๆ มักจะใช้วิธีการที่แยกจากกัน ไม่มีความเกี่ยวข้องกัน เช่น ถ้าจะรู้จำเสียงพูด ก็จะใช้วิธีการ Hidden Markov Model หรือ Artificial Neural Network อย่างใดอย่างหนึ่งไปเลย เป็นต้น แต่ภายหลังก็ค้นพบกันว่า การผสมผสานวิธีการแก้ปัญหาโดยการนำหนึ่งปัญหามาแบ่งออกเป็นส่วน ๆ แล้วเอาวิธีการแก้ปัญหาที่ดีที่สุดมาใช้เพื่อแก้ปัญหาแต่ล่ะส่วนจะดีกว่า เช่น การรู้จำเสียงพูด แทนที่จะใช้วิธี Hidden Markov Model เพียงอย่างเดียว ก็อาจจะใช้วิธีการ Artificial Neural Network เพื่อแยกแยะอัตลักษณ์ของเสียงพูดก่อน แล้วจึงใช้ Hidden Markov Model เพื่อหาความน่าจะเป็นของเสียงพูด เป็นต้น

มันเลยทำให้เปิดโลกทัศน์ได้อย่างหนึ่งว่า การค้นพบหนทางใหม่ ๆ ในการแก้ปัญหาทางปัญญาประดิษฐ์นั้น ไม่ใช่การทำตาม ๆ สิ่งที่มีคนค้นพบหรือทำซ้ำกันบ่อย ๆ ด้วยวิธีการเดียวตลอดขั้นตอนการแก้ปัญหา หากแต่เป็นการผสมผสานกันด้วยหลายวิธีการ และวิธีการแต่ล่ะวิธีก็ควรจะต้องเหมาะสมกับปัญหาในแต่ล่ะส่วนที่เราต้องการแก้ปัญหา ซึ่งเราจะรู้ได้ว่ามันเหมาะหรือเปล่าเราก็ต้องลองเอง (ทำวิจัยนั่นแหล่ะ อย่างยาก) หรือไม่ก็ดูว่าใครหลาย ๆ คนที่ได้ลองพิสูจน์วิธีการ แล้วมันมีแนวโน้มที่จะใช้ได้ดี ไปได้สวยหรือเปล่า ก็เชื่อเขา ทำตามเขาไปก่อน

พอโม้มาถึงตรงนี้ ก็เลยได้ข้อสรุปไปโดยปริยายว่า เราไม่สามารถจะเรียนวิธีการสำหรับแก้ปัญหาทางปัญญาประดิษฐ์แค่อย่างเดียวแล้วจบ แต่ต้องเรียนหลาย ๆ อย่าง ต้องทำการทดลองซ้ำ ๆ ในวิธีการเหล่านั้นว่ามันแก้ปัญหาได้จริงหรือเปล่า (ซึ่งกินแรงพอควร) ต้องเปรียบเทียบจากคนที่เคยลองแล้ว (โดยการอ่านวารสารวิชาการ, วิทยานิพนธ์) และตัวเราเองก็ต้องมองให้ถึงแก่นว่าปัญหาทางปัญญาประดิษฐ์ของเรานั้น มันแยกออกเป็นส่วน ๆ เพื่อใช้วิธีการหลาย ๆ แบบ (ซึ่งเราคิดว่ามันเจ๋ง) มาแก้ปัญหาได้หรือเปล่า

สรุปก็คือต้องเรียนมาก ๆ รู้เยอะ ๆ นั่นแหล่ะ แล้วมันจะเข้าเส้นเอง ซึ่งผมเองก็ยังคงตั้งหน้าตั้งตาเรียนต่อไปเหมือนกัน

เรื่องจริงเกี่ยวกับ Neural Network ที่ไม่ค่อยมีใครบอก

ช่วงนี้ผมกำลังอ่านหนังสือชื่อ Neural Network Design แต่งโดย Hagan, Demuth และ Beale เป็นการอ่านแบบจริงจังไม่จิงโจ้ อ่านเพื่อหวังจะเอาไปต่อยอดทำวิจัย ไม่ได้อ่านแบบไก่กา ผิวเผิน ลวก ๆ เพื่อเอาไปสอบแล้วก็ลืม ๆ ไปอะไรแบบนั้น

คนนอกที่ไม่เคยเรียนรู้ Neural Network แต่มีความสนใจก็จะเข้าใจไปแบบนึง ส่วนคนในที่ได้เรียนรู้แล้วก็เข้าใจอีกแบบนึง ดังนั้น มาเรียบเรียงความเข้าใจที่เป็นความจริงเกี่ยวกับ Neural Network กันดีกว่า

  • Neural Network เป็นชื่อเรียกสั้น ๆ ถ้าเป็นเต็ม ๆ เขาเรียกกันว่า Artificial Neural Network หรือว่า ANN
  • จริง ๆ แล้ว Neural Network เป็นโมเดลทางคณิตศาสตร์ แต่คนคิดค้นเขาอยากจะให้เข้าใจง่าย ๆ เขาเลยวาดออกมาเป็นรูปภาพ
  • คณิตศาสตร์ที่ใช้เกี่ยวกับ Neural Network จะเป็นพีชคณิตเชิงเส้น, เมตริกซ์ และ เวกเตอร์
  • Neural Network มาเกี่ยวกับสาขาวิชา Computer Science เพราะมันเป็นโมเดลที่ช่วยแก้ปัญหาทางด้าน Machine Learning ซึ่งเป็นแขนงวิชาย่อยของแขนงวิชา Artificial Intelligence ได้
  • เราสามารถทำความเข้าใจ Neural Network ได้หลายวิธี ไม่ว่าจะเป็นการทำความเข้าใจผ่านรูปภาพโมเดล, ผ่านสมการ Summation, ผ่าน Matrix หรือแม้แต่ผ่านรูปภาพปริภูมิ 2 มิติหรือ 3 มิติ สรุปคือแล้วแต่จริตของใครว่าจะถนัดแบบไหน เพราะเข้าใจแบบไหนก็ได้ผลลัพธ์เหมือนกัน เช่นบางคนไม่เคยเรียน Matrix มาก่อน แต่อาจจะเข้าใจด้วยสมการ Summation ก็ได้ เป็นต้น
  • มีนักวิจัยเยอะแยะในโลกใบนี้ ที่พยายามคิดค้น Neural Network ในรูปแบบต่าง ๆ บางรูปแบบก็ไม่เป็นที่นิยม บางรูปแบบเคยเป็นที่นิยมแต่ล้าสมัยแล้ว บางรูปแบบก็แก้ปัญหาได้บางเรื่องแต่บางเรื่องก็แก้ไม่ได้ บางรูปแบบยังต้องต่อยอดไปอีกหลายขุมถึงจะใช้ได้
  • การวิจัย Neural Network รูปแบบใหม่ ๆ เป็นเรื่องยาก นักวิจัยส่วนใหญ่เลยเลือกจะเอา Neural Network รูปแบบที่มีคนคิดขึ้นแล้ว มาประยุกต์เพื่อแก้ปัญหาต่าง ๆ แทน
  • Neural Network เป็นโมเดลทางคณิตศาสตร์ ดังนั้น นักวิจัยส่วนใหญ่จึงมักจะใช้ MATLAB เพื่อทำวิจัย เพราะ MATLAB มันเก่งเรื่อง Matrix และการแสดงผลภาพในปริภูมิ 2 มิติและ 3 มิติมาก ๆ แถมยังมีเครื่องมือเกี่ยวกับ Neural Network ในรูปแบบที่เป็นที่นิยมบรรจุอยู่อีกต่างหาก
  • การทำให้ Neural Network ฉลาดก็คือการสอนมัน แต่เรื่องจริงไม่ได้หมายความว่าเราใช้ปากไปสั่งสอนมัน หรือใช้การเขียนโปรแกรมไปสั่งมันแบบนั้น แต่มันหมายถึงการที่เราป้อนตัวอย่างข้อมูลให้มัน แล้วให้มันถามเรากลับมาว่า “ใช่” หรือ “ไม่ใช่” หรือ “เกือบใช่” หรือ “เกือบไม่ใช่” หรือ “คล้ายจะใช่” หรือ “คล้ายจะไม่ใช่” แล้วให้เราตอบมันกลับไปว่าเออมันต้องอย่างนั้นนะอย่างนี้นะ ให้มันจำของมัน แล้วก็ปรับค่าน้ำหนักไปเรื่อย ๆ
  • ถ้าจะให้มันฉลาด เราก็ต้องป้อนตัวอย่างข้อมูลให้มันเยอะ ๆ แต่พอเป็นแบบนั้น เราเองก็ขี้เกียจมาตอบมันเหมือนกัน ดังนั้น เราก็ต้องตอบมันไประดับนึง แล้วจากนั้นก็ให้มันตอบคำถามของตัวเอง ให้มันปรับตัวของมันเอง
  • เคยอ่านเจอที่ไหนไม่รู้เขาบอกว่า ถ้าจะให้ Neural Network ปรับตัวและปรับค่าน้ำหนักจนกระทั่งนึกรู้ได้แม่นยำ เราต้องป้อนตัวอย่างข้อมูลเพื่อสอนมันเป็นล้าน ๆ ชิ้นเลยทีเดียว
  • นักวิจัยส่วนใหญ่ที่เอา Neural Network ไปทำ Pattern Recognition มักไม่เคยได้ค่่าความแม่นยำเกิน 85% เลย ไม่รู้ทำไมเหมือนกัน?
  • สุดท้ายนักวิจัยส่วนใหญ่ก็เลยหันเหไปวิจัยแบบผนวก โดยการแก้ปัญหา Pattern Recognition ด้วยการใช้ Neural Network รวมกับ Genetic Programming แทน

สรุปแล้ว งานวิจัยทางด้าน Pattern Recognition ล้วนใช้คณิตศาสตร์อย่างเยอะเลยอ่ะ แล้วผมก็อ่อนคณิตศาสตร์ซะด้วยสิ แย่จริง ๆ