Optimizer- Hiểu sâu về những thuật toán tối ưu ( GD,SGD,Adam,.)

Chào người trải nghiệm, hôm nay mình sẽ trình bày về optimizer. Vậy optimizer là gì ?, để trả lời câu hỏi đấy thì người trải nghiệm nên trả lời được những câu hỏi sau đây :

👆

  • Optimizer là gì ?
  • Ứng dụng của nó ra sao, tại sao nên dùng nó ?
  • Những thuật toán tối ưu, ưu nhược điểm của từng thuật toán, thuật toán tối ưu này hơn thuật toán kia trên điểm nào ?

👆

  • Lúc nào nên ứng dụng optimizer này , lúc nào nên ứng dụng loạ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 những câu hỏi trên. Bài viết này sẽ ko nặng về phần tính toán, code, mình sẽ dùng dí dụ trực quan để minh họa cho dễ hiểu.

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

Trước lúc đ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 community sở hữu phần đích “học ” được những options ( hay sample) của dữ liệu đầu vào, từ đấy có thể tìm 1 cặp weights và bias ưu thích để tối ưu hóa mannequin. 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 nên chỉ cần random (weights, bias) 1 số lần hữu hạn và hy vọng trên 1 bước nào đấy ta có thể tìm được lời giải. Rõ ràng là ko khả thi và lãng chi phí tài nguyên! Chúng ta nên tìm 1 thuật toán để cải thiện weight và bias theo từng bước, và đấy là nguyên nhân những thuật toán optimizer ra đời.

Những thuật toán tối ưu ?

1. Gradient Descent (GD)

Trong những bài toán tối ưu, chúng ta thường tìm giá trị bé nhất của 1 hàm số nào đấy, mà hàm số đạt giá trị bé nhất lúc đạo hàm bằng 0. Nhưng đâu nên lúc nào đạo hàm hàm số cũng được, đối sở hữu những hàm số nhiều biến thì đạo hàm siêu phức tạp, thậm chí là bất khả thi. Nên thay thế vào đấy người ta tìm điểm sắp sở hữu điểm cực tiểu nhất và xem đấy 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 trên đây là chọn 1 nghiệm ngẫu nhiên cứ sau từng vòng lặp (hay epoch) thì cho nó tiến dần tới điểm cần tìm. Công thức : xnew = xold – sentayho.com.vnient(x) Đặt câu hỏi tại sao có công thức đấy ? Công thức trên được xây dựng để cập nhật lại nghiệm sau từng vòng lặp . Dấu ‘-‘ trừ trên đâ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 ? Dí dụ như đối sở hữu hàm f(x)= 2x +5sin(x) như hình dưới thì f'(x) =2x + 5cos(x) sở hữu x_old =-4 thì f'(-4) <0 => x_new > x_old nên nghiệm sẽ đi lại về bên nên tiến sắp tới điểm cực tiểu. ngược lại sở hữu x_old =4 thì f'(4) >0 => x_new <x_old nên nghiệm sẽ đi lại về bên trái tiến sắp tới điểm cực tiểu. a) Gradient cho hàm 1 biến : 👆 👆 👆 Nguồn : sentayho.com.vn/2017/01/12/gradientdescent/ Qua những hình trên ta thấy Gradient descent phụ thuộc vào nhiều khía cạnh : như trường hợp chọn điểm x ban đầu khác nhau sẽ tác động tới quy trình hội tụ; hoặc tốc độ học (studying charge) quá lớn hoặc quá bé cũng tác động: trường hợp tốc độ học quá bé thì tốc độ hội tụ siêu chậm tác động tới quy trình coaching, còn tốc độ học quá lớn thì tiến nhanh tới đích sau vài vòng lặp tuy nhiên thuật toán ko hội tụ, quanh quẩn quanh đích vì bước nhảy quá lớn. b) Gradient descent cho hàm nhiều biến : Ưu điểm :👆Thuật toán gradient descent cơ bản, dễ hiểu. Thuật toán đã giải quyết được vấn đề tối ưu mannequin neural community bằng bí quyết cập nhật trọng số sau từng vòng lặp. Nhược điểm :👆Vì đơn giản nên thuật toán Gradient Descent còn nhiều hạn chế như phụ thuộc vào nghiệm khởi tạo ban đầu và studying charge.  👆Dí dụ 1 hàm số có 2 world minimal thì tùy thuộc} thuộc vào 2 điểm khởi tạo ban đầu sẽ cho ra 2 nghiệm cuối cùng khác nhau.  👆Tốc độ học quá lớn sẽ khiến cho cho thuật toán ko hội tụ, quanh quẩn bên đích vì bước nhảy quá lớn; hoặc tốc độ học bé tác động tới tốc độ coaching

Xem Thêm  Phương pháp đốt phong lông xả xui chuẩn mang trong mình lại could mắn – Kiến Vàng

2. Stochastic Gradient Descent (SGD)

Stochastic là 1 biến thể của Gradient Descent . Thay thế vì sau từng epoch chúng ta sẽ cập nhật trọng số (Weight) 1 lần thì trong từng epoch có N điểm dữ liệu chúng ta sẽ cập nhật trọng số N lần. Nhìn vào 1 mặt , SGD sẽ làm cho giảm đi tốc độ của 1 epoch. Tuy nhiên nhìn theo 1 hướng khác,SGD sẽ hội tụ siêu nhanh chỉ sau vài epoch. Công thức SGD cũng tương tự động như GD nhưng thực hành trên từng điểm dữ liệu. Optimizer- Hiểu sâu về các thuật toán tối ưu ( GD,SGD,Adam,..) Nhìn vào 2 hình trên, ta thấy SGD có đường đi khá là zig zắc , ko mượt như GD. Dễ hiểu điều đấy vì 1 điểm dữ liệu ko thể đại diện cho toàn bộ dữ liệu. Đặt câu hỏi tại sao nên dùng SGD thay thế cho GD mặt dù đường đi của nó khá zig zắc ? Trên đây, GD có hạn chế đối sở hữu 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 từng vòng lặp trở nên cồng kềnh. Quanh đó đấy GD ko ưu thích sở hữu on-line studying. Vậy on-line studying là gì? on-line studying là lúc dữ liệu cập nhật liên tục (dí dụ như thêm người mua đăng kí ) thì từng lần thêm dữ liệu ta nên tính lại đạo hàm trên toàn bộ dữ liệu => thời kì tính toán nhiều ngày, thuật toán ko on-line nữa. Vì thế SGD ra đời để giải quyết vấn đề đấy, vì từng lần thêm dữ liệu new vào chỉ cần cập nhật trên 1 điểm dữ liệu đấy thôi, ưu thích sở hữu on-line studying. 1 dí dụ minh hoạ : có 10.000 điểm dữ liệu thì chỉ sau 3 epoch ta đã có được nghiệm phải chăng, còn sở hữu GD ta nên dùng tới 90 epoch để đạt được kết quả đấy. Ưu điểm :👆Thuật toán giải quyết được đối sở hữu cơ sở dữ liệu lớn mà GD ko làm cho được. Thuật toán tối ưu này hiên nay vẫn hay được dùng. Nhược điểm :👆Thuật toán vẫn chưa giải quyết được 2 nhược điểm lớn của gradient descent ( studying charge, điểm dữ liệu ban đầu ). Vì vậy ta nên hài hòa SGD sở hữu 1 số thuật toán khác như: Momentum, AdaGrad,..Những thuật toán này sẽ được trình bày trên phần sau.

Xem Thêm  iMovie là gì? Chỉ dẫn dùng iMovie cho người new khởi đầu

3. Momentum

Để khắc phục những hạn chế trên của thuật toán Gradient Descent người ta dùng gradient descent with momentum. Vậy gradient with momentum là gì ? Optimizer- Hiểu sâu về các thuật toán tối ưu ( GD,SGD,Adam,..) Nguồn: sentayho.com.vn/2017/01/16/gradientdescent2/ Để giải thích được Gradient with Momentum thì trước tiên ta nên nhìn dưới góc độ vật lí: Như hình b phía trên, trường hợp ta thả 2 viên bi tại 2 điểm khác nhau A và B thì viên bị A sẽ trượt xuống điểm C còn viên bi B sẽ trượt xuống điểm D, nhưng ta lại ko mong muốn viên bi B sẽ giới hạn trên điểm D (native minimal) mà sẽ tiếp tục lăn tới điểm C (world minimal). Để thực hành được điều đấy ta nên cấp cho viên bi B 1 vận tốc ban đầu đủ lớn để nó có thể vượt qua điểm E tới điểm C. Dựa vào ý tưởng này người ta xây dựng nên thuật toán Momentum ( tức là theo đà tiến tới ). Nhìn dưới góc độ toán học, ta có công thức Momentum: xnew = xold -(gama.v + sentayho.com.vnient) Trong đấy : xnew: tọa độ new xod : tọa độ cũ gama: parameter , thường =0.9 learningrate : tốc độ học gradient : đạo hàm của hàm f Nguồn : sentayho.com.vn/2017/01/16/gradientdescent2/ Qua 2 dí dụ minh họa trên của hàm f(x) = x.2 + 10sin(x), ta thấy GD with out momentum sẽ hội tụ sau 5 vòng lặp nhưng ko nên là world minimal. Nhưng GD with momentum dù mất nhiều vòng lặp nhưng nghiệm tiến tới world minimal, qua hình ta thấy nó sẽ vượt tốc tiến tới điểm world minimal và dao động tương quan quanh điểm đấy trước khai giới hạn lại. Ưu điểm :👆Thuật toán tối ưu giải quyết được vấn đề: Gradient Descent ko tiến được tới điểm world minimal mà chỉ giới hạn lại trên native minimal. Nhược điểm :👆Tuy momentum giúp hòn bi vượt dốc tiến tới điểm đích, tuy nhiên lúc tới sắp đích, nó vẫn mất khá nhiều thời kì giao động tương quan trước lúc giới hạn hẳn, điều này được giải thích vì viên bi có đà.

4. Adagrad

Ko giống như những thuật toán trước đấy thì studying charge hầu như giống nhau trong quy trình coaching (studying charge là hằng số), Adagrad coi studying charge là 1 tham số. Tức là Adagrad sẽ cho studying charge biến thiên sau từng thời điểm t. Trong đấy : n : hằng số gt : gradient tại thời điểm t ϵ : hệ số hạn chế lỗi ( chia cho mẫu bằng 0) G : là ma trận chéo mà từng 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 :👆1 lơi ích dễ thấy của Adagrad là hạn chế việc điều chỉnh studying charge bằng tay, chỉ cần để tốc độ học default là 0.01 thì thuật toán sẽ tự động động điều chỉnh. Nhược điểm :👆Yếu điểm của Adagrad là tổng bình phương biến thiên sẽ lớn dần theo thời kì cho tới lúc nó làm cho tốc độ học cực kì bé, làm cho việc coaching trở nên đóng băng.

Xem Thêm  Những bí quyết làm cho salad trộn vừa ngon vừa đủ chất của Sen Tây Hồ

5. RMSprop

RMSprop giải quyết vấn đề tỷ lệ học giảm dần của Adagrad bằng bí quyết chia tỷ lệ học cho trung bình của bình phương gradient. Ưu điểm :👆Ưu điểm rõ nhất của RMSprop là giải quyết được vấn đề tốc độ học giảm dần của Adagrad ( vấn đề tốc độ học giảm dần theo thời kì sẽ khiến cho việc coaching chậm dần, có thể dẫn tới bị đóng băng ) Nhược điểm :👆Thuật toán RMSprop có thể cho kết quả nghiệm chỉ là native minimal chứ ko đạt được world minimal như Momentum. Vì vậy người ta sẽ hài hòa cả 2 thuật toán Momentum sở hữu RMSprop cho ra 1 thuật toán tối ưu Adam. Chúng ta sẽ trình bày nó trong phần sau.

6. Adam

Như đã nói trên trên Adam là sự hài hòa của Momentum và RMSprop . Trường hợp giải thích theo hiện tượng vật lí thì Momentum giống như 1 quả cầu lao xuống dốc, còn Adam như 1 quả cầu siêu nặng có ma sát, vì vậy nó dễ dàng vượt qua native minimal tới world minimal và lúc tới world minimal nó ko mất nhiều thời kì dao động tương quan quanh đích vì nó có ma sát nên dễ giới hạn lại hơn. Công thức : Tại sao lại có công thức đấy ? Ấy xem như 1 bài tập dành cho người trải nghiệm,……..thực ra thì mình nhát chưa tìm hiểu.

Tổng quan

Còn có siêu nhiều thuật toán tối ưu như Nesterov (NAG), Adadelta, Nadam,… nhưng mình sẽ ko trình bày trong bài này, mình chỉ tập trung vào những optimizers hay được dùng. Hiện nay optimizers hay được dùng nhất là ‘Adam’. Qua hình trên ta thấy optimizer ‘Adam’ hoạt động khá phải chăng, tiến nhanh tới mức tối thiểu hơn những phương pháp khác. Qua bài viết này mình hy vọng người trải nghiệm có thể hiểu và làm cho quen sở hữu optimizer trong những bài toán Machine studying, đặc biệt là Deep studying. Còn nhiều biến thể của GD nhưng mình xin phép giới hạn bài viết tại đây. | Hy vọng bài viết có ích đối sở hữu bạn |