選單
×
   ❮     
HTML CSS JAVASCRIPT SQL PYTHON JAVA PHP 使用方法 W3.CSS C C++ C# BOOTSTRAP REACT MYSQL JQUERY EXCEL XML DJANGO NUMPY PANDAS NODEJS R TYPESCRIPT ANGULAR GIT POSTGRESQL MONGODB ASP AI GO KOTLIN SASS VUE DSA GEN AI SCIPY AWS CYBERSECURITY DATA SCIENCE
     ❯   

機器學習

迴圈學習

ML 模型透過多次迴圈資料來訓練

每次迭代都會調整權重值

當迭代無法降低成本時,訓練完成。

訓練我找到最佳擬合線

自己動手試一試 »


梯度下降

梯度下降是解決 AI 問題的流行演算法。

簡單的線性迴歸模型可用於演示梯度下降。

線性迴歸的目標是將線性圖擬合到一組 (x,y) 點。這可以用數學公式解決。但機器學習演算法也可以解決這個問題。

以上示例就是這樣做的。

它從散點圖和線性模型(y = wx + b)開始。

然後它訓練模型來找到一條適合該圖的線。這是透過更改線的權重(斜率)和偏差(截距)來完成的。

下面是一個可以解決此問題(以及許多其他問題)的Trainer 物件的程式碼。


Trainer 物件

建立一個 Trainer 物件,它可以接受任意數量的 (x,y) 值到兩個陣列(xArr, yArr)中。

將權重設定為零,偏差設定為 1。

必須設定學習常數(learnc),並且必須定義成本變數。

示例

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;


成本函式

解決迴歸問題的標準方法是使用“成本函式”來衡量解決方案的好壞。

該函式使用模型(y = wx + b)中的權重和偏差,並根據線對圖的擬合程度返回一個誤差。

計算此誤差的方法是遍歷圖中的所有 (x,y) 點,並將每個點與線之間的平方距離相加。

最常規的方法是對距離進行平方(以確保值為正)並使誤差函式可微分。

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

成本函式的另一個名稱是誤差函式

函式中使用的公式實際上是這個

Formula
  • E 是誤差(成本)
  • N 是觀察總數(點數)
  • y 是每個觀測值的值(標籤)
  • x 是每個觀測值的(特徵)值
  • m 是斜率(權重)
  • b 是截距(偏差)
  • mx + b 是預測值
  • 1/N * N∑1 是平均值的平方

訓練函式

我們將執行梯度下降。

梯度下降演算法應該沿著成本函式向最佳線行走。

每次迭代都應該將 m 和 b 更新為成本(誤差)更低的那條線。

為此,我們添加了一個 train 函式,該函式會多次遍歷所有資料

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

更新權重函式

上面的 train 函式應該在每次迭代中更新權重和偏差。

移動的方向是使用兩個偏導數計算的

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

建立你自己的庫

庫程式碼

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;

// 成本函式
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;
}

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

// 更新權重函式
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;
}

} // Trainer 物件結束

現在你可以在 HTML 中包含該庫

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

自己動手試一試 »


×

聯絡銷售

如果您想將 W3Schools 服務用於教育機構、團隊或企業,請傳送電子郵件給我們
sales@w3schools.com

報告錯誤

如果您想報告錯誤,或想提出建議,請傳送電子郵件給我們
help@w3schools.com

W3Schools 經過最佳化,旨在方便學習和培訓。示例可能經過簡化,以提高閱讀和學習體驗。教程、參考資料和示例會不斷審查,以避免錯誤,但我們無法保證所有內容的完全正確性。使用 W3Schools 即表示您已閱讀並接受我們的使用條款Cookie 和隱私政策

版權所有 1999-2024 Refsnes Data。保留所有權利。W3Schools 由 W3.CSS 提供支援