Библиотека Synaptic предоставляет удобный инструмент для создания и обучения нейронных сетей в JavaScript. Центральное место в процессе обучения занимает класс Trainer, который обеспечивает гибкие методы настройки и проведения тренировки сети. Trainer не является отдельной сетью — он напрямую работает с объектами Network, применяя алгоритмы обучения к их структуре.
Объект класса Trainer создается с привязкой к конкретной сети:
const network = new synaptic.Architect.Perceptron(2, 3, 1);
const trainer = new synaptic.Trainer(network);
Здесь network — это экземпляр сети Synaptic, который
может быть простым перцептроном, LSTM, нейросетью общего назначения или
любой другой реализацией на основе Network. Trainer хранит ссылку на эту
сеть и использует её метод activate для вычислений и
propagate для обратного распространения ошибки.
Ключевой момент: Trainer не копирует сеть, он работает напрямую с её состоянием. Любые изменения весов в процессе тренировки мгновенно отражаются на объекте Network.
trainМетод train является базовым способом обучения сети на
наборе входных и выходных данных.
trainer.train(trainingSet, {
rate: 0.1,
iterations: 20000,
error: 0.005,
shuffle: true,
log: 1000,
cost: synaptic.Trainer.cost.CROSS_ENTROPY
});
Параметры:
trainingSet — массив объектов
{input: [...], output: [...]}, задающий обучающую
выборку.rate — скорость обучения (learning rate).iterations — максимальное количество итераций
обучения.error — целевой уровень ошибки, при достижении которого
обучение остановится.shuffle — перемешивание примеров перед каждой эпохой
для лучшей генерализации.log — частота вывода информации о текущей ошибке.cost — функция ошибки. Встроенные функции:
Trainer.cost.MSE,
Trainer.cost.CROSS_ENTROPY.Метод train использует обратное распространение
ошибки (backpropagation), вызывая network.activate
для получения предсказания и network.propagate для
обновления весов.
trainAsyncАсинхронная версия train, возвращающая Promise. Полезна
для крупных выборок или длительных обучений, чтобы не блокировать
основной поток Jav * aScript:
await trainer.trainAsync(trainingSet, { rate: 0.1, iterations: 10000 });
Trainer предоставляет инструменты для оценки качества сети:
trainer.test(trainingSet) — возвращает статистику
точности сети на тестовом наборе.trainer.evaluate(trainingSet) — возвращает подробный
объект с ошибкой и средними показателями.Использование этих методов позволяет разделять обучение и проверку, что важно для предотвращения переобучения.
Trainer имеет набор стандартных функций для вычисления ошибки:
Пример использования:
trainer.train(trainingSet, {
cost: synaptic.Trainer.cost.CROSS_ENTROPY
});
Прямой доступ к весам и слоям: Trainer не создает копию сети, поэтому все изменения весов и смещений напрямую происходят в объекте Network. Это позволяет использовать сеть сразу после обучения без дополнительных операций.
Активация и обратное распространение: Trainer
управляет процессом обучения через методы network.activate
и network.propagate, подставляя вычисленные ошибки и
корректируя веса в соответствии с выбранной функцией стоимости и
скоростью обучения.
Гибкость архитектуры: Trainer может работать с любой сетью, наследующей Network. Это открывает возможность обучения сложных сетей, таких как LSTM или слоистые перцептроны, без изменения кода Trainer.
Интеграция с асинхронными процессами: Trainer позволяет запускать обучение параллельно с другими задачами, что особенно полезно в веб-приложениях, где блокировка основного потока недопустима.
Trainer предоставляет гибкий интерфейс для тонкой настройки:
Пример комплексной настройки:
trainer.train(trainingSet, {
rate: 0.05,
iterations: 50000,
error: 0.003,
shuffle: true,
log: 5000,
cost: synaptic.Trainer.cost.MSE
});
Trainer можно использовать не только для классического обратного распространения, но и для:
Trainer является мостом между структурой сети и процессом обучения, предоставляя высокоуровневый интерфейс для настройки, запуска и мониторинга тренировки нейронных сетей Synaptic. Его мощь заключается в универсальности и прямой интеграции с любыми объектами Network, обеспечивая полный контроль над изменениями весов, функциями ошибки и параметрами обучения.