ในสมองของมนุษย์คนหนึ่ง จะประกอบด้วยหน่วยเล็ก ๆ เรียกว่า นิวรอน (Neuron) จำนวนประมาณ 8 หมื่น 6 พันล้านนิวรอน ดังรูปด้านบน และแต่ละนิวรอนก็จะเชื่อมต่อโยงใยกันด้วยเส้นประสาทเรียกว่า ไซแนปส์ (Synapse) รวมแล้วประมาณ 1 พันล้านล้านไซแนปส์ ซึ่งนักวิทยาศาสตร์คอมพิวเตอร์ได้นำมาเป็นแนวคิดในการออกแบบ Artificial Neural Network

แต่ละนิวรอน จะได้รับ Input หลาย ๆ อันจากหลาย ๆ กิ่งก้านสาขาของ Dendrite แล้วนำมาประมวลผล ออกมาเป็น Output 1 อัน ออกไปที่ Axon เพื่อส่งต่อไปให้ Dendrite ของนิวรอนอื่น ๆ ใช้เป็น Input ต่อไป เราสามารถเขียนเป็นโมเดลได้ดังด้านล่าง

Biological Neuron and Mathematical Model. Credit: http://cs231n.github.io/neural-networks-1/
Biological Neuron and Mathematical Model. Credit: http://cs231n.github.io/neural-networks-1/

Activation Function

Activation Function คือ ฟังก์ชันที่รับผลรวมการประมวลผลทั้งหมด จากทุก Input (ทุก Dendrite) ภายใน 1 นิวรอน แล้วพิจารณาว่าจะส่งต่อเป็น Output เท่าไร (เปรียบเทียบกับความถี่ของสัญญาณประสาท Output ใน Axon)

เรื่องระบบการทำงานภายใน Artificial Neural Network จะอธิบายต่อไป

Activation Function ที่เป็นที่นิยมในอดีต คือ Sigmoid Function ที่รับข้อมูลอะไรก็ตามเข้าไป เปลี่ยนเป็นค่าระหว่าง 0-1

Sigmoid Function

Sigmoid Function เป็นฟังก์ชันที่เป็น Curve รูปตัว S เห็นแล้วเข้าใจได้ง่าย และเนื่องจาก Output ของ Sigmoid Function มีค่าระหว่าง 0 – 1 จึงเหมาะที่จะถูกใช้ในงานที่ต้องการ Output เป็นความน่าจะเป็น (Probability) หรือใช้เป็น Output ว่า 1=Yes, 0=No

สมการของ Sigmoid Function

\(S(x) = \frac{1}{1 + e^{-x}} = \frac{e^x}{e^x + 1}\)

Derivative ของ Sigmoid Function

Derivative ของ Sigmoid Function ก็สามารถคำนวนได้ง่าย ๆ จากค่าของ Sigmoid Function เอง ดังนี้

\(S'(x) = S(x)(1 – S(x))\)

แต่ตอนนี้เรายังไม่ต้องสนใจ สมการสูตรคณิตศาสตร์ เรามาดูกันว่า Sigmoid Function จริง ๆ แล้ว Input/Output ของมันมีหน้าตาเป็นอย่างไร

เรามาเริ่มกันเลยดีกว่า

Open In Colab
In [1]:
%reload_ext autoreload
%autoreload 2
%matplotlib inline
In [2]:
import torch
import matplotlib.pyplot as plt

สร้าง x เป็นเลข ระหว่าง -10 บวกทีละ 0.01 ไปจนถึง 10 เราจะเอามาเป็นแกน x

In [3]:
x = torch.arange(-10., 10., 0.01)
In [4]:
x
Out[4]:
tensor([-10.0000,  -9.9900,  -9.9800,  ...,   9.9700,   9.9800,   9.9900])

นำ x ผ่าน activation ฟังก์ชัน ได้ค่า y

In [5]:
activation = torch.nn.Sigmoid()
y = activation(x)
In [6]:
y
Out[6]:
tensor([4.5398e-05, 4.5854e-05, 4.6315e-05,  ..., 9.9995e-01, 9.9995e-01,
        9.9995e-01])
In [7]:
plt.ylim(top=1.2, bottom=-0.2)
plt.xlim(right=5, left=-5)
plt.grid()

plt.plot(x.numpy(), y.numpy())
plt.show()
In [ ]:
 

ข้อดีของ Sigmoid Function

  1. Output อยู่ในช่วง 0-1 ใช้งานได้หลากหลาย ทั้ง Probability, Boolean
  2. เข้าใจง่าย
  3. หา Derivative ไม่ยาก

ข้อเสียของ Sigmoid Function

  1. ถ้า Input น้อยกว่า -5 หรือมากกว่า 5 ความชัน Slope จะเข้าใกล้ 0 จน Gradient หายไปหมด ทำให้โมเดล Train ไม่ไปไหน เรียกว่า Vanishing Gradient จะอธิบายต่อไป
  2. Output ไม่ Balance มี Mean ไม่เท่ากับ 0 เพราะมีแต่ค่าเป็นบวก ทำให้ Optimize ยาก
  3. ใช้แล้วโมเดลมักจะ Converge ช้า

ข้อเสียเหล่านี้ทำให้ปัจจุบัน Sigmoid Function เสื่อมความนิยมลงไป ถูกแทนที่ด้วย ReLU Function ที่เราจะอธิบายต่อไป

Train Neural Network

Deep Neural Network with 2 Hidden Layers using Sigmoid

Train Neural Network using Sigmoid. Credit https://playground.tensorflow.org
Train Neural Network using Sigmoid. Credit https://playground.tensorflow.org

สังเกตว่าต้องเทรนมากถึง 1,000 Epoch ถึงจะ Converge และช่วงแรก Training Loss และ Test Loss ไม่ลดเลย

หมายเหตุ

จริง ๆ แล้วระบบประสาท นิวรอนในสมองมีหลายชนิด และทำงานซับซ้อนกว่านี้มาก ปัจจุบันจึงไม่ค่อยนิยมเปรียบกับการทำงานของสมองแล้ว

Credit

แชร์ให้เพื่อน:

Keng Surapong on FacebookKeng Surapong on GithubKeng Surapong on Linkedin
Keng Surapong
Project Manager at Bua Labs
The ultimate test of your knowledge is your capacity to convey it to another.

Published by Keng Surapong

The ultimate test of your knowledge is your capacity to convey it to another.

Enable Notifications    Ok No thanks