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

การส่งผ่านไปข้างหน้าและฟังก์ชันความสูญเสียใน Python

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

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

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

ส่งอินพุตผ่านโครงข่ายประสาทเทียมขนาดเล็กทีละชั้น แล้ววัดความคลาดเคลื่อนด้วยค่าคลาดเคลื่อนกำลังสองและ cross-entropy

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

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

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

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

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

เปลี่ยนอินพุตและเป้าหมาย ติดตามค่าที่ไหลผ่านชั้นซ่อน และดูว่าความสูญเสียทั้งสองแบบตอบสนองต่อคำทำนายอย่างไร

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

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

def dense(inputs, weights, biases, activation):
    # Each row of weights belongs to one neuron in the layer.
    return [activation(sum(x * w for x, w in zip(inputs, row)) + b) for row, b in zip(weights, biases)]

relu = lambda z: max(0.0, z)
sigmoid = lambda z: 1 / (1 + math.exp(-z))

x = [1.0, 2.0]
hidden = dense(x, [[0.5, -0.2], [0.3, 0.8]], [0.0, -0.5], relu)
output = dense(hidden, [[1.0, -1.0]], [0.2], sigmoid)
print("hidden layer:", [round(h, 3) for h in hidden])
print("prediction:", round(output[0], 3))

# A loss function measures how wrong the prediction is.
target = 1.0
mse = (output[0] - target) ** 2
bce = -(target * math.log(output[0]) + (1 - target) * math.log(1 - output[0]))
print("squared error:", round(mse, 3))
print("cross-entropy:", round(bce, 3))

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

hidden layer: [0.1, 1.4]
prediction: 0.25
squared error: 0.563
cross-entropy: 1.387

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

dense() คำนวณหนึ่งชั้น โดยน้ำหนักแต่ละแถวคือนิวรอนหนึ่งตัว ชั้นซ่อนใช้ ReLU และชั้นเอาต์พุตใช้ sigmoid เพื่อให้ได้ความน่าจะเป็น ค่าคลาดเคลื่อนกำลังสองและ cross-entropy ต่างวัดช่องว่างระหว่างคำทำนาย 0.25 กับเป้าหมาย 1.0 และการฝึกจะพยายามทำให้ค่าเหล่านี้เล็กลง

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

แบบฝึกหัด

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

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

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

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

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