Bài 10

Deep Learning

Deep learning là nhánh của machine learning dùng mạng nơ-ron nhiều lớp để tự học biểu diễn (representation) từ dữ liệu thô. Bài này đi từ một neuron đơn giản, qua activation, lan truyền xuôi/ngược và tối ưu, tới các kiến trúc lớn: CNN cho ảnh, RNN/LSTM và Transformer cho chuỗi/ngôn ngữ, kèm ví dụ Keras và lời khuyên khi nào nên dùng DL thay vì ML cổ điển.

Từ perceptron tới mạng nhiều lớp
Neuron, weights & bias

Đơn vị cơ bản là neuron (perceptron): nó nhận các đầu vào x₁..xₙ, nhân với weights w₁..wₙ, cộng thêm bias b, rồi cho qua một hàm kích hoạt phi tuyến:

z = w₁x₁ + w₂x₂ + ... + wₙxₙ + b   = wᵀx + b
a = activation(z)                  # đầu ra của neuron

Một perceptron đơn lẻ chỉ vẽ được ranh giới tuyến tính (không giải nổi bài toán XOR). Xếp nhiều neuron thành lớp (layer), rồi chồng nhiều lớp lại thành Multi-Layer Perceptron (MLP) — với các hidden layer ở giữa — thì mạng có thể xấp xỉ gần như mọi hàm (universal approximation). Weights và bias chính là tham số học được; huấn luyện là quá trình điều chỉnh chúng để giảm loss.

"Deep" nghĩa là gì: chỉ đơn giản là mạng có nhiều hidden layer. Càng sâu, mạng càng học được đặc trưng phân cấp — lớp đầu bắt cạnh/màu, lớp sau bắt hình dạng, lớp cuối bắt khái niệm.
Hàm kích hoạt (Activation)
Sigmoid, tanh, ReLU, softmax & vanishing gradient

Nếu không có phi tuyến, chồng bao nhiêu lớp tuyến tính lại vẫn chỉ ra một hàm tuyến tính. Activation phi tuyến là thứ cho mạng khả năng học quan hệ phức tạp.

HàmCông thứcĐặc điểm
Sigmoidσ(z) = 1/(1+e⁻ᶻ)Ra (0,1); dùng ở output nhị phân. Bão hoà hai đầu → vanishing gradient.
Tanh(eᶻ−e⁻ᶻ)/(eᶻ+e⁻ᶻ)Ra (−1,1), zero-centered nên tốt hơn sigmoid ở hidden layer; vẫn bão hoà.
ReLUmax(0, z)Mặc định cho hidden layer: rẻ, không bão hoà phía dương, hội tụ nhanh. Có thể "chết" (dying ReLU).
Leaky/ELU/GELUvd max(0.01z, z)Biến thể cho gradient nhỏ ở vùng âm, tránh neuron chết. GELU phổ biến trong Transformer.
Softmaxeᶻⁱ/ΣeᶻʲỞ output đa lớp: biến logits thành phân phối xác suất tổng bằng 1.
Vanishing gradient: sigmoid/tanh có đạo hàm rất nhỏ ở hai đầu bão hoà. Khi backprop qua nhiều lớp, gradient nhân dồn lại tiến về 0, các lớp đầu gần như không học được. ReLU (đạo hàm = 1 ở phía dương) cùng batch normalization và residual connection là những cách chính để khắc phục.
Forward pass, loss & backpropagation
Gradient descent, learning rate, epoch/batch

Forward pass: đưa dữ liệu qua mạng từ input tới output để ra dự đoán ŷ. Sau đó tính loss đo sai lệch giữa ŷ và nhãn thật:

Hồi quy      : MSE = mean((y - ŷ)²)
Phân loại    : Cross-entropy = -Σ yᵢ log(ŷᵢ)

Backpropagation dùng quy tắc chuỗi (chain rule) để tính gradient của loss theo từng weight, lan truyền ngược từ output về input. Gradient descent rồi cập nhật weight ngược hướng gradient:

w ← w - η * ∂Loss/∂w          # η (eta) = learning rate
OptimizerÝ tưởng
SGDCập nhật theo gradient của từng mini-batch; đơn giản, có thể dao động.
MomentumCộng dồn "quán tính" các bước trước để vượt vùng phẳng & giảm dao động.
AdamKết hợp momentum + learning rate thích nghi cho từng tham số; mặc định phổ biến nhất.
Regularization
Chống overfit trong mạng sâu

Mạng sâu có hàng triệu tham số nên rất dễ overfit. Các kỹ thuật thường được dùng chồng lên nhau:

Kỹ thuậtCơ chế
DropoutNgẫu nhiên "tắt" một tỉ lệ neuron mỗi bước train (vd 0.5), buộc mạng không phụ thuộc vào neuron đơn lẻ. Tắt khi inference.
Batch NormalizationChuẩn hoá đầu ra mỗi lớp theo từng batch → ổn định & tăng tốc học, giảm nhạy với khởi tạo, có chút tác dụng regularize.
Early stoppingDừng huấn luyện khi loss trên validation ngừng cải thiện → tránh học quá đà.
Weight decay (L2)Phạt weight lớn, giữ mô hình "mượt" hơn; tương đương ridge trong loss.
Data augmentationSinh thêm dữ liệu bằng biến đổi giữ nhãn (xoay/lật/crop ảnh, thêm nhiễu) → mạng bất biến hơn, khó overfit.
Kết hợp thực tế: một mạng ảnh điển hình dùng ReLU + BatchNorm giữa các lớp, Dropout trước lớp fully-connected cuối, weight decay nhẹ trong optimizer, data augmentation trên input và early stopping theo val loss.
CNN cho ảnh
Convolution, filter, pooling, feature maps

Convolutional Neural Network (CNN) khai thác cấu trúc không gian của ảnh. Thay vì nối mọi pixel với mọi neuron, nó trượt các filter/kernel nhỏ (vd 3×3) trên ảnh:

Các kiến trúc tiêu biểu theo dòng thời gian:

Kiến trúcĐóng góp
LeNet-5 (1998)CNN kinh điển nhận dạng chữ số viết tay.
AlexNet (2012)Sâu hơn + ReLU + dropout + GPU; châm ngòi bùng nổ deep learning.
VGG (2014)Rất sâu với toàn bộ filter 3×3 xếp chồng, đơn giản mà hiệu quả.
ResNet (2015)Skip/residual connection cho phép huấn luyện mạng cực sâu (100+ lớp) mà không vanishing gradient.
Mô hình chuỗi cho NLP
RNN, LSTM/GRU & Transformer

Recurrent Neural Network (RNN) xử lý dữ liệu tuần tự (văn bản, chuỗi thời gian) bằng cách duy trì một hidden state mang thông tin từ các bước trước. Nhưng RNN thuần gặp vanishing gradient khi chuỗi dài → quên phụ thuộc xa.

Transformer (2017, "Attention is All You Need") loại bỏ tính tuần tự của RNN, thay bằng cơ chế self-attention: mỗi token trực tiếp "chú ý" tới mọi token khác và cân trọng số mức liên quan. Ưu thế then chốt:

Tiêu chíRNN/LSTMTransformer
Xử lýTuần tự, khó song songSong song toàn chuỗi → train nhanh trên GPU
Phụ thuộc xaKhó với chuỗi rất dàiAttention nối trực tiếp mọi vị trí
Ứng dụngDần bị thay thếNền tảng của BERT, GPT, và hầu hết LLM hiện đại
Vì sao Transformer thắng: khả năng song song hoá + attention nắm ngữ cảnh dài giúp huấn luyện mô hình khổng lồ trên dữ liệu khổng lồ — điều RNN không kham nổi. Đây là kiến trúc đứng sau toàn bộ làn sóng LLM.
Embeddings
Biểu diễn dày đặc có ngữ nghĩa

Embedding biến đối tượng rời rạc (từ, sản phẩm, user) thành vector số thực dày đặc (vd 128–768 chiều), sao cho các đối tượng tương tự nằm gần nhau trong không gian. Thay cho one-hot thưa và không mang ngữ nghĩa, embedding học được quan hệ: kinh điển vua − đàn ông + phụ nữ ≈ hoàng hậu. Word2Vec/GloVe là embedding tĩnh; các mô hình Transformer cho embedding theo ngữ cảnh. Chúng là đầu vào cho hầu hết bài toán NLP và cả hệ gợi ý.

# Lớp embedding trong Keras: vocab 10000 -> vector 128 chiều
from tensorflow.keras.layers import Embedding
emb = Embedding(input_dim=10000, output_dim=128)
Frameworks & ví dụ Keras
PyTorch vs TensorFlow/Keras
FrameworkĐặc điểm
PyTorchĐịnh hình bằng đồ thị động (define-by-run), Pythonic, dễ debug; thống trị nghiên cứu và ngày càng phổ biến trong production.
TensorFlow / KerasKeras là API cấp cao dễ học; hệ sinh thái triển khai mạnh (TF Serving, TFLite, TF.js). Tốt cho người mới và production quy mô lớn.
# MLP phân loại nhị phân với Keras Sequential
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout

model = Sequential([
    Dense(64, activation="relu", input_shape=(n_features,)),
    Dropout(0.3),
    Dense(32, activation="relu"),
    Dense(1,  activation="sigmoid")   # xác suất lớp dương
])

model.compile(optimizer="adam",
              loss="binary_crossentropy",
              metrics=["accuracy"])

from tensorflow.keras.callbacks import EarlyStopping
es = EarlyStopping(monitor="val_loss", patience=5,
                   restore_best_weights=True)

model.fit(X_train, y_train, validation_split=0.2,
          epochs=100, batch_size=32, callbacks=[es])
Lời khuyên học: bắt đầu với Keras để nắm khái niệm nhanh, rồi chuyển sang PyTorch khi cần kiểm soát chi tiết vòng huấn luyện hoặc đọc code nghiên cứu.
Khi nào dùng DL vs ML cổ điển
Chọn công cụ đúng cho bài toán
Tiêu chíDeep LearningML cổ điển
Loại dữ liệuẢnh, text, audio, video (unstructured)Tabular / có cấu trúc
Kích thước dữ liệuRất lớn (chục nghìn+ mẫu)Nhỏ đến vừa vẫn tốt
Feature engineeringTự học đặc trưng từ dữ liệu thôCần con người thiết kế feature
Tài nguyênCần GPU, huấn luyện lâuChạy CPU, nhanh, rẻ
Giải thích đượcKhó (hộp đen)Dễ hơn (cây, hệ số hồi quy)
Sự thật quan trọng: với dữ liệu dạng bảng (tabular), gradient boosting như XGBoost / LightGBM thường thắng deep learning — nhanh hơn, ít cần tinh chỉnh, dễ giải thích hơn. Đừng mặc định chọn mạng nơ-ron. Hãy dùng DL khi dữ liệu là ảnh/text/audio hoặc rất lớn và quan hệ quá phức tạp cho feature engineering thủ công.
← Quay lại
Bài 9: Đánh giá mô hình