AI 4 — Mạng nơ-ron & Deep Learning
AI 4 — Mạng nơ-ron & Deep Learning
Ở các bài trước, chúng ta đã làm quen với học máy (ML) cổ điển: hồi quy tuyến tính, cây quyết định, SVM... Những thuật toán đó rất mạnh khi dữ liệu đã được con người "chế biến" thành các đặc trưng (feature) gọn gàng. Nhưng khi dữ liệu là ảnh thô, âm thanh, hay văn bản tự do, việc thiết kế đặc trưng bằng tay trở nên cực kỳ khó. Đây chính là lúc deep learning (học sâu) tỏa sáng: nó tự học cách biểu diễn dữ liệu qua nhiều lớp.
Bài này đi từ viên gạch nhỏ nhất — một nơ-ron nhân tạo — cho tới các kiến trúc lớn như CNN và RNN, và giúp bạn quyết định khi nào nên dùng deep learning thay vì ML cổ điển.
Nơ-ron nhân tạo — viên gạch cơ bản
Một nơ-ron nhân tạo (artificial neuron, hay perceptron) là một hàm toán học rất đơn giản, lấy cảm hứng (rất lỏng lẻo) từ nơ-ron sinh học trong não. Nó nhận vào nhiều con số đầu vào và trả ra một con số đầu ra.
Quá trình diễn ra qua ba bước:
1. Trọng số và tổng có trọng số
Mỗi đầu vào x₁, x₂, ..., xₙ được nhân với một trọng số (weight) tương ứng w₁, w₂, ..., wₙ. Trọng số thể hiện "tầm quan trọng" của đầu vào đó. Trọng số lớn nghĩa là đầu vào ảnh hưởng mạnh tới kết quả; trọng số gần 0 nghĩa là gần như bị bỏ qua; trọng số âm nghĩa là tác động ngược chiều.
Sau đó ta cộng tất cả lại để được tổng có trọng số (weighted sum):
z = (w₁·x₁ + w₂·x₂ + ... + wₙ·xₙ) + b
2. Bias
Số b ở cuối là bias (độ lệch). Nó cho phép nơ-ron dịch chuyển kết quả lên hoặc xuống một cách độc lập với đầu vào. Hãy hình dung bias giống như hằng số b trong phương trình đường thẳng y = ax + b: không có nó, đường thẳng buộc phải đi qua gốc tọa độ, làm mất tính linh hoạt. Bias giúp mô hình khớp dữ liệu tốt hơn.
3. Hàm kích hoạt
Cuối cùng, tổng z được đưa qua một hàm kích hoạt (activation function) f để cho ra đầu ra cuối cùng:
output = f(z)
Như sơ đồ dưới đây, một nơ-ron nhận nhiều đầu vào, tính tổng có trọng số rồi cho qua hàm kích hoạt:
Toàn bộ "trí thông minh" của một nơ-ron nằm ở các trọng số và bias. Việc huấn luyện mạng nơ-ron thực chất chỉ là quá trình tìm ra bộ trọng số và bias tốt nhất.
Mạng nhiều lớp — từ một nơ-ron đến mạng sâu
Một nơ-ron đơn lẻ chỉ giải được những bài toán rất đơn giản. Sức mạnh thực sự đến khi ta xếp nhiều nơ-ron lại thành lớp (layer), rồi nối nhiều lớp với nhau.
Một mạng nơ-ron điển hình (gọi là mạng truyền thẳng — feedforward network, hay multilayer perceptron — MLP) gồm ba loại lớp:
- Lớp đầu vào (input layer): nhận dữ liệu thô. Số nơ-ron bằng số đặc trưng (ví dụ ảnh 28×28 pixel có 784 đầu vào).
- Lớp ẩn (hidden layers): nằm giữa, là nơi mạng học các biểu diễn trung gian. "Sâu" (deep) trong "deep learning" chính là chỉ việc có nhiều lớp ẩn.
- Lớp đầu ra (output layer): cho kết quả cuối cùng (ví dụ xác suất ảnh là "mèo" hay "chó").
Mỗi lớp học một mức trừu tượng cao hơn lớp trước. Trong nhận diện khuôn mặt chẳng hạn: lớp đầu phát hiện cạnh và góc; lớp giữa ghép cạnh thành mắt, mũi, miệng; lớp sau ghép các bộ phận thành khuôn mặt. Con người không phải lập trình tay những "khái niệm" này — mạng tự học chúng từ dữ liệu. Đó là điểm cách mạng của deep learning.
Hàm kích hoạt và vì sao cần phi tuyến
Đây là một trong những ý tưởng quan trọng nhất, nhưng cũng dễ bị bỏ qua nhất.
Tổng có trọng số z = Σ wᵢxᵢ + b là một phép biến đổi tuyến tính. Nếu bạn xếp nhiều lớp tuyến tính chồng lên nhau mà không có gì ở giữa, thì... toàn bộ mạng vẫn chỉ tương đương một phép biến đổi tuyến tính duy nhất. Nói cách khác, một mạng 100 lớp toàn phép tuyến tính cũng chẳng mạnh hơn một lớp đơn. Nó không thể học những quan hệ phức tạp, cong queo của thế giới thực.
Hàm kích hoạt phi tuyến (non-linear) phá vỡ giới hạn này. Bằng cách chèn một hàm cong giữa các lớp, mạng có thể xấp xỉ gần như bất kỳ hàm số nào (đây là nội dung của định lý xấp xỉ phổ quát).
Ba hàm kích hoạt phổ biến nhất:
ReLU (Rectified Linear Unit)
ReLU(z) = max(0, z)
Cực kỳ đơn giản: nếu z âm thì trả 0, ngược lại giữ nguyên. ReLU là lựa chọn mặc định cho các lớp ẩn ngày nay vì tính nhanh, giúp huấn luyện hội tụ nhanh và giảm bớt vấn đề "gradient biến mất" (sẽ nói sau).
Sigmoid
sigmoid(z) = 1 / (1 + e^(-z))
Nén mọi giá trị về khoảng (0, 1), nên thích hợp diễn giải như xác suất. Thường dùng ở lớp đầu ra cho bài toán phân loại nhị phân (có/không, đúng/sai).
Softmax
Dùng ở lớp đầu ra cho phân loại nhiều lớp (multi-class). Softmax biến một vector số thành một phân phối xác suất: tất cả đầu ra đều dương và cộng lại bằng 1. Ví dụ kết quả [0.7, 0.2, 0.1] nghĩa là mô hình tin 70% là mèo, 20% là chó, 10% là chim.
| Hàm | Khoảng giá trị | Dùng ở đâu |
|---|---|---|
| ReLU | [0, ∞) | Lớp ẩn |
| Sigmoid | (0, 1) | Đầu ra phân loại nhị phân |
| Softmax | (0, 1), tổng = 1 | Đầu ra phân loại nhiều lớp |
Lan truyền xuôi (forward propagation)
Lan truyền xuôi là quá trình đưa dữ liệu đi qua mạng để tạo ra dự đoán. Dữ liệu chảy theo một chiều: từ lớp đầu vào → qua các lớp ẩn → tới lớp đầu ra.
Tại mỗi lớp, ta lặp lại đúng phép tính của nơ-ron: tính tổng có trọng số, cộng bias, áp hàm kích hoạt. Đầu ra của lớp này trở thành đầu vào của lớp kế tiếp. Cuối cùng lớp đầu ra cho ta một con số (hoặc một vector số) — đó là dự đoán của mạng.
Lan truyền xuôi là phần "dùng" mô hình. Nhưng làm sao mạng học được trọng số đúng ngay từ đầu? Đó là việc của lan truyền ngược.
Lan truyền ngược (backpropagation) — trực giác
Khi mới khởi tạo, trọng số của mạng là các số ngẫu nhiên, nên dự đoán đầu tiên gần như chắc chắn sai. Ta cần một cách để chỉnh trọng số cho đúng dần. Đó là lan truyền ngược (backpropagation).
Hãy hình dung quy trình huấn luyện như sau:
Trực giác của backpropagation: sau khi tính được sai số (mất mát) ở đầu ra, ta lần ngược từ lớp cuối về lớp đầu để hỏi mỗi trọng số một câu: "Bạn đã đóng góp bao nhiêu vào sai số này, và nếu tôi tăng/giảm bạn một chút thì sai số sẽ thay đổi theo hướng nào?"
Câu trả lời chính là gradient (đạo hàm của mất mát theo trọng số đó). Backpropagation dùng quy tắc dây chuyền (chain rule) trong giải tích để tính tất cả các gradient này một cách hiệu quả, lan từ lớp sau ra lớp trước — vì thế mới gọi là "ngược". Bạn không cần tự tính đạo hàm bằng tay; framework sẽ làm tự động (auto-differentiation).
Hàm mất mát và gradient descent
Hàm mất mát
Hàm mất mát (loss function) đo độ sai lệch giữa dự đoán của mạng và đáp án đúng. Mất mát càng nhỏ thì mô hình càng tốt. Mục tiêu huấn luyện là tìm bộ trọng số làm mất mát nhỏ nhất. Một số hàm phổ biến:
- MSE (Mean Squared Error): cho bài toán hồi quy (dự đoán số).
- Cross-Entropy: cho bài toán phân loại (dự đoán xác suất các lớp).
Gradient descent
Gradient descent (hạ gradient) là thuật toán tối ưu dùng gradient để giảm mất mát. Hãy tưởng tượng bạn đứng trên một ngọn đồi sương mù và muốn xuống đáy thung lũng (điểm mất mát thấp nhất). Bạn không thấy toàn cảnh, nhưng cảm nhận được độ dốc dưới chân. Chiến lược hợp lý: bước một bước nhỏ theo hướng dốc xuống nhất, rồi lặp lại. Gradient cho biết hướng dốc lên; nên ta đi ngược gradient:
w_mới = w_cũ - learning_rate × gradient
Learning rate
Learning rate (tốc độ học) quyết định độ lớn mỗi bước. Đây là một siêu tham số quan trọng:
- Quá lớn: mỗi bước nhảy quá xa, có thể vọt qua đáy thung lũng và không bao giờ hội tụ.
- Quá nhỏ: học cực kỳ chậm, tốn nhiều thời gian.
Epoch và batch
- Epoch: một lượt mạng đi qua toàn bộ tập dữ liệu huấn luyện. Thường cần nhiều epoch để học tốt.
- Batch: thay vì xử lý cả triệu mẫu cùng lúc (tốn bộ nhớ), ta chia dữ liệu thành các lô nhỏ (batch). Mỗi batch cập nhật trọng số một lần. Cách này gọi là mini-batch gradient descent và là chuẩn thực hành hiện nay.
- Batch size: số mẫu trong mỗi batch (ví dụ 32, 64, 128).
Overfitting và regularization
Overfitting (quá khớp) xảy ra khi mạng học thuộc lòng dữ liệu huấn luyện — kể cả nhiễu — thay vì học quy luật tổng quát. Triệu chứng kinh điển: độ chính xác trên tập huấn luyện rất cao nhưng trên dữ liệu mới (tập kiểm tra) lại tệ. Mạng deep learning với hàng triệu tham số đặc biệt dễ overfitting.
Một số kỹ thuật regularization (chính quy hóa) để chống lại:
- Dropout: trong lúc huấn luyện, ngẫu nhiên "tắt" một tỷ lệ nơ-ron ở mỗi bước (ví dụ 50%). Điều này buộc mạng không được phụ thuộc quá mức vào bất kỳ nơ-ron nào, giúp học biểu diễn bền vững hơn. Khi suy luận (inference) thì bật lại toàn bộ.
- Early stopping: theo dõi mất mát trên tập validation; khi nó bắt đầu tăng (dù mất mát huấn luyện vẫn giảm), ta dừng huấn luyện. Đó là dấu hiệu mạng bắt đầu học thuộc lòng.
- L1/L2 regularization (weight decay): thêm một khoản phạt vào hàm mất mát để giữ trọng số nhỏ, tránh mô hình quá phức tạp.
- Tăng cường dữ liệu (data augmentation): với ảnh, tạo thêm mẫu bằng cách xoay, lật, cắt, đổi sáng... giúp mạng tổng quát tốt hơn.
CNN — mạng nơ-ron tích chập cho ảnh
Với ảnh, dùng mạng truyền thẳng (nối mọi pixel với mọi nơ-ron) là rất lãng phí và không tận dụng được cấu trúc không gian. CNN (Convolutional Neural Network) giải quyết điều này.
Convolution (tích chập) — trực giác
Thay vì nhìn toàn bộ ảnh cùng lúc, CNN dùng các bộ lọc (filter/kernel) nhỏ — ví dụ ô vuông 3×3 — trượt khắp ảnh. Mỗi bộ lọc dò tìm một đặc trưng cục bộ: bộ lọc này phát hiện cạnh dọc, bộ lọc kia phát hiện cạnh ngang, bộ lọc khác phát hiện màu hay vân. Kết quả là một "bản đồ đặc trưng" (feature map) cho biết đặc trưng đó xuất hiện ở đâu trong ảnh.
Điểm hay: cùng một bộ lọc được dùng lại trên khắp ảnh (chia sẻ trọng số). Điều này giảm mạnh số tham số và giúp mạng nhận ra một đặc trưng dù nó xuất hiện ở góc nào (tính bất biến vị trí). Các lớp tích chập xếp chồng sẽ học từ đặc trưng đơn giản (cạnh) đến phức tạp (mắt, bánh xe, chữ cái...).
Pooling (gộp) — trực giác
Sau lớp tích chập thường có lớp pooling để thu nhỏ kích thước bản đồ đặc trưng, giữ lại thông tin quan trọng nhất. Phổ biến nhất là max pooling: chia bản đồ thành các ô nhỏ và chỉ giữ giá trị lớn nhất mỗi ô. Pooling giúp giảm tính toán và làm mạng bớt nhạy với dịch chuyển nhỏ.
CNN là nền tảng cho thị giác máy tính: nhận diện ảnh, phát hiện vật thể, chẩn đoán ảnh y khoa, xe tự lái...
RNN/LSTM — mạng cho dữ liệu chuỗi (giới thiệu)
Có những dữ liệu mang tính tuần tự: câu văn, chuỗi thời gian giá cổ phiếu, âm thanh. Ở đó, thứ tự và ngữ cảnh rất quan trọng — "chó cắn người" khác hẳn "người cắn chó".
RNN (Recurrent Neural Network) xử lý chuỗi bằng cách lặp lại từng phần tử một, đồng thời duy trì một "trạng thái ẩn" (hidden state) như bộ nhớ mang thông tin từ các bước trước sang bước sau. Nhờ vậy mạng có khái niệm về ngữ cảnh.
Tuy nhiên RNN cơ bản hay quên thông tin ở xa (vấn đề gradient biến mất với chuỗi dài). LSTM (Long Short-Term Memory) và GRU là các biến thể RNN có "cổng" (gate) thông minh để quyết định nhớ gì, quên gì, từ đó xử lý phụ thuộc dài hạn tốt hơn.
Lưu ý: ngày nay phần lớn bài toán chuỗi (đặc biệt là ngôn ngữ) đã chuyển sang kiến trúc Transformer, mạnh hơn và song song hóa tốt hơn RNN. Chúng ta sẽ tìm hiểu Transformer ở bài tiếp theo.
Vì sao cần GPU
Huấn luyện mạng nơ-ron là hàng tỷ phép nhân ma trận. Điểm mấu chốt: các phép tính này song song với nhau. CPU có vài chục lõi mạnh, tối ưu cho tác vụ tuần tự. GPU (card đồ họa) có hàng nghìn lõi nhỏ, được thiết kế để làm cùng một phép tính trên rất nhiều dữ liệu cùng lúc — đúng kiểu mà nhân ma trận cần.
Kết quả: một mô hình mất nhiều tuần để huấn luyện trên CPU có thể chỉ mất vài giờ trên GPU. Đây là một trong những lý do cốt lõi khiến deep learning bùng nổ từ khoảng năm 2012. Ngoài GPU còn có TPU (chip chuyên dụng của Google) cho cùng mục đích.
Framework: PyTorch và TensorFlow
Bạn gần như không bao giờ viết backpropagation bằng tay. Các framework lo phần đó:
- PyTorch: phổ biến trong nghiên cứu, cú pháp tự nhiên kiểu Python, dễ gỡ lỗi. Hiện là lựa chọn chủ đạo.
- TensorFlow / Keras: mạnh trong triển khai sản phẩm; Keras là API cấp cao giúp dựng mạng rất nhanh.
Cả hai đều cung cấp auto-differentiation, hỗ trợ GPU, và thư viện lớp dựng sẵn (Dense, Conv2D, LSTM...). Bạn chỉ cần mô tả kiến trúc và chọn hàm mất mát, optimizer — phần còn lại framework xử lý.
Khi nào dùng deep learning vs ML cổ điển
Deep learning không phải lúc nào cũng là lựa chọn tốt nhất. Dưới đây là kim chỉ nam:
Nên dùng deep learning khi:
- Dữ liệu lớn (hàng chục nghìn mẫu trở lên). Mạng sâu cần nhiều dữ liệu mới phát huy.
- Dữ liệu phi cấu trúc: ảnh, âm thanh, video, văn bản tự do — nơi thiết kế đặc trưng bằng tay rất khó.
- Bài toán phức tạp, quan hệ phi tuyến mạnh; và bạn có đủ tài nguyên tính toán (GPU).
Nên dùng ML cổ điển khi:
- Dữ liệu nhỏ hoặc vừa, dữ liệu dạng bảng (tabular) có cấu trúc rõ ràng.
- Cần giải thích được quyết định (cây quyết định, hồi quy dễ diễn giải hơn mạng "hộp đen").
- Tài nguyên hạn chế, cần huấn luyện và suy luận nhanh, rẻ.
Trên dữ liệu bảng, các mô hình như Gradient Boosting (XGBoost, LightGBM) thường vẫn ngang hoặc vượt deep learning, lại nhanh và dễ dùng hơn. Hãy chọn công cụ phù hợp với bài toán, đừng dùng deep learning chỉ vì nó "thời thượng".
Tóm tắt
- Nơ-ron nhân tạo = tổng có trọng số của đầu vào + bias, rồi qua hàm kích hoạt. Huấn luyện là quá trình tìm trọng số và bias tốt nhất.
- Mạng gồm lớp đầu vào, các lớp ẩn (càng nhiều càng "sâu") và lớp đầu ra; mỗi lớp học một mức trừu tượng cao hơn.
- Hàm kích hoạt phi tuyến (ReLU, sigmoid, softmax) là bắt buộc — không có nó, mạng nhiều lớp chỉ tương đương một lớp tuyến tính.
- Lan truyền xuôi tạo dự đoán; hàm mất mát đo sai số; lan truyền ngược tính gradient; gradient descent (với learning rate, epoch, batch) cập nhật trọng số.
- Overfitting chống bằng dropout, early stopping, regularization, data augmentation.
- CNN (convolution + pooling) cho ảnh; RNN/LSTM cho chuỗi; GPU/TPU tăng tốc nhờ song song hóa; PyTorch và TensorFlow lo phần kỹ thuật.
- Dùng deep learning cho dữ liệu lớn và phi cấu trúc; dùng ML cổ điển cho dữ liệu bảng nhỏ và khi cần giải thích.
Tự kiểm tra
- Vì sao một mạng nhiều lớp toàn phép tuyến tính (không có hàm kích hoạt phi tuyến) lại không mạnh hơn một lớp đơn?
- Giải thích bằng lời trực giác của lan truyền ngược: nó tính cái gì và "lan ngược" theo nghĩa nào?
- Learning rate quá lớn và quá nhỏ gây ra hậu quả gì khác nhau trong gradient descent?
- Dropout chống overfitting bằng cơ chế nào? Nó hoạt động lúc huấn luyện hay lúc suy luận?
- Trong CNN, "chia sẻ trọng số" của bộ lọc tích chập mang lại lợi ích gì so với mạng truyền thẳng đầy đủ?
- Bạn có một bộ dữ liệu bảng 2000 dòng và cần giải thích được quyết định cho khách hàng. Nên chọn deep learning hay ML cổ điển? Vì sao?
Đọc tiếp
Bài viết liên quan
Phân biệt AI/ML/DL, các kiểu học máy, quy trình ML end-to-end và thuật ngữ nền tảng.
Chất lượng dữ liệu, xử lý thiếu/ngoại lai, mã hoá, chuẩn hoá, tạo đặc trưng và tránh data leakage.
Mô hình ngôn ngữ lớn hoạt động ra sao, token, context window, tham số sinh, và kỹ thuật viết prompt.
Retrieval-Augmented Generation, vector database, tool calling, agent và MCP để xây ứng dụng LLM thực tế.