LEARNING RATE LÀ GÌ

     
1. Giới thiệu 2. Gradient Descent đến hàm 1 biến hóa Ví dụ đơn giản và dễ dàng với Python 3. Gradient Descent cho hàm nhiều đổi thay Sau đó là ví dụ bên trên Python với một vài để ý khi thiết kế kiểm soát đạo hàm

1. Giới thiệu

Các chúng ta hẳn thấy hình vẽ sau đây quen thuộc:


*

Điểm blue color lục là điểm local minimum (cực tiểu), với cũng là vấn đề làm mang đến hàmsố đạt giá chỉ trị nhỏ tuổi nhất. Từ đây trở đi, tôi sẽ cần sử dụng local minimum để cầm cố chođiểm cực tiểu, global minimum để nắm cho điểm nhưng mà tại đó hàm số đạt giá chỉ trịnhỏ nhất. Global minimum là 1 trong những trường hợp quan trọng đặc biệt của local minimum.

Bạn đang xem: Learning rate là gì

Giả sử họ đang để ý đến một hàm số một biến gồm đạo hàm đông đảo nơi. Xincho tôi được nói lại đôi điều đã quá quen thuộc:

Điểm local minimum (x^*) của hàm số là vấn đề có đạo hàm (f’(x^*))bằng 0. Hơn thế nữa, trong sát bên của nó, đạo hàm của các điểm phía mặt trái(x^*) là ko dương, đạo hàm của các điểm phía bên đề nghị (x^*) làkhông âm.

Đường tiếp đường với đồ vật thị hàm số đó ở 1 điểm bất kỳ có hệ số góc chínhbằng đạo hàm của hàm số trên điểm đó.

Trong hình phía trên, những điểm phía bên trái của điểm local minimum màu xanh lục cóđạo hàm âm, những điểm bên phải có đạo hàm dương. Và so với hàm số này, càng xavề phía trái của điểm local minimum thì đạo hàm càng âm, càng xa về phía phảithì đạo hàm càng dương.

Gradient Descent

Trong Machine Learning nói riêng cùng Toán buổi tối Ưu nói chung, họ thường xuyênphải tìm giá chỉ trị bé dại nhất (hoặc đôi lúc là bự nhất) của một hàm số làm sao đó. Vídụ như những hàm mất non trong hai bài xích Linear Regression cùng K-means Clustering. Chú ý chung, việc tìm kiếm globalminimum của các hàm mất đuối trong Machine Learning là rất phức tạp, thậm chí còn làbất khả thi. Chũm vào đó, tín đồ ta thường nỗ lực tìm những điểm local minimum, vàở một nấc độ nào đó, coi đó là nghiệm đề nghị tìm của bài xích toán.

Các điểm local minimum là nghiệm của phương trình đạo hàm bởi 0. Nếu bằng mộtcách nào đó có thể tìm được cục bộ (hữu hạn) những điểm cực tiểu, ta chỉ việc thaytừng điểm local minimum đó vào hàm số rồi search điểm làm cho hàm có giá trị nhỏnhất (đoạn này nghe siêu quen thuộc, đúng không?). Tuy nhiên, trong phần lớn cáctrường hợp, vấn đề giải phương trình đạo hàm bởi 0 là bất khả thi. Nguyên nhân cóthể tới từ sự tinh vi của dạng của đạo hàm, từ các việc các điểm dữ liệu có sốchiều lớn, hoặc từ các việc có vô số điểm dữ liệu.

Hướng tiếp cận phổ biến nhất là xuất phát từ một điểm mà chúng ta coi là gầnvới nghiệm của bài xích toán, kế tiếp dùng một phép toán lặp để tiến dần cho điểmcần tìm, tức đến lúc đạo hàm ngay sát với 0. Gradient Descent (viết gọn là GD) cùng cácbiến thể của nó là 1 trong trong những phương pháp được dùng những nhất.

Vì kỹ năng về GD khá rộng buộc phải tôi xin phép được chia thành hai phần. Phần 1này trình làng ý tưởng vùng sau thuật toán GD với một vài ba ví dụ đơn giản giúp cácbạn làm quen cùng với thuật toán này cùng vài tư tưởng mới. Phần 2 sẽ nói về cácphương pháp cách tân GD và các biến thể của GD trong những bài toán nhưng mà số chiều vàsố điểm tài liệu lớn. Những vấn đề như vậy được gọi là large-scale.

2. Gradient Descent cho hàm 1 biến

Quay quay trở lại hình vẽ thuở đầu và một vài quan gần kề tôi sẽ nêu. Trả sử(x_t) là vấn đề ta tìm được sau vòng lặp lắp thêm (t). Ta buộc phải tìm một thuậttoán để mang (x_t) về càng sát (x^*) càng tốt.

Trong hình đầu tiên, họ lại gồm thêm hai quan gần kề nữa:

Nếu đạo hàm của hàm số trên (x_t): (f’(x_t) > 0) thì(x_t) nằm trở về bên cạnh phải so với (x^*) (và ngược lại). Để điểm tiếptheo (x_t+1) sát với (x^*) hơn, bọn họ cần di chuyển(x_t) về phía bên trái, tức về phía âm. Nói những khác, chúng ta cầndi gửi ngược dấu với đạo hàm:Trong kia (Delta) là một trong những đại lượng ngược vết với đạo hàm (f’(x_t)).

(x_t) càng xa (x^*) về phía bên nên thì (f’(x_t)) càng lớnhơn 0 (và ngược lại). Vậy, lượng dịch chuyển (Delta), một phương pháp trực quannhất, là tỉ lệ thành phần thuận cùng với (-f’(x_t)).

Hai thừa nhận xét bên trên cho bọn họ một cách update đơn giản là:

Trong đó (eta) (đọc là eta) là một trong những dương được call là learning rate(tốc độ học). Vết trừ trình bày việc chúng ta phải đi ngược cùng với đạo hàm (Đâycũng đó là lý do phương thức này được điện thoại tư vấn là Gradient Descent - descentnghĩa là đi ngược). Các quan sát đơn giản và dễ dàng phía trên, tuy vậy không bắt buộc đúngcho tất cả các bài bác toán, là nền tảng cho khôn cùng nhiều phương thức tối ưu nói chungvà thuật toán Machine Learning nói riêng.

Ví dụ đơn giản và dễ dàng với Python

Xét hàm số (f(x) = x^2 + 5sin(x)) với đạo hàm (f’(x) = 2x + 5cos(x))(một tại sao tôi lựa chọn hàm này vị nó rất khó tìm nghiệm của đạo hàm bằng 0 như hàmphía trên). Trả sử bước đầu từ một điểm (x_0) như thế nào đó, trên vòng lặp thứ(t), chúng ta sẽ update như sau:

Như hay lệ, tôi khai báo vài thư viện thân quen thuộc


# To tư vấn both python 2 và python 3from __future__ import division, print_function, unicode_literalsimport mathimport numpy as np import matplotlib.pyplot as plt
Tiếp theo, tôi viết những hàm số :

grad nhằm tính đạo hàm cost nhằm tính giá trị của hàm số. Hàm này không sử dụng trong thuật toánnhưng hay được dùng để kiểm tra bài toán tính đạo hàm của đúng không nào hoặc đểxem quý giá của hàm số tất cả giảm theo từng vòng lặp giỏi không. MyGD1 là phần chính triển khai thuật toán Gradient Desent nêu phía trên. Đầuvào của hàm số này là learning rate và điểm bắt đầu. Thuật toán tạm dừng khiđạo hàm có độ bự đủ nhỏ.

def grad(x): return 2*x+ 5*np.cos(x)def cost(x): return x**2 + 5*np.sin(x)def myGD1(eta, x0): x = for it in range(100): x_new = x<-1> - eta*grad(x<-1>) if abs(grad(x_new)) 1e-3: break x.append(x_new) return (x, it)

Điểm khởi chế tạo khác nhau

Sau khi có những hàm phải thiết, tôi thử kiếm tìm nghiệm với những điểm khởi tạo thành khác nhaulà (x_0 = -5) và (x_0 = 5).


(x1, it1) = myGD1(.1, -5)(x2, it2) = myGD1(.1, 5)print("Solution x1 = %f, cost = %f, obtained after %d iterations"%(x1<-1>, cost(x1<-1>), it1))print("Solution x2 = %f, cost = %f, obtained after %d iterations"%(x2<-1>, cost(x2<-1>), it2))
Vậy là với các điểm ban đầu khác nhau, thuật toán của họ tìm được nghiệmgần giống như nhau, mặc dù với vận tốc hội tụ không giống nhau. Dưới đấy là hình ảnh minhhọa thuật toán GD cho bài toán này (xem xuất sắc trên Desktop ở chính sách full mànhình).

*
*

Từ hình minh họa bên trên ta thấy rằng ở hình bên trái, tương xứng với (x_0 = -5), nghiệm quy tụ nhanh hơn, vì điểm ban đầu (x_0) ngay gần với nghiệm ( x^* approx -1) hơn. Rộng nữa, với (x_0 = 5 ) nghỉ ngơi hình mặt phải, đường đi của nghiệm có chứa một khu vực có đạo hàm khá bé dại gần điểm gồm hoành độ bằng 2. Điều này khiến cho thuật toán la cà ở đây khá lâu. Lúc vượt qua được điểm đó thì mọi việc diễn ra cực tốt đẹp.

Learning rate không giống nhau

Tốc độ quy tụ của GD ko những nhờ vào vào điểm khởi tạo lúc đầu mà còn nhờ vào vào learning rate. Dưới đó là một ví dụ như với cùng điểm khởi tạo ra (x_0 = -5) nhưng mà learning rate không giống nhau:

*
*

Ta quan gần cạnh thấy nhì điều:

với learning rate nhỏ tuổi (eta = 0.01), vận tốc hội tụ khôn cùng chậm. Trong vídụ này tôi chọn tối đa 100 vòng lặp đề nghị thuật toán dừng lại trước lúc tớiđích, tuy nhiên đã khôn cùng gần. Vào thực tế, khi việc đo lường và thống kê trở phải phứctạp, learning rate cực thấp sẽ ảnh hưởng tới vận tốc của thuật toán rấtnhiều, thậm chí còn không lúc nào tới được đích. Với learning rate lớn (eta = 0.5), thuật toán tiến rất cấp tốc tới gầnđích sau vài vòng lặp. Tuy nhiên, thuật toán không quy tụ được bởi vì bướcnhảy thừa lớn, khiến cho nó cứ quẩn quanh làm việc đích.

Việc chọn lựa learning rate rất đặc biệt quan trọng trong các bài toán thực tế. Việclựa lựa chọn giá trị này dựa vào nhiều vào từng việc và nên làm một vài thínghiệm để lựa chọn ra giá trị tốt nhất. Ngoại trừ ra, tùy vào một số bài toán, GD gồm thểlàm việc công dụng hơn bằng cách chọn ra learning rate cân xứng hoặc chọnlearning rate không giống nhau ở từng vòng lặp. Tôi sẽ trở về vấn đề này ở chỗ 2.

3. Gradient Descent mang lại hàm các biến

Giả sử ta yêu cầu tìm global minimum mang lại hàm (f(mathbf heta)) trong đó(mathbf heta) (theta) là một trong những vector, thường được dùng để ký hiệu tậphợp các tham số của một quy mô cần tối ưu (trong Linear Regression thì các thamsố chính là hệ số (mathbfw)). Đạo hàm của hàm số đó tại một điểm( heta) ngẫu nhiên được cam kết hiệu là ( abla_ hetaf( heta)) (hình tamgiác ngược gọi là nabla). Giống như như hàm 1 biến, thuật toán GD đến hàm nhiềubiến cũng ban đầu bằng một điểm dự đoán ( heta_0), sau đó, làm việc vòng lặpthứ (t), quy tắc update là:

< heta_t+1 = heta_t - eta abla_ heta f( heta_t)>

Hoặc viết bên dưới dạng đơn giản và dễ dàng hơn: ( heta = heta - eta abla_ heta f( heta)).

Quy tắc đề nghị nhớ: luôn luôn luôn đi ngược phía với đạo hàm.

Việc giám sát đạo hàm của các hàm nhiều vươn lên là là một năng lực cần thiết. Một vài đạo hàm đối chọi giản rất có thể được tìm kiếm thấy sinh hoạt đây.

Quay lại với câu hỏi Linear Regression

Trong mục này, họ quay lại với việc Linear Regression với thử buổi tối ưu hàm mất non của nó bằng thuật toán GD.

Hàm mất non của Linear Regression là:

Chú ý: hàm này còn có khác một ít so với hàm tôi nêu trong bài bác Linear Regression. Mẫu mã số gồm thêm (N) là con số dữ liệu vào training set. Việc lấy trung bình cùng của lỗi này nhằm mục đích giúp tránh trường hợp hàm mất mát cùng đạo hàm có mức giá trị là một số rất lớn, ảnh hưởng tới độ đúng mực của các phép toán khi thực hiện trên sản phẩm tính. Về mặt toán học, nghiệm của hai bài toán là như nhau.

Đạo hàm của hàm mất mát là:< abla_mathbfwmathcalL(mathbfw) = frac1NmathbfarX^T mathbf(arXw - y) ~~~~~(1)>

Sau đấy là ví dụ trên Python và một vài lưu ý khi lập trình

Load thư viện


# To tư vấn both python 2 và python 3from __future__ import division, print_function, unicode_literalsimport numpy as np import matplotlibimport matplotlib.pyplot as pltnp.random.seed(2)
Tiếp theo, bọn họ tạo 1000 điểm dữ liệu được lựa chọn gần với đường thẳng (y = 4 + 3x), hiển thị chúng và search nghiệm theo công thức:


X = np.random.rand(1000, 1)y = 4 + 3 * X + .2*np.random.randn(1000, 1) # noise added# Building Xbar one = np.ones((X.shape<0>,1))Xbar = np.concatenate((one, X), axis = 1)A = np.dot(Xbar.T, Xbar)b = np.dot(Xbar.T, y)w_lr = np.dot(np.linalg.pinv(A), b)print("Solution found by formula: w = ",w_lr.T)# Display resultw = w_lrw_0 = w<0><0>w_1 = w<1><0>x0 = np.linspace(0, 1, 2, endpoint=True)y0 = w_0 + w_1*x0# Draw the fitting line plt.plot(X.T, y.T, "b.") # data plt.plot(x0, y0, "y", linewidth = 2) # the fitting lineplt.axis(<0, 1, 0, 10>)plt.show()

*

Kiểm tra đạo hàm

Việc tính đạo hàm của hàm nhiều biến thông thường khá tinh vi và rất đơn giản mắc lỗi, nếu chúng ta tính không nên đạo hàm thì thuật toán GD cần thiết chạy đúng được. Trong thực nghiệm, có một cách để kiểm tra liệu đạo hàm tính được có đúng đắn không. Cách này dựa trên định nghĩa của đạo hàm (cho hàm 1 biến):

Một giải pháp thường được sử dụng là mang một quý hiếm (varepsilon ) vô cùng nhỏ, lấy một ví dụ (10^-6), và sử dụng công thức:

Cách tính này được điện thoại tư vấn là numerical gradient.

Xem thêm: Bảng Giá Độ Vỏ Iphone X Lên 12, Độ Vỏ Iphone X Lên 12 Pro

Câu hỏi: lý do công thức dao động hai phía trên đây lại được sử dụng rộng rãi, sao không sử dụng công thức dao động đạo hàm bên đề xuất hoặc bên trái?

Có nhì các lý giải cho vụ việc này, một bằng hình học, một bằng giải tích.

Giải thích bằng hình học

Quan sát hình dưới đây:


*

Trong hình, vector màu đỏ là đạo hàm chính xác của hàm số tại điểm có hoành độ bằng (x_0). Vector màu xanh da trời lam (có vẻ là hơi tím sau khoản thời gian convert tự .pdf thanh lịch .png) biểu đạt cách xấp xỉ đạo hàm phía phải. Vector màu xanh lá cây lục biểu lộ cách dao động đạo hàm phía trái. Vector color nâu biểu hiện cách dao động đạo hàm hai phía. Trong cha vector dao động đó, vector xấp xỉ hai phía gray clolor là ngay sát với vector đỏ duy nhất nếu xét theo hướng.

Sự khác biệt giữa những cách xê dịch còn lớn hơn nữa giả dụ tại điểm x, hàm số bị bẻ cong khỏe mạnh hơn. Khi đó, giao động trái và cần sẽ khác biệt rất nhiều. Xấp xỉ phía 2 bên sẽ ổn định hơn.

Giải thích bằng giải tích

Chúng ta cùng trở lại một chút với Giải tích I năm thứ nhất đại học: khai triển Taylor.

Với (varepsilon) khôn cùng nhỏ, ta có hai xê dịch sau:

và:

Từ kia ta có:

Từ đó, nếu dao động đạo hàm bởi công thức ((3)) (xấp xỉ đạo hàm phải), sai số vẫn là (O(varepsilon)). Trong những khi đó, nếu giao động đạo hàm bởi công thức ((4)) (xấp xỉ đạo hàm nhì phía), sai số đang là (O(varepsilon^2) ll O(varepsilon)) giả dụ (varepsilon) nhỏ.

Cả nhị cách phân tích và lý giải trên đây gần như cho họ thấy rằng, dao động đạo hàm haiphía là xấp xỉ giỏi hơn.

Với hàm những biến

Với hàm những biến, công thức ((2)) được áp dụng cho từng biến hóa khi những biếnkhác nuốm định. Cách tính này thường cho giá trị khá thiết yếu xác. Tuy nhiên, cáchnày không được sử dụng để tính đạo hàm do độ phức hợp quá cao so với biện pháp tínhtrực tiếp. Khi so sánh đạo hàm này cùng với đạo hàm chính xác tính theo công thức,người ta thường sút số chiều dữ liệu và bớt số điểm dữ liệu để thuận tiện chotính toán. Một lúc đạo hàm tính được khôn cùng gần cùng với numerical gradient, chúng tacó thể tự tin tưởng rằng đạo hàm tính được là thiết yếu xác.

Dưới đấy là một đoạn code dễ dàng để bình chọn đạo hàm và rất có thể áp dụng cùng với mộthàm số (của một vector) bất kỳ với cost với grad đã tính sinh hoạt phía trên.


def numerical_grad(w, cost): eps = 1e-4 g = np.zeros_like(w) for i in range(len(w)): w_p = w.copy() w_n = w.copy() w_p += eps w_n -= eps g = (cost(w_p) - cost(w_n))/(2*eps) return g def check_grad(w, cost, grad): w = np.random.rand(w.shape<0>, w.shape<1>) grad1 = grad(w) grad2 = numerical_grad(w, cost) return True if np.linalg.norm(grad1 - grad2) 1e-6 else False print( "Checking gradient...", check_grad(np.random.rand(2, 1), cost, grad))
Sau 49 vòng lặp, thuật toán đã quy tụ với một nghiệm khá ngay gần với nghiệm tìm đượctheo công thức.

Dưới đây là hình hễ minh họa thuật toán GD.

*
*

Trong hình mặt trái, những đường thẳng red color là nghiệm kiếm được sau mỗi vòng lặp.

Trong hình mặt phải, tôi xin reviews một thuật ngữ mới: đường đồng mức.

Đường đồng nút (level sets)

Với đồ dùng thị của một hàm số với hai vươn lên là đầu vào rất cần được vẽ trong không gian bachiều, nhều khi chúng ta khó nhìn được nghiệm có tầm khoảng tọa độ bao nhiêu. Trongtoán tối ưu, fan ta hay được dùng một biện pháp vẽ thực hiện khái niệm đường đồng mức(level sets).

Nếu các bạn để ý vào các phiên bản độ tự nhiên, để biểu đạt độ cao của những dãy núi,người ta dùng những đường cong kín phủ bọc nhau như sau:


*

Các vòng nhỏ màu đỏ hơn thể hiện các điểm nghỉ ngơi trên cao hơn.

Trong toán tối ưu, tín đồ ta cũng dùng phương thức này nhằm thể hiện các bề mặttrong không gian hai chiều.

Quay trở lại với hình minh họa thuật toán GD cho câu hỏi Liner Regression bêntrên, hình bên cần là hình biểu diễn các level sets. Tức là tại những điểm trêncùng một vòng, hàm mất mát có giá trị như nhau. Trong ví dụ như này, tôi hiển thịgiá trị của hàm số tại một số trong những vòng. Các vòng màu xanh lá cây có giá trị thấp, các vòngtròn màu đỏ phía ngoài có giá trị cao hơn. Điểm này khác một chút ít so cùng với đườngđồng mức trong tự nhiên và thoải mái là các vòng bên phía trong thường bộc lộ một thung lũng hơnlà một đỉnh núi (vì bọn họ đang đi tìm giá trị bé dại nhất).

Tôi thử với learning rate nhỏ hơn, kết quả như sau:

*
*

Tốc độ hội tụ đã lờ đờ đi nhiều, thậm chí sau 99 vòng lặp, GD vẫn chưa đến gầnđược nghiệm xuất sắc nhất. Trong những bài toán thực tế, họ cần những vòng lặphơn 99 siêu nhiều, vì chưng số chiều cùng số điểm dữ liệu thường là cực kỳ lớn.

4. Một lấy ví dụ khác

Để ngừng phần 1 của Gradient Descent, tôi xin nêu thêm một ví dụ khác.


*

Hàm số (f(x, y) = (x^2 + y - 7)^2 + (x - y + 1)^2) bao gồm hai điểm local minimummàu xanh lục trên ((2, 3)) cùng ((-3, -2)), và bọn chúng cũng là nhị điểmglobal minimum. Trong lấy ví dụ như này, tùy theo điểm khởi tạo mà họ thu được cácnghiệm sau cùng khác nhau.

5. Thảo luận

Dựa bên trên GD, có tương đối nhiều thuật toán phức hợp và hiệu quả hơn được thiết kế theo phong cách chonhững loại câu hỏi khác nhau. Vì bài bác này đã đủ dài, tôi xin phép dừng lại ởđây. Mời chúng ta đón đọc bài xích Gradient Descent phần 2 với khá nhiều kỹ thuật nâng caohơn.

6. Tư liệu tham khảo


Nếu gồm câu hỏi, chúng ta cũng có thể để lại comment bên dưới hoặc trên diễn đàn để nhận ra câu vấn đáp sớm hơn.Bạn đọc rất có thể ủng hộ blog qua "Buy me a cofee" ở góc cạnh trên phía bên trái của blog.

Xem thêm: Tại Sao Máy In Không Nhận Lệnh In Win 10, Lỗi Máy In Không Nhận Lệnh In

Tôi vừa chấm dứt cuốn ebook "Machine Learning cơ bản", chúng ta có thể đặt sách tại đây.Cảm ơn bạn.