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

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

03 กุมภาพันธ์ 2566

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

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

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

[latexpage]

\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$ ที่ทำให้

\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$ เพิ่มเข้าไปด้วย ทำให้สมการการตัดสินใจใหม่กลายเป็น

\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_1$0011
$x_2$0101
$x_3=x_1 \cdot x_2$0001
$y = x_1 \oplus x_2$0110
$\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 คือ

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

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

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

Data Scientist at Big Data Institute (Public Organization), BDI

แบ่งปันบทความ

กลุ่มเนื้อหา

แท็กยอดนิยม

แจ้งเรื่องที่อยากอ่าน

คุณสามารถแจ้งเรื่องที่อยากอ่านให้เราทราบได้ !
และเราจะนำไปพัฒนาบทความให้มีเนื้อหาที่น่าสนใจมากขึ้น

ไอคอน PDPA

เราใช้คุกกี้เพื่อพัฒนาประสิทธิภาพ และประสบการณ์ที่ดีในการใช้เว็บไซต์ของคุณ คุณสามารถศึกษารายละเอียดได้ที่ “นโยบายคุ้กกี้” และสามารถจัดการความเป็นส่วนตัวเองได้ของคุณได้เองโดยคลิกที่ “ตั้งค่า”

ตั้งค่าความเป็นส่วนตัว

คุณสามารถเลือกการตั้งค่าคุกกี้โดยเปิด/ปิด คุกกี้ในแต่ละประเภทได้ตามความต้องการ ยกเว้น คุกกี้ที่จำเป็น

ยอมรับทั้งหมด
จัดการความเป็นส่วนตัว
  • คุกกี้ที่มีความจำเป็น (Strictly Necessary Cookies)
    เปิดใช้งานตลอด

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

  • คุกกี้เพื่อการวิเคราะห์และประเมินผลการใช้งาน (Performance Cookies)

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

  • คุกกี้เพื่อการใช้งานเว็บไซต์ (Functional Cookies)

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

  • คุกกี้เพื่อการโฆษณาไปยังกลุ่มเป้าหมาย (Targeting Cookies)

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

บันทึกการตั้งค่า
ไซต์นี้ลงทะเบียนกับ wpml.org ในฐานะไซต์พัฒนา สลับไปยังไซต์การผลิตโดยใช้รหัส remove this banner.