Phương pháp gradient tối ưu hóa

     

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

*

Optimizer là gì ?Ứng dụng của chính nó ra sao, nguyên nhân phải sử dụng nó ?Các thuật toán tối ưu, ưu điểm yếu kém của từng thuật toán, thuật toán tối ưu này hơn thuật toán tê ở điểm làm sao ?

*

Khi làm sao nên áp dụng optimizer này , bao giờ nên áp dụng cái kia?

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

Bạn đang xem: Phương pháp gradient tối ưu hóa

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

Trước lúc đi sâu vào vấn đề thì bọn họ cần hiểu nuốm 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 tiêu "học " được những features ( xuất xắc pattern) của tài liệu đầu vào, từ bỏ đó rất có thể tìm 1 cặp weights với bias tương xứng để buổi tối ưu hóa model. Nhưng vấn đề là "học" như thế nào? rõ ràng là weights cùng bias được tìm như vậy nào! Đâu phải chỉ việc random (weights, bias) một số lần hữu hạn và hi vọng ở 1 cách nào đó ta hoàn toàn có thể tìm được lời giải. Ví dụ là ko khả thi và tiêu tốn lãng phí tài nguyên! chúng ta phải tìm kiếm 1 thuật toán để nâng cao weight cùng bias theo từng bước, cùng đó là lý do các thuật toán optimizer ra đời.

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

1. Gradient Descent (GD)

Trong những bài toán về tối ưu, họ thường tìm giá bán trị nhỏ nhất của 1 hàm số làm sao đó, mà lại hàm số đạt giá trị nhỏ dại nhất khi đạo hàm bằng 0. Nhưng đâu phải chỉ lúc làm sao đạo hàm hàm số cũng được, đối với các hàm số nhiều biến chuyển thì đạo hàm cực kỳ phức tạp, thậm chí còn là bất khả thi. Cần thay vào đó bạn ta tra cứu điểm ngay sát với điểm cực tiểu nhất cùng xem đó là nghiệm bài bác toán.Gradient Descent dịch ra giờ đồng hồ Việt là giảm dần độ dốc, nên hướng tiếp cận ở chỗ này là chọn 1 nghiệm thốt nhiên cứ sau mỗi vòng lặp (hay epoch) thì mang lại nó tiến dần tới điểm cần tìm.Công thức : xnew = xold - learningrate.gradient(x) Đặt thắc mắc tại sao tất cả công thức kia ? phương pháp trên được gây ra để update lại nghiệm sau mỗi vòng lặp . Lốt "-" trừ tại đây ám chỉ ngược phía đạ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 bên dưới thì f"(x) =2x + 5cos(x)với x_old =-4 thì f"(-4) x_new > x_old đề xuất nghiệm sẽ dịch chuyển về bên nên tiến gần tới điểm rất tiểu.ngược lại với x_old =4 thì f"(4) >0 => x_new a) Gradient mang lại hàm 1 thay đổi :

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

Xem thêm: Hình Ảnh Nhũ Hoa Hình Ảnh Nhũ Hoa Khi Mang Thai Thay Đổi Theo Từng Thời Kỳ

Ưu điểm :
*
*
*
*
Trong kia :n : hằng sốgt : gradient tại thời khắc tϵ : hệ số tránh lỗi ( phân chia cho mẫu bằng 0)G : là ma trận chéo mà mỗi bộ phận trên đường chéo cánh (i,i) là bình phương của đạo hàm vectơ thông số tại thời điểm t.Ưu điểm :
*
Ưu điểm :
*
Công thức :
*
Tại sao lại sở hữu công thức đó ? Đó xem như một bài tập giành cho các bạn,........thật ra thì mình nhát chưa tìm hiểu.

Tổng quan

Còn có khá nhiều thuật toán tối ưu như Nesterov (NAG), Adadelta, Nadam,... Nhưng mà mình sẽ không trình bày trong bài này, bản thân chỉ triệu tập vào các optimizers hay được sử dụng. Hiện giờ optimizers thường được sử dụng nhất là "Adam".

*
Qua hình trên ta thấy optimizer "Adam" chuyển động khá tốt, tiến cấp tốc tới mức tối thiểu rộng các phương thức khác. Qua nội dung bài viết này mình mong muốn các chúng ta cũng có thể hiểu và có tác dụng quen cùng với optimizer trong những bài toán Machine learning, đặc biệt là Deep learning. Còn nhiều đổi mới thể của GD tuy vậy mình xin phép dừng bài viết tại đây. | Hy vọng nội dung bài viết có ích so với bạn |