20 เม.ย. 2023 เวลา 03:17 • วิทยาศาสตร์ & เทคโนโลยี

ประวัติและหลักการของเครือข่ายประสาทเทียม (Artificial Neural Networks – ANNs)

ในปัจจุบันมีการนำโมเดล machine learning รูปแบบต่าง ๆ มาใช้งานอย่างกว้างขวาง เช่น ใช้ในการจำแนกอีเมลขยะออกจากอีเมลจริง, ใช้ในการแนะนำวิดิโอต่าง ๆ ที่ผู้ใช้อาจจะสนใจ, ใช้ในการปรับแต่งภาพถ่ายในโทรศัพท์ หรือ การทำงานของประสาทเทียม (Neural Network) โดยหนึ่งในโมเดลที่ได้รับความนิยมมากที่สุด คือ เครือข่ายประสาทเทียม (Artificial Neural Networks – ANNs) ในบทความนี้ เราจะพาไปเจาะลึกถึงโครงสร้างและหลักการทำงาน รวมไปถึงประวัติของโมเดลเครือข่ายประสาทเทียมกันนะครับ
ประวัติของโมเดลเครือข่ายประสาทเทียม
แนวคิดเรื่องเครือข่ายประสาทเทียม เริ่มจากโมเดล Perceptron ที่ McCulloch and Pitts ได้เสนอขึ้นมาในปี 1943 และมีการสร้างเครื่อง Perceptron ขึ้นมาทดลองใช้จริงในปี 1958 โดยโมเดลนี้ ใช้สมการการตัดสินใจ (decision function) ดังต่อไปนี้
(1)
โดยที่ \mathbf{w} เป็นเวกเตอร์น้ำหนัก และ b เป็นค่าไบแอสที่โมเดลจะเรียนรู้ขึ้นมาระหว่างการฝึกฝน
รูปที่ 1 Frank Rosenblatt และเครื่อง Mark I Perceptron (ภาพจาก CMU Machine Learning Department)
  • 1.
    สุ่มค่าเริ่มต้นของ \mathbf{w} และ b
  • 2.
    เลือกค่า learning rate r ระหว่าง 0 และ 1
  • 3.
    สำหรับจุดข้อมูล (\mathbf{x}, y) คำนวณค่า f(\mathbf{x}) = \mathbf{w}\cdot\mathbf{x} + b
  • 4.
    ปรับค่า \mathbf{w} และ b โดยใช้สมการ \mathbf{w} = \mathbf{w} + r(y - f(\mathbf{x}))\mathbf{x} และ b = b + r(y - f(\mathbf{x}))
  • 5.
    ทำซ้ำตามจำนวนครั้งที่ต้องการหรือจนกว่าอัตราความผิดพลาดจะน้อยกว่าที่กำหนด
หรือหากอธิบายด้วยภาษาพูด วิธีการฝึกฝนก็คือ เมื่อโมเดลทำนายผิดจาก 1 เป็น 0 ให้บวกจุดข้อมูลที่ผิดพลาดคูณกับ r นั้นเข้าไปใน \mathbf{w} แต่หากทำนายผิดจาก 0 เป็น 1 ให้ลบจุดข้อมูลคูณกับ r ออกจาก \mathbf{w}
รูปที่ 2 ชุดข้อมูลนี้สามารถแยกประเภทได้ด้วยสมการเชิงเส้น (ภาพจาก Wikipedia)
โมเดลนี้ มีข้อจำกัดคือ สมการการตัดสินใจเป็นสมการเชิงเส้น ทำให้ขาดความยืดหยุ่น เนื่องจากบางชุดข้อมูลอาจจะไม่สามารถแยกแยะ หรือทำนายได้ด้วยสมการเชิงเส้น อาจจะต้องการสมการการตัดสินใจที่มีความซับซ้อนมากขึ้น
ในปี 1969 Marvin Minsky ได้เสนอตัวอย่างหนึ่งที่ชัดเจนที่สุดคือ Perceptron ไม่สามารถทำนายค่าของข้อมูลที่มีความสัมพันธ์กันแบบ XOR ได้ กล่าวคือ หากเรามีจุดข้อมูล (x_1, x_2, y) โดยที่ y = x_1 \oplus x_2 และพยายามใช้ฟังก์ชันของ Perceptron ในการเลียนแบบความสัมพันธ์นี้โดยการแก้สมการหาค่า \mathbf{w} และ b ที่ทำให้
(2)
จะพบว่าไม่มีค่า w_1, w_2 และ b ที่เป็นคำตอบของสมการนี้
รูปที่ 3 ข้อมูลที่มีความสัมพันธ์แบบ XOR ไม่สามารถแยกแยะได้ด้วยสมการเชิงเส้น
การแก้ปัญหา XOR นี้มีหลายวิธี วิธีที่ง่ายที่สุดคือการดัดแปลงเวกเตอร์ \mathbf{x} = (x_1, x_2) โดยการเพิ่ม x_3 = x_1\cdot x_2 เข้าไปในเวกเตอร์ \mathbf{x} ทำให้ \mathbf{x} = (x_1, x_2, x_1 \cdot x_2) เมื่อเพิ่มขนาดเวกเตอร์ \mathbf{x} แล้ว ฟังก์ชั่น f(\mathbf{x}) จึงต้องเพิ่มขนาดเวกเตอร์น้ำหนัก \mathbf{w} โดยมี w_3 เพิ่มเข้าไปด้วย ทำให้สมการการตัดสินใจใหม่กลายเป็น
(3)
จะพบว่า w_1 = 2, w_2 = 2, w_3 = -4, b = -1 เป็นคำตอบหนึ่งของสมการนี้ดังจะเห็นได้จากตารางที่ 1
ตารางที่ 1 ค่าของ f(\mathbf{x}) = y = x_1 \oplus x_2
วิธีการดัดแปลงเวกเตอร์ \mathbf{x} ให้สามารถใช้งานกับโมเดลที่เรามีอยู่แล้วนี้เรียกว่าวิธี feature engineering ซึ่งเป็นหัวข้อที่มีความซับซ้อน เราจะยังไม่กล่าวถึงในบทความนี้
อีกวิธีในการแก้ปัญหานี้คือ การเพิ่มขีดความสามารถให้โมเดลมีความยืดหยุ่นมากขึ้น โดยการพัฒนาขั้นต่อมานั้น เป็นการเพิ่ม layer ของ Perceptron เข้าไป โดยมีฟังก์ชันที่ไม่เป็นเชิงเส้นคั่นระหว่าง layers ดังนั้น ฟังก์ชันของแต่ละ layer คือ
(4)
โดยที่ \mathbf{w} และ b เป็นค่าน้ำหนักและไบแอสตามโมเดล Perceptron เดิม แต่เพิ่ม \sigma เป็นฟังก์ชันที่ไม่เป็นเชิงเส้น เช่น ฟังก์ชันsigmoid, tanh หรือ ReLU เมื่อ layer หนึ่งคำนวณค่า f(\mathbf{x}) ได้แล้ว ก็จะส่งต่อค่า f(\mathbf{x}) เข้าสู่ layer ถัดไปให้คำนวณค่า f(\mathbf{x}) ของ layer ถัดไปเรื่อย ๆ จนเมื่อผ่าน layer สุดท้ายแล้วจึงทำนายค่าว่าเป็นเลข 0 หรือ 1 ขึ้นกับค่า f(\mathbf{x}) ของ layer สุดท้ายที่ได้รับมา
โดยโมเดลใหม่นี้มีชื่อว่า Multi-layer Perceptron และมีการนิยามคอนเซ็ปต์ neuron ขึ้นมา เพื่อให้ง่ายต่อการวาดภาพโมเดลที่มีหลาย layer โดยนิยามให้ neuron เป็นส่วนของ layer ที่ทำหน้าที่จัดเก็บเวกเตอร์น้ำหนักและไบแอส \mathbf{w} และ b ของ layer นั้น ๆ และทำการคำนวณตามสมการที่ใช้ในโมเดล เช่น layer หนึ่งมีจำนวน \mathbf{w} ทั้งหมด 10 ค่า ก็จะมี neuron ทั้งหมด 10 เซลล์ทำหน้าที่เก็บค่า \mathbf{w} เหล่านี้
รูปที่ 4 โมเดล Perceptron อย่างง่ายมี layer เดียวเท่านั้นที่มีเวกเตอร์น้ำหนัก \mathbf{w} แต่ละหน่วยในโมเดลนี้เรียกว่า neuron
โครงสร้างพื้นฐานของโมเดล Multi-layer Perceptron ประกอบไปด้วย 3 ส่วน ได้แก่ input layer, hidden layer และ output layer โดยสามารถมี hidden layer ได้หลาย layer ตามความต้องการของผู้ออกแบบโมเดล
รูปที่ 5 โมเดล Multi-layer Perceptron อย่างง่ายที่มี hidden layer อยู่ 1 layer
โมเดลนี้เองก็มีข้อจำกัดหลายอย่าง ทำให้นักวิจัยได้เริ่มทดลองนำ layer มาเชื่อมกันด้วยวิธีต่างๆ เช่น อาจจะนำ output ของ layer ท้าย ๆ ป้อนกลับเข้าไปใน layer ก่อนหน้าพร้อมกับข้อมูลใหม่ (Recurrent Neural Network) หรืออาจจะเลือกที่จะเชื่อม layer ต่าง ๆ โดยเชื่อมเฉพาะ neuron ที่อยู่ใกล้กันเท่านั้น ไม่ได้เชื่อมหมดทั้ง layer (Convolutional Neural Network) เนื่องจากโมเดลในตระกูลนี้ที่สร้างจาก Perceptron สามารถเชื่อมต่อกันได้หลายแบบ จึงได้ถูกตั้งชื่อเรียกรวม ๆ กันว่า Artificial Neural Network นั่นเอง
การฝึกฝนโมเดล Artificial Neural Network
1. สุ่มค่าน้ำหนักเริ่มต้น \mathbf{w} และเลือกค่า learning rate r ระหว่าง 0 กับ 1
2. ทำซ้ำ
- คำนวณค่า gradient ของ L คือ \nabla L(\mathbf{w})
- ปรับปรุงค่า \mathbf{w} = \mathbf{w} - r\nabla L(\mathbf{w})
ค่า gradient ของ L นั้นใช้เวลานานหากทำการคำนวณโดยตรง เนื่องจากค่า L นั้นขึ้นกับค่า \mathbf{w} ของทุกๆ layer ทำให้ต้องคำนวณค่า partial derivative จำนวนมาก ในทางปฏิบัติจึงใช้อัลกอริทึม backpropagation มาช่วยให้การคำนวณนี้เร็วขึ้น โดยเป็นการส่งค่า partial derivative ของ layer หลัง ๆ กลับไปให้ layer ก่อนหน้าเพื่อใช้ในการคำนวณ gradient ของ layer ก่อนหน้าได้ ซึ่งเป็นหลักการของการเขียนโปรแกรมแบบไดนามิค (Dynamic programming)
รูปที่ 6 อัลกอริทืม Backpropagation ส่งค่า partial derivatives จากทางขวากลับไปทางซ้าย (ที่มาของภาพ)
ข้อดีของ neural network
  • 1.
    เป็นโมเดลที่มีความยืดหยุ่นสูงมาก โดย neural network ที่มี 1 hidden layer ที่ไม่จำกัดขนาด สามารถใช้ในการประมาณค่าฟังก์ชันต่อเนื่องใด ๆ ก็ได้ (Universal approximation theorem)
  • 2.
    สามารถเรียนรู้ feature ต่าง ๆ ของข้อมูลได้ด้วยตนเองทำให้ลดความจำเป็นในการทำ feature engineering
ข้อเสียของ neural network
1. มีจำนวนพารามิเตอร์ \mathbf{w} และ b ที่ต้องฝึกฝนจำนวนมาก ทำให้ใช้เวลาในการฝึกฝนนานกว่าโมเดลอื่น ๆ
2. ต้องใช้ข้อมูลในการฝึกฝนจำนวนมากจึงจะได้ผลลัพธ์ที่น่าพอใจ หากข้อมูลที่ใช้ฝึกฝนน้อยเกินไปอาจจะมีประสิทธิภาพด้อยกว่าโมเดลอื่น ๆ ที่เรียบง่ายกว่าได้
3.ไม่มีสูตรตายตัวในการเลือกวิธีเชื่อมต่อ layer ต่าง ๆ เลือกจำนวน layer และเลือกจำนวน neuron ในแต่ละ layer ทำให้ใช้เวลานานในการลองผิดลองถูกก่อนที่จะได้โมเดลคุณภาพสูง บ่อยครั้งที่โมเดลที่มีจำนวน layer น้อยกว่าอาจจะมีประสิทธิภาพสูงกว่าโมเดลที่มีจำนวน layer มากก็เป็นไปได้
ผู้เขียนหวังว่าผู้อ่านจะได้รับความเข้าใจถึงที่มา หลักการทำงานในทางเทคนิคของ neural network รวมถึงข้อดีข้อเสียของโมเดลชนิดนี้ และได้รับความรู้เพียงพอที่จะช่วยประกอบในการนำโมเดลไปใช้งานต่อ ว่าควรจะใช้โมเดลชนิดนี้หรือไม่ หรือควรจะใช้โมเดลชนิดอื่นที่มีความเรียบง่ายมากกว่านี้
สุดท้ายนี้ผู้อ่านสามารถทดลองสร้างโมเดล neural network ของตัวเองได้ที่เว็บไซต์ https://playground.tensorflow.org/ ขอให้สนุกกับการสร้างโมเดลนะครับ อีกสักนิดก่อนจากกัน ผู้เขียนอยากขอแนะนำบทความ AI กับการอ่านสัญญาณสมองมนุษย์ ซึ่งเกี่ยวกับระบบประสาทของมนุษย์จริง ๆ ไว้ให้เพิ่มเติมนะครับ
เนื้อหาโดย ไพโรจน์ เจริญศรี
ตรวจทานและปรับปรุงโดย เมธิยาภาวิ์ ศรีมนตรินนท์
โฆษณา