🧠 Mạng Nơ-ron Nhân tạo

Trực quan hóa từng bước — Hiểu Neural Network qua hình ảnh và tương tác

← Quay lại trang chủ

Neural Network là gì?

Bộ não con người có khoảng 86 tỉ neuron, mỗi neuron kết nối với hàng ngàn neuron khác. Khi bạn nhìn thấy một con mèo, tín hiệu từ mắt truyền qua hàng triệu neuron, xử lý từng bước, và cuối cùng não kết luận: "Đó là con mèo!"

Mạng nơ-ron nhân tạo (Artificial Neural Network) mô phỏng cách não hoạt động — nhưng đơn giản hơn rất nhiều. Thay vì 86 tỉ, mạng của chúng ta có thể chỉ có vài chục "neuron" (nút tính toán), sắp thành các lớp và nối với nhau bằng các "dây" có trọng số.

💡 Ý tưởng cốt lõi: Mạng nơ-ron là một hàm toán học nhận đầu vào (ví dụ: ảnh) và cho ra đầu ra (ví dụ: "đây là số 3"). Nó "học" bằng cách điều chỉnh trọng số trên các dây nối qua rất nhiều ví dụ.
📐 Quy ước ký hiệu toán trong bài:
Véc-tơ: in đậm, thẳng đứng, chữ thường — ví dụ: x, h, b
Scalar: in nghiêng, không đậm, chữ thường — ví dụ: z, w, a, L
Ma trận: in đậm, thẳng đứng, chữ HOA — ví dụ: W, X, U
x₁ x₂ x₃ Input h₁ h₂ h₃ Hidden ŷ₁ ŷ₂ Output w₁₁ w₁₁
Sơ đồ mạng nơ-ron 3 lớp: Input (xanh) → Hidden (xanh lá) → Output (đỏ)

Cấu trúc: 3 loại lớp

Lớp Vai trò Ví dụ
🔵 Input (Đầu vào) Nhận dữ liệu thô từ bên ngoài 64 pixel của ảnh 8×8
🟢 Hidden (Ẩn) Xử lý, tìm đặc trưng (pattern) Nhận ra cạnh, góc, đường cong
🔴 Output (Đầu ra) Đưa ra kết quả cuối cùng "85% là số 3, 10% là số 8"

Mỗi lớp ẩn giống như một "bộ lọc": lớp đầu tiên nhận ra nét cơ bản (cạnh ngang, dọc), lớp sau nhận ra hình phức tạp hơn (vòng tròn, góc vuông), lớp cuối ghép lại thành vật thể hoàn chỉnh.

Forward Pass — Dữ liệu chạy qua mạng

Khi mạng nhận dữ liệu, nó tính toán qua từng lớp theo 2 bước:

  1. Tổng trọng số (Weighted Sum)
    Mỗi neuron nhận tín hiệu từ tất cả neuron lớp trước, nhân với trọng số, rồi cộng lại:
    z = w₁·a₁ + w₂·a₂ + ... + wₙ·aₙ + b
    Trọng số lớn = ảnh hưởng mạnh. Trọng số âm = ức chế (triệt tiêu tín hiệu).
  2. Hàm kích hoạt (Activation Function)
    Bóp kết quả z qua một hàm phi tuyến, quyết định neuron có "bật" hay không:
    a = f(z)
    Nếu không có hàm kích hoạt, toàn bộ mạng chỉ là một phép nhân ma trận — không thể học được gì phức tạp!
🤔 Tại sao cần hàm kích hoạt?
Giống như não: không phải mọi tín hiệu đều đủ mạnh để kích thích neuron. Hàm kích hoạt giúp mạng học được các mối quan hệ phi tuyến tính — tức là những thứ không phải đường thẳng (hầu hết mọi thứ trong thực tế!).

Các hàm kích hoạt phổ biến

Hàm Công thức Đặc điểm
ReLU f(x) = max(0, x) Đơn giản, nhanh. Phổ biến nhất hiện nay.
Sigmoid f(x) = 1/(1+ex) Bóp giá trị về khoảng (0, 1). Dùng cho xác suất.
Tanh f(x) = (ex−ex)/(ex+ex) Bóp về (-1, 1). Trung tâm ở 0.
Softmax σ(zᵢ) = ez / Σez Chuyển thành xác suất (tổng = 100%). Dùng ở lớp output.

Backpropagation — Mạng "học" từ sai lầm

Ban đầu, trọng số là ngẫu nhiên → mạng đoán bừa → sai nhiều. Backpropagation là cách mạng tự sửa lỗi:

  1. Tính sai số (Loss)
    So sánh dự đoán với đáp án đúng. Ví dụ: mạng đoán "số 8" nhưng đáp án là "số 3" → Loss cao.
    L = −Σ yᵢ · log(ŷᵢ) (Cross-Entropy)
  2. Truyền lỗi ngược (Backward)
    Dùng chain rule (quy tắc chuỗi) để tính: mỗi trọng số đóng góp bao nhiêu vào sai số?
    L/∂w = ∂L/∂ŷ × ∂ŷ/∂z × ∂z/∂w
  3. Cập nhật trọng số
    Chỉnh trọng số một chút theo hướng giảm sai số:
    w_mới = w_cũ − lr × ∂L/∂w
    Learning rate (tốc độ học) quyết định bước chỉnh lớn hay nhỏ.
📈 Lặp lại nhiều lần!
Quá trình Forward → Tính Loss → Backward → Cập nhật được lặp lại hàng ngàn, hàng triệu lần trên nhiều ảnh khác nhau. Mỗi lần, Loss giảm dần → mạng dự đoán chính xác hơn. Đây gọi là training (huấn luyện).

RNN — Mạng có "trí nhớ"

Mạng Feed-Forward xử lý mỗi input độc lập — không nhớ gì từ lần trước. Nhưng nhiều bài toán cần ngữ cảnh: dịch văn bản, nhận diện giọng nói, dự đoán chữ tiếp theo...

Recurrent Neural Network (RNN) giải quyết bằng cách thêm kết nối hồi quy: mỗi neuron ẩn gửi giá trị của mình quay lại chính nó ở bước thời gian tiếp theo.

hₜ = f(W_x · xₜ + W_h · hₜ₋₁ + b)

hₜ = véc-tơ trạng thái ẩn tại thời điểm t
hₜ₋₁ = véc-tơ trạng thái ẩn từ bước trước (bộ nhớ!)
xₜ = véc-tơ input tại thời điểm t
W_x, W_h = ma trận trọng số
🔄 Ví dụ thực tế: Khi đọc câu "Con mèo ngồi trên ___", RNN nhớ các từ trước đó ("con mèo", "ngồi", "trên") để dự đoán từ tiếp theo là "ghế" hoặc "bàn" — chứ không phải "bay" hay "bơi"!

Ảnh → Số: Máy tính "nhìn" ảnh thế nào?

Con người nhìn ảnh và thấy hình dạng. Máy tính chỉ thấy một bảng số!

Ảnh 8×8 pixel = ma trận 8 hàng × 8 cột. Mỗi ô là một số từ 0 (đen) đến 255 (trắng). Trước khi đưa vào mạng, ta chuẩn hóa chia cho 255 để đưa về khoảng [0, 1].

👆 Thử ngay! Trong công cụ trực quan, nhấn nút "Xem ma trận pixel" để thấy bảng số tương ứng với ảnh bạn chọn.

Công cụ trực quan — Thử ngay!

Công cụ dưới đây cho phép bạn nhìn thấy toàn bộ quá trình hoạt động của một mạng nơ-ron:

🧠 Mở công cụ Neural Network Visualizer

(Cần chạy qua HTTP server — xem hướng dẫn bên dưới)

⚙️ Cách chạy công cụ:
Mở Terminal (PowerShell / CMD) trong thư mục nn-visualizer, rồi gõ:
python -m http.server 8000
Sau đó mở trình duyệt tại http://localhost:8000

Tóm tắt — Những gì cần nhớ

Khái niệmMột câu giải thích
Neural NetworkHàm toán học gồm nhiều "neuron" nối nhau, học từ dữ liệu
Forward PassDữ liệu chạy từ Input → Hidden → Output, tính tổng trọng số + kích hoạt
Activation FunctionHàm phi tuyến giúp mạng học được quan hệ phức tạp
Loss FunctionĐo mức sai lệch giữa dự đoán và đáp án đúng
BackpropagationTruyền lỗi ngược lại để chỉnh trọng số, giảm sai số
RNNMạng có bộ nhớ, neuron nhớ trạng thái bước trước
TrainingLặp Forward + Backward nhiều lần cho mạng "thông minh" dần
🎯 Bài tập tự khám phá:
1. Chạy Forward Pass với ảnh "Số 0" và "Chữ X" — so sánh giá trị output có gì khác?
2. Chạy Backpropagation 5 lần liên tiếp — Loss có giảm không?
3. Đổi hàm kích hoạt từ ReLU sang Sigmoid — giá trị các neuron ẩn thay đổi thế nào?
4. Tăng số lớp ẩn lên 4 — mạng có nhiều tham số hơn bao nhiêu?

Ý tưởng và thực hiện: Nguyễn Minh Hải