В библиотеке Brain.js для работы с нейронными сетями важным аспектом является фиксирование случайного состояния. Это необходимо для воспроизводимости результатов обучения, отладки моделей и проведения экспериментов с разными архитектурами сети, при которых нужно иметь стабильные условия старта.
По умолчанию нейронные сети Brain.js используют генератор случайных чисел JavaScript для инициализации весов. Без фиксирования состояния каждый запуск программы может приводить к различным результатам обучения, даже при одинаковых данных и настройках.
const brain = require('brain.js');
const net = new brain.NeuralNetwork();
В этом примере веса будут инициализированы случайно при каждом запуске. Чтобы сделать процесс воспроизводимым, применяется фиксированный seed для генератора случайных чисел.
Для фиксирования состояния сети в Brain.js существует параметр
seed, который передается при создании сети. Seed — это
число, которое определяет начальное состояние генератора случайных
чисел. При одинаковом seed и одинаковых данных обучения сеть будет вести
себя одинаково при каждом запуске.
const net = new brain.NeuralNetwork({
seed: 1234
});
В этом примере 1234 — фиксированное начальное значение
генератора случайных чисел. С этим значением все веса сети будут
инициализированы одинаково на каждом запуске. Это особенно важно для
тестирования гиперпараметров, сравнения архитектур и
отладки.
Seed влияет не только на начальные веса сети, но и на порядок обработки данных в некоторых случаях, если используется случайная перетасовка входных примеров.
Ключевые моменты:
const brain = require('brain.js');
// Создание сети с фиксированным seed
const net = new brain.NeuralNetwork({
hiddenLayers: [4, 3],
activation: 'sigmoid',
seed: 42
});
// Данные для обучения
const trainingData = [
{ input: [0, 0], output: [0] },
{ input: [0, 1], output: [1] },
{ input: [1, 0], output: [1] },
{ input: [1, 1], output: [0] }
];
// Обучение сети
net.train(trainingData, {
iterations: 20000,
log: true,
logPeriod: 2000,
learningRate: 0.3
});
// Тестирование
console.log(net.run([1, 0])); // Всегда одинаковый результат с тем же seed
В данном примере:
Каждый запуск с этим seed гарантирует, что начальные веса будут одинаковыми, что делает результаты обучения предсказуемыми.
shuffle также
контролируется.Фиксация случайного состояния является базовым, но критически важным шагом при работе с нейронными сетями в Brain.js. Она позволяет обеспечивать воспроизводимость экспериментов, упрощает отладку, и делает процессы обучения более предсказуемыми и управляемыми.