Melatih Perceptron

  • Buat Objek Perceptron
  • Buat Fungsi Pelatihan
  • Latih perceptron terhadap jawaban yang diinginkan

Tugas Pelatihan

Bayangkan sebuah garis lurus dalam ruang dengan titik-titik xy yang tersebar.

Latih seorang perceptron untuk mengklasifikasikan titik-titik di atas dan di bawah garis.


Buat Objek Perceptron

Buat objek Perceptron. Beri nama apa saja (seperti Perceptron).

Biarkan perceptron menerima dua parameter:

  1. Jumlah input (tidak)
  2. Tingkat pembelajaran (learningRate).

Atur tingkat pembelajaran default ke 0,00001.

Kemudian buat bobot acak antara -1 dan 1 untuk setiap input.

Contoh

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

Bobot Acak

Perceptron akan mulai dengan bobot acak untuk setiap input.

Tingkat Pembelajaran

Untuk setiap kesalahan, saat melatih Perceptron, bobot akan disesuaikan dengan pecahan kecil.

Pecahan kecil ini adalah " kecepatan belajar Perceptron ".

Dalam objek Perceptron kami menyebutnya learnc .

Bias

Kadang-kadang, jika kedua input adalah nol, perceptron mungkin menghasilkan output yang benar.

Untuk menghindari hal ini, kami memberikan perceptron input tambahan dengan nilai 1.

Ini disebut bias .


Tambahkan Fungsi Aktifkan

Ingat algoritma perceptron:

  • Kalikan setiap input dengan bobot perceptron
  • Jumlahkan hasilnya
  • Hitung hasilnya

Contoh

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

Fungsi aktivasi akan menampilkan:

  • 1 jika jumlahnya lebih besar dari 0
  • 0 jika jumlahnya kurang dari 0

Buat Fungsi Pelatihan

Fungsi pelatihan menebak hasil berdasarkan fungsi aktivasi.

Setiap kali tebakan salah, perceptron harus menyesuaikan bobot.

Setelah banyak tebakan dan penyesuaian, bobotnya akan benar.

Contoh

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


propagasi balik

Setelah setiap tebakan, perceptron menghitung seberapa salah tebakannya.

Jika tebakan salah, perceptron menyesuaikan bias dan bobot sehingga tebakan akan sedikit lebih benar di waktu berikutnya.

Jenis pembelajaran ini disebut backpropagation .

Setelah mencoba (beberapa ribu kali) perceptron Anda akan menjadi cukup baik dalam menebak.


Buat Perpustakaan Anda Sendiri

Kode Perpustakaan

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

Sekarang Anda dapat menyertakan perpustakaan dalam HTML:

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

Gunakan Perpustakaan Anda

Contoh

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