Trong bài trước, chúng ta đã tìm hiểu về K-means Clustering, một thuật toán học máy không giám sát. Trong bài này, chúng ta sẽ tìm hiểu về Gradient
Gradient
Gradient (độ dốc) là véc tơ biểu diễn tốc độ thay đổi của hàm. Các thành phần của Gradient là đạo hàm riêng theo các biến độc lập của hàm. [Xem thêm]
Descent – một thuật toán tối ưu hóa được sử dụng trong phổ biến lĩnh vực của Machine Learning
Machine Learning
Machine learning (học máy) là nghiên cứu khoa học về các thuật toán và mô hình thống kê mà các hệ thống máy tính sử dụng để thực hiện một nhiệm vụ cụ thể một cách hiệu quả mà không cần sử dụng các hướng dẫn rõ ràng, thay vào đó dựa vào các mẫu và suy luận.
.
1. Giới thiệu về Gradient Descent
Gradient
Gradient
Gradient (độ dốc) là véc tơ biểu diễn tốc độ thay đổi của hàm. Các thành phần của Gradient là đạo hàm riêng theo các biến độc lập của hàm. [Xem thêm]
Descent là một trong các thuật toán tối ưu hóa phổ biến nhất, đặc biệt là trong lĩnh vực Machine Learning
Machine Learning
Machine learning (học máy) là nghiên cứu khoa học về các thuật toán và mô hình thống kê mà các hệ thống máy tính sử dụng để thực hiện một nhiệm vụ cụ thể một cách hiệu quả mà không cần sử dụng các hướng dẫn rõ ràng, thay vào đó dựa vào các mẫu và suy luận.
. Thuật toán này dựa trên việc tìm kiếm cực trị (cực đại hoặc cực tiểu) của một hàm số bằng cách tính đạo hàm và di chuyển theo hướng giảm dần của gradient
Gradient
Gradient (độ dốc) là véc tơ biểu diễn tốc độ thay đổi của hàm. Các thành phần của Gradient là đạo hàm riêng theo các biến độc lập của hàm. [Xem thêm]
.
2. Hàm một biến
Xét hàm một biến f(x). Thuật toán Gradient
Gradient
Gradient (độ dốc) là véc tơ biểu diễn tốc độ thay đổi của hàm. Các thành phần của Gradient là đạo hàm riêng theo các biến độc lập của hàm. [Xem thêm]
Descent tìm cực tiểu của hàm số bằng cách khởi tạo giá trị x tại một vị trí ngẫu nhiên, sau đó di chuyển x ngược hướng với đạo hàm của f(x). Thao tác này sẽ được lặp lại cho đến khi đạt đến một ngưỡng nào đó.
Công thức cập nhật x trong Gradient
Gradient
Gradient (độ dốc) là véc tơ biểu diễn tốc độ thay đổi của hàm. Các thành phần của Gradient là đạo hàm riêng theo các biến độc lập của hàm. [Xem thêm]
Descent:
x _{t+1} = x_t - \alpha * f'(x_t)
Trong đó:
x_{t} là giá trị x tại bước thứ t,
\alpha là learning rate
Learning rate
Learning rate - Tốc độ học là một siêu tham số sử dụng trong việc huấn luyện các mạng nơ ron. Giá trị của nó là một số dương, thường nằm trong khoảng giữa 0 và 1. Tốc độ học kiểm soát tốc độ mô hình thay đổi các trọng số để phù hợp với bài toán. Tốc độ học lớn giúp mạng nơ ron được huấn luyện nhanh hơn nhưng cũng có thể làm giảm độ chính xác.
(tốc độ học),
f'(x_t) là đạo hàm của hàm f tại x_t.
3. Hàm nhiều biến
Đối với một hàm nhiều biến f(\vec{x}), thuật toán này sẽ tính Gradient
Gradient
Gradient (độ dốc) là véc tơ biểu diễn tốc độ thay đổi của hàm. Các thành phần của Gradient là đạo hàm riêng theo các biến độc lập của hàm. [Xem thêm]
(vector đạo hàm) của hàm f tại một điểm ngẫu nhiên \vec{x}, sau đó di chuyển \vec{x} ngược hướng với Gradient
Gradient
Gradient (độ dốc) là véc tơ biểu diễn tốc độ thay đổi của hàm. Các thành phần của Gradient là đạo hàm riêng theo các biến độc lập của hàm. [Xem thêm]
này.
\alpha là learning rate
Learning rate
Learning rate - Tốc độ học là một siêu tham số sử dụng trong việc huấn luyện các mạng nơ ron. Giá trị của nó là một số dương, thường nằm trong khoảng giữa 0 và 1. Tốc độ học kiểm soát tốc độ mô hình thay đổi các trọng số để phù hợp với bài toán. Tốc độ học lớn giúp mạng nơ ron được huấn luyện nhanh hơn nhưng cũng có thể làm giảm độ chính xác.
(tốc độ học),
\nabla{f(\vec{x}_t)} là Gradient
Gradient
Gradient (độ dốc) là véc tơ biểu diễn tốc độ thay đổi của hàm. Các thành phần của Gradient là đạo hàm riêng theo các biến độc lập của hàm. [Xem thêm]
của hàm f tại \vec{x}_t.
4. Các thuật toán Gradient Descent
Có nhiều biến thể của thuật toán này tuỳ thuộc vào việc lựa chọn dữ liệu huấn luyện và thứ tự cập nhật:
Batch
Batch
Batch là một nhóm (một mẻ, một lô) các mẫu huấn luyện. Việc huấn luyện dữ liệu theo từng lô giúp tăng tốc độ do tận dụng được lợi thế của phép tính ma trận trên GPU.
Gradient
Gradient
Gradient (độ dốc) là véc tơ biểu diễn tốc độ thay đổi của hàm. Các thành phần của Gradient là đạo hàm riêng theo các biến độc lập của hàm. [Xem thêm]
Descent: Sử dụng toàn bộ dữ liệu huấn luyện để cập nhật \vec{x} trong mỗi bước lặp. Thuật toán này có độ chính xác cao nhưng mất nhiều thời gian do tính toán trên toàn bộ dữ liệu.
Stochastic Gradient
Gradient
Gradient (độ dốc) là véc tơ biểu diễn tốc độ thay đổi của hàm. Các thành phần của Gradient là đạo hàm riêng theo các biến độc lập của hàm. [Xem thêm]
Descent (SGD): Sử dụng chỉ một điểm dữ liệu huấn luyện ngẫu nhiên để cập nhật \vec{x}. Tốc độ hội tụ nhanh hơn, nhưng độ chính xác thấp hơn so với Batch
Batch
Batch là một nhóm (một mẻ, một lô) các mẫu huấn luyện. Việc huấn luyện dữ liệu theo từng lô giúp tăng tốc độ do tận dụng được lợi thế của phép tính ma trận trên GPU.
Gradient
Gradient
Gradient (độ dốc) là véc tơ biểu diễn tốc độ thay đổi của hàm. Các thành phần của Gradient là đạo hàm riêng theo các biến độc lập của hàm. [Xem thêm]
Descent.
Mini-batch Gradient
Gradient
Gradient (độ dốc) là véc tơ biểu diễn tốc độ thay đổi của hàm. Các thành phần của Gradient là đạo hàm riêng theo các biến độc lập của hàm. [Xem thêm]
Descent: Sử dụng một số lượng nhỏ điểm dữ liệu huấn luyện (mini-batch) để cập nhật \vec{x}. Kết hợp ưu điểm của cả Batch
Batch
Batch là một nhóm (một mẻ, một lô) các mẫu huấn luyện. Việc huấn luyện dữ liệu theo từng lô giúp tăng tốc độ do tận dụng được lợi thế của phép tính ma trận trên GPU.
Gradient
Gradient
Gradient (độ dốc) là véc tơ biểu diễn tốc độ thay đổi của hàm. Các thành phần của Gradient là đạo hàm riêng theo các biến độc lập của hàm. [Xem thêm]
Descent và SGD.
5. Biến thể
Một số cải tiến của Gradient
Gradient
Gradient (độ dốc) là véc tơ biểu diễn tốc độ thay đổi của hàm. Các thành phần của Gradient là đạo hàm riêng theo các biến độc lập của hàm. [Xem thêm]
Descent để tăng tốc độ hội tụ và giảm thiểu dao động trong quá trình hội tụ:
Momentum: Giảm dao động qua lại của gradient
Gradient
Gradient (độ dốc) là véc tơ biểu diễn tốc độ thay đổi của hàm. Các thành phần của Gradient là đạo hàm riêng theo các biến độc lập của hàm. [Xem thêm]
và đi nhanh hơn dọc theo hướng tiến.
Nesterov Accelerated Gradient
Gradient
Gradient (độ dốc) là véc tơ biểu diễn tốc độ thay đổi của hàm. Các thành phần của Gradient là đạo hàm riêng theo các biến độc lập của hàm. [Xem thêm]
(NAG): Sử dụng momentum bằng cách tính gradient
Gradient
Gradient (độ dốc) là véc tơ biểu diễn tốc độ thay đổi của hàm. Các thành phần của Gradient là đạo hàm riêng theo các biến độc lập của hàm. [Xem thêm]
trước khi cập nhật vị trí của \vec{x}.
Adaptive Gradient
Gradient
Gradient (độ dốc) là véc tơ biểu diễn tốc độ thay đổi của hàm. Các thành phần của Gradient là đạo hàm riêng theo các biến độc lập của hàm. [Xem thêm]
(Adagrad): Đưa vào learning rate
Learning rate
Learning rate - Tốc độ học là một siêu tham số sử dụng trong việc huấn luyện các mạng nơ ron. Giá trị của nó là một số dương, thường nằm trong khoảng giữa 0 và 1. Tốc độ học kiểm soát tốc độ mô hình thay đổi các trọng số để phù hợp với bài toán. Tốc độ học lớn giúp mạng nơ ron được huấn luyện nhanh hơn nhưng cũng có thể làm giảm độ chính xác.
riêng cho mỗi parameter.
Adaptive Moment Estimation (Adam): Kết hợp momentum và adaptive learning rate
Learning rate
Learning rate - Tốc độ học là một siêu tham số sử dụng trong việc huấn luyện các mạng nơ ron. Giá trị của nó là một số dương, thường nằm trong khoảng giữa 0 và 1. Tốc độ học kiểm soát tốc độ mô hình thay đổi các trọng số để phù hợp với bài toán. Tốc độ học lớn giúp mạng nơ ron được huấn luyện nhanh hơn nhưng cũng có thể làm giảm độ chính xác.
.
6. Điều kiện dừng của Gradient Descent
Một số điều kiện dừng thường được cài đặt:
Số lượng vòng lặp cố định: Dừng sau một số lượng lần cập nhật \vec{x} cố định.
Đạo hàm tiệm cận 0: Dừng khi đạo hàm của hàm f tiệm cận 0 ở mỗi biến.
Thay đổi của hàm tiệm cận 0: Dừng khi thay đổi của hàm f qua mỗi bước lặp tiệm cận 0.
7. Newton Method
Một phương pháp tối ưu hóa khác là Newton Method, sử dụng đạo hàm cấp 2 (Hessian matrix) của hàm f. Thuật toán này tìm ra vị trí cực tiểu của hàm f nhanh hơn so với Gradient
Gradient
Gradient (độ dốc) là véc tơ biểu diễn tốc độ thay đổi của hàm. Các thành phần của Gradient là đạo hàm riêng theo các biến độc lập của hàm. [Xem thêm]
Descent, nhưng cần phải tính Hessian matrix, có độ phức tạp tính toán cao hơn.
là giá trị \vec{x} tại bước thứ {t+1, t}, \nabla^2f(\vec{x}_t) là Hessian matrix của hàm f tại \vec{x}_t, \nabla{f(\vec{x}_t)} là Gradient
Gradient
Gradient (độ dốc) là véc tơ biểu diễn tốc độ thay đổi của hàm. Các thành phần của Gradient là đạo hàm riêng theo các biến độc lập của hàm. [Xem thêm]
của hàm f tại \vec{x}_t.
Dưới đây là một ví dụ minh họa sử dụng Gradient
Gradient
Gradient (độ dốc) là véc tơ biểu diễn tốc độ thay đổi của hàm. Các thành phần của Gradient là đạo hàm riêng theo các biến độc lập của hàm. [Xem thêm]
Descent để tìm cực tiểu của hàm số:
f(x) = (x-4)^2 + 6
Đạo hàm của hàm số:
f'(x) = 2(x-4)
Ta có thể sử dụng Gradient
Gradient
Gradient (độ dốc) là véc tơ biểu diễn tốc độ thay đổi của hàm. Các thành phần của Gradient là đạo hàm riêng theo các biến độc lập của hàm. [Xem thêm]
Descent để tìm cực tiểu của hàm này như sau:
import numpy as np
# Định nghĩa hàm f(x) và đạo hàm f'(x)
def f(x):
return (x - 4) ** 2 + 6
def df(x):
return 2 * (x - 4)
# Khởi tạo giá trị x ban đầu
x_t = np.random.randn()
print("Giá trị x ban đầu: ", x_t)
# Thiết lập tốc độ học alpha và số bước lặp
alpha = 0.1
max_iterations = 100
# Gradient Descent
for t in range(max_iterations):
x_t1 = x_t - alpha * df(x_t) # Cập nhật giá trị x
# Kiểm tra đạo hàm tiệm cận 0 (Tức điểm cực tiểu)
if np.abs(df(x_t1)) < 1e-6:
break
x_t = x_t1
print("Giá trị x tối ưu: ", x_t)
print("Giá trị cực tiểu của hàm f(x): ", f(x_t))
Kết quả sẽ cho thấy giá trị x tối ưu và giá trị cực tiểu của hàm số sau khi áp dụng Gradient
Gradient
Gradient (độ dốc) là véc tơ biểu diễn tốc độ thay đổi của hàm. Các thành phần của Gradient là đạo hàm riêng theo các biến độc lập của hàm. [Xem thêm]
Descent.
Qua ví dụ trên, chúng ta đã thấy cách áp dụng Thuật toán Gradient
Gradient
Gradient (độ dốc) là véc tơ biểu diễn tốc độ thay đổi của hàm. Các thành phần của Gradient là đạo hàm riêng theo các biến độc lập của hàm. [Xem thêm]
Descent để tìm cực tiểu của một hàm số đơn giản. Tương tự, chúng ta có thể áp dụng nó trong các bài toán Machine Learning
Machine Learning
Machine learning (học máy) là nghiên cứu khoa học về các thuật toán và mô hình thống kê mà các hệ thống máy tính sử dụng để thực hiện một nhiệm vụ cụ thể một cách hiệu quả mà không cần sử dụng các hướng dẫn rõ ràng, thay vào đó dựa vào các mẫu và suy luận.
phức tạp hơn như Linear Regression, Logistic Regression và Neural Networks.
Sau khi nắm vững kiến thức về các thuật toán tối ưu hóa như Gradient
Gradient
Gradient (độ dốc) là véc tơ biểu diễn tốc độ thay đổi của hàm. Các thành phần của Gradient là đạo hàm riêng theo các biến độc lập của hàm. [Xem thêm]
Descent và Newton Method, chúng ta có thể áp dụng chúng vào các bài toán thực tế trong Machine Learning
Machine Learning
Machine learning (học máy) là nghiên cứu khoa học về các thuật toán và mô hình thống kê mà các hệ thống máy tính sử dụng để thực hiện một nhiệm vụ cụ thể một cách hiệu quả mà không cần sử dụng các hướng dẫn rõ ràng, thay vào đó dựa vào các mẫu và suy luận.
để giải quyết các vấn đề phức tạp với hiệu suất cao. Điều này sẽ giúp chúng ta tiến gần hơn đến việc giái quyết các bài toán phức tạp của thế giới thực và đưa ra các dự đoán chính xác dựa trên dữ liệu thật. Hãy tiếp tục theo dõi chuỗi bài học Machine learning Cơ bản của trituenhantao.io để cập nhật thêm các kiến thức cơ bản về lĩnh vực.