O‘rganish

ULASHISH

O‘rganish — bu sikl

ML modeli ma’lumotlar ustida ko‘p marta sikl bajarish orqali o‘qitiladi.

Har bir iteratsiyada vazn qiymatlari tuzatiladi.

Iteratsiyalar endi xarajatni kamaytira olmay qolganda o‘qitish yakunlanadi.

Eng mos chiziqni topish uchun meni o‘qiting:

O‘zingiz sinab ko‘ring »


Gradiyent tushish (Gradient Descent)

Gradiyent tushish — sun’iy intellekt masalalarini yechishda keng qo‘llaniladigan algoritm.

Gradiyent tushishni namoyish qilish uchun oddiy chiziqli regressiya modelidan foydalanish mumkin.

Chiziqli regressiyaning maqsadi — (x,y) nuqtalar to‘plamiga chiziqli grafikni moslashtirish. Buni matematik formula bilan hal qilish mumkin. Ammo buni mashinali o‘rganish algoritmi ham hal qila oladi.

Yuqoridagi misol aynan shuni bajaradi.

U nuqtali diagramma va chiziqli modeldan (y = wx + b) boshlanadi.

So‘ngra diagrammaga mos keladigan chiziqni topish uchun modelni o‘qitadi. Bu chiziqning vazni (qiyaligi) va siljishini (kesishmasini) o‘zgartirish orqali amalga oshiriladi.

Quyida bu masalani (va boshqa ko‘plab masalalarni) hal qila oladigan Trainer obyekti kodi keltirilgan.


Trainer obyekti

Ikkita massivda (xArr,yArr) istalgan miqdordagi (x,y) qiymatlarini qabul qila oladigan Trainer obyektini yarating.

Vaznni nolga, siljishni esa 1 ga teng qilib belgilang.

O‘rganish konstantasi (learnc) belgilanishi va xarajat (cost) o‘zgaruvchisi e’lon qilinishi kerak:

Misol

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;


Xarajat funksiyasi (Cost Function)

Regressiya masalasini yechishning standart usuli — yechim qanchalik yaxshi ekanini o‘lchaydigan "xarajat funksiyasi"dan (Cost Function) foydalanish.

Funksiya modeldagi (y = wx + b) vazn va siljishdan foydalanadi hamda chiziq diagrammaga qanchalik yaxshi mos kelishiga qarab xatolikni qaytaradi.

Bu xatolikni hisoblash uchun diagrammadagi barcha (x,y) nuqtalar bo‘ylab sikl bajariladi va har bir nuqtaning y qiymati bilan chiziq orasidagi masofalar kvadratlari qo‘shib chiqiladi.

Eng keng tarqalgan usul — masofalarni kvadratga oshirish (qiymatlar musbat bo‘lishi uchun) va shu bilan xatolik funksiyasini differensiallanuvchi qilish.

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

Xarajat funksiyasining boshqa nomi — xatolik funksiyasi (Error Function).

Funksiyada ishlatilgan formula aslida quyidagicha:

Formula
  • E — xatolik (xarajat)
  • N — kuzatuvlarning (nuqtalarning) umumiy soni
  • y — har bir kuzatuvning qiymati (yorlig‘i)
  • x — har bir kuzatuvning qiymati (belgisi)
  • m — qiyalik (vazn)
  • b — kesishma (siljish)
  • mx + b — bashorat
  • 1/N * N∑1 — o‘rtacha kvadratik qiymat

O‘qitish funksiyasi

Endi gradiyent tushishni ishga tushiramiz.

Gradiyent tushish algoritmi xarajat funksiyasini eng yaxshi chiziq tomon yo‘naltirishi kerak.

Har bir iteratsiya m va b ni xarajati (xatoligi) kamroq bo‘lgan chiziq tomon yangilashi kerak.

Buning uchun barcha ma’lumotlar bo‘ylab ko‘p marta sikl bajaradigan o‘qitish funksiyasini qo‘shamiz:

this.train = function(iter) {   for (let i = 0; i < iter; i++) {     this.updateWeights();   }   this.cost = this.costError(); }

Vaznlarni yangilash funksiyasi

Yuqoridagi o‘qitish funksiyasi har bir iteratsiyada vaznlar va siljishlarni yangilashi kerak.

Harakat yo‘nalishi ikkita xususiy hosila yordamida hisoblanadi:

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

O‘z kutubxonangizni yarating

Kutubxona kodi

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

Endi kutubxonani HTML’ga ulashingiz mumkin:

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

O‘zingiz sinab ko‘ring »


W3Schools Pathfinder

Yutuqlaringizni kuzating – bu bepul!