Đào tạo một Perceptron trong Machine Learning

  • Tạo đối tượng Perceptron
  • Tạo hàm đào tạo
  • Đào tạo perceptron dựa trên các câu trả lời đúng

Nhiệm vụ đào tạo

Hãy tưởng tượng một đường thẳng trong không gian với các điểm x và y rải rác.

Huấn luyện một perceptron để phân loại các điểm nằm trên và dưới đường thẳng đó.

Tạo đối tượng Perceptron

Tạo một đối tượng Perceptron. Đặt tên bất kỳ cho nó (ví dụ: Perceptron).

Cho phép perceptron chấp nhận hai tham số:

  1. Số lượng đầu vào (no)
  2. Tốc độ học (learningRate).

Đặt tốc độ học mặc định là 0.00001.

Sau đó, tạo các trọng số ngẫu nhiên từ -1 đến 1 cho mỗi đầu vào.

Ví dụ:

// Perceptron Object
function Perceptron(no, learningRate = 0.00001) {

// Set Initial Values
this.learnc = learningRate;
this.bias = 1;

// Compute Random Weights
this.weights = [];
for (let i = 0; i <= no; i++) {
  this.weights[i] = Math.random() * 2 - 1;
}

// End Perceptron Object
}

Các trọng số ngẫu nhiên

Perceptron sẽ bắt đầu với một trọng số ngẫu nhiên cho mỗi đầu vào.

Tốc độ học

Trong quá trình đào tạo Perceptron, mỗi lỗi sẽ khiến trọng số được điều chỉnh bằng một phần nhỏ.

Phần nhỏ này được gọi là "tốc độ học của Perceptron".

Trong đối tượng Perceptron, ta gọi nó là learnc.

Bias

Đôi khi, nếu cả hai đầu vào đều bằng 0, Perceptron có thể tạo ra đầu ra không chính xác.

Để tránh điều này, ta cung cấp cho Perceptron một đầu vào bổ sung với giá trị là 1.

Đây được gọi là bias.

Thêm hàm kích hoạt

Nhớ thuật toán perceptron:

  • Nhân mỗi đầu vào với trọng số của perceptron
  • Cộng các kết quả
  • Tính toán kết quả

Ví dụ:

this.activate = function(inputs) {
  let sum = 0;
  for (let i = 0; i < inputs.length; i++) {
    sum += inputs[i] * this.weights[i];
  }
  if (sum > 0) {return 1} else {return 0}
}

Hàm kích hoạt sẽ xuất ra:

  • 1 nếu tổng lớn hơn 0
  • 0 nếu tổng nhỏ hơn 0

Tạo một hàm đào tạo

Hàm đào tạo dự đoán kết quả dựa trên hàm kích hoạt.

Mỗi khi dự đoán sai, perceptron sẽ điều chỉnh các trọng số.

Sau nhiều lần dự đoán và điều chỉnh, các trọng số sẽ chính xác.

Ví dụ:

this.train = function(inputs, desired) {
  inputs.push(this.bias);
  let guess = this.activate(inputs);
  let error = desired - guess;
  if (error != 0) {
    for (let i = 0; i < inputs.length; i++) {
      this.weights[i] += this.learnc * error * inputs[i];
    }
  }
}

Lan truyền ngược

Sau mỗi lần đoán, perceptron sẽ tính toán độ sai lệch của lần đoán đó.

Nếu đoán sai, perceptron sẽ điều chỉnh độ lệch và trọng số để lần đoán tiếp theo sẽ chính xác hơn một chút.

Loại học này được gọi là backpropagation (lan truyền ngược).

Sau khi thử (vài nghìn lần), perceptron của bạn sẽ trở nên khá giỏi trong việc đoán.

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

Code thư viện:

// Perceptron Object
function Perceptron(no, learningRate = 0.00001) {

// Set Initial Values
this.learnc = learningRate;
this.bias = 1;

// Compute Random Weights
this.weights = [];
for (let i = 0; i <= no; i++) {
  this.weights[i] = Math.random() * 2 - 1;
}

// Activate Function
this.activate = function(inputs) {
  let sum = 0;
  for (let i = 0; i < inputs.length; i++) {
    sum += inputs[i] * this.weights[i];
  }
  if (sum > 0) {return 1} else {return 0}
}

// Train Function
this.train = function(inputs, desired) {
  inputs.push(this.bias);
  let guess = this.activate(inputs);
  let error = desired - guess;
  if (error != 0) {
    for (let i = 0; i < inputs.length; i++) {
      this.weights[i] += this.learnc * error * inputs[i];
    }
  }
}

// End Perceptron Object
}

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

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

Sử dụng thư viện

Ví dụ:

// Initiate Values
const numPoints = 500;
const learningRate = 0.00001;

// Create a Plotter
const plotter = new XYPlotter("myCanvas");
plotter.transformXY();
const xMax = plotter.xMax;
const yMax = plotter.yMax;
const xMin = plotter.xMin;
const yMin = plotter.yMin;

// Create Random XY Points
const xPoints = [];
const yPoints = [];
for (let i = 0; i < numPoints; i++) {
  xPoints[i] = Math.random() * xMax;
  yPoints[i] = Math.random() * yMax;
}

// Line Function
function f(x) {
  return x * 1.2 + 50;
}

//Plot the Line
plotter.plotLine(xMin, f(xMin), xMax, f(xMax), "black");

// Compute Desired Answers
const desired = [];
for (let i = 0; i < numPoints; i++) {
  desired[i] = 0;
  if (yPoints[i] > f(xPoints[i])) {desired[i] = 1}
}

// Create a Perceptron
const ptron = new Perceptron(2, learningRate);

// Train the Perceptron
for (let j = 0; j <= 10000; j++) {
  for (let i = 0; i < numPoints; i++) {
    ptron.train([xPoints[i], yPoints[i]], desired[i]);
  }
}

// Display the Result
for (let i = 0; i < numPoints; i++) {
  const x = xPoints[i];
  const y = yPoints[i];
  let guess = ptron.activate([x, y, ptron.bias]);
  let color = "black";
  if (guess == 0) color = "blue";
  plotter.plotPoint(x, y, color);
}
Thứ Ba, 03/03/2026 14:57
31 👨 37
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