Gradient Descent là một thuật toán tối ưu hóa được sử dụng để giảm thiểu chi phí hàm trong các thuật toán ML khác nhau. Về cơ bản, nó được sử dụng để cập nhật các tham số của mô hình học.

1. Các loại Gradient Descent:

  • Batch Gradient Descent: Đây là một loại gradient đi xuống xử lý tất cả các ví dụ đào tạo cho mỗi lần lặp lại gradient descent. Nhưng nếu số lượng các ví dụ huấn luyện lớn, thì về mặt tính toán quá trình giảm độ dốc theo lô là rất tốn kém. Do đó, nếu số lượng ví dụ đào tạo lớn, thì giảm độ dốc theo lô không được ưu tiên. Thay vào đó, chúng ta thích sử dụng gradient ngẫu nhiên hoặc gradient theo lô nhỏ.
  • Stochastic Gradient Descent: Đây là một loại gradient đi xuống xử lý 1 ví dụ đào tạo cho mỗi lần lặp. Do đó, các tham số đang được cập nhật ngay cả sau một lần lặp trong đó chỉ một ví dụ duy nhất được xử lý. Do đó, điều này khá nhanh hơn so với giảm độ dốc hàng loạt. Nhưng một lần nữa, khi số lượng ví dụ huấn luyện lớn, ngay cả khi đó nó chỉ xử lý một ví dụ có thể mất thêm chi phí cho hệ thống vì số lần lặp lại sẽ khá lớn.
  • Mini Batch gradient descent: Đây là một loại gradient descent hoạt động nhanh hơn so với cả gốc gradient descent và stochastic gradient descent. Đây là ví dụ b trong đó b <m được xử lý trên mỗi lần lặp. Vì vậy, ngay cả khi số lượng ví dụ đào tạo lớn, nó được xử lý trong một loạt các ví dụ đào tạo b trong một lần. Do đó, nó hoạt động cho các ví dụ đào tạo lớn hơn và cả với số lần lặp ít hơn.

2. Các biến được sử dụng:

Gọi m là số ví dụ huấn luyện.

Gọi n là số đối tượng.

Lưu ý: nếu b == m, thì việc chuyển màu theo lô nhỏ sẽ hoạt động tương tự như giảm chuyển màu theo lô.

3. Thuật toán  batch gradient descent:

Gọi hθ (x) là giả thuyết cho hồi quy tuyến tính. Sau đó, chi phí hàm được cho bởi:

Gọi Σ đại diện cho tổng của tất cả các ví dụ huấn luyện từ i = 1 đến m.

Jtrain(θ) = (1/2m) Σ( hθ(x(i))  - y(i))2

Repeat {
 θj = θj – (learning rate/m) * Σ( hθ(x(i))  - y(i))xj(i)
    For every j =0 …n 
}

Trong đó xj (i) Đại diện cho tính năng thứ j của ví dụ đào tạo thứ i. Vì vậy, nếu m là rất lớn (ví dụ: 5 triệu mẫu đào tạo), thì sẽ mất hàng giờ hoặc thậm chí nhiều ngày để hội tụ đến mức tối thiểu toàn cầu.

4. Thuật toán cho giảm độ dốc ngẫu nhiên(stochastic gradient descent):

1) Xáo trộn ngẫu nhiên tập dữ liệu để các tham số có thể được huấn luyện đồng đều cho từng loại dữ liệu.

2) Như đã đề cập ở trên, cần xem xét một ví dụ cho mỗi lần lặp.

-->
Hence,
Let (x(i),y(i)) be the training example
Cost(θ, (x(i),y(i))) = (1/2) Σ( hθ(x(i))  - y(i))2

Jtrain(θ) = (1/m) Σ Cost(θ, (x(i),y(i)))

Repeat {

For i=1 to m{

         θj = θj – (learning rate) * Σ( hθ(x(i))  - y(i))xj(i)
        For every j =0 …n

                } 
}

5. Thuật toán cho giảm độ dốc hàng loạt theo lô nhỏ:

Giả sử b là không có ví dụ trong một lô, trong đó b <m.

Giả sử b = 10, m = 100;

Lưu ý: Tuy nhiên chúng ta có thể điều chỉnh kích thước lô. Nó thường được giữ ở mức công suất là 2. Lý do đằng sau nó là vì một số phần cứng như GPU đạt được thời gian chạy tốt hơn với kích thước lô phổ biến như công suất 2.

Repeat {
 For i=1,11, 21,…..,91

    Let Σ be the summation from i to i+9 represented by k. 

    θj = θj – (learning rate/size of (b) ) * Σ( hθ(x(k))  - y(k))xj(k)
        For every j =0 …n

}

Xu hướng hội tụ trong các biến thể khác nhau của Gradient Descents:

Trong trường hợp Batch Gradient Descent, thuật toán đi theo một đường thẳng về phía cực tiểu. Nếu chi phí hàm lồi, thì nó hội tụ đến cực tiểu toàn cục và nếu hàm chi phí không lồi, thì nó hội tụ đến cực tiểu cục bộ. Ở đây tỷ lệ học tập thường được giữ không đổi.

Trong trường hợp giảm độ dốc ngẫu nhiên và giảm độ dốc theo lô nhỏ, thuật toán không hội tụ mà tiếp tục dao động xung quanh mức tối thiểu toàn cục. Vì vậy, để làm cho nó hội tụ, chúng ta phải từ từ thay đổi tốc độ học. Tuy nhiên, sự hội tụ của sự giảm dần độ dốc Stochastic ồn ào hơn nhiều vì trong một lần lặp, nó chỉ xử lý một ví dụ đào tạo.

Cài ứng dụng cafedev để dễ dàng cập nhật tin và học lập trình mọi lúc mọi nơi tại đây.

Nguồn và Tài liệu tiếng anh tham khảo:

Tài liệu từ cafedev:

Nếu bạn thấy hay và hữu ích, bạn có thể tham gia các kênh sau của cafedev để nhận được nhiều hơn nữa:

Chào thân ái và quyết thắng!

Đăng ký kênh youtube để ủng hộ Cafedev nha các bạn, Thanks you!