Gradient descent là một thuật toán để tối thiểu hóa một hàm khả vi bằng cách lặp lại các bước theo hướng làm hàm giảm nhanh nhất trong lân cận. Nếu bạn đang tìm “gradient descent là gì”, ý tưởng cốt lõi rất đơn giản: tính độ dốc, đi xuống một chút, rồi lặp lại.

Nó được dùng rộng rãi trong tối ưu hóa dựa trên giải tích và trong machine learning. Phương pháp này hoạt động tốt nhất khi bạn có thể tính đạo hàm hoặc gradient và chọn một tốc độ học đủ nhỏ để ổn định nhưng cũng đủ lớn để tạo tiến triển.

Trong trường hợp một biến, quy tắc cập nhật là

xk+1=xkηf(xk),x_{k+1} = x_k - \eta f'(x_k),

và trong trường hợp nhiều biến, nó trở thành

xk+1=xkηf(xk),\mathbf{x}_{k+1} = \mathbf{x}_k - \eta \nabla f(\mathbf{x}_k),

trong đó η>0\eta > 0 là tốc độ học. Tốc độ học quyết định mỗi bước đi xa đến đâu, nên nó ảnh hưởng trực tiếp đến việc thuật toán hội tụ, bị chững lại hay vượt quá điểm tối ưu.

Trực giác về Gradient Descent

Gradient chỉ theo hướng đi lên. Nếu mục tiêu của bạn là tối thiểu hóa, thì bước đi cục bộ tự nhiên là đi theo hướng ngược lại.

Quy tắc cục bộ đó không đảm bảo cho đáp án tốt nhất trong mọi bài toán. Với một hàm lồi, gradient descent có thể dẫn đến cực tiểu toàn cục. Với một hàm không lồi, nó có thể dừng ở một cực tiểu cục bộ, một vùng phẳng hoặc một điểm dừng khác.

Thuật toán Gradient Descent Hoạt Động Như Thế Nào

Mỗi vòng lặp sử dụng thông tin độ dốc hiện tại, cập nhật điểm, rồi kiểm tra xem có nên tiếp tục hay không.

  1. Bắt đầu với một giá trị ước lượng ban đầu x0x_0 hoặc x0\mathbf{x}_0.
  2. Tính đạo hàm hoặc gradient tại điểm hiện tại.
  3. Cập nhật bằng cách trừ đi η\eta nhân với đạo hàm hoặc gradient đó.
  4. Dừng khi gradient nhỏ, các cập nhật trở nên rất nhỏ, hoặc đạt đến giới hạn số vòng lặp đã đặt trước.

Quy tắc cập nhật chuẩn giả sử hàm mục tiêu khả vi tại các điểm mà bạn áp dụng nó. Một số phương pháp tối ưu dùng subgradient cho các bài toán không trơn, nhưng đó là một thiết lập khác.

Vì Sao Tốc Độ Học Quan Trọng Trong Gradient Descent

Tốc độ học η\eta chính là kích thước bước.

Nếu η\eta quá nhỏ, gradient descent thường đi đúng hướng nhưng có thể chậm đến mức khó chịu. Nếu η\eta quá lớn, các bước cập nhật có thể vượt qua điểm cực tiểu, dao động qua lại, hoặc thậm chí phân kỳ.

Bạn có thể thấy rõ sự đánh đổi này trong một hàm bậc hai, nơi độ dốc trở nên lớn hơn khi bạn đi xa khỏi điểm cực tiểu. Một kích thước bước có vẻ an toàn ở chỗ này có thể lại quá mạnh ở chỗ khác.

Ví Dụ Cụ Thể: Gradient Descent Trên Một Hàm Bậc Hai

Xét

f(x)=(x3)2.f(x) = (x-3)^2.

Hàm này đạt giá trị nhỏ nhất tại x=3x=3. Đạo hàm của nó là

f(x)=2(x3).f'(x) = 2(x-3).

Dùng gradient descent với tốc độ học η=0.1\eta = 0.1 và điểm bắt đầu x0=0x_0 = 0.

Khi đó quy tắc cập nhật là

xk+1=xk0.12(xk3)=xk0.2(xk3).x_{k+1} = x_k - 0.1 \cdot 2(x_k-3) = x_k - 0.2(x_k-3).

Bắt đầu từ x0=0x_0 = 0:

x1=00.2(03)=0.6.x_1 = 0 - 0.2(0-3) = 0.6.

Tiếp theo,

x2=0.60.2(0.63)=1.08.x_2 = 0.6 - 0.2(0.6-3) = 1.08.

x3=1.080.2(1.083)=1.464.x_3 = 1.08 - 0.2(1.08-3) = 1.464.

Mỗi bước đều tiến gần hơn đến 33, và giá trị của hàm giảm sau mỗi lần cập nhật. Đây là mẫu hình chính cần chú ý: gradient descent không nhảy thẳng đến đáp án. Nó cải thiện ước lượng bằng các hiệu chỉnh cục bộ lặp đi lặp lại.

Các Biến Thể Phổ Biến Của Gradient Descent

Batch Gradient Descent

Batch gradient descent dùng toàn bộ tập dữ liệu để tính mỗi lần cập nhật. Với một hàm mục tiêu cố định, điều này cho ra một bước đi xác định, nhưng có thể tốn kém khi tập dữ liệu lớn.

Stochastic Gradient Descent

Stochastic gradient descent cập nhật bằng một mẫu tại mỗi bước. Mỗi bước rẻ hơn nhưng nhiễu hơn. Sự nhiễu đó có thể giúp phương pháp tiếp tục di chuyển, nhưng cũng làm quỹ đạo kém mượt hơn.

Mini-Batch Gradient Descent

Mini-batch gradient descent dùng một nhóm mẫu nhỏ cho mỗi bước. Đây thường là một thỏa hiệp thực tế vì nó giảm nhiễu so với cập nhật stochastic thuần túy, đồng thời vẫn rẻ hơn nhiều so với cập nhật full-batch.

Các biến thể này đặc biệt quan trọng trong machine learning, nơi hàm mục tiêu thường là giá trị mất mát trung bình trên nhiều mẫu huấn luyện.

Những Sai Lầm Thường Gặp Với Gradient Descent

Xem Tốc Độ Học Chỉ Là Một Chi Tiết Phụ

Thay đổi η\eta sẽ thay đổi chính hành vi của thuật toán. Một phương pháp hội tụ với tốc độ học này có thể thất bại với tốc độ học khác.

Cho Rằng Gradient Descent Luôn Tìm Được Cực Tiểu Toàn Cục

Kết luận đó cần có điều kiện. Ví dụ, tính lồi cho các đảm bảo mạnh hơn nhiều so với một địa hình không lồi tổng quát.

Bỏ Qua Thang Đo Của Đặc Trưng Trong Bài Toán Ứng Dụng

Trong các bài toán tối ưu có biến được scale kém, một hướng có thể thay đổi nhanh hơn nhiều so với hướng khác. Khi đó gradient descent có thể đi ziczac và hội tụ chậm, trừ khi bài toán được viết lại hoặc scale cẩn thận hơn.

Chỉ Dừng Vì Gradient Chưa Bằng Không Chính Xác

Các thuật toán số hiếm khi chờ đến một giá trị bằng không hoàn hảo. Các điều kiện dừng thực tế thường kiểm tra xem chuẩn của gradient, độ thay đổi tham số hoặc độ thay đổi của hàm mục tiêu đã đủ nhỏ hay chưa.

Khi Nào Gradient Descent Được Sử Dụng

Gradient descent được dùng trong tối ưu số, thống kê và machine learning. Nó đặc biệt phổ biến khi không có nghiệm dạng đóng chính xác hoặc khi việc tính trực tiếp quá tốn kém.

Với các bài toán nhỏ có công thức đơn giản, giải tích có thể cho giá trị nhỏ nhất một cách chính xác. Gradient descent trở nên hữu ích hơn khi không gian tham số lớn, hàm mục tiêu có nhiều biến, hoặc hàm mất mát đến từ các tập dữ liệu lớn.

Hãy Thử Một Bài Tương Tự

Hãy tự thử với f(x)=(x5)2f(x) = (x-5)^2 và điểm bắt đầu x0=12x_0 = 12. Chạy một trường hợp với η=0.1\eta = 0.1 và một trường hợp khác với η=1.2\eta = 1.2. Việc thấy một lần chạy ổn định và một lần chạy không ổn định sẽ làm vai trò của tốc độ học rõ ràng hơn nhiều so với chỉ nhìn công thức.

Cần trợ giúp giải bài?

Tải câu hỏi lên và nhận lời giải từng bước đã được xác minh trong vài giây.

Mở GPAI Solver →