Strojové učení

Učení je opakování

Model ML je trénován opakovaným opakováním dat.

Pro každou iteraci se upraví hodnoty váhy .

Školení je dokončeno, když se při iteracích nepodaří snížit náklady .

Naučte mě najít řadu, která nejlépe vyhovuje:


Gradient sestup

Gradient Descent je oblíbený algoritmus pro řešení problémů s umělou inteligencí.

Jednoduchý model lineární regrese lze použít k demonstraci sestupu gradientu.

Cílem lineární regrese je přizpůsobit lineární graf množině (x,y) bodů. To lze vyřešit matematickým vzorcem. Ale i to může vyřešit algoritmus strojového učení .

To je to, co dělá příklad výše.

Začíná bodovým grafem a lineárním modelem (y = wx + b).

Poté trénuje model, aby našel linii, která se hodí k pozemku. To se provádí změnou hmotnosti (sklonu) a vychýlení (zachycení) čáry.

Níže je uveden kód objektu Trainer , který může vyřešit tento problém (a mnoho dalších problémů).


Objekt trenéra

Vytvořte objekt Trainer, který může nabývat libovolného počtu (x,y) hodnot ve dvou polích (xArr,yArr).

Nastavte váhu i odchylku na nulu.

Musí být nastavena konstanta učení (learnc) a musí být definována nákladová proměnná:

Příklad

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;

Nákladová funkce

Standardním způsobem řešení regresního problému je „nákladová funkce“, která měří, jak dobré je řešení.

Funkce používá váhu a odchylku z modelu (y = wx + b) a vrací chybu na základě toho, jak dobře čára odpovídá grafu.

Způsob, jak vypočítat tuto chybu, je projít všechny (x,y) body v grafu a sečíst čtvercové vzdálenosti mezi hodnotou y každého bodu a čáry.

Nejběžnějším způsobem je odmocnit vzdálenosti (pro zajištění kladných hodnot) a učinit chybovou funkci diferencovatelnou.

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

Jiný název pro nákladovou funkci je Error Function .

Vzorec použitý ve funkci je ve skutečnosti tento:

Vzorec
  • E je chyba (cena)
  • N je celkový počet pozorování (bodů)
  • y je hodnota (označení) každého pozorování
  • x je hodnota (vlastnost) každého pozorování
  • m je sklon (hmotnost)
  • b je zachycení (zaujatost)
  • mx + b je předpověď
  • 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>