Skip to main content

Thuật toán Gradient Descent

Để tìm giá trị nhỏ nhất của hàm độ lỗi thông thường ta sẽ sử dụng các vector đạo hàm. Tại các vị trí cực tiểu (hoặc cực đại) nói chung, vector đạo hàm của hàm số bằng vector 0\overrightarrow{0}. Do đó, ý tưởng của giải thuật gradient descent là thực hiện lặp lại việc làm giảm các giá trị của vector gradient cho đến khi vector đạo hàm của tham số θ\theta theo hàm độ lỗi L\mathcal{L} xấp xỉ bằng 0\overrightarrow{0}.

Ý tưởng thuật toán trên khá đơn giản và được biểu diễn bằng mã giả như sau:

# Định nghĩa hàm Loss
def Loss(theta):
return theta**2 - 4*theta + 10 # (theta-2)^2 + 6
# Định nghĩa đạo hàm của hàm Loss
def DerLoss(theta):
return 2*theta - 4
# Khởi tạo tham số
theta = -10
alpha = 0.01
eps = 0.0001
while True:
theta = theta - alpha*DerLoss(theta)
if abs(DerLoss(theta)) < eps:
break
print("Theta toi uu: ", theta)
print("Gia tri Loss nho nhat: ", Loss(theta))

Kết quả in ra màn hình là:

Theta toi uu: 1.9999507969843757
Gia tri Loss nho nhat: 6.000000002420936

Như vậy ta có thể nhận thấy, giá trị tham số tối ưu là θ=1.99...\theta^*=1.99... xấp xỉ với giá trị tính toán bằng phương pháp toán22. Thật vậy, theo ví dụ ở trên hàm mất mát L(θ)=θ24θ+10=(θ2)2+6\mathcal{L}(\theta) = \theta^2 - 4\theta + 10 = (\theta-2)^2 + 6. Tức là đạt được giá trị nhỏ nhất là 66 khi θ=2\theta=2. Ta nhận thấy rằng giá trị nhỏ nhất này cũng xấp xỉ với giá trị nhỏ nhất sau khi chạy thuật toán Gradient Descent.

Trong những bài tiếp theo, chúng tôi sẽ giới thiệu cách vận dụng mô hình máy học tổng quát để xây dựng các mô hình máy học cơ bản. Việc xây dựng một mô hình máy học sẽ bao gồm các việc cơ bản sau:

  • Chọn lựa hàm mô hình fθ(x)f_\theta(x)
  • Chọn lựa hàm độ lỗi L(θ;x,y)\mathcal{L}(\theta; x, y)
  • Tìm tham số tối ưu cho mô hình θ=argminθL(θ;x,y)\theta^* = \operatorname*{argmin}_\theta \mathcal{L}(\theta; x, y)