Gradient Descent Là Gì – Thuật Toán Tối ưu Gradient Descent

Gradient Descent Là Gì – Thuật Toán Tối ưu Gradient Descent

Thuật toán linear regression giải quyết những bài toán có đầu ra là giá cả thực, ví dụ: dự đoán giá nhà, dự đoán giá cổ phiếu, dự đoán tuổi,…

Bài toán

Bạn làm ở doanh nghiệp bất động sản, bạn có dữ liệu về diện tích and giá nhà, giờ chứa một căn nhà mới bạn có nhu cầu ước tính xem giá căn nhà đó khoảng bao nhiêu. Trên thực tiễn giá nhà thì chịu ràng buộc rất đông nhân tố: diện tích, số phòng, gần trung tâm kinh tế,.. nhưng gây nên bài toán dễ chơi giả, sử giá nhà chỉ chịu ràng buộc vào diện tích khu nhà ở. Bạn có dữ liệu về diện tích and giá bán của 30 khu nhà ở như sau:

Diện tích(m2) Giá bán (triệu Việt Nam Đồng)
30 448.524
32.4138 509.248
34.8276 535.104
37.2414 551.432
39.6552 623.418

*

Hình 2: Ước tính giá khu nhà ở 50 m^2

Về mặt lập trình cũng cần làm 2 việc như thế:

Training: tìm đường thẳng (model) gần những điểm trên nhất. Mọi người có thể vẽ ngay đc đường thẳng diễn đạt dữ liệu từ hình 1, nhưng máy tính thì không, nó phải đi tìm kiếm bằng thuật toán Gradient descent ở phía bên dưới. (Từ model and đường thẳng có thể bị áp dụng thay thế lẫn nhau trong phần còn lại của bài viết). Inference: dự đoán xem giá của căn nhà 50 m^2 có giá bao nhiêu dựa trên đường tìm đc ở phần trên.

Thiết lập công thức

Model

Phương trình đường thẳng có dạng y = ax + b.

Bài Viết: Gradient descent là gì

*

Sự khác nhau tại điểm x = 42 của model đường thẳng y = x and giá cả thực tiễn ở trên bảng 1

Rõ rệt có thể cảm thấy đường y = x đã hết gần những điểm hay không cần là đường mà ta cần tìm. Ví dụ tại điểm x = 42 (nhà 42 m^2 ) giá thật là 625 triệu nhưng giá mà model dự đoán chỉ là 42 triệu.

Xem Ngay:  Oce Là Gì - Nghĩa Của Từ Nao Oce Trong Tiếng Việt

Nên giờ cần 1 hàm để Đánh Giá là đường thẳng với bộ tham số (w_0, w_1) = (0, 1) có tốt nhất hay không. Với mỗi điểm dữ liệu (x_i, y_i) độ chênh lệch giữa giá thật and giá dự đoán đc tính bằng: displaystyle frac{1}{2} * (hat{y_i} – y_i)^2. And độ chênh lệch trên tất cả dữ liệu tính bằng tổng chênh lệch của từng điểm:

displaystyle J = frac{1}{2} * frac{1}{N} * (sum_{i=1}^{N} (hat{y_i} – y_i)^2) (N là số điểm dữ liệu). Bình chọn:

J không âmJ càng bé dại thì đường thẳng càng gần điểm dữ liệu. Nếu J = 0 thì đường thẳng đi qua tất những điểm dữ liệu.

=> Bài toán tìm đường thẳng gần những điểm dữ liệu nhất biến thành tìm w_0, w_1 sao cho hàm J bé dại nhất. Nhưng vì tìm giá cả bé dại nhất của J cũng giống tìm giá cả bé dại nhất của k*J (k là số thực, dương) nên ta sẽ đi tìm kiếm giá cả bé dại nhất của

displaystyle J = frac{1}{2} *(sum_{i=1}^{N} (hat{y_i} – y_i)^2)

Tóm tắt: trước tiên từ việc tìm đường thẳng (model) -> tìm w_0, w_1 để hàm J bé dại nhất. Giờ cần một thuật toán để tìm giá cả bé dại nhất của hàm J. Đó đó là gradient descent.

Gradient descent

Đạo hàm là gì

Mình tin có nhiều bạn có thể tính đc đạo hàm của hàm f(x) = x^2 hay f(x) = sin(cos(x)) nhưng vẫn chưa hiểu thực sự đạo hàm là gì.

Theo tiếng hán đạo là con đường, hàm là hàm số nên đạo hàm chỉ sự biến đổi của hàm số hay mang tên thân thương hơn là độ dốc của đồ thị.

*

Bước 1: Khởi tạo giá cả bất cứ x = -2 (điểm A).

Xem Ngay: Ic3 Là Gì – Chứng Chỉ Tin Học Quốc Tế

Bước 2: Do ở A đồ thị giảm nên f”(x=-2) = 2*(-2) = -4 Khi gán x = x – learning_rate * f”(x) nên x tăng nên đồ thị bước tiếp theo ở điểm C. Tiếp tục triển khai bước 2, gán x = x – learning_rate * f”(x) thì đồ thị ở điểm D,… => hàm số giảm từ từ tiến tới giá cả bé dại nhất.

Moị người có chăm chú là trị hoàn toàn đàm tại A to hơn tại C and tại C to hơn tại D không. Đến khi đến gần điểm đạt giá cả bé dại nhất x = 0, thì đạo hàm xấp xỉ 0 đến khi hàm đạt giá cả bé dại nhất tại x = 0, thì đạo hàm bằng 0, nên tại điểm gần giá cả bé dại nhất thì bước 2 gán x = x – learning_rate * f”(x) là không đáng kể and gần như là giữ nguyên giá cả của x.

Xem Ngay:  Chứng nhận intertek là gì

Tương tự như nếu giá cả khởi tạo tại x = 2 (tại B) thì đạo hàm tại B dương nên do x = x – learning_rate * f”(x) giảm -> đồ thị ở điểm E -> rồi tiếp tục gán x=x -learning_rate * f”(x) thì hàm f(x) cũng sẽ giảm từ từ đến giá cả bé dại nhất.

Bình chọn:

Thuật toán vận động tốt nhất trong điều kiện không hề tìm giá cả bé dại nhất bằng đại số tuyến tính.Việc quan trọng nhất của thuật toán là tính đạo hàm của hàm số theo từng biến sau đó lặp lại bước 2.

Việc chọn hệ số learning_rate cực kỳ quan trọng, có 3 điều kiện:

Nếu learning_rate bé dại: mỗi lần hàm số giảm rất ít nên cần rất rất nhiều lần triển khai bước 2 để hàm số đạt giá cả bé dại nhất Nếu learning_rate hợp lý: sau ít lần lặp bước 2 vừa phải thì hàm sẽ đạt giá cả đủ bé dại.Nếu learning_rate quá to: sẽ gây hiện tượng overshoot and không lúc nào đạt đc giá cả bé dại nhất của hàm.

*

Ma trận A (3 * 4)

Chỉ số ma trận thì hàng trước cột sau ví dụ A = -5 (hàng 1, cột 2); A = 4 (hàng 3, cột 1)

Phép nhân ma trận

Phép tính nhân ma trận A * B chỉ triển khai đc khi số cột của A bằng số hàng của B, hay A có kích thước m*n and B có kích thước n*k.

Ma trận C = A * B thì C có kích thước m * k and C = sum_{k=1}^{n} A*B

*

Biểu diễn bài toán

Do với môi điểm x_i, y_i ta cần phải tính (w_{0} + w_{1} * x_i – y_i) nên thay thế vì tính cho từng điểm dữ liệu một ta sẽ biểu diễn bên dưới dạng ma trận, X kích thước n * 2, Y kích thước n * 1 (n là số điểm dữ liệu trong tập dữ liệu mà ta có).

Xem Ngay: Vòng Bi ( Bạc đạn Là Gì, Hướng Dẫn Lựa Chọn Bạc đạn, Vòng Bi

Xem Ngay:  Bệnh Trĩ Là Gì - Nguyên Nhân, Cách Phòng Ngừa Bệnh Trĩ

*

Mở rộng

Mọi người mới có thể bỏ lỡ phần này

Hàm bậc hai

Giả sử bài toán vẫn như trên nhưng khi bạn vẽ đồ thị dữ liệu sẽ như vậy này

Bạn cũng có thể đoán đc model có thể là hàm bậc hai giờ bạn sẽ thiết lập công thức khác đi

*

Giờ bạn phải tính đạo hàm của J theo w_0, w_1, w_2 để sử dụng gradient descent

Gaussian Process (GP)

Tiếp nếu bạn vẽ đồ thị dữ liệu lên and bạn không hề đoán đc model là hàm gì thì sao? Câu vấn đáp là hãy áp dụng Gaussian Process. Quy mô ở trên cao bạn chăm chú thì mình có các tham số cần đi tìm kiếm w_0, w_1, w_2 nhưng ở GP thì đã hết có tham số nào cả (hoặc có thể coi là vô số tham số). Bài viết này diễn ra về GP khá hay mọi người có thể tìm hiểu thêm.

Python code

Dữ liệu and code những bạn cũng có thể lấy ở đây

# -*- coding: utf-8 -*-“””Created on Mon Feb 18 22:06:34 2019
author: DELL”””import numpy as npimport pandas as pdimport matplotlib.pyplot as plt#numOfPoint = 30#noise = np.random.normal(0,1,numOfPoint).reshape(-1,1)#x = np.linspace(30, 100, numOfPoint).reshape(-1,1)#N = x.shape#y = 15*x + 8 + 20*noise#plt.scatter(x, y)data = pd.read_csv(“data_linear.csv”).valuesN = data.shapex = data<:>.reshape(-1, 1)y = data<:>.reshape(-1, 1)plt.scatter(x, y)plt.xlabel(“mét vuông”)plt.ylabel(“giá”)x = np.hstack((np.ones((N, 1)), x))w = np.array().reshape(-1,1)numOfIteration = 100cost = np.zeros((numOfIteration,1))learning_rate = 0.000001for i in range(1, numOfIteration): r = np.dot(x, w) – y cost = 0.5*np.sum(r*r) w -= learning_rate*np.sum(r) # correct the shape dimension w -= learning_rate*np.sum(np.multiply(r, x<:>.reshape(-1,1))) print(cost)predict = np.dot(x, w)plt.plot((x, x),(predict, predict), “r”)plt.show()x1 = 50y1 = w + w * 50print(“Giá nhà cho 50m^2 là : “, y1)Vậy là kết thúc bài trước tiên, mình biết có thể rất lâu rồi mọi người chưa động đến toán, có thể là lần trước tiên lập trình. Không có điều gì đạt đc quá dễ dàng cả, chỉ cần chúng ta qua đc cửa ải bài 1 thì các bài sau sẽ nhẹ dịu hơn.

Mọi người không hiểu nơi nào hay có đóng góp gì cứ comment ở phía bên dưới mình sẽ giải đáp. Cảm ơn mọi người rất đông !!!

Thể Loại: Share Kiến Thức Cộng Đồng

Bài Viết: Gradient Descent Là Gì – Thuật Toán Tối ưu Gradient Descent

Thể Loại: LÀ GÌ

Nguồn Blog là gì: https://hethongbokhoe.com Gradient Descent Là Gì – Thuật Toán Tối ưu Gradient Descent

Leave a Reply