Искусственный интеллект

Домой Что такое ИИ? Человеческий интеллект История языков История чисел История вычислений Роботы Замена работы Примеры ИИ Теория разума Программирование JavaScript ИИ в браузере

Математика

Математика Линейные функции Линейная алгебра Векторы Матрицы Тензоры

Статистика

Вероятность Статистика Распределение

Графика

ИИ-плоттер Линейные графики ИИ Диаграммы рассеяния ИИ

Наука ИИ

наук Сбор данных Кластеризация Регрессии Машинное обучение Нейронные сети

Машинное обучение

Персептроны Признание Обучение Тестирование Обучение Терминология Мозг.js

ТензорФлоу

Учебник по TFJS Операции TFJS Модели TFJS Средство просмотра TFJS

Пример 1

Ex1 Введение Ex1 Данные Модель Ex1 Ex1 Обучение

Пример 2

Ex2 Введение Ex2 Данные Модель Ex2 Ex2 Обучение

JS-графика

вступление Графическое полотно График Plotly.js График Chart.js График Google График D3.js

Машинное обучение

Обучение зацикливается

Модель ML обучается путем многократного повторения данных.

Для каждой итерации корректируются значения веса .

Обучение завершается, когда итерации не приводят к снижению стоимости .

Научите меня находить линию наилучшего соответствия:


Градиентный спуск

Градиентный спуск — популярный алгоритм для решения задач ИИ.

Для демонстрации градиентного спуска можно использовать простую модель линейной регрессии .

Цель линейной регрессии — подогнать линейный график к набору (x, y) точек. Это можно решить с помощью математической формулы. Но алгоритм машинного обучения также может решить эту проблему.

Это то, что делает приведенный выше пример.

Он начинается с точечной диаграммы и линейной модели (y = wx + b).

Затем он обучает модель находить линию, соответствующую графику. Это делается путем изменения веса (наклона) и смещения (пересечения) линии.

Ниже приведен код для объекта Trainer , который может решить эту проблему (и многие другие проблемы).


Объект тренера

Создайте объект Trainer, который может принимать любое количество значений (x, y) в двух массивах (xArr, yArr).

Установите вес и смещение на ноль.

Необходимо установить константу обучения (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) на графике и суммировать квадратные расстояния между значением 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;
}

Другое название функции стоимости — функция ошибки .

Формула, используемая в функции, на самом деле такова:

Формула
  • E - ошибка (стоимость)
  • N - общее количество наблюдений (баллов)
  • y - значение (метка) каждого наблюдения
  • x - значение (признак) каждого наблюдения
  • м уклон (вес)
  • b - перехват (смещение)
  • mx + b — прогноз
  • 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>