Библиотека Synaptic предоставляет гибкий инструмент для создания и
обучения нейронных сетей в JavaScript. Одним из ключевых компонентов её
функциональности является метод Network.propagate, который
отвечает за процесс обратного распространения ошибки (backpropagation) и
обновление весов сети.
Обратное распространение — это алгоритм обучения многослойных нейронных сетей. Он состоит из двух этапов: прямого распространения сигнала и обратного распространения ошибки.
Метод Network.propagate объединяет эти шаги, управляя
корректировкой весов и смещений сети с использованием выбранной функции
активации и коэффициента обучения.
network.propagate(rate, target, [options])
rate — коэффициент обучения (learning rate). Определяет
величину корректировки весов при каждой итерации. Обычно находится в
диапазоне от 0.01 до 0.3.target — массив значений, которые нейронная сеть должна
выдать на выходе. Длина массива соответствует числу выходных
нейронов.[options] — необязательный объект, содержащий
дополнительные параметры, такие как метод обратного распространения
(например, mse для среднеквадратичной ошибки).Вычисление ошибки на выходном слое: Для каждого выходного нейрона вычисляется разница между фактическим выходом и целевым значением: [ _j = (target_j - output_j) f’(net_j)] где ( f’(net_j) ) — производная функции активации нейрона.
Обратное распространение ошибки через скрытые слои: Для скрытых слоев ошибка вычисляется как взвешенная сумма ошибок нейронов следующего слоя: [ _h = f’(net_h) j w{hj} _j] Это позволяет корректно распределить ответственность за ошибку между всеми нейронами.
Обновление весов и смещений: Каждый вес корректируется согласно правилу градиентного спуска: [ w_{ij}^{new} = w_{ij}^{old} + rate output_i _j] Аналогично обновляется смещение нейрона: [ b_j^{new} = b_j^{old} + rate _j]
rate) влияет на
скорость и стабильность обучения. Малые значения увеличивают число эпох
для сходимости, большие могут вызвать расходимость.sigmoid,
tanh, relu. Каждая функция требует корректного
расчёта производной при обратном распространении.options.error)
позволяет использовать разные подходы для оценки качества обучения,
например, среднеквадратичную ошибку или кросс-энтропию.const { Layer, Network } = require('synaptic');
const inputLayer = new Layer(2);
const hiddenLayer = new Layer(3);
const outputLayer = new Layer(1);
inputLayer.project(hiddenLayer);
hiddenLayer.project(outputLayer);
const myNetwork = new Network({
input: inputLayer,
hidden: [hiddenLayer],
output: outputLayer
});
// Прямое распространение
const output = myNetwork.activate([0.5, 0.8]);
// Обратное распространение ошибки
myNetwork.propagate(0.1, [1]);
В этом примере входные данные [0.5, 0.8] проходят через
сеть, затем сеть корректирует свои веса, стремясь приблизить выход к
1.
rate
по мере прогресса обучения.Метод Network.propagate является сердцем процесса
обучения в Synaptic. Понимание его внутреннего механизма позволяет
эффективно строить нейронные сети, контролировать процесс обучения и
достигать высокой точности предсказаний.