Gradient descent là gì

1. Giới thiệu 2. Gradient Descent đến hàm 1 biến chuyển lấy một ví dụ đơn giản dễ dàng với Pythanh mảnh 3. Gradient Descent mang lại hàm các vươn lên là Sau đó là ví dụ bên trên Pynhỏ nhắn với một vài ba chú ý lúc xây dựng Kiểm tra đạo hàm

1. Giới thiệu

Các các bạn hẳn thấy mẫu vẽ sau đây thân quen thuộc:


*

Điểm greed color lục là vấn đề local minimum (cực tiểu), và cũng là điểm tạo nên hàmsố đạt giá trị nhỏ độc nhất. Từ phía trên trnghỉ ngơi đi, tôi đang dùng local minimum để vắt chođiểm cực tiểu, global minimum để thế mang lại điểm nhưng trên kia hàm số đạt giá bán trịnhỏ nhất. Global minimum là 1 ngôi trường vừa lòng đặc trưng của local minimum.

You watching: Gradient descent là gì

Giả sử bọn họ đang quan tâm đến một hàm số một phát triển thành bao gồm đạo hàm hầu như chỗ. Xinmang đến tôi được nói lại vài điều đang vượt quen thuộc:

Điểm local minimum (x^*) của hàm số là điểm có đạo hàm (f’(x^*))bởi 0. Hơn chũm nữa, vào lân cận của chính nó, đạo hàm của các điểm phía mặt trái(x^*) là không dương, đạo hàm của các điểm phía mặt yêu cầu (x^*) làkhông âm.

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

Trong hình phía bên trên, những điểm bên trái của điểm local minimum màu xanh lục cóđạo hàm âm, những điểm mặt buộc phải bao gồm đạ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 dành riêng và Toán Tối Ưu nói thông thường, họ hay xuyênđề xuất tìm giá trị bé dại độc nhất (hoặc nhiều lúc là lớn nhất) của một hàm số nào đó. Vídụ nlỗi những hàm mất đuối trong nhì bài Linear Regression cùng K-means Clustering. Nhìn phổ biến, việc tìm kiếm globalminimum của những hàm mất mát vào Machine Learning là siêu phức hợp, thậm chí còn làbất khả thi. Thay vào đó, tín đồ ta hay cố gắng search những điểm local minimum, vàở 1 mức độ làm sao đó, coi đó là nghiệm đề xuất tìm của bài tân oán.

Các điểm local minimum là nghiệm của pmùi hương trình đạo hàm bằng 0. Nếu bằng mộtbí quyết làm sao đó hoàn toàn có thể tìm kiếm được toàn thể (hữu hạn) những điểm cực tè, ta chỉ cần thaytừng điểm local minimum đó vào hàm số rồi tìm điểm tạo cho hàm có mức giá trị nhỏnhất (đoạn này nghe khôn cùng không còn xa lạ, đúng không?). Tuy nhiên, vào phần lớn cáctrường thích hợp, bài toán giải phương thơm trình đạo hàm bởi 0 là bất khả thi. Ngulặng nhân cóthể đến từ sự phức tạp của dạng của đạo hàm, từ các việc những điểm dữ liệu có sốchiều to, hoặc từ việc gồm không ít điểm dữ liệu.

Hướng tiếp cận thịnh hành duy nhất là xuất phát điểm từ một điểm nhưng bọn họ coi là gầnvới nghiệm của bài xích tân oán, tiếp nối cần sử dụng một phxay toán lặp nhằm tiến dần mang đến điểmbắt buộc kiếm tìm, tức cho đến khi đạo hàm ngay gần với 0. Gradient Descent (viết gọn gàng là GD) với cácđổi thay thể của chính nó là 1 Một trong những phương pháp được dùng các nhất.

Vì kỹ năng về GD tương đối rộng bắt buộc tôi xin phép được phân thành hai phần. Phần 1này giới thiệu ý tưởng phía đằng sau thuật tân oán GD với một vài ba ví dụ đơn giản giúp cácchúng ta có tác dụng thân quen với thuật tân oán này với vài ba khái niệm new. Phần 2 đã nói về cáccách thức cải tiến GD cùng các vươn lên là thể của GD trong các bài xích toán cơ mà số chiều vàsố điểm dữ liệu bự. Những bài xích toán thù những điều đó được điện thoại tư vấn là large-scale.

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

Quay trở về hình mẫu vẽ ban đầu và một vài ba quan tiền giáp tôi vẫn nêu. Giả sử(x_t) là điểm ta tìm kiếm được sau vòng lặp lắp thêm (t). Ta yêu cầu kiếm tìm một thuậttân oán để đưa (x_t) về càng ngay sát (x^*) càng xuất sắc.

Trong hình trước tiên, họ lại sở hữu thêm nhị quan tiền cạnh bên nữa:

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

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

Hai dấn xét phía trên đến họ một giải pháp update dễ dàng và đơn giản là:

Trong số đó (eta) (gọi là eta) là một trong những dương được Điện thoại tư vấn là learning rate(tốc độ học). Dấu trừ biểu lộ bài toán bọn họ bắt buộc đi ngược cùng với đạo hàm (Đâycũng đó là nguyên nhân phương thức này được Call là Gradient Descent - descentnghĩa là đi ngược). Các quan tiếp giáp đơn giản dễ dàng phía bên trên, tuy nhiên chưa phải đúngmang đến toàn bộ các bài bác toán, là căn nguyên mang lại không hề ít phương thức tối ưu nói chungcùng thuật toán thù Machine Learning dành riêng.

lấy một 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 nguyên do tôi lựa chọn hàm này bởi nó không dễ search nghiệm của đạo hàm bởi 0 nlỗi hàmphía trên). Giả sử bước đầu từ một điểm (x_0) như thế nào kia, trên vòng lặp thứ(t), họ sẽ cập nhật nhỏng sau:

Nlỗi hay lệ, tôi knhị báo vài ba thỏng viện quen thuộc


# To tư vấn both pykhiêm tốn 2 & pyeo hẹp 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 để tính cực hiếm của hàm số. Hàm này không áp dụng vào thuật toánnhưng mà thường được dùng để làm khám nghiệm Việc tính đạo hàm của đúng không hoặc đểcoi quý giá của hàm số gồm sút theo mỗi vòng lặp hay không. myGDmột là phần thiết yếu tiến hành thuật toán thù Gradient Desent nêu bên trên. Đầuvào của hàm số này là learning rate và điểm ban đầu. Thuật toán dừng lại khiđạo hàm gồm độ to đủ 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 lúc gồm những hàm cần thiết, tôi test tìm kiếm nghiệm cùng với các điểm khởi sản xuất 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à cùng với các điểm ban sơ khác nhau, thuật tân oán của bọn họ tìm kiếm được nghiệmgần giống nhau, tuy vậy cùng với tốc độ hội tụ khác nhau. Dưới đó là hình hình ảnh minhhọa thuật tân oán GD đến bài toán này (xem tốt trên Desktop nghỉ ngơi cơ chế full mànhình).

*
*

Từ hình minc họa trên ta thấy rằng nghỉ ngơi hình phía bên trái, tương xứng với (x_0 = -5), nghiệm hội tụ nkhô cứng hơn, bởi vì điểm thuở đầu (x_0) ngay gần với nghiệm ( x^* approx -1) hơn. Hơn nữa, cùng với (x_0 = 5 ) sinh hoạt hình bên buộc phải, đường đi của nghiệm bao gồm cất một Quanh Vùng tất cả đạo hàm khá bé dại gần điểm có hoành độ bằng 2. Như vậy làm cho thuật tân oán la cà ở chỗ này tương đối thọ. Lúc thừa qua được điểm đó thì hầu hết bài toán diễn ra tốt nhất có thể rất đẹp.

Learning rate không giống nhau

Tốc độ hội tụ của GD ko phần lớn dựa vào vào điểm khởi sản xuất lúc đầu Hơn nữa dựa vào vào learning rate. Dưới đây là một ví dụ với thuộc điểm khởi chế tạo (x_0 = -5) tuy nhiên learning rate không giống nhau:

*
*

Ta quan lại gần kề thấy hai điều:

Với learning rate nhỏ (eta = 0.01), vận tốc quy tụ khôn xiết chậm rãi. Trong vídụ này tôi lựa chọn về tối nhiều 100 vòng lặp phải thuật toán thù dừng lại trước lúc tớiđích, tuy vậy đã rất ngay gần. Trong thực tế, Khi câu hỏi tính tân oán trsinh sống yêu cầu phứctạp, learning rate quá thấp đang ảnh hưởng tới tốc độ của thuật toán rấtcác, thậm chí ko lúc nào tới được đích. Với learning rate Khủng (eta = 0.5), thuật toán thù tiến vô cùng nkhô giòn tới gầnđích sau vài vòng lặp. Tuy nhiên, thuật toán thù không hội tụ được vì chưng bướcnhảy quá to, khiến cho nó cứ đọng luẩn quẩn quanh ở đích.

Việc chọn lựa learning rate khôn xiết quan trọng đặc biệt trong những bài bác toán thù thực tế. Việcchắt lọc quý giá này dựa vào nhiều vào cụ thể từng bài bác toán cùng cần làm cho một vài ba thínghiệm nhằm chọn ra cực hiếm cực tốt. Ngoài ra, tùy theo một vài bài bác tân oán, GD tất cả thểthao tác làm việc hiệu quả hơn bằng cách lựa chọn ra learning rate cân xứng hoặc chọnlearning rate khác nhau ở mỗi vòng lặp. Tôi vẫn trở lại vấn đề này ở chỗ 2.

3. Gradient Descent mang đến hàm nhiều biến

Giả sử ta đề nghị tra cứu global minimum mang lại hàm (f(mathbf heta)) trong đó(mathbf heta) (theta) là một vector, hay được dùng để làm ký hiệu tậpthích hợp những tyêu thích số của một quy mô đề nghị buổi tối ưu (trong Linear Regression thì những thamsố đó là thông số (mathbfw)). Đạo hàm của hàm số đó tại một điểm( heta) ngẫu nhiên được ký hiệu là ( abla_ hetaf( heta)) (hình tamgiác ngược đọc là nabla). Tương từ bỏ nlỗi hàm 1 biến, thuật toán thù GD mang lại hàm nhiềuphát triển thành cũng ban đầu bằng một điểm dự đoán thù ( heta_0), tiếp đến, sống vòng lặpđồ vật (t), nguyên 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 dễ dàng và đơn giản hơn: ( heta = heta - eta abla_ heta f( heta)).

Quy tắc buộc phải nhớ: luôn luôn luôn đi ngược hướng với đạo hàm.

Việc tính tân oán đạo hàm của các hàm nhiều trở thành là một trong những năng lực cần thiết. Một vài đạo hàm dễ dàng và đơn giản có thể được search thấy tại chỗ này.

Quay lại với bài bác toán Linear Regression

Trong mục này, chúng ta trở lại với bài toán Linear Regression cùng demo buổi tối ưu hàm mất non của chính nó bằng thuật tân oán GD.

Hàm mất đuối của Linear Regression là:

Chụ ý: hàm này có không giống một chút ít so với hàm tôi nêu vào bài bác Linear Regression. Mẫu số gồm thêm (N) là con số tài liệu vào training phối. Việc mang vừa phải cùng của lỗi này nhằm giúp tránh sự cố hàm mất non và đạo hàm có mức giá trị là một số không nhỏ, tác động cho tới độ đúng đắn của những phép toán Khi thực hiện trên máy tính. Về mặt toán học tập, nghiệm của hai bài xích tân oán là tương đồng.

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

Sau đó là ví dụ trên Pynhỏ cùng một vài ba để ý Khi lập trình

Load tlỗi viện


# To tư vấn both python 2 and 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 thành 1000 điểm tài liệu được chọn gần với đường trực tiếp (y = 4 + 3x), hiển thị bọn chúng với tìm 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 các vươn lên là thường thì khá tinh vi cùng rất đơn giản mắc lỗi, nếu họ tính sai đạo hàm thì thuật toán GD thiết yếu chạy đúng được. Trong thực nghiệm, có một cách để kiểm soát liệu đạo hàm tính được tất cả chính xác ko. Cách này dựa trên có mang của đạo hàm (đến hàm 1 biến):

Một cách hay được áp dụng là rước một cực hiếm (varepsilon ) siêu nhỏ tuổi, ví dụ (10^-6), cùng thực hiện công thức:

Cách tính này được call là numerical gradient.

See more: Lịch Nghỉ Tết 2018 Là Con Gì, Mệnh Gì? Tết 2018 Là Con Gì

Câu hỏi: Tại sao bí quyết dao động nhị bên trên đây lại được thực hiện thoáng rộng, sao không sử dụng bí quyết giao động đạo hàm mặt phải hoặc mặt trái?

Có hai các lý giải đến sự việc này, một bởi hình học tập, một bằng giải tích.

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

Quan tiếp giáp hình dưới đây:


*

Trong hình, vector red color là đạo hàm bao gồm xác của hàm số trên điểm bao gồm hoành độ bằng (x_0). Vector blue color lam (có vẻ là hơi tím sau khoản thời gian convert từ .pdf sang .png) biểu lộ bí quyết giao động đạo hàm phía đề nghị. Vector màu xanh da trời lục diễn đạt phương pháp xấp xỉ đạo hàm phía trái. Vector màu nâu diễn tả biện pháp giao động đạo hàm nhị phía. Trong tía vector dao động đó, vector dao động nhì phía màu nâu là ngay gần với vector đỏ độc nhất ví như xét theo phía.

Sự khác biệt thân các biện pháp giao động còn to hơn nữa giả dụ trên điểm x, hàm số bị bẻ cong khỏe mạnh hơn. Khi đó, xê dịch trái cùng buộc phải vẫn khác biệt không hề ít. Xấp xỉ 2 bên đang ổn định rộng.

Giải thích hợp bằng giải tích

Chúng ta cùng quay trở về một chút ít với Giải tích I năm trước tiên đại học: Knhị triển Taylor.

Với (varepsilon) siêu nhỏ, ta gồm nhì xấp xỉ sau:

và:

Từ kia ta có:

Từ kia, ví như xê dịch đạo hàm bằng phương pháp ((3)) (xấp xỉ đạo hàm phải), không nên số đã là (O(varepsilon)). Trong khi đó, nếu giao động đạo hàm bằng công thức ((4)) (xê dịch đạo hàm nhì phía), không đúng số đang là (O(varepsilon^2) ll O(varepsilon)) ví như (varepsilon) nhỏ.

Cả nhì bí quyết giải thích trên trên đây phần nhiều đến họ thấy rằng, giao động đạo hàm haiphía là dao động tốt hơn.

Với hàm nhiều biến

Với hàm các thay đổi, bí quyết ((2)) được áp dụng mang đến từng biến đổi khi các biếnkhông giống cố định và thắt chặt. Cách tính này hay cho giá trị khá chính xác. Tuy nhiên, cáchnày sẽ không được áp dụng nhằm tính đạo hàm vì độ phức hợp quá cao so với cách tínhthẳng. khi đối chiếu đạo hàm này với đạo hàm đúng mực tính theo bí quyết,tín đồ ta thường sút số chiều dữ liệu và bớt số điểm dữ liệu nhằm dễ dãi chotính toán. Một lúc đạo hàm tính được cực kỳ ngay sát cùng với numerical gradient, chúng tacó thể tự tin tưởng rằng đạo hàm tính được là đúng mực.

Dưới đó là một quãng code dễ dàng và đơn giản để chất vấn đạo hàm và có thể vận dụng cùng với mộthàm số (của một vector) ngẫu nhiên với cost cùng grad vẫn tính ngơi nghỉ phía bên 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 vẫn hội tụ với cùng một nghiệm tương đối ngay gần với nghiệm tìm kiếm đượctheo phương pháp.

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

*
*

Trong hình phía trái, các con đường trực tiếp red color là nghiệm kiếm được sau từng vòng lặp.

Trong hình mặt yêu cầu, tôi xin trình làng một thuật ngữ mới: mặt đường đồng mức.

Đường đồng nút (cấp độ sets)

Với đồ dùng thị của một hàm số với nhì trở nên đầu vào cần phải vẽ trong không khí bachiều, nhều khi bọn họ cực nhọc nhìn được nghiệm có tầm khoảng tọa độ bao nhiêu. Trongtoán buổi tối ưu, người ta thường được sử dụng một giải pháp vẽ sử dụng khái niệm con đường đồng mức(cấp độ sets).

Nếu các bạn chú ý trong số bản độ tự nhiên và thoải mái, nhằm miêu tả chiều cao của những dãy núi,fan ta sử dụng những đường cong bí mật bao quanh nhau như sau:


*

Các vòng nhỏ màu đỏ hơn miêu tả những điểm ngơi nghỉ trên cao hơn.

Trong toán về tối ưu, người ta cũng cần sử dụng cách thức này để diễn đạt những bề mặtvào không gian hai phía.

Quay quay trở về với hình minh họa thuật toán GD cho bài tân oán Liner Regression bêntrên, hình bên đề xuất là hình trình diễn các cấp độ sets. Tức là tại những điểm trêncùng một vòng, hàm mất đuối có giá trị giống hệt. Trong ví dụ này, tôi hiển thịgiá trị của hàm số tại một vài vòng. Các vòng màu xanh lá cây có mức giá trị phải chăng, những vòngtròn red color phía kế bên có giá trị cao hơn nữa. Điểm này không giống một chút so với đườngđồng nút trong tự nhiên là các vòng phía bên trong thường xuyên diễn tả một thung lũng hơnlà 1 trong những đỉnh núi (bởi vì họ sẽ đi tìm quý hiếm nhỏ nhất).

Tôi test cùng với learning rate nhỏ dại hơn, tác dụng như sau:

*
*

Tốc độ quy tụ đã chậm chạp đi những, thậm chí sau 99 vòng lặp, GD vẫn chưa đến gầnđược nghiệm cực tốt. Trong những bài xích toán thù thực tế, họ bắt buộc các vòng lặprộng 99 không ít, do số chiều cùng số điểm dữ liệu thường xuyên là rất lớn.

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

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


*

Hàm số (f(x, y) = (x^2 + y - 7)^2 + (x - y + 1)^2) tất cả hai điểm local minimumblue color lục trên ((2, 3)) và ((-3, -2)), với chúng cũng chính là hai điểmglobal minimum. Trong ví dụ này, tùy theo điểm khởi tạo ra mà lại chúng ta nhận được cácnghiệm ở đầu cuối khác biệt.

5. Thảo luận

Dựa bên trên GD, có rất nhiều thuật toán thù phức tạp cùng công dụng rộng được thiết kế chohồ hết nhiều loại bài tân oán khác biệt. Vì bài này đang đầy đủ lâu năm, tôi xin phnghiền tạm dừng ởtrên đây. Mời chúng ta đón gọi bài xích Gradient Descent phần 2 với rất nhiều nghệ thuật nâng caorộng.

6. Tài liệu tmê mẩn khảo


Nếu có thắc mắc, Quý Khách rất có thể giữ lại comment bên dưới hoặc trên Forum để nhận được câu vấn đáp sớm rộng.Bạn phát âm rất có thể cỗ vũ blog qua "Buy me a cofee" ở góc cạnh trên bên trái của blog.

See more: Dấu Hiệu Của Bệnh Đột Quỵ Tiếng Anh Là Gì, Hỏi Đáp Y Học: Tai Biến Mạch Máu Não Hay Đột Quỵ

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

Chuyên mục: Giải Đáp