Nơ-ron và hàm kích hoạt trong Python
Nơ-ron nhân tạo là một hàm rất nhỏ. Nó nhân mỗi đầu vào với một trọng số, cộng thêm bias rồi đưa kết quả qua hàm kích hoạt để quyết định nơ-ron "kích hoạt" mạnh đến đâu.
Khái niệm bằng lời đơn giản
Nơ-ron nhân tạo là một hàm rất nhỏ. Nó nhân mỗi đầu vào với một trọng số, cộng thêm bias rồi đưa kết quả qua hàm kích hoạt để quyết định nơ-ron "kích hoạt" mạnh đến đâu.
Xây dựng một nơ-ron nhân tạo bằng Python thuần: tổng có trọng số của đầu vào cộng bias, rồi đưa qua sigmoid hoặc ReLU.
Ý chính
- Trọng số cho biết mỗi đầu vào quan trọng đến đâu; bias đẩy kết quả lên hoặc xuống.
- Không có hàm kích hoạt, xếp chồng nhiều nơ-ron vẫn chỉ cho một mô hình tuyến tính (đường thẳng).
- Sigmoid trả về giá trị từ 0 đến 1 nên phù hợp với xác suất.
- ReLU tính nhanh và là lựa chọn thường dùng cho các lớp ẩn của mạng hiện đại.
Khi nào nên sử dụng?
- Hiểu điều gì diễn ra bên trong mạng nơ-ron và các thư viện AI.
- Nắm ý tưởng trước khi tự cài đặt nó trong các thử thách tương ứng.
- Chuẩn bị cho khóa học machine learning, phỏng vấn và dự án.
Xem trực quan
Kéo các thanh trượt để đổi đầu vào, trọng số và bias. Quan sát tổng có trọng số z di chuyển trên đường cong sigmoid và ReLU.
Code ví dụ
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)}")
Kết quả dự kiến
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
Cách hoạt động
dot() tính tổng có trọng số z. Sigmoid nén z vào khoảng từ 0 đến 1, còn ReLU giữ nguyên giá trị dương và biến giá trị âm thành 0. Vòng lặp cho thấy mỗi hàm kích hoạt phản ứng thế nào với đầu vào âm, bằng 0 và dương.
Thay đổi giá trị và chạy chương trình bằng trình chạy Python online của CodeUtility mà không cần cài Python.
Bài tập mở rộng
Hãy sửa code theo các bài tập dưới đây để hiểu rõ cách hoạt động thay vì chỉ sao chép kết quả.
- Đổi đầu vào hoặc trọng số và đoán kết quả trước khi chạy.
- In các giá trị trung gian để theo dõi từng bước tính toán.
- Giải các thử thách được liên kết bên dưới để tự cài đặt ý tưởng.
Luyện tập với thử thách
Áp dụng kiến thức của bài học này để giải một bài toán thực tế. Mỗi thử thách chạy ngay trên trình duyệt, có kiểm thử tức thì và AI nhận xét.
- Tích vô hướng của hai vector Nhân hai vector theo từng phần tử rồi cộng kết quả lại, phép tính cốt lõi của mọi nơ-ron. Dễ
- Các hàm kích hoạt Áp dụng sigmoid, ReLU, Leaky ReLU hoặc tanh cho từng giá trị trong danh sách. Dễ
- Một nơ-ron nhân tạo Tính đầu ra của một nơ-ron, tổng có trọng số của các đầu vào cộng bias, rồi đưa qua sigmoid. Dễ