Метод backpropagation (обратного распространения ошибки) является ключевым алгоритмом обучения нейронных сетей. В библиотеке Synaptic он реализован через классы Trainer и методы самой сети. Алгоритм позволяет корректировать веса и смещения сети на основе разницы между предсказанным и ожидаемым результатом.
В Synaptic сеть строится как граф из нейронов. Основные элементы:
Для работы backpropagation важны:
Перед обратным распространением ошибка вычисляется через forward propagation:
Пример кода Synaptic для прямого распространения:
const { Layer, Network } = require('synaptic');
const inputLayer = new Layer(3);
const hiddenLayer = new Layer(4);
const outputLayer = new Layer(2);
inputLayer.project(hiddenLayer);
hiddenLayer.project(outputLayer);
const network = new Network({
input: inputLayer,
hidden: [hiddenLayer],
output: outputLayer
});
const input = [0.5, 0.2, 0.9];
const output = network.activate(input);
Ошибка определяется как разница между выходом сети и целевым значением:
[ = - ]
Для всего выходного слоя используется функция потерь, обычно среднеквадратичная ошибка (MSE):
[ MSE = _{i=1}^{n} (target_i - output_i)^2]
Алгоритм backpropagation состоит из трёх шагов:
Вычисление градиента для выходного слоя Для каждого нейрона вычисляется производная функции активации по входу и умножается на ошибку:
[ = (target - output) f’(input)]
В Synaptic это автоматически выполняется методом
propagate у слоя.
Вычисление градиента для скрытых слоев Ошибка скрытого слоя определяется суммой взвешенных градиентов последующего слоя:
[ _j = f’(input_j) _k (k w{jk})]
Здесь ( w_{jk} ) — вес между скрытым нейроном ( j ) и нейроном следующего слоя ( k ).
Обновление весов Веса корректируются по формуле градиентного спуска:
[ w_{ij}^{new} = w_{ij}^{old} + _j output_i]
где ( ) — скорость обучения.
Пример использования propagate в Synaptic:
const learningRate = 0.3;
const target = [1, 0];
network.propagate(learningRate, target);
Класс Trainer позволяет организовать обучение сети на наборе данных:
const { Trainer } = require('synaptic');
const trainer = new Trainer(network);
trainer.train([
{ input: [0,0,0], output: [0,1] },
{ input: [0,1,0], output: [1,0] },
{ input: [1,0,1], output: [1,1] }
], {
rate: 0.2, // скорость обучения
iterations: 20000, // количество итераций
error: 0.005, // целевая ошибка
shuffle: true, // перемешивать данные
log: 1000 // вывод прогресса каждые 1000 итераций
});
Особенности Trainer:
Метод backpropagation в Synaptic обеспечивает полный цикл обучения: от прямого распространения через слои до обновления весов, позволяя создавать гибкие и мощные нейронные сети в JavaScript.