Рубрики
Без рубрики

Как создать нейронную сеть в JavaScript только только в 30 строках кода

В этой статье я покажу вам, как создавать и тренировать нейронную сеть с помощью Synaptic.js, который позволяет вам делать глубокое обучение в Node.js и браузере. Мы будем создавать самую простейшую неоправданную сеть: тот, который удается решить уравнение XOR. У меня есть

Автор оригинала: FreeCodeCamp Community Member.

В этой статье я покажу вам, как создавать и тренировать нейронную сеть, используя Synaptic.js , что позволяет вам делать глубокое обучение в Node.js и браузере.

Мы будем создавать самую простейшую возможную нейронную сеть: тот, который удается решить Уравнение XOR.

Я также создал интерактивное руководство Scrimba в этом примере, поэтому проверьте это тоже:

Или, если вы заинтересованы в полном курсе по нейронным сетям в JavaScript, пожалуйста, ознакомьтесь с нашими Бесплатный ход на мозгу.js в Scrimba.

Но прежде чем мы посмотрим на код, давайте пройдемся через основные основы нейронных сетей.

Нейроны и синапсы

Первый строительный блок нейронной сети, ну, Нейроны Отказ

Нейрон похож на функцию, требуется несколько входов и возвращает вывод.

Есть много разных типов нейронов. Наша сеть будет использовать Сигмоидные нейроны, которые принимают любое данное количество и выкручивают его на ценность между 0 и 1 Отказ

Круг ниже иллюстрирует сигмоидный нейрон. Его вход – 5 и его выход 1 Отказ Стрелки называются синапсами, которые соединяет нейрон к другим слоям в сети.

Итак, Почему Красный номер 5 ? Поскольку это сумма трех синапсов, которые соединяются с нейроном, как показано на трех стрелках слева. Давайте распадаем это.

По данновению мы видим два значения плюс так называемое предвзятость значение. Значения 1 и 0 которые являются зелеными числами. Значение смещения – -2 который является коричневым числом.

Во-первых, два входа умножены со своими Вес , которые являются 7 и 3 Как показано синим номером.

Наконец, мы добавляем его со смещением и в конечном итоге с 5 или красный номер. Это вход для нашего искусственного нейрона.

Поскольку это сигмоидный нейрон, который раздает любое значение от 0 до 1, выход выжимается до 1 Отказ

Если вы подключите сеть этих нейронов вместе, у вас есть нейронная сеть. Это распространяется вперед от ввода на вывод, через нейроны, которые подключены друг к другу через синапсы. Как на изображении ниже:

Целью нейронной сети состоит в том, чтобы тренировать его делать обобщения, такие как распознавание рукописных цифр или по электронной почте SPAM. И быть хорошим в обобщении – вопрос иметь право Вес и предвзятость Значения по сети. Как и с голубыми и коричневыми числами в нашем примере выше.

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

После каждого прогноза вы рассчитаете как неверно Прогноз имел и отрегулировал значения веса и смещения, чтобы сеть будет угадать немного более правильно, в следующий раз. Этот процесс обучения называется обратной проблемой. Делайте это за тысячи раз, и ваша сеть вскоре станет хорошим в обобщении.

Как работает обратная обработка технически за пределами объема этого учебника, но вот три лучших источника, которые я нашел для понимания его:

Код

Теперь, когда вы получили основное введение, давайте прыгнем в код. Первое, что нам нужно сделать, это создать слои. Мы делаем это с Новый слой () Функция в синаптике. Число, переданное функцией, диктует, сколько невронов каждый слой должен иметь.

Если вы смущены о том, что a слой есть, проверьте Screencast выше.

const {слой, сеть.synaptic;

VAR слой (2); VAR слой (3); VAR слой (1);

Далее мы соединим эти слои вместе и создали новую сеть, как это:

inputlayer.project (hiddenlayer); hiddenlayer.project (outdlayer);

VAR Network ({Вход: proteglayer, hidden: [hiddenlayer], Выход: outdylayer});

Так что это сеть 2-3-1, которая может быть визуализирована, как это:

Теперь давайте тренируем сеть:

// train the network - learn XOR

var learningRate = .3;

for (var i = 0; i < 20000; i++) {  
  // 0,0 => 0  
  myNetwork.activate([0,0]);  
  myNetwork.propagate(learningRate, [0]);

  // 0,1 => 1  
  myNetwork.activate([0,1]);  
  myNetwork.propagate(learningRate, [1]);

  // 1,0 => 1  
  myNetwork.activate([1,0]);  
  myNetwork.propagate(learningRate, [1]);

  // 1,1 => 0  
  myNetwork.activate([1,1]);  
  myNetwork.propagate(learningRate, [0]);  
}

Здесь мы запускаем сеть 20 000 раз. Каждый раз, когда мы распространяем вперед и назад четыре раза, проходя на четыре возможных входа для этой сети: [0,0] [0,1] [1,0] [1,1] Отказ

Мы начинаем, делая mynetwork.activate ([0,0]) , где [0,0] Является ли точка данных, которую мы отправляем в сеть. Это прямое распространение, также называемое Активация сеть. После каждого распространения переднего распространения нам нужно сделать обратное распространение, где сетевая обновляет свои весы и предубеждения.

Отправка выполняется с этой строкой кода: mynetwork.propagate (Унижета, [0]) , где УНИЧЕНИЯ Это постоянная, которая сообщает сети, насколько она должна регулировать свои веса каждый раз. Второй параметр 0 Представляет правильный выход, учитывая вход [0,0] Отказ

Затем сеть сравнивает свой прогноз на правильную метку. Это говорит о том, как правильно или неправильно это было.

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

После того, как он сделал этот процесс 20 000 раз, мы можем проверить, насколько хорошо наша сеть изучила, активируя сеть со всеми четырьмя возможными входами:

console.log(myNetwork.activate([0,0]));   
// -> [0.015020775950893527]

console.log(myNetwork.activate([0,1]));  
// -> [0.9815816381088985]

console.log(myNetwork.activate([1,0]));  
// ->  [0.9871822457132193]

console.log(myNetwork.activate([1,1]));  
// -> [0.012950087641929467]

Если мы округли эти значения к ближайшему целым числу, мы получим правильные ответы на уравнение XOR. Ура!

И это об этом. Несмотря на то, что мы только что поцарапали поверхность нейронных сетей, это должно придать вам достаточно, чтобы начать играть с синаптиком для себя и продолжить обучение самостоятельно. Их вики Содержит много хороших учебников.

Наконец, обязательно поделитесь своими знаниями, создавая Scrimba Screencast или написание статьи, когда вы узнаете что-то новое!:)

PS: У нас есть больше бесплатных курсов для вас!

Если вы ищете свою следующую проблему, у нас есть несколько других бесплатных курсов, которые вы можете проверить на Scrimba.com. Вот три могут быть актуальны для вас:

Счастливое кодирование!