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

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

Математика

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

Статистика

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

Графика

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

Наука ИИ

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

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

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

ТензорФлоу

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

Пример 1

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

Пример 2

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

JS-графика

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

Обучение персептрона

  • Создайте объект персептрона
  • Создайте функцию обучения
  • Обучите персептрон желаемым ответам

Учебное задание

Представьте прямую линию в пространстве с разбросанными точками xy.

Обучите персептрон классифицировать точки над и под линией.


Создайте объект персептрона

Создайте объект Perceptron. Назовите его как угодно (например, Perceptron).

Пусть персептрон принимает два параметра:

  1. Количество входов (нет)
  2. Скорость обучения (learningRate).

Установите скорость обучения по умолчанию на 0,00001.

Затем создайте случайные веса от -1 до 1 для каждого входа.

Пример

// Perceptron Object
function Perceptron(no, learningRate = 0.00001) {

// Set Initial Values
this.learnc = learningRate;
this.bias = 1;

// Compute Random Weights
this.weights = [];
for (let i = 0; i <= no; i++) {
  this.weights[i] = Math.random() * 2 - 1;
}

// End Perceptron Object
}

Случайные веса

Персептрон запустится со случайным весом для каждого входа.

Скорость обучения

Для каждой ошибки при обучении Персептрона веса будут корректироваться с небольшой долей.

Эта небольшая часть является « скоростью обучения персептрона ».

В объекте Perceptron мы называем это Learnc .

Предвзятость

Иногда, если оба входа равны нулю, персептрон может выдать неверный результат.

Чтобы избежать этого, мы даем персептрону дополнительный вход со значением 1.

Это называется предвзятостью .


Добавить функцию активации

Вспомните алгоритм персептрона:

  • Умножьте каждый вход на вес персептрона.
  • Суммируйте результаты
  • Вычислить результат

Пример

this.activate = function(inputs) {
  let sum = 0;
  for (let i = 0; i < inputs.length; i++) {
    sum += inputs[i] * this.weights[i];
  }
  if (sum > 0) {return 1} else {return 0}
}

Функция активации выдаст:

  • 1, если сумма больше 0
  • 0, если сумма меньше 0

Создайте функцию обучения

Функция обучения угадывает результат на основе функции активации.

Каждый раз, когда догадка неверна, персептрон должен корректировать веса.

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

Пример

this.train = function(inputs, desired) {
  inputs.push(this.bias);
  let guess = this.activate(inputs);
  let error = desired - guess;
  if (error != 0) {
    for (let i = 0; i < inputs.length; i++) {
      this.weights[i] += this.learnc * error * inputs[i];
    }
  }
}


Обратное распространение

После каждого предположения персептрон вычисляет, насколько оно было ошибочным.

Если догадка неверна, персептрон корректирует смещение и веса, чтобы в следующий раз догадка была немного более правильной.

Этот тип обучения называется обратным распространением .

После попытки (несколько тысяч раз) ваш персептрон станет довольно хорошо угадывать.


Создайте свою собственную библиотеку

Библиотечный код

// Perceptron Object
function Perceptron(no, learningRate = 0.00001) {

// Set Initial Values
this.learnc = learningRate;
this.bias = 1;

// Compute Random Weights
this.weights = [];
for (let i = 0; i <= no; i++) {
  this.weights[i] = Math.random() * 2 - 1;
}

// Activate Function
this.activate = function(inputs) {
  let sum = 0;
  for (let i = 0; i < inputs.length; i++) {
    sum += inputs[i] * this.weights[i];
  }
  if (sum > 0) {return 1} else {return 0}
}

// Train Function
this.train = function(inputs, desired) {
  inputs.push(this.bias);
  let guess = this.activate(inputs);
  let error = desired - guess;
  if (error != 0) {
    for (let i = 0; i < inputs.length; i++) {
      this.weights[i] += this.learnc * error * inputs[i];
    }
  }
}

// End Perceptron Object
}

Теперь вы можете включить библиотеку в HTML:

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

Используйте свою библиотеку

Пример

// Initiate Values
const numPoints = 500;
const learningRate = 0.00001;

// Create a Plotter
const plotter = new XYPlotter("myCanvas");
plotter.transformXY();
const xMax = plotter.xMax;
const yMax = plotter.yMax;
const xMin = plotter.xMin;
const yMin = plotter.yMin;

// Create Random XY Points
const xPoints = [];
const yPoints = [];
for (let i = 0; i < numPoints; i++) {
  xPoints[i] = Math.random() * xMax;
  yPoints[i] = Math.random() * yMax;
}

// Line Function
function f(x) {
  return x * 1.2 + 50;
}

//Plot the Line
plotter.plotLine(xMin, f(xMin), xMax, f(xMax), "black");

// Compute Desired Answers
const desired = [];
for (let i = 0; i < numPoints; i++) {
  desired[i] = 0;
  if (yPoints[i] > f(xPoints[i])) {desired[i] = 1}
}

// Create a Perceptron
const ptron = new Perceptron(2, learningRate);

// Train the Perceptron
for (let j = 0; j <= 10000; j++) {
  for (let i = 0; i < numPoints; i++) {
    ptron.train([xPoints[i], yPoints[i]], desired[i]);
  }
}

// Display the Result
for (let i = 0; i < numPoints; i++) {
  const x = xPoints[i];
  const y = yPoints[i];
  let guess = ptron.activate([x, y, ptron.bias]);
  let color = "black";
  if (guess == 0) color = "blue";
  plotter.plotPoint(x, y, color);
}