แนวคิด AI ด้วย Python

นิวรอนและฟังก์ชันกระตุ้นใน Python

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

แนวคิดแบบเข้าใจง่าย

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

สร้างนิวรอนเทียมด้วย Python ล้วน: ผลรวมถ่วงน้ำหนักของอินพุตบวกไบแอส แล้วส่งผ่าน sigmoid หรือ ReLU

ประเด็นสำคัญ

  • น้ำหนักบอกว่าอินพุตแต่ละตัวสำคัญแค่ไหน ส่วนไบแอสเลื่อนผลลัพธ์ขึ้นหรือลง
  • ถ้าไม่มีฟังก์ชันกระตุ้น การซ้อนนิวรอนหลายชั้นก็ยังได้แค่โมเดลเชิงเส้น (เส้นตรง)
  • sigmoid ให้ค่าระหว่าง 0 ถึง 1 จึงเหมาะกับความน่าจะเป็น
  • ReLU คำนวณเร็วและเป็นตัวเลือกที่ใช้กันทั่วไปในชั้นซ่อนของโครงข่ายสมัยใหม่

ควรใช้เมื่อใด?

  • เข้าใจสิ่งที่เกิดขึ้นภายในโครงข่ายประสาทเทียมและไลบรารี AI
  • เข้าใจแนวคิดก่อนลงมือเขียนเองในโจทย์ที่เกี่ยวข้อง
  • เตรียมตัวสำหรับคอร์สแมชชีนเลิร์นนิง การสัมภาษณ์งาน และโปรเจกต์

ลองดูการทำงานจริง

เลื่อนแถบเพื่อเปลี่ยนอินพุต น้ำหนัก และไบแอส แล้วดูผลรวมถ่วงน้ำหนัก z เคลื่อนไปบนเส้นโค้ง sigmoid และ ReLU

โค้ดตัวอย่าง

รันโค้ด →
main.py
import math

# A neuron multiplies each input by a weight, adds them up and adds a bias.
def dot(a, b):
    return sum(x * y for x, y in zip(a, b))

def sigmoid(z):
    return 1 / (1 + math.exp(-z))   # squashes any number into (0, 1)

def relu(z):
    return max(0.0, z)              # keeps positives, turns negatives into 0

inputs = [0.5, -1.0, 2.0]
weights = [0.8, 0.2, -0.5]
bias = 0.1

z = dot(inputs, weights) + bias      # weighted sum
print("weighted sum z =", round(z, 3))
print("sigmoid(z) =", round(sigmoid(z), 3))
print("relu(z) =", relu(z))

# The activation decides how strongly the neuron "fires".
for value in [-2, 0, 2]:
    print(f"z={value:>2}  sigmoid={sigmoid(value):.3f}  relu={relu(value)}")

ผลลัพธ์ที่คาดหวัง

weighted sum z = -0.7
sigmoid(z) = 0.332
relu(z) = 0.0
z=-2  sigmoid=0.119  relu=0.0
z= 0  sigmoid=0.500  relu=0.0
z= 2  sigmoid=0.881  relu=2

หลักการทำงาน

dot() คำนวณผลรวมถ่วงน้ำหนัก z ส่วน sigmoid บีบ z ให้อยู่ระหว่าง 0 ถึง 1 ขณะที่ ReLU เก็บค่าบวกไว้และเปลี่ยนค่าลบเป็น 0 ลูปแสดงให้เห็นว่าฟังก์ชันกระตุ้นแต่ละแบบตอบสนองต่ออินพุตที่เป็นลบ ศูนย์ และบวกอย่างไร

เปลี่ยนค่าและรันโปรแกรมด้วย คอมไพเลอร์ Python ออนไลน์ของ CodeUtility โดยไม่ต้องติดตั้ง Python

แบบฝึกหัด

ลองเปลี่ยน input และทดสอบกรณีขอบก่อนใช้ชุดข้อมูลที่ใหญ่ขึ้น

  1. เปลี่ยนอินพุตหรือน้ำหนัก แล้วลองทายผลลัพธ์ก่อนรัน
  2. พิมพ์ค่าระหว่างทางออกมาเพื่อดูการคำนวณทีละขั้น
  3. แก้โจทย์ที่ลิงก์ไว้ด้านล่างเพื่อเขียนแนวคิดนี้ด้วยตัวเอง
รันใน Python IDE →

ฝึกด้วยโจทย์

ใช้สิ่งที่เรียนในบทนี้แก้ปัญหาจริง ทุกโจทย์รันในเบราว์เซอร์ พร้อมการทดสอบทันทีและรีวิวจาก AI

โจทย์ทั้งหมด