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

สาเหตุที่ไม่ค่อยชอบ Neural Network ซักเท่าไหร่

เห็นทุกวันนี้งานทางด้าน AI ใช้ Neural Network มากขึ้นเรื่อย ๆ ซึ่งโดยส่วนตัวแล้วไม่ค่อยชอบโมเดลปัญญาประดิษฐ์แบบ Neural Network ซักเท่าไหร่ เพราะ …

Model Neural Network แบบต่าง ๆ
Model Neural Network แบบต่าง ๆ
  1.  แปลความยาก คือเวลามันเรียนรู้แล้วสร้างเส้นแบ่ง เส้นแบ่งมันเป็นเส้นโค้ง โค้งไปมาตามข้อมูลที่มันเรียน มันเลยไม่มีความเป็นกลาง ลองนึกถึงว่าเราตีเส้นตรงเพื่อแบ่งเขต เรายังตีความง่าย แต่พอมันโค้ง เราต้องตีความว่าทำไมมันโค้ง มันหลบทำไม มันมีอะไรพิเศษถึงต้องโค้งหลบ (มันเหมือนทางด่วนที่สร้างหลบบ้านคนรวยมั้ย)
  2. ถ้าอยากได้เส้นแบ่งเป็นเส้นตรง ก็ต้องเลือกใช้ Neural Network แบบ Perceptron แต่มุมเอียงของเส้นตรงที่แบ่งข้อมูล ก็จะเอียงแบบไม่มีหลักการ ถ้าเอาไปเทียบกับ Linear Support Vector Machine หรือ Linear Discriminant Analysis พวกนั้นยังตีเส้นตรงแบ่งแบบมีหลักการกว่าเยอะ
  3. มันช้า แต่ล่ะ epoch แปรผันตรงกับ node และ layer ยิ่งเยอะ ยิ่งช้า
  4. โมเดลมันเป็นแบบปลายเปิด คือ ไม่รู้ว่าจะต้องออกแบบ Hidden Layer หรือ Recurrent Layer หรือ Kernel Layer กี่ node หรือกี่ layer ถึงจะเหมาะกับปัญหาที่จะแก้ ต้องลองผิดลองถูกไปเรื่อยๆเอง
  5. การสุ่มค่าน้ำหนักเริ่มต้น เป็นไปตามดวง สุ่มไม่ดีเรียนรู้ช้า สุ่มดีเรียนรู้เร็ว
  6. ต้องใช้ข้อมูลเพื่อเรียนรู้เยอะมาก กว่าจะแบ่งเขตข้อมูลได้อย่างเหมาะสม

ไม่รู้คนอื่นเจอแค่ไหน แต่ที่ส่วนตัวเคยสัมผัสมา ก็ประมาณนี้

แต่ก็ไม่ใช่ว่า Neural Network จะไม่มีอะไรดีเลยในสายตาผมนะ ผมยังมองว่ามันมีจุดดีอยู่บ้าง ซึ่งเป็นจุดที่ผมชอบมาก ๆ เลย

นั่นก็คือ เมื่อสร้าง Model Neural Network ขึ้นมา แล้วสอนมันจนได้ประสิทธิผลที่พอใจแล้ว เราก็ไม่จำเป็นจะต้องสนใจกับข้อมูลที่สอนอีกต่อไป สนใจเฉพาะโมเดลที่ได้ก็พอ

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

สร้างปัญหาใหม่ เพื่อแก้ปัญหาเก่า

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

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

เดี๋ยวนี้มีการนำ “ความน่าจะเป็น” เข้ามาช่วยแก้ปัญหาทางด้านปัญญาประดิษฐ์มากขึ้น โดยโมเดลหรืออัลกอริทึมที่มักจะถูกนำเสนอ ส่วนใหญ่จะเน้นการหาความน่าจะเป็นในเส้นทางการตัดสินใจทั้งหมด

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

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

ยกตัวอย่างเช่น การใช้ Hidden Markov Model ในการแก้ปัญหา Speech Recognition เพื่อค้นหาเส้นทางที่จะให้ความน่าจะเป็นที่มีค่ามากที่สุด ระหว่าง Hidden States (ป้ายคำ) และ Observation States (คลื่นเสียงซึ่งผ่านการ Overlap Window, ผ่านการเข้า Hamming Window และ ผ่านการประมาณพันธะเชิงเส้น เพื่อหาสัมประสิทธิ์บ่งจำเพาะช่วงเสียง ซึ่งเป็นตัวแปร 10 – 15 ตัว สำหรับแทนเอกลักษณ์ของช่วงคลื่นเสียงนั้น ๆ)

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

Speech Recognition <- Hidden Markov Model <- Viterbi Algorithm

บางครั้ง การแก้ปัญหาของปัญหาก็ไม่ได้เกิดขึ้นแค่ 2 จังหวะ แต่อาจจะเกิดขึ้น 3 จังหวะ เช่น การใช้ Neural Network เพื่อมาแก้ปัญหา Pattern Recognition ซึ่งการทำให้ Neural Network เรียนรู้คำตอบที่เหมาะสม เราก็จำเป็นต้องป้อนค่ากลับให้กับ Neural Network แต่ตัว Neural Network เองก็มีปัญหาในการป้อนกลับค่าเหมือนกัน เพราะยิ่งมีเส้นโครงข่ายและลำดับชั้นใน Neural Network มากเท่าไหร่ ก็ยิ่งต้องใช้เวลาในการคำนวณเพื่อป้อนกลับค่ามากเท่านั้น ดังนั้น จึงมีคนคิดจะประยุกต์ใช้ Genetic Algorithm เพื่อช่วยเฟ้นสุ่มเส้นทางที่เหมาะสมในการป้อนค่ากลับ (เส้นไหนมันไม่จำเป็นใช้ ก็ไม่ต้องเสียเวลาไปป้อนค่ากลับให้มัน)

Pattern Recognition <- Neural Network <- Backpropagation <- Genetic Algorithm

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

เรื่องจริงเกี่ยวกับ 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 ล้วนใช้คณิตศาสตร์อย่างเยอะเลยอ่ะ แล้วผมก็อ่อนคณิตศาสตร์ซะด้วยสิ แย่จริง ๆ