Taking too long? Close loading screen.

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

Feb 3, 2023

ในปัจจุบันมีการนำโมเดล machine learning รูปแบบต่าง ๆ มาใช้งานอย่างกว้างขวาง เช่น ใช้ในการจำแนกอีเมลขยะออกจากอีเมลจริง, ใช้ในการแนะนำวิดิโอต่าง ๆ ที่ผู้ใช้อาจจะสนใจ, ใช้ในการปรับแต่งภาพถ่ายในโทรศัพท์ หรือ การทำงานของประสาทเทียม (Neural Network) โดยหนึ่งในโมเดลที่ได้รับความนิยมมากที่สุด คือ เครือข่ายประสาทเทียม (Artificial Neural Networks – ANNs) ในบทความนี้ราจะพาไปเจาะลึกถึงโครงสร้างและหลักการทำงาน รวมไปถึงประวัติของโมเดลเครือข่ายประสาทเทียมกันนะครับ

ประวัติของโมเดลเครือข่ายประสาทเทียม

แนวคิดเรื่องเครือข่ายประสาทเทียม เริ่มจากโมเดล Perceptron ที่ McCulloch and Pitts ได้เสนอขึ้นมาในปี 1943 และมีการสร้างเครื่อง Perceptron ขึ้นมาทดลองใช้จริงในปี 1958 โดยโมเดลนี้ ใช้สมการการตัดสินใจ (decision function) ดังต่อไปนี้

(1)   \begin{equation*}f(\mathbf{x}) = \begin{cases}1, & \text{if } \mathbf{w} \cdot \mathbf{x} + b > 0\\0, & \text{otherwise}\end{cases}\end{equation*}

โดยที่ \mathbf{w} เป็นเวกเตอร์น้ำหนัก และ b เป็นค่าไบแอสที่โมเดลจะเรียนรู้ขึ้นมาระหว่างการฝึกฝน

รูปที่ 1 Frank Rosenblatt และเครื่อง Mark I Perceptron (ภาพจาก CMU Machine Learning Department)

อัลกอริทึมในการฝึกฝนโมเดล Perceptron มีดังต่อไปนี้

  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)   \begin{equation*}y = x_1 \oplus x_2 = f(\mathbf{x}) = \begin{cases}1, & \text{if } \mathbf{w} \cdot \mathbf{x} + b = w_1x_1 + w_2x_2 + b > 0\\0, & \text{otherwise}\end{cases}\end{equation*}

จะพบว่าไม่มีค่า 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)   \begin{equation*}y = x_1 \oplus x_2 = f(\mathbf{x}) = \begin{cases}1, & \text{if } \mathbf{w} \cdot \mathbf{x} + b = w_1x_1 + w_2x_2 +w_3x_1x_2 + b > 0\\0, & \text{otherwise}\end{cases}\end{equation*}

จะพบว่า w_1 = 2, w_2 = 2, w_3 = -4, b = -1 เป็นคำตอบหนึ่งของสมการนี้ดังจะเห็นได้จากตารางที่ 1

x_10011
x_20101
x_3=x_1 \cdot x_20001
y = x_1 \oplus x_20110
\mathbf{w}\cdot\mathbf{x} + b = 2x_1 + 2x_2 - 4x_3 - 1-111-1
f(\mathbf{x})0110
ตารางที่ 1 ค่าของ f(\mathbf{x}) = y = x_1 \oplus x_2

วิธีการดัดแปลงเวกเตอร์ \mathbf{x} ให้สามารถใช้งานกับโมเดลที่เรามีอยู่แล้วนี้เรียกว่าวิธี feature engineering ซึ่งเป็นหัวข้อที่มีความซับซ้อน เราจะยังไม่กล่าวถึงในบทความนี้

อีกวิธีในการแก้ปัญหานี้คือ การเพิ่มขีดความสามารถให้โมเดลมีความยืดหยุ่นมากขึ้น โดยการพัฒนาขั้นต่อมานั้น เป็นการเพิ่ม layer ของ Perceptron เข้าไป โดยมีฟังก์ชันที่ไม่เป็นเชิงเส้นคั่นระหว่าง layers ดังนั้น ฟังก์ชันของแต่ละ layer คือ

(4)   \begin{equation*}f(\mathbf{x}) = \sigma (\mathbf{w}\cdot\mathbf{x} + b)\end{equation*}

โดยที่ \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 ตามความต้องการของผู้ออกแบบโมเดล

neural network
รูปที่ 5 โมเดล Multi-layer Perceptron อย่างง่ายที่มี hidden layer อยู่ 1 layer (ภาพจาก Wikipedia)

โมเดลนี้เองก็มีข้อจำกัดหลายอย่าง ทำให้นักวิจัยได้เริ่มทดลองนำ layer มาเชื่อมกันด้วยวิธีต่างๆ เช่น อาจจะนำ output ของ layer ท้าย ๆ ป้อนกลับเข้าไปใน layer ก่อนหน้าพร้อมกับข้อมูลใหม่ (Recurrent Neural Network) หรืออาจจะเลือกที่จะเชื่อม layer ต่าง ๆ โดยเชื่อมเฉพาะ neuron ที่อยู่ใกล้กันเท่านั้น ไม่ได้เชื่อมหมดทั้ง layer (Convolutional Neural Network) เนื่องจากโมเดลในตระกูลนี้ที่สร้างจาก Perceptron สามารถเชื่อมต่อกันได้หลายแบบ จึงได้ถูกตั้งชื่อเรียกรวม ๆ กันว่า Artificial Neural Network นั่นเอง

การฝึกฝนโมเดล Artificial Neural Network

เริ่มจากเลือกฟังก์ชัน L ที่ใช้เป็นตัวแทนความคลาดเคลื่อนของโมเดล (Loss function) โดยทั่วไปสำหรับปัญหาประเภททำนาย หรือพยากรณ์ค่าตัวเลข (Regression) มักจะเลือก mean squared error  ซึ่งประเมิน จากความคลาดเคลื่อนของโมเดลที่พลาดไปจากข้อมูลจริง ส่วนปัญหาประเภทจำแนกแยกแยะประเภทข้อมูล (Classification) มักจะเลือก cross entropy loss  ซึ่งประเมิน จากความน่าจะเป็นที่โมเดลคำนวณออกมาสำหรับข้อมูลในแต่ละประเภท เมื่อเลือกประเภทของ Loss function ได้แล้วจึงทำการฝึกฝนด้วยอัลกอริทึม gradient descent ดังต่อไปนี้

  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 กับการอ่านสัญญาณสมองมนุษย์ ซึ่งเกี่ยวกับระบบประสาทของมนุษย์จริง ๆ ไว้ให้เพิ่มเติมนะครับ

เอกสารอ้างอิง

เนื้อหาโดย ไพโรจน์ เจริญศรี
ตรวจทานและปรับปรุงโดย เมธิยาภาวิ์ ศรีมนตรินนท์

Pairode Jaroensri

Data Scientist at Government Big Data institute (GBDi)

Methiyapha Srimontrinond

Data Scientist Government Big Data institute (GBDi)

Sign up to join Big Data Community Thailand

Make comments, write articles, and contribute to our community.