Stochastic Gradient Descent (SGD) Là Gì? Giải Thích Dễ Hiểu Cho Người Mới

Câu trả lời nhanh
Stochastic Gradient Descent (SGD) là phiên bản cải tiến của Gradient Descent, chỉ dùng một mẫu dữ liệu ngẫu nhiên hoặc một batch nhỏ cho mỗi bước cập nhật trọng số. SGD giúp train model nhanh hơn rất nhiều trên dataset lớn, bộ nhớ ít hơn, và tính ngẫu nhiên giúp model thoát khỏi local minima.

Stochastic Gradient Descent Là Gì?

Minh họa thuật toán Stochastic Gradient Descent

Stochastic Gradient Descent (SGD) là phiên bản cải tiến của Gradient Descent, trong đó thay vì tính toán gradient trên toàn bộ dữ liệu, thuật toán chỉ dùng một mẫu dữ liệu ngẫu nhiên (hoặc một batch nhỏ) cho mỗi bước cập nhật trọng số.

Nói đơn giản hơn: nếu Gradient Descent thông thường là việc bạn đọc xong toàn bộ sách rồi mới bắt đầu làm bài tập, thì SGD là bạn đọc một trang, làm một bài, đọc tiếp trang sau, làm tiếp. Nhanh hơn nhiều, dù đôi khi đi hơi lệch hướng.

SGD Khác Gì So Với Gradient Descent Thường?

Khác biệt lớn nhất nằm ở lượng dữ liệu được sử dụng trong mỗi lần cập nhật:

Gradient Descent (Full-batch): Tính gradient trên toàn bộ dataset, rồi mới cập nhật trọng số một lần. Nếu dataset của bạn có 1 triệu mẫu, mỗi bước cập nhật phải duyệt qua hết 1 triệu mẫu đó.

Stochastic Gradient Descent: Chọn ngẫu nhiên một mẫu, tính gradient, cập nhật trọng số ngay lập tức. Rồi chọn mẫu tiếp theo, làm lại. Cứ thế lặp đi lặp lại.

Mini-batch SGD: Phiên bản phổ biến nhất trong thực tế. Lấy một nhóm nhỏ (thường 16, 32, 64, hoặc 128 mẫu), tính gradient trung bình, cập nhật. Đây chính là cái mà hầu hết framework AI dùng mặc định.

Tại Sao SGD Lại Quan Trọng?

Mình nghĩ SGD là một trong những ý tưởng đẹp nhất trong machine learning, bởi vì nó giải quyết được bài toán kinh điển: dữ liệu thì quá lớn, máy thì có hạn.

Imagine bạn train một model trên dataset ImageNet với 14 triệu ảnh. Nếu dùng full-batch gradient descent, mỗi bước cập nhật phải load hết 14 triệu ảnh qua model. Với SGD, bạn chỉ cần 32 ảnh mỗi lần. Tốc độ chênh lệch là khổng lồ.

Nhưng có một lợi ích tinh tế hơn: tính ngẫu nhiên (stochasticity) của SGD thực ra giúp model thoát khỏi local minima. Khi đường đi bị “rung lên” vì noise từ từng mẫu riêng lẻ, model ít bị kẹt trong các vùng tối ưu cục bộ hơn.

Ưu Điểm Của SGD

Tốc độ: Cập nhật trọng số liên tục, không cần chờ xử lý hết dữ liệu. Với dataset lớn, SGD có thể hội tụ nhanh hơn full-batch gradient descent hàng chục lần.

Bộ nhớ: Chỉ cần load một batch nhỏ vào GPU RAM cùng lúc. Full-batch gradient descent thì cần load toàn bộ dataset, điều gần như bất khả thi với dữ liệu thật.

Khả năng thoát local minima: Noise từ việc dùng ít dữ liệu mỗi bước tạo ra hiệu ứng “rung”, giúp model khám phá thêm không gian tham số thay vì bị kẹt.

Online learning: SGD cho phép cập nhật model khi dữ liệu mới đến liên tục, không cần train lại từ đầu.

Nhược Điểm Cần Biết

Đường đi không mượt: Hàm loss sẽ dao động mạnh thay vì giảm đều. Đôi khi khó biết model đang thực sự hội tụ hay chỉ đang loạn nhịp.

Nhạy với learning rate: Chọn learning rate quá cao, model sẽ phân kỳ. Quá thấp, model hội tụ chậm. Đây là lý do các biến thể như SGD with Momentum hay Adam ra đời.

Cần shuffle dữ liệu: Nếu dữ liệu được sắp xếp theo thứ tự nào đó (ví dụ tất cả ảnh mèo trước, ảnh chó sau), SGD sẽ học lệch. Cần xáo trộn (shuffle) trước khi train.

SGD With Momentum Là Gì?

Đây là phiên bản nâng cấp phổ biến nhất của SGD. Thay vì chỉ dùng gradient hiện tại để cập nhật, momentum tích lũy gradient của các bước trước đó, tạo ra một “đà” giúp model di chuyển nhanh hơn theo hướng đúng và giảm dao động.

Hình dung thế này: bạn lăn một quả cầu xuống dốc. Quả cầu không chỉ di chuyển dựa trên độ dốc tại điểm hiện tại, mà còn có đà từ việc đã lăn được bao xa. Momentum làm đúng điều đó cho gradient descent.

Công thức đơn giản: velocity = 0.9 * velocity + learning_rate * gradient. Trọng số mới = trọng số cũ – velocity.

SGD Vs Adam: Khi Nào Dùng Cái Nào?

Adam Optimizer thực ra là sự kết hợp của Momentum và RMSprop, tự động điều chỉnh learning rate cho từng tham số. Trong hầu hết trường hợp, Adam hoạt động tốt hơn SGD mặc định.

Nhưng có một sự thật thú vị mà nhiều người không biết: với nhiều bài toán computer vision, SGD with Momentum cho kết quả tổng thể tốt hơn Adam. Lý do là Adam hội tụ nhanh hơn nhưng đôi khi tìm ra nghiệm ít tổng quát hơn. Các paper nghiên cứu về ResNet, Vision Transformer thường dùng SGD.

Mẹo của mình: bắt đầu với Adam cho nhanh, nếu cần squeeze thêm vài phần trăm accuracy thì chuyển sang SGD with Momentum ở giai đoạn cuối.

Mini-batch Size Ảnh Hưởng Thế Nào?

Batch size quyết định cân bằng giữa tốc độ và chất lượng:

Batch nhỏ (8-32): Nhiều bước cập nhật hơn mỗi epoch, noise cao hơn, đôi khi generalize tốt hơn. Nhưng tận dụng GPU kém hơn.

Batch lớn (256-1024): Ít bước cập nhật hơn, gradient ổn định hơn, tận dụng GPU tốt hơn. Nhưng cần điều chỉnh learning rate và đôi khi kẹt ở nghiệm kém tổng quát.

Trong thực tế, batch size 32-64 là điểm sweet spot cho hầu hết bài toán. Với LLM thì batch size thường lớn hơn rất nhiều, kết hợp với gradient accumulation.

SGD Trong Kỷ Nguyên LLM

Có thể bạn thắc mắc: các model như GPT, Gemini, Claude dùng optimizer gì? Câu trả lời ngắn gọn: phần lớn dùng AdamW, một biến thể của Adam có weight decay cải tiến.

Nhưng SGD vẫn không hề biến mất. Trong fine-tuning, đặc biệt là computer vision và các bài toán nhỏ hơn, SGD with Momentum vẫn là lựa chọn hàng đầu. Hơn nữa, hiểu SGD là nền tảng để hiểu mọi optimizer hiện đại, vì tất cả đều dựa trên nguyên lý cập nhật trọng số theo gradient.

Bạn có thể đọc thêm về Gradient DescentLearning Rate để hiểu rõ hơn bức tranh tổng thể về cách AI học.

Kết Luận

SGD là thuật toán nền tảng của deep learning. Dù đơn giản, nó giải quyết được vấn đề lớn nhất: train model trên dữ liệu khổng lồ với tài nguyên hữu hạn. Hiểu SGD chính là hiểu nguyên lý cốt lõi mà mọi optimizer hiện đại, từ Momentum đến AdamW, đều xây dựng dựa trên đó.

Nếu bạn mới bắt đầu với machine learning, hãy tập triển khai SGD từ scratch trên numpy. Đó là bài tập tốt nhất để thực sự hiểu cách mạng nơ-ron học.

ThienLv

Mình là Thien, người tạo ra blog này. Ban ngày làm marketing, ban đêm cày tiền online và chơi với AI. Blog này là nơi mình ghi lại những gì mình thử qua — tool nào xịn, chiến thuật nào chạy được, cái gì thất bại. Mình không giỏi nhất, nhưng mình thích chia sẻ thật. Chill với một ly cafe đá là lý tưởng nhất.

Xem tất cả bài viết →

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *