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