Học máy

Học tập là Looping

Một mô hình ML được đào tạo bằng cách lặp lại dữ liệu nhiều lần.

Đối với mỗi lần lặp, Giá trị Trọng lượng được điều chỉnh.

Việc đào tạo hoàn tất khi các lần lặp lại không thể Giảm Chi phí .

Huấn luyện tôi để tìm ra dòng phù hợp nhất:


Xuống dốc

Gradient Descent là một thuật toán phổ biến để giải quyết các vấn đề về AI.

Mô hình hồi quy tuyến tính đơn giản có thể được sử dụng để chứng minh sự giảm dần độ dốc.

Mục tiêu của hồi quy tuyến tính là làm cho đồ thị tuyến tính phù hợp với một tập hợp (x, y) điểm. Đ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 học máy cũng có thể giải quyết điều này.

Đây là những gì ví dụ trên làm.

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ó đào tạo mô hình để tìm một đường phù hợp với cốt truyện. Điều này được thực hiện bằng cách thay đổi trọng số (độ dốc) và độ chệch (điểm chặn) của đường.

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


Một đối tượng huấn luyện viên

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

Đặt cả trọng số và độ lệch bằng không.

Một hằng số học tập (learning) phải được đặt và một biến chi phí phải được xác định:

Thí 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;

Chức năng ước lượng

Một cách tiêu chuẩn để giải quyết vấn đề hồi quy là với "Hàm chi phí" để đo lường mức độ tốt của giải pháp.

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

Cách để tính lỗi này là lặp qua tất cả (x, y) điểm trong biểu đồ và tính tổng các khoảng cách bình phương 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 các giá trị dương) và làm cho hàm lỗi có thể phân biệt được.

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 khác của Hàm Chi phí là Hàm Lỗi .

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

Công thức
  • E là lỗi (chi phí)
  • N là tổng số quan sát (điểm)
  • y là giá trị (nhãn) của mỗi lần quan sát
  • x là giá trị (đặc điểm) của mỗi lần quan sát
  • m là độ dốc (trọng lượng)
  • b là chặn (thiên vị)
  • mx + b là dự đoán
  • 1/N * N∑1 is the squared mean value

The Train Function

We will now run a gradient descent.

The gradient descent algorithm should walk the cost function towards the best line.

Each iteration should update both m and b towards a line with a lower cost (error).

To do that, we add a train function that loops over all the data many times:

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

An Update Weights Function

The train function above should update the weights and biases in each iteration.

The direction to move is calculated using two partial derivatives:

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;
}

Create Your Own Library

Library Code

function Trainer(xArray, yArray) {
  this.xArr = xArray;
  this.yArr = yArray;
  this.points = this.xArr.length;
  this.learnc = 0.000001;
  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

Now you can include the library in HTML:

<script src="myailib.js"></script>