Bài 8: Ứng Dụng Thuật Toán Gradient Descent, Thuật Toán Gradient Descent Cho Linear Regression

Chào các bạn, hôm nay mình sẽ trình bày về optimizer. Vậy optimizer là gì ?, để trả lời câu hỏi đó thì các bạn phải trả lời được các câu hỏi sau đây :

*

Optimizer là gì ?Ứng dụng của nó ra sao, tại sao phải dùng nó ?Các thuật toán tối ưu, ưu nhược điểm của mỗi thuật toán, thuật toán tối ưu này hơn thuật toán kia ở điểm nào ?

*

Khi nào nên áp dụng optimizer này , khi nào nên áp dụng cái kia?

Nội dung bài hôm nay mình sẽ giải thích chi tiết về optimizers theo bố cục trả lời các câu hỏi trên. Bài viết này sẽ không nặng về phần tính toán, code, mình sẽ dùng ví dụ trực quan để minh họa cho dễ hiểu.

Đang xem: Thuật toán gradient descent

Optimizer là gì, tại sao phải dùng nó?

Trước khi đi sâu vào vấn đề thì chúng ta cần hiểu thế nào là thuật toán tối ưu (optimizers).Về cơ bản, thuật toán tối ưu là cơ sở để xây dựng mô hình neural network với mục đích “học ” được các features ( hay pattern) của dữ liệu đầu vào, từ đó có thể tìm 1 cặp weights và bias phù hợp để tối ưu hóa model. Nhưng vấn đề là “học” như thế nào? Cụ thể là weights và bias được tìm như thế nào! Đâu phải chỉ cần random (weights, bias) 1 số lần hữu hạn và hy vọng ở 1 bước nào đó ta có thể tìm được lời giải. Rõ ràng là không khả thi và lãng phí tài nguyên! Chúng ta phải tìm 1 thuật toán để cải thiện weight và bias theo từng bước, và đó là lý do các thuật toán optimizer ra đời.

Các thuật toán tối ưu ?

1. Gradient Descent (GD)

Trong các bài toán tối ưu, chúng ta thường tìm giá trị nhỏ nhất của 1 hàm số nào đó, mà hàm số đạt giá trị nhỏ nhất khi đạo hàm bằng 0. Nhưng đâu phải lúc nào đạo hàm hàm số cũng được, đối với các hàm số nhiều biến thì đạo hàm rất phức tạp, thậm chí là bất khả thi. Nên thay vào đó người ta tìm điểm gần với điểm cực tiểu nhất và xem đó là nghiệm bài toán.Gradient Descent dịch ra tiếng Việt là giảm dần độ dốc, nên hướng tiếp cận ở đây là chọn 1 nghiệm ngẫu nhiên cứ sau mỗi vòng lặp (hay epoch) thì cho nó tiến dần đến điểm cần tìm.Công thức : xnew = xold – learningrate.gradient(x) Đặt câu hỏi tại sao có công thức đó ? Công thức trên được xây dựng để cập nhật lại nghiệm sau mỗi vòng lặp . Dấu “-” trừ ở đây ám chỉ ngược hướng đạo hàm. Đặt tiếp câu hỏi tại sao lại ngược hướng đạo hàm ?Ví dụ như đối với hàm f(x)= 2x +5sin(x) như hình dưới thì f”(x) =2x + 5cos(x)với x_old =-4 thì f”(-4) x_new > x_old nên nghiệm sẽ di chuyển về bên phải tiến gần tới điểm cực tiểu.ngược lại với x_old =4 thì f”(4) >0 => x_new a) Gradient cho hàm 1 biến :

*
*
*
*
*

Nhìn vào 2 hình trên, ta thấy SGD có đường đi khá là zig zắc , không mượt như GD. Dễ hiểu điều đó vì 1 điểm dữ liệu không thể đại diện cho toàn bộ dữ liệu. Đặt câu hỏi tại sao phải dùng SGD thay cho GD mặt dù đường đi của nó khá zig zắc ? Ở đây, GD có hạn chế đối với cơ sở dữ liệu lớn ( vài triệu dữ liệu ) thì việc tính toán đạo hàm trên toàn bộ dữ liệu qua mỗi vòng lặp trở nên cồng kềnh. Bên cạnh đó GD không phù hợp với online learning. Vậy online learning là gì? online learning là khi dữ liệu cập nhật liên tục (ví dụ như thêm người dùng đăng kí ) thì mỗi lần thêm dữ liệu ta phải tính lại đạo hàm trên toàn bộ dữ liệu => thời gian tính toán lâu, thuật toán không online nữa. Vì thế SGD ra đời để giải quyết vấn đề đó, vì mỗi lần thêm dữ liệu mới vào chỉ cần cập nhật trên 1 điểm dữ liệu đó thôi, phù hợp với online learning.Một ví dụ minh hoạ : có 10.000 điểm dữ liệu thì chỉ sau 3 epoch ta đã có được nghiệm tốt, còn với GD ta phải dùng tới 90 epoch để đạt được kết quả đó.

Xem thêm: Trồng Rau Sạch Tại Nhà Bằng Phương Pháp Thủy Canh Vừa Sạch Vừa Nhàn Ngay Tại Nhà

Ưu điểm :

*
*
*
*

Trong đó :n : hằng sốgt : gradient tại thời điểm tϵ : hệ số tránh lỗi ( chia cho mẫu bằng 0)G : là ma trận chéo mà mỗi phần tử trên đường chéo (i,i) là bình phương của đạo hàm vectơ tham số tại thời điểm t.Ưu điểm :

*

Ưu điểm :

*

Công thức :

*

Tại sao lại có công thức đó ? Đó xem như 1 bài tập dành cho các bạn,……..thật ra thì mình nhát chưa tìm hiểu.

Xem thêm: “Take Of Nghĩa Là Gì Vậy Bn?Mk Quên Mất Nghĩa Rồi,Hì ^~^ Nghĩa Của Từ Of

Tổng quan

Còn có rất nhiều thuật toán tối ưu như Nesterov (NAG), Adadelta, Nadam,… nhưng mình sẽ không trình bày trong bài này, mình chỉ tập trung vào các optimizers hay được sử dụng. Hiện nay optimizers hay được sử dụng nhất là “Adam”.

*

Qua hình trên ta thấy optimizer “Adam” hoạt động khá tốt, tiến nhanh tới mức tối thiểu hơn các phương pháp khác. Qua bài viết này mình hy vọng các bạn có thể hiểu và làm quen với optimizer trong các bài toán Machine learning, đặc biệt là Deep learning. Còn nhiều biến thể của GD nhưng mình xin phép dừng bài viết tại đây. | Hy vọng bài viết có ích đối với bạn |

Related Articles

Trả lời

Back to top button