Synaptic — это библиотека для создания нейронных сетей в JavaScript, обеспечивающая гибкость в построении как простых, так и сложных моделей. Она поддерживает архитектуры Feedforward, Recurrent, а также предоставляет возможности для обучения с подкреплением. Ключевыми компонентами библиотеки являются Neuron, Layer, Network и Trainer, которые позволяют строить и обучать нейронные сети на различных задачах.
Прямое распространение в Synaptic выполняется методом
activate, который принимает входные данные и возвращает
выход сети. Обратное распространение реализовано через метод
propagate, где можно задать скорость обучения
(learningRate) и целевое значение для корректировки
весов.
Пример прямого распространения:
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 network = new Network({
input: inputLayer,
hidden: [hiddenLayer],
output: outputLayer
});
const output = network.activate([0.5, 0.8]);
В нейронных сетях случайная инициализация весов критически влияет на конечные результаты обучения. Даже при одинаковой архитектуре, разные начальные веса могут привести к различным локальным минимумам функции потерь. Для обеспечения воспроизводимости экспериментов необходимо фиксировать начальные веса.
Методы фиксации начальных весов:
network.layers.input.list[0].connections.projected[0].weight = 0.45;
seedrandom:const seedrandom = require('seedrandom');
Math.random = seedrandom('fixed-seed');
const neuron = new Neuron(); // веса инициализируются с предсказуемыми значениями
const exported = network.toJSON();
const restoredNetwork = Network.fromJSON(exported);
Фиксация начальных весов позволяет:
Использование фиксированных весов не гарантирует оптимальность результатов, но значительно повышает предсказуемость эксперимента, что критично в научных исследованиях и образовательных проектах.