Pembelajaran mesin

Belajar adalah Looping

Model ML Dilatih dengan Mengulangi data beberapa kali.

Untuk setiap iterasi, Nilai Bobot disesuaikan.

Pelatihan selesai ketika iterasi gagal untuk Mengurangi Biaya .

Latih saya untuk menemukan garis yang paling cocok:


Keturunan Gradien

Gradient Descent adalah algoritma populer untuk memecahkan masalah AI.

Model Regresi Linier sederhana dapat digunakan untuk mendemonstrasikan penurunan gradien.

Tujuan dari regresi linier adalah untuk menyesuaikan grafik linier dengan sekumpulan titik (x,y). Ini bisa diselesaikan dengan rumus matematika. Tetapi Algoritma Pembelajaran Mesin juga dapat menyelesaikan ini.

Inilah yang dilakukan contoh di atas.

Ini dimulai dengan plot pencar dan model linier (y = wx + b).

Kemudian ia melatih model untuk menemukan garis yang sesuai dengan plot. Ini dilakukan dengan mengubah bobot (kemiringan) dan bias (cegatan) garis.

Di bawah ini adalah kode untuk Objek Pelatih yang dapat menyelesaikan masalah ini (dan banyak masalah lainnya).


Objek Pelatih

Buat objek Pelatih yang dapat mengambil sejumlah nilai (x,y) dalam dua larik (xArr,yArr).

Atur bobot dan bias ke nol.

Konstanta pembelajaran (belajar) harus ditetapkan, dan variabel biaya harus ditentukan:

Contoh

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;

Fungsi Biaya

Cara standar untuk memecahkan masalah regresi, adalah dengan "Fungsi Biaya" yang mengukur seberapa baik solusinya.

Fungsi tersebut menggunakan bobot dan bias dari model (y = wx + b) dan mengembalikan kesalahan, berdasarkan seberapa cocok garis tersebut dengan plot.

Cara menghitung kesalahan ini, adalah dengan mengulang semua titik (x,y) dalam plot, dan menjumlahkan jarak kuadrat antara nilai y setiap titik dan garis.

Cara paling konvensional adalah dengan mengkuadratkan jarak (untuk memastikan nilai positif) dan membuat fungsi kesalahan terdiferensialkan.

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

Nama lain dari Cost Function adalah Error Function .

Rumus yang digunakan dalam fungsi sebenarnya adalah ini:

Rumus
  • E adalah kesalahan (biaya)
  • N adalah jumlah total pengamatan (poin)
  • y adalah nilai (label) dari setiap pengamatan
  • x adalah nilai (fitur) dari setiap pengamatan
  • m adalah kemiringan (berat)
  • b adalah intersep (bias)
  • mx + b adalah prediksi
  • 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>