Học Machine Learning

Học tập là một vòng lặp

  • Một mô hình Machine Learning được huấn luyện bằng cách lặp lại dữ liệu nhiều lần.
  • Ở mỗi lần lặp, giá trị trọng số được điều chỉnh.
  • Quá trình huấn luyện hoàn tất khi số lần lặp không làm giảm chi phí.

Gradient Descent

Gradient Descent là một thuật toán phổ biến để giải quyết các bài toán Trí tuệ nhân tạo (AI).

Một mô hình hồi quy tuyến tính đơn giản có thể được sử dụng để minh họa thuật toán Gradient Descent.

Mục tiêu của hồi quy tuyến tính là tìm một đồ thị tuyến tính phù hợp với một tập hợp các điểm (x,y). Điều này có thể được giải quyết bằng một công thức toán học. Nhưng một thuật toán Machine Learning cũng có thể giải quyết điều này.

Đây là những gì ví dụ trên thực hiện.

Nó bắt đầu với một biểu đồ phân tán và một mô hình tuyến tính (y = wx + b).

Sau đó, nó huấn luyện mô hình để tìm một đường thẳng phù hợp với biểu đồ. Điều này được thực hiện bằng cách thay đổi trọng số (độ dốc) và độ lệch (điểm cắt trục tung) của đường thẳng.

Dưới đây là code cho một Trainer Object (đối tượng huấn luyện) có thể giải quyết vấn đề này (và nhiều vấn đề khác).

Đối tượng huấn luyện

Tạo một đối tượng huấn luyện có thể nhận bất kỳ số lượng giá trị (x,y) nào trong hai mảng (xArr, yArr).

Đặt trọng số bằng 0 và độ lệch bằng 1.

Phải đặt hằng số học tập (learnc) và định nghĩa một biến chi phí:

Ví dụ:

function Trainer(xArray, yArray) {
  this.xArr = xArray;
  this.yArr = yArray;
  this.points = this.xArr.length;
  this.learnc = 0.00001;
  this.weight = 0;
  this.bias = 1;
  this.cost;

Hàm chi phí

Một cách tiêu chuẩn để giải quyết bài toán hồi quy là sử dụng "Hàm chi phí" để đo lường mức độ tốt của lời giải.

Hàm này sử dụng trọng số và độ lệch từ mô hình (y = wx + b) và trả về một sai số, dựa trên mức độ phù hợp của đường thẳng với đồ thị.

Cách tính sai số này là lặp qua tất cả các điểm (x,y) trên đồ thị và cộng tổng bình phương khoảng cách giữa giá trị y của mỗi điểm và đường thẳng.

Cách thông thường nhất là bình phương các khoảng cách (để đảm bảo giá trị dương) và làm cho hàm sai số có thể khả vi.

this.costError = function() {
  total = 0;
  for (let i = 0; i < this.points; i++) {
    total += (this.yArr[i] - (this.weight * this.xArr[i] + this.bias)) **2;
  }
  return total / this.points;
}

Một tên gọi khác của Hàm chi phí là Hàm sai số.

Công thức được sử dụng trong hàm này thực chất là:

  • E là sai số (chi phí)
  • N là tổng số observation (các điểm)
  • y là giá trị (nhãn) của mỗi observation
  • x là giá trị (đặc trưng) của mỗi observation
  • m là độ dốc (trọng số)
  • b là hệ số chặn (độ lệch)
  • mx + b là giá trị dự đoán
  • ∑1/(N * N) là bình phương giá trị trung bình

Hàm huấn luyện

Bây giờ, chúng ta sẽ chạy thuật toán Gradient Descent.

Thuật toán Gradient Descent sẽ di chuyển hàm chi phí về phía đường thẳng tốt nhất.

Mỗi lần lặp sẽ cập nhật cả m và b về phía đường thẳng có chi phí (sai số) thấp hơn.

Để làm điều đó, chúng ta thêm một hàm huấn luyện lặp lại toàn bộ dữ liệu nhiều lần:

this.train = function(iter) {
  for (let i = 0; i < iter; i++) {
    this.updateWeights();
  }
  this.cost = this.costError();
}

Hàm cập nhật trọng số

Hàm huấn luyện ở trên sẽ cập nhật trọng số và độ lệch trong mỗi lần lặp.

Hướng di chuyển được tính toán bằng cách sử dụng hai đạo hàm riêng:

this.updateWeights = function() {
  let wx;
  let w_deriv = 0;
  let b_deriv = 0;
  for (let i = 0; i < this.points; i++) {
    wx = this.yArr[i] - (this.weight * this.xArr[i] + this.bias);
    w_deriv += -2 * wx * this.xArr[i];
    b_deriv += -2 * wx;
  }
  this.weight -= (w_deriv / this.points) * this.learnc;
  this.bias -= (b_deriv / this.points) * this.learnc;
}

Tạo thư viện của riêng bạn

Code thư viện:

function Trainer(xArray, yArray) {
  this.xArr = xArray;
  this.yArr = yArray;
  this.points = this.xArr.length;
  this.learnc = 0.00001;
  this.weight = 0;
  this.bias = 1;
  this.cost;

// Cost Function
this.costError = function() {
  total = 0;
  for (let i = 0; i < this.points; i++) {
    total += (this.yArr[i] - (this.weight * this.xArr[i] + this.bias)) **2;
  }
  return total / this.points;
}

// Train Function
this.train = function(iter) {
  for (let i = 0; i < iter; i++) {
    this.updateWeights();
  }
  this.cost = this.costError();
}

// Update Weights Function
this.updateWeights = function() {
  let wx;
  let w_deriv = 0;
  let b_deriv = 0;
  for (let i = 0; i < this.points; i++) {
    wx = this.yArr[i] - (this.weight * this.xArr[i] + this.bias);
    w_deriv += -2 * wx * this.xArr[i];
    b_deriv += -2 * wx;
  }
  this.weight -= (w_deriv / this.points) * this.learnc;
  this.bias -= (b_deriv / this.points) * this.learnc;
}

} // End Trainer Object

Giờ đây, bạn có thể tích hợp thư viện vào HTML:

<script src="myailib.js"></script>
Thứ Năm, 05/03/2026 16:31
51 👨 10
Xác thực tài khoản!

Theo Nghị định 147/2024/ND-CP, bạn cần xác thực tài khoản trước khi sử dụng tính năng này. Chúng tôi sẽ gửi mã xác thực qua SMS hoặc Zalo tới số điện thoại mà bạn nhập dưới đây:

Số điện thoại chưa đúng định dạng!
Số điện thoại này đã được xác thực!
Bạn có thể dùng Sđt này đăng nhập tại đây!
Lỗi gửi SMS, liên hệ Admin
0 Bình luận
Sắp xếp theo