/ Data Science

Machine Learning ตอนที่ 2: Neural Network แบบจำลองของสมอง?

สำหรับตอนที่ 1 สามารถอ่านได้ที่นี่
ตอนที่ 1: ทำไมต้องมี Machine Learning

จากตอนที่แล้ว เราพูดถึง Logistic Regression ซึ่งเป็น model อย่างง่ายในการแบ่งข้อมูลออกเป็น 2 ประเภท เช่น คนที่เป็นโรค กับไม่เป็นโรค โดย model ใช้วิธีคำนวณสองขั้นตอน คือ

  • Linear combination ระหว่าง input และ parameter ของ model
  • Sigmoid function

ผลลัพธ์ที่ได้คือความน่าจะเป็นที่คนๆนั้นจะเป็นโรค

ทำไม Logistic Regression ถึงไม่เพียงพอ

ขอยกตัวอย่างการประเมินความเสี่ยงการเป็นโรค 2 ชนิดในคน ขอเรียกว่าโรค A และโรค B โดยดูจากคุณสมบัติเพียง 2 อย่าง คือน้ำหนักและความดัน

สมมุติว่าโรค A เป็นโรคที่มีลักษณะตรงไปตรงมาแบบนี้

  • ถ้าน้ำหนักยิ่งมาก ความเสี่ยงการเป็นโรค A ยิ่งสูง
  • ถ้าความดันยิ่งต่ำ ความเสี่ยงการเป็นโรค A ยิ่งสูง

จากหลักการของ Machine Learning เราไม่จำเป็นต้องรู้ความสัมพันธ์นี้ล่วงหน้า เราสามารถเอาข้อมูลน้ำหนัก ความดัน และการเป็นโรค A ของคนจำนวนมาก ใส่เข้าไปใน model มันจะสามารถเรียนรู้ความสัมพันธ์นี้ได้เอง ซึ่งความสัมพันธ์นี้เป็นแบบง่าย Logistic Regression สามารถเรียนรู้สิ่งเหล่านี้จากข้อมูลได้

logistic regression

ตัวอย่างถัดไป สมมุติว่าโรค B มีลักษณะที่ซับซ้อนมากกว่า

  • ถ้าความดันต่ำไป หรือสูงไป มีความเสี่ยงการเป็นโรค B สูง ถ้าความดันกลางๆ ไม่มีความเสี่ยง
  • ในกรณีความดันต่ำ ยิ่งน้ำหนักมาก จะมีความเสี่ยงการเป็นโรค B สูง
  • ในกรณีความดันสูง น้ำหนักจะไม่มีผลต่อความเสี่ยงการเป็นโรค B

ความสัมพันธ์แบบโรค B นี้ Logistic Regression ไม่สามารถเรียนรู้ได้ เราต้องการ model ที่มีความสามารถมากขึ้น

สร้าง model ด้วยการเอา node มาต่อกัน

ส่วนกลมๆในรูป Logistic Regression ด้านล่าง เราเรียกว่า node

node

การคำนวณของ node มี 2 ขั้นตอน คือ

  1. Linear combination ของ input กับ parameter แสดงด้วยสัญลักษณ์ ∑
  2. และ Sigmoid function แสดงด้วยสัญลักษณ์ σ

ซึ่งคือการคำนวณวิธีเดียวกับใน Logistic Regression

เราจะสร้าง model ใหม่ด้วยการเอา node หลายๆอันมาต่อกัน เช่นแบบนี้

neural network

model แบบนี้เรียกว่า Neural Network

Neural Network

จากเดิมใน Logistic Regression เรารับ input เป็นน้ำหนักกับความดัน และคำนวณออกมาเป็นผลลัพธ์เลย ตอนนี้ใน Neural Network เราคำนวณเป็น 2 layer มีชื่อว่า Hidden Layer กับ Output Layer

neural network layer

การคำนวณผลลัพธ์จะเกิดขึ้นทีละ layer จากซ้ายไปขวา

Hidden Layer

layer นี้ประกอบด้วยหลาย node โดยจะมีทั้งหมดกี่ node ก็ได้ จำนวน node บอกถึงความซับซ้อนของ model ยิ่งมี node มากยิ่งซับซ้อนมาก ในรูปเราใช้เพียง 2 node เพื่อให้เข้าใจง่าย

แต่ละ node จะรับ input ทุกตัวเข้ามา

  • node ตัวบนรับ input ทั้งน้ำหนักและความดัน
  • node ตัวล่างก็รับ input ทั้งน้ำหนักและความดันเช่นกัน

แต่ละ node คำนวณ Linear combination กับ Sigmoid function เหมือนกับ node ใน Logistic Regression เมื่อได้ผลลัพธ์แล้ว จะส่งต่อเป็น input ให้กับ Output Layer

Node ทุกตัวใน Hidden layer รับ input เหมือนกัน แล้วคำนวณต่างกันยังไง

เมื่อเราทำการสอน Neural Network ตัวนี้แล้ว node แต่ละตัวจะมีค่าของ parameter ที่ไม่เหมือนกัน ซึ่งทำให้การคำนวณแต่ละ node แตกต่างกัน

ค่า parameter ที่แตกต่างกันนี้ เปรียบได้กับการที่แต่ละ node มอง input จากคนละมุมมองกัน เช่น

  • node แรกอาจมองหาความดันที่สูงเกินไป และไม่สนใจน้ำหนัก
  • node สองอาจมองหาความดันที่ต่ำเกินไป และน้ำหนักที่มากเกินไป

สอง node นี้มองคนละมุมกัน สุดท้ายต้องไปรวมคำตอบกันที่ Output layer

Output Layer

layer นี้มีจำนวน node เท่ากับจำนวน output ที่ต้องการ ในกรณีนี้ เราต้องการ output ตัวเดียวคือโอกาสหรือความเสี่ยงในการเป็นโรค B

node นี้รับ input มาจาก Hidden layer และทำการคำนวณเหมือนกับ node อื่นๆ (Linear combination + Sigmoid function) ซึ่งใช้ชุด parameter ของตัวมันเองในการคำนวณ

การคำนวณตรงนี้สามารถมองได้ว่าเป็นการรวมผลการคำนวณจากทุกมุมมอง (ทุก node) ที่มาจาก Hidden layer เพื่อให้ได้คำตอบสุดท้าย เป็นความน่าจะเป็นของการเป็นโรค B

จะเห็นว่าการคำนวณผลลัพธ์นั้นเริ่มจาก input ทางด้านซ้ายสุด ต่อมายัง Hidden layer ตรงกลาง และไปยัง Output layer ด้านขวา การคำนวณผลลัพธ์ตามลำดับแบบนี้เรียกว่า Forward Propagation

การฝึก Neural Network

สำหรับการฝึก (หรือเรียกว่าสอน) Neural Network เราใช้วิธีเดิมคือ Gradient Descent

ใส่ Training data ให้กับ Neural Network หลายๆรอบ โดยแต่ละรอบ

  • คำนวณผลลัพธ์ โดยใช้ Forward Propagation
  • นับจำนวนตัวที่ผิด คำนวณความผิดพลาดด้วย Cost Function
  • ปรับ parameter เล็กน้อย เพื่อให้ความผิดพลาดในรอบถัดไปต่ำลง

เทียบกับ Logistic Regression ซึ่งมี node เดียว จึงมี parameter ชุดเดียว สำหรับ Neural Network เรามีหลาย node จึงมี parameter หลายชุด แยกตามแต่ละ node

การปรับ parameter นี้ ตาม model แล้ว เราจะปรับจากด้านขวามาด้านซ้าย (ปรับ parameter ใน Output layer ก่อน แล้วค่อยปรับใน Hidden layer) การปรับ parameter ด้วยวิธีนี้เรียกว่า Backpropagation

หลังจากฝึกไปหลายรอบจนมี Cost function ต่ำสุดแล้ว เราจะได้ model ที่ใช้งานได้ สำหรับในกรณีตัวอย่าง เราสามารถใส่น้ำหนักและความดันให้กับ model แล้วมันจะบอกความเสี่ยงในการเป็นโรค B ได้

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

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

จะฝึก Neural Network โดยให้แต่ละ node เรียนรู้ในสิ่งที่แตกต่างกันยังไง

ในตอนเริ่มต้นการสอน Neural Network เราจำเป็นต้องสุ่มค่าเริ่มต้นที่ไม่เหมือนกัน (Random initialization) ให้กับ parameter แต่ละ node เมื่อ node มีจุดตั้งต้นที่ไม่เหมือนกัน มันจะคำนวณได้ผลต่างกัน และเรียนรู้ในสิ่งที่แตกต่างกัน สุดท้ายแต่ละ node จะมีค่า parameter ที่ไม่เท่ากัน

รูปแบบอื่นๆของ Neural Network

สังเกตการคำนวณ Sigmoid function ของแต่ละ node

activation function

การคำนวณตรงวงกลมสีแดงนี้เรียกว่า Activation function และมีตัวเลือกให้ใช้หลาย function

Sigmoid function σ เป็นหนึ่งในตัวเลือกนั้น และใช้เป็นตัวอย่างมาตลอด เรามาลองดูตัวเลือกอื่นๆบ้าง

Activation Function

Activation function ที่นิยมใช้ ได้แก่ Sigmoid function, Tanh function, Relu function

Sigmoid function

sigmoid

Tanh function

tanh

Relu function

relu

Activation function ของ hidden node

การเลือก activation function ของ hidden node ไม่ได้มีกฎตายตัว แต่ตัวเลือกที่นิยมใช้คือ Relu function เนื่องจากมีข้อดีหลายอย่าง หนึ่งในข้อดีคือช่วยลดเวลาในการสอน model ขนาดใหญ่ได้

ถ้าเราเลือก Relu function เป็น activation function ใน hidden node โดยใช้ R เป็นตัวย่อของ Relu จะได้ Neural Network แบบนี้

neural network relu

Activation Function ของ Hidden node จำเป็นต้องเป็น non-linear function

ถ้าเป็น linear function จะเกิดอะไรขึ้น?

เมื่อ hidden node คำนวณค่าแล้ว จะส่งต่อให้ output layer ซึ่งมีการคำนวณ linear combination ∑ อยู่แล้ว ถ้า activation function ของ hidden node มีการคำนวณเป็น linear จะทำงานซ้ำซ้อนกับ linear combination ∑ ใน output layer

พูดอีกอย่างคือ ถ้า activation function ของ hidden node เป็น linear การคำนวณของ hidden node จะไม่เพิ่มความสามารถห้กับ Neural Network และจะทำให้มี model ทำงานเหมือนกับมี Output layer อย่างเดียว ซึ่งให้ผลลัพธ์เทียบเท่ากับ Logistic Regression

Sigmoid function, Relu function, และ Tanh function เป็น non-linear function ทั้งหมด

Activation function ของ Output node

การเลือก activation function ของ output node เราต้องเลือกสิ่งที่เข้ากับคำตอบที่เราต้องการ เช่น กรณีตัวอย่างเราต้องการความน่าจะเป็นของการเป็นโรค ซึ่งมีค่าระหว่าง 0 ถึง 1 เราจึงควรเลือก Sigmoid function เพราะ function นี้ให้ผลลัพธ์ระหว่าง 0 ถึง 1 ตามที่แสดงในกราฟด้านบน

Neural Network เกี่ยวอะไรกับสมองคน?

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

ในความเห็นของเรา เราคิดว่าในแง่ของการคำนวณ Neural Network ไม่เกี่ยวอะไรกับสมองคน หรือถึงแม้ว่าจะมีความเกี่ยวข้องนิดหน่อย ความเกี่ยวข้องนั้นไม่ได้สำคัญต่อความสำเร็จของ Neural Network ในการเป็น Machine Learning model

ตอนต่อไป

ถึงแม้ว่า model นี้จะมีประสิทธิภาพดีแล้วก็ตาม แต่เราก็ยังสามารถพัฒนาต่อไปได้อีก ในตอนต่อไป เราจะพูดถึง model ที่มี layer มากขึ้น ซึ่งสามารถเรียนรู้ความสัมพันธ์ของข้อมูลได้ดีขึ้นอีกมาก

Machine Learning ตอนที่ 2: Neural Network แบบจำลองของสมอง?
Share this

Subscribe to Code on the Hill