Backpropagation

Backpropagation: Nền tảng của Machine Learning hiện đại

Backpropagation (lan truyền ngược) là một trong những thuật toán nền tảng quan trọng nhất của Deep Learning, cho phép các mạng neural học từ dữ liệu. Trong bài viết hôm nay, tôi sẽ giải thích chi tiết về backpropagation, chain rule, các biến thể của gradient descent, và những thách thức phổ biến như vanishing và exploding gradients.

Backpropagation: Cơ chế học của mạng neural

Backpropagation là thuật toán cho phép mạng neural học từ lỗi của mình. Về cơ bản, nó hoạt động bằng cách tính toán đóng góp của từng trọng số (weight) đối với lỗi tổng thể, sau đó điều chỉnh các trọng số để giảm thiểu lỗi này.

Quá trình này gồm hai bước chính:

  1. Forward Pass: Dữ liệu đi từ đầu vào qua các lớp ẩn đến đầu ra, tạo ra dự đoán

  2. Backward Pass: Tính toán lỗi và cập nhật các trọng số từ cuối mạng ngược về đầu vào

Điều đặc biệt là backpropagation sử dụng tính toán đạo hàm hiệu quả, nhờ đó có thể huấn luyện các mạng neural phức tạp với hàng triệu tham số.

Chain Rule: Nền tảng toán học của Backpropagation

Quy tắc chuỗi (Chain Rule) từ giải tích là nền tảng toán học cho backpropagation. Nó cho phép tính toán đạo hàm của các hàm phức hợp bằng cách nhân các đạo hàm riêng phần.

Trong mạng neural, mỗi lớp là một hàm được áp dụng lên đầu ra của lớp trước nó, tạo thành một chuỗi các hàm lồng nhau. Ví dụ, với mạng neural 2 lớp:

y = f₂(f₁(x))

Để tính đạo hàm của lỗi E theo trọng số w ở lớp đầu tiên, ta áp dụng quy tắc chuỗi:

∂E/∂w = (∂E/∂y) × (∂y/∂f₁) × (∂f₁/∂w)

Đây chính là cách backpropagation tính được gradient của lỗi theo từng trọng số trong mạng, cho phép cập nhật chính xác từng tham số để giảm thiểu lỗi.

Gradient Descent và các biến thể

Gradient Descent (GD) là thuật toán tối ưu hóa dùng để cập nhật các trọng số dựa trên gradient tính được từ backpropagation. Công thức cơ bản là:

w_new = w_old - η × ∂E/∂w

Trong đó η (eta) là learning rate - tốc độ học.

Tuy nhiên, Gradient Descent nguyên bản có nhiều hạn chế khi áp dụng vào các bài toán thực tế. Vì vậy, nhiều biến thể đã được phát triển:

1. Stochastic Gradient Descent (SGD)

Thay vì sử dụng toàn bộ tập dữ liệu để tính gradient, SGD chỉ sử dụng một mẫu ngẫu nhiên trong mỗi lần cập nhật. Điều này giúp tăng tốc quá trình huấn luyện và thoát khỏi các cực tiểu địa phương.

2. Mini-batch Gradient Descent

Là sự kết hợp giữa GD và SGD, sử dụng một tập nhỏ (mini-batch) các mẫu để tính gradient. Đây là phương pháp phổ biến nhất hiện nay vì cân bằng giữa tốc độ và độ ổn định.

3. Momentum

Thêm "quán tính" vào quá trình cập nhật, giúp vượt qua các điểm yên ngựa (saddle points) và tăng tốc hội tụ:

v = γ × v + η × ∂E/∂w
w_new = w_old - v

4. AdaGrad (Adaptive Gradient)

Tự điều chỉnh learning rate cho từng tham số dựa trên lịch sử gradient, giúp xử lý các đặc trưng có tần suất khác nhau:

g = g + (∂E/∂w)²
w_new = w_old - η/sqrt(g + ε) × ∂E/∂w

5. RMSProp

Cải tiến AdaGrad bằng cách sử dụng trung bình động của gradient bình phương:

g = β × g + (1-β) × (∂E/∂w)²
w_new = w_old - η/sqrt(g + ε) × ∂E/∂w

6. Adam (Adaptive Moment Estimation)

Kết hợp ưu điểm của Momentum và RMSProp, hiện là thuật toán phổ biến nhất:

m = β₁ × m + (1-β₁) × ∂E/∂w
v = β₂ × v + (1-β₂) × (∂E/∂w)²
m̂ = m/(1-β₁ᵗ)  # Hiệu chỉnh bias
v̂ = v/(1-β₂ᵗ)
w_new = w_old - η × m̂/sqrt(v̂ + ε)

Vanishing và Exploding Gradients

Khi huấn luyện mạng neural sâu, hai vấn đề phổ biến là vanishing gradients (gradient biến mất) và exploding gradients (gradient bùng nổ).

Vanishing Gradients

Vanishing gradients xảy ra khi gradient trở nên cực kỳ nhỏ khi lan truyền qua nhiều lớp. Điều này khiến các lớp đầu tiên học rất chậm hoặc không học được.

Nguyên nhân chính:

  • Hàm kích hoạt sigmoid và tanh có đạo hàm nhỏ ở vùng bão hòa

  • Nhiều phép nhân liên tiếp với các số < 1 trong quy tắc chuỗi

Giải pháp:

  1. Sử dụng hàm kích hoạt ReLU và các biến thể như Leaky ReLU, ELU

  2. Khởi tạo trọng số phù hợp (Xavier/Glorot, He initialization)

  3. Sử dụng kiến trúc có kết nối tắt như ResNet

  4. Batch Normalization

  5. Gradient clipping

Exploding Gradients

Exploding gradients là hiện tượng ngược lại, khi gradient trở nên cực kỳ lớn, khiến quá trình học không ổn định.

Nguyên nhân chính:

  • Khởi tạo trọng số không phù hợp

  • Nhiều phép nhân liên tiếp với các số > 1 trong quy tắc chuỗi

  • Learning rate quá lớn

Giải pháp:

  1. Gradient clipping: giới hạn norm của gradient

  2. Khởi tạo trọng số phù hợp

  3. Batch Normalization

  4. Regularization (L1, L2)

  5. Giảm learning rate

Kết luận

Backpropagation cùng với quy tắc chuỗi là nền tảng của deep learning hiện đại, cho phép huấn luyện các mạng neural phức tạp. Các biến thể của gradient descent như Adam đã giúp cải thiện đáng kể hiệu suất huấn luyện, trong khi các kỹ thuật như batch normalization và kiến trúc ResNet giúp giải quyết vấn đề vanishing/exploding gradients.

Thách thức tiếp theo của lĩnh vực này là phát triển các phương pháp tối ưu hiệu quả hơn, có thể xử lý các mô hình ngày càng lớn như transformer, đồng thời tiêu tốn ít tài nguyên tính toán hơn.

Last updated