29 OCT 2017 • Mathematics

Nói về đạo hàm, như các bạn học sinh sống lớp 11, 12 thì đạo hàm biểu hiện tốc độ chuyển đổi của hàm. Lấy ví dụ hàm (y=f(x)) bao gồm đạo hàm là (fracdydx) để biểu thị tỉ lệ chuyển đổi của hàm (y) lúc biến đầu vào (input) (x) chuyển đổi một lượng rất nhỏ dại (dx). Đối với đồ dùng thị xung quanh phẳng tọa độ, đạo hàm tại một điểm trên đồ vật thị bởi độ dốc của đường trình diễn đồ thị đó. Bởi vì thế mới tất cả nguyên tắc tìm kiếm tiếp con đường của đồ gia dụng thị tại một điểm bằng cách tính đạo hàm. Nếu bạn từng làm cho gà chọi thi đại học, mấy chiếc mình nói ra nghỉ ngơi đây có lẽ rằng quá quen thuộc với bạn rồi.

Bạn đang xem: Toán học gradient là gì

Đạo hàm vì thế là đạo hàm thường thì (ordinary derivative).

Đạo hàm riêng rẽ (partial derivative) cũng chuyển động trên phương pháp tương tự.


*
Đồ thị hàm (z = f(x, y) = x^3y^2).

Đạo hàm riêng rẽ theo trở nên (y), cam kết hiệu là (f_y) hoặc (fracpartial zpartial y) sẽ tiến hành tính y hệt như đạo hàm thông thường nếu ta xem toàn bộ các đổi mới khác (y) là hằng số. Với đạo hàm hay ta dùng chữ (d), đạo hàm riêng ta cần sử dụng chữ (partial) (đọc là “del” hoặc “partial”).

Khi xem (x) là hằng số, mình sẽ sử dụng một mặt phẳng, ví dụ điển hình (x=1), để cắt đồ thị (z=x^3y^2).


*
Đồ thị hàm (z = f(x, y) = x^3y^2).

để lại giao đường là con đường (1^3y^2=y^2)

Lợi ích của việc dùng đạo hàm riêng biệt là mình hoàn toàn có thể quan cạnh bên được sự biến động của hàm lúc chỉ chuyển đổi một thay đổi và không thay đổi các thông số input còn lại. Để có không thiếu thông tin về tốc độ đổi khác đó, bọn họ cần nên biết những biến được giữ nguyên là thay đổi nào và có giá trị giữ nguyên bằng mấy, kế tiếp thay các giá trị này vào.

Theo lấy ví dụ trên thì:

Đạo hàm riêng rẽ theo biến hóa (y) của đại lượng (z) khi (x=1) là (2y). Trên điểm (x=1, y=2) xung quanh phẳng (z=f(x,y)), đạo hàm riêng theo đổi thay (y) bằng (2y = 2 imes 2 = 4). Tức là tại điểm đó, ví như bạn giữ nguyên (x) và di chuyển (y) một lượng rất nhỏ tuổi bằng (partial y) thì đại lượng (z) cũng sẽ biến đổi một lượng, nhưng mà gấp 4 lần (partial y) mà lại bạn biến hóa với (y). Chính vì vậy ta viết (fracpartial zpartial y = 4).

Gradient của hàm (f( extbfv)) cùng với ( extbfv = (v_1, v_2, ..., v_n)) là 1 vector:

< abla f = left<eginarrayc fracpartial fpartial v_1\ fracpartial fpartial v_2\ dots\ fracpartial fpartial v_n endarray ight>>

Mình đo đắn dịch “directional derivative” ra tiếng Việt ra làm sao nên dịch thô thiển bởi vậy thôi. Đạo hàm có hướng có nhiều ý nghĩa sâu sắc và công dụng khác nhau, trong bài này chỉ nói đến việc biểu đạt tốc độ thay đổi của hàm.

Đạo hàm bao gồm hướng là một trong dạng bao quát của đạo hàm riêng. Nếu như đạo hàm riêng rẽ chỉ rất có thể xét mang lại sự chuyển đổi của một vươn lên là thì đạo hàm được bố trí theo hướng xét sự biến hóa của những biến.

Mình đang nhóm những biến vào trong 1 vector, tức là thay bởi ghi (z=f(x,y)) thì ghi (z=f( extbfv)) với ngầm hiểu ( extbfv=left<eginarraycx\ yendarray ight>).

Do mình bao gồm 2 thay đổi (x, y) yêu cầu không gian input của bản thân mình sẽ là phương diện phẳng. Không gian output của hàm (f) là 1 trong những tia số. Hàm (f) làm trách nhiệm “nối” một điểm trong không gian input cho một điểm trong không gian output, chúng ta cứ lâm thời hình dung y hệt như ánh xạ vậy nhé.

Giả sử mình có một vector ( extbfw), câu hỏi đặt ra là trường hợp điểm trong không gian input của bản thân mình bị đẩy lệch đi một không nhiều theo chiều của vector ( extbfw), thì điểm trong không khí output của mình sẽ bị lệch đi bao nhiêu lần?

Quan gần kề hình sau. Nhị điểm thuộc màu là một trong bộ input-output tương ứng nhau mang đến hàm (f). Lấy ví dụ ở bên trái, điểm màu đỏ ((1,2)) có tác dụng input thì sẽ mang đến điểm màu đỏ ở ảnh phải có mức giá trị (f(x,y)=x^3y^2=4). Hiện giờ nếu trong hình trái, mình dời điểm red color sang địa chỉ điểm blue color theo hướng (chỉ hướng thôi nhé, còn khoảng cách được ra quyết định bởi (h ightarrow 0)) của ( extbfw=(1,3)), thì ở hình bên yêu cầu độ dời đó sẽ gấp từng nào lần so với bên trái?


*

*

Từ đó phát sinh ra ký kết hiệu (fracpartial fpartial extbfw), hoặc ( abla_ extbfwf( extbfv)) cùng đạo hàm bao gồm hướng. Nếu khách hàng nắm được phương pháp tính đạo hàm bình thường, chắc chắn là cách tính sau sẽ không có gì đáng ngạc nhiên:

Một số tư liệu sẽ có mang khác một tí, chỉ xét mang lại chiều của vector và dùng làm tính tốc độ thay đổi của hàm:

< abla_ extbfwf( extbfv = abla_ extbfw f( extbfv) = frac abla fcdot extbfw>

Note:À, ừm… đó nguyên nhân là để đảm bảo mình luôn luôn xét sự dịch rời theo vector đơn vị chức năng (vector bao gồm độ dài bằng 1). Nếu khách hàng chưa hiểu thì hãy tưởng tượng nhé. Trong lấy một ví dụ trên, dù ta mang ( extbfw=(1,3)) xuất xắc ( extbfw=(2,6)) chúng ta đều ước muốn ( abla_ extbfwf( extbfv)) ra một quý hiếm duy nhất, đúng không? vì chưng mục tiêu từ bây giờ của đạo hàm phía là trình bày sự biến hóa của hàm khi thay đổi input theo một chiều độc nhất vô nhị định.

Một số bạn còn xét mang lại độ bự của ( extbfw) và cho rằng nếu nó càng phệ thì tốc độ tăng cũng cần lớn theo. Mình đã có demo đặt câu hỏi này trên Reddit cùng trên Quora. Hóa ra là nó chế tạo sự tiện lợi cho các tính chất khác :)) (“because it’s mathematically convenient!”). Nếu có dịp mình sẽ nghiên cứu và phân tích sâu thêm mảng này. Trong thời điểm tạm thời bây giờ, nếu đơn thuần tính vận tốc hàm thì mình bắt buộc dùng vector 1-1 vị, với tại sao đã đề cập ở trên.

Theo ví dụ trên thì:

<eginaligned abla_ extbfw f( extbfv) &= frac1sqrt10left( 1fracpartial fpartial x + 3fracpartial fpartial y ight)\ &= frac1sqrt10left( 3x^2y^2 + 6x^3y ight)endaligned>

Tại những điểm input thế thể, bạn cũng có thể thay vào và tính ra được đạo hàm phía tại điểm đó, nói một cách khác là tính độ dốc (slope).

Tốc độ đổi khác của hàm (f):

< abla_ extbfw f( extbfv) = abla fcdot extbfw>
*

Contour map


Tại một điểm input vắt định, hàm (f) tăng nhanh nhất có thể (max) khi (w) cùng hướng với ( abla f) (tính hóa học tích vô hướng).

Do đó, fan ta call gradient là chiều tăng nhanh nhất của hàm (direction of steepest ascent).

Các contour lines nằm giáp nhau vẫn gần như tuy vậy song và cách nhanh nhất dịch rời giữa hai đường tuy vậy song là qua đường vuông góc chung. Cách đi này trùng với phía gradient, hệ trái là, gradient luôn luôn vuông góc với những đường contour lines.

1. Ra mắt 2. Gradient Descent cho hàm 1 phát triển thành Ví dụ dễ dàng với Python 3. Gradient Descent mang đến hàm nhiều biến chuyển Sau đó là ví dụ trên Python với một vài lưu ý khi 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 hình vẽ sau đây quen thuộc:


*

Điểm màu xanh da trời lục là điểm local minimum (cực tiểu), với cũng là điểm làm cho hàmsố đạt giá trị nhỏ dại nhất. Từ đây trở đi, tôi sẽ dùng local minimum để nắm chođiểm cực tiểu, global minimum để gắng cho điểm mà lại tại kia hàm số đạt giá trịnhỏ nhất. Global minimum là một trong trường hợp quan trọng đặc biệt của local minimum.

Giả sử chúng ta đang cân nhắc một hàm số một biến gồm đạo hàm phần đông nơi. Xincho tôi được nhắc lại đôi nét đã quá quen thuộc:

Điểm local minimum (x^*) của hàm số là điểm có đạo hàm (f’(x^*))bằng 0. Không những thế nữa, trong cạnh bên của nó, đạo hàm của những đ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 bên đề nghị (x^*) làkhông âm.

Đường tiếp con đường với đồ gia dụng thị hàm số đó ở 1 điểm ngẫu nhiên có thông 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, các điểm bên trái của điểm local minimum màu xanh lục cóđạo hàm âm, các điểm bên phải tất cả đạo hàm dương. Và đối 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 với Toán về tối Ưu nói chung, bọn họ thường xuyênphải tìm giá chỉ trị nhỏ tuổi nhất (hoặc nhiều khi là béo 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 Linear Regression cùng K-means Clustering. Nhìn chung, việc đào bới tìm kiếm globalminimum của các hàm mất đuối trong Machine Learning là vô cùng phức tạp, thậm chí là làbất khả thi. Ráng vào đó, fan ta thường cố gắng tìm những điểm local minimum, vàở một mức độ làm sao đó, coi đó là nghiệm yêu cầu tìm của bài 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ởi mộtcách làm sao đó có thể tìm được toàn bộ (hữu hạn) các điểm cực tiểu, ta chỉ việc thaytừng điểm local minimum kia vào hàm số rồi kiếm tìm điểm tạo nên hàm có mức giá trị nhỏnhất (đoạn này nghe hết sức quen thuộc, đúng không?). Tuy nhiên, trong phần nhiều cáctrường hợp, bài toán giải phương trình đạo hàm bởi 0 là bất khả thi. Tại sao cóthể đến từ sự tinh vi của dạng của đạo hàm, từ việc các điểm tài liệu có sốchiều lớn, hoặc từ những việc có quá nhiều điểm dữ liệu.

Hướng tiếp cận thông dụng nhất là khởi đầu 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 nhằm tiến dần mang lại điểmcần tìm, tức đến khi đạo hàm ngay gần với 0. Gradient Descent (viết gọn gàng là GD) và cácbiến thể của nó là 1 trong những phương thức được dùng những nhất.

Vì kỹ năng và kiến thức về GD khá rộng phải tôi xin phép được tạo thành hai phần. Phần 1này giới thiệu ý tưởng vùng sau thuật toán GD với một vài ví dụ dễ dàng và đơn giản giúp cácbạn làm quen cùng với thuật toán này với vài định nghĩa 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 dữ liệu lớn. Những việc như vậy được điện thoại tư vấn là large-scale.

2. Gradient Descent mang lại hàm 1 biến

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

Trong hình đầu tiên, chúng ta lại tất cả thêm hai quan giáp 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 về bên 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 mặt trái, tức về phía âm. Nói các khác, chúng ta cầndi gửi ngược vết 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 di chuyển (Delta), một bí quyết trực quannhất, là tỉ lệ thành phần thuận cùng với (-f’(x_t)).

Hai nhận xét phía trên cho chúng ta một cách update đơn giản là:

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

Ví dụ 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 vì sao tôi chọn hàm này do nó không dễ tìm nghiệm của đạo hàm bởi 0 như hàmphía trên). Mang sử bước đầu từ một điểm (x_0) làm sao đó, tại vòng lặp thứ(t), bọn họ sẽ update như sau:

Như thường xuyên lệ, tôi khai báo vài ba 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 các 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 để làm kiểm tra vấn đề tính đạo hàm của đúng không nào hoặc đểxem quý hiếm của hàm số tất cả giảm theo mỗi vòng lặp xuất xắc không. My
GD1 là phần chính thực hiện thuật toán Gradient Desent nêu phía trên. Đầuvào của hàm số này là learning rate cùng điểm bắt đầu. Thuật toán dừng lại khiđạo hàm bao gồm độ bự đủ nhỏ.

def grad(x): return 2*x+ 5*np.cos(x)def cost(x): return x**2 + 5*np.sin(x)def my
GD1(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 ra khác nhau

Sau lúc có các hàm yêu cầu thiết, tôi thử tìm nghiệm với những điểm khởi tạo khác nhaulà (x_0 = -5) cùng (x_0 = 5).

Xem thêm: Bài Viết Bài Văn Nghị Luận Về Bạo Lực Học Đường (Lớp 9) Tuyệt Vời Nhất


(x1, it1) = my
GD1(.1, -5)(x2, it2) = my
GD1(.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 những điểm ban sơ khác nhau, thuật toán của họ tìm được nghiệmgần kiểu như nhau, tuy nhiên 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 vấ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 trên ta thấy rằng sinh sống hình bên trái, tương ứng với (x_0 = -5), nghiệm hội tụ nhanh hơn, vì chưng điểm thuở đầu (x_0) sát với nghiệm ( x^* approx -1) hơn. Hơn nữa, với (x_0 = 5 ) sinh sống hình bên phải, đường đi của nghiệm tất cả chứa một khoanh vùng có đạo hàm khá nhỏ gần điểm bao gồm hoành độ bởi 2. Điều này làm cho thuật toán la cà tại đây khá lâu. Khi vượt qua được đặc điểm này thì mọi vấn đề diễn ra tốt nhất có thể đẹp.

Learning rate khác nhau

Tốc độ quy tụ của GD không những dựa vào vào điểm khởi tạo ban sơ mà còn dựa vào vào learning rate. Dưới đấy là một lấy một ví dụ với cùng điểm khởi tạo nên (x_0 = -5) cơ mà learning rate không giống nhau:

*
*

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

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

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

3. Gradient Descent cho hàm những biến

Giả sử ta nên tìm global minimum cho hàm (f(mathbf heta)) trong đó(mathbf heta) (theta) là một vector, thường xuyên được dùng để làm ký hiệu tậphợp các tham số của một quy mô cần về tối ưu (trong Linear Regression thì các thamsố đó là hệ 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 phát âm là nabla). Tương tự như hàm 1 biến, thuật toán GD cho hàm nhiềubiến cũng bước đầu bằng một điểm dự kiến ( heta_0), sau đó, sinh sống vòng lặpthứ (t), quy tắc cập nhật 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 hơn: ( heta = heta - eta abla_ heta f( heta)).

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

Việc đo lường và tính toán đạo hàm của những hàm nhiều trở nên là một năng lực cần thiết. Một vài đạo hàm 1-1 giản hoàn toàn có thể được search thấy làm việc đây.

Quay lại với vấn đề Linear Regression

Trong mục này, họ quay lại với bài toán Linear Regression cùng thử buổi tối ưu hàm mất đuối 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 chút so cùng với hàm tôi nêu trong bài Linear Regression. Mẫu mã số tất cả thêm (N) là con số dữ liệu trong training set. Vấn đề lấy trung bình cùng của lỗi này nhằm giúp tránh vấn đề hàm mất mát với đạo hàm có mức giá trị là một vài rất lớn, tác động tới độ đúng đắn của các phép toán khi triển khai trên đồ vật tính. Về phương diện toán học, nghiệm của hai câu hỏi là như nhau.

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

Sau đó là ví dụ bên trên Python và một vài xem xét khi lập trình

Load thư viện


# To support 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, họ tạo 1000 điểm tài liệu được chọn gần với đường thẳng (y = 4 + 3x), hiển thị chúng và kiếm 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 biến thường thì khá phức hợp và rất đơn giản mắc lỗi, nếu bọn họ tính không đúng đạo hàm thì thuật toán GD không thể chạy đúng được. Trong thực nghiệm, bao gồm một cách để kiểm tra liệu đạo hàm tính được có đúng mực không. Phương pháp 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 áp dụng là lấy một quý giá (varepsilon ) rất nhỏ, ví dụ như (10^-6), và sử dụng công thức:

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

Câu hỏi: tại sao công thức xê dịch hai bên trên đây lại được sử dụng rộng rãi, sao không sử dụng công thức xấp xỉ đạo hàm bên đề nghị hoặc mặt trái?

Có nhị các giải thích 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ởi hình học

Quan giáp hình bên dưới đây:


*

Trong hình, vector màu đỏ là đạo hàm chính xác của hàm số trên điểm tất cả hoành độ bởi (x_0). Vector màu xanh lam (có vẻ là tương đối tím sau khi convert tự .pdf sang .png) trình bày cách dao động đạo hàm phía phải. Vector màu xanh lục biểu hiện cách dao động đạo hàm phía trái. Vector màu sắc nâu thể hiện cách dao động đạo hàm hai phía. Trong ba vector giao động đó, vector xấp xỉ hai phía gray clolor là ngay gần với vector đỏ duy nhất nếu xét theo hướng.

Sự biệt lập giữa những cách xê dịch còn to hơn nữa ví như tại điểm x, hàm số bị bẻ cong táo bạo hơn. Khi đó, xấp xỉ trái và bắt buộc sẽ khác nhau rất nhiều. Xấp xỉ phía hai bên sẽ ổn định hơn.

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

Chúng ta cùng quay 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) vô cùng nhỏ, ta có hai xê dịch sau:

và:

Từ kia ta có:

Từ đó, nếu xê dịch đạ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 lúc đó, nếu xê dịch đạo hàm bằng công thức ((4)) (xấp xỉ đạo hàm nhì phía), không đúng số đã là (O(varepsilon^2) ll O(varepsilon)) giả dụ (varepsilon) nhỏ.

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

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

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

Dưới đây là một đoạn code dễ dàng để đánh giá đạo hàm và hoàn toàn có thể áp 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 đang tính ngơi nghỉ 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 đã hội tụ với một nghiệm khá gần với nghiệm kiếm tìm đượctheo công thức.

Dưới đó là hình cồn minh họa thuật toán GD.

*
*

Trong hình bên trái, những đường thẳng red color là nghiệm tì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ấc (level sets)

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

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


*

Các vòng bé dại màu đỏ rộng thể hiện những điểm làm việc trên cao hơn.

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

Quay trở về với hình minh họa thuật toán GD cho việc Liner Regression bêntrên, hình bên đề xuất là hình biểu diễn các level sets. Tức là tại các điểm trêncùng một vòng, hàm mất mát có giá trị như nhau. Trong lấy ví dụ này, tôi hiển thịgiá trị của hàm số tại một trong những vòng. Các vòng màu xanh lá cây có quý hiếm thấp, những vòngtròn red color 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 nấc trong thoải mái và tự nhiên là các vòng bên trong thường biểu thị một thung lũng hơnlà một đỉnh núi (vì họ đang đi tìm giá trị nhỏ tuổi nhất).

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

*
*

Tốc độ quy tụ đã lừ đừ đi nhiều, thậm chí còn sau 99 vòng lặp, GD vẫn không đến gầnđược nghiệm xuất sắc nhất. Trong những bài toán thực tế, chúng ta cần nhiều vòng lặphơn 99 vô cùng nhiều, do số chiều và số điểm dữ liệu thường là khôn cùng lớn.

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

Để xong phần 1 của Gradient Descent, tôi xin nêu thêm một lấy một 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 minimummàu xanh lục tại ((2, 3)) và ((-3, -2)), và chúng cũng là nhì điểmglobal minimum. Trong ví dụ như này, tùy vào điểm khởi tạo ra mà họ thu được cácnghiệm ở đầu cuối khác nhau.

5. Thảo luận

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

6. Tài liệu tham khảo


Nếu có câu hỏi, bạn cũng có thể để lại comment 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 trên phía trái của blog.Tôi vừa kết thúc cuốn ebook "Machine Learning cơ bản", chúng ta cũng có thể đặt sách trên đây.Cảm ơn bạn.