Библиотека Synaptic реализует обучение нейронных сетей с использованием алгоритма обратного распространения ошибки (backpropagation). Градиенты представляют собой производные функции ошибки по весам сети и определяют направление и величину корректировки параметров при обучении. Отслеживание градиентов позволяет контролировать процесс обучения, выявлять проблемы с затухающими или взрывающимися градиентами и оптимизировать структуру сети и гиперпараметры.
В Synaptic сеть строится из слоёв и нейронов, где каждый нейрон имеет веса, смещения и функцию активации. Основные компоненты:
Каждый нейрон хранит состояние активации (activation) и
ошибку (error), которые участвуют в вычислении
градиентов.
Градиенты вычисляются в процессе обратного распространения ошибки:
Прямой проход (forward propagation) Для каждого слоя вычисляется активация нейронов:
[ a_i = f(j w{ij} x_j + b_i)]
где (f) — функция активации, (w_{ij}) — вес от нейрона (j) предыдущего слоя к нейрону (i), (b_i) — смещение.
Обратный проход (backpropagation) Для выходного слоя ошибка вычисляется как разница между целевым значением и предсказанием:
[ _i = (y_i - a_i) f’(z_i)]
Для скрытых слоёв градиент рассчитывается через сумму ошибок следующего слоя, взвешенных соответствующими весами:
[ _i = f’(z_i) k w{ik} _k^{(next)}]
Здесь (f’(z_i)) — производная функции активации, а (w_{ik}) — вес соединения с нейроном следующего слоя.
Обновление весов После вычисления градиентов веса обновляются по правилу градиентного спуска:
[ w_{ij} w_{ij} + _i x_j]
где () — коэффициент обучения, (_i) — градиент ошибки нейрона, а (x_j) — активация нейрона предыдущего слоя.
Synaptic не предоставляет встроенного визуализатора градиентов, но доступ к градиентам возможен через внутренние структуры нейронов и слоёв:
Пример получения градиентов для одного слоя:
const layer = myNetwork.layers.hidden[0];
layer.list.forEach(neuron => {
console.log("Ошибка нейрона:", neuron.error);
console.log("Градиенты весов:", neuron.weights.map((w, i) => neuron.error * neuron.connections.inputs[i].weight));
});
Для более наглядного анализа можно собирать градиенты каждого нейрона в массивы и строить графики изменения градиентов по эпохам обучения. Например, использование Chart.js или D3.js позволяет отслеживать динамику ошибок и весов в реальном времени.
let gradientHistory = [];
for (let epoch = 0; epoch < epochs; epoch++) {
myNetwork.activate(input);
myNetwork.propagate(learningRate, target);
const layerGradients = myNetwork.layers.hidden[0].list.map(neuron => neuron.error);
gradientHistory.push(layerGradients);
}
// Дальше можно построить график по gradientHistory
Отслеживание градиентов является ключевым инструментом для контроля процесса обучения, выявления проблем с сетью и оптимизации её параметров в Synaptic.