Практика: предсказание числового ряда

Synaptic — это библиотека для построения нейронных сетей на JavaScript, предоставляющая гибкий инструментарий для создания как простых, так и сложных моделей. В основе библиотеки лежит концепция нейронных сетей с произвольной архитектурой, что позволяет строить однослойные и многослойные сети с полной кастомизацией связей между нейронами.

Базовыми строительными блоками являются:

  • Neuron — отдельный нейрон, имеющий веса входов и функцию активации.
  • Layer — слой нейронов, объединяющий несколько нейронов и обеспечивающий их коллективную работу.
  • Network — сеть, объединяющая слои и реализующая прямое распространение сигналов и обратное распространение ошибок.
  • Trainer — объект, предоставляющий методы обучения сети на наборе данных.

Создание сети для числового ряда

Для предсказания числового ряда наиболее часто используется многослойный перцептрон (MLP). Такая сеть состоит из:

  • Входного слоя: количество нейронов соответствует числу элементов в последовательности, используемых для предсказания следующего значения.
  • Скрытых слоев: обеспечивают способность сети находить сложные зависимости в данных.
  • Выходного слоя: один нейрон, если требуется предсказать одно значение.

Пример создания сети с Synaptic:

const { Layer, Network, Trainer } = require('synaptic');

const inputLayer = new Layer(5); // 5 предыдущих чисел
const hiddenLayer = new Layer(10);
const outputLayer = new Layer(1);

inputLayer.project(hiddenLayer);
hiddenLayer.project(outputLayer);

const myNetwork = new Network({
  input: inputLayer,
  hidden: [hiddenLayer],
  output: outputLayer
});

Подготовка данных

Для обучения сети числовому ряду данные необходимо преобразовать в пары вход → выход. Например, для ряда [1, 2, 3, 4, 5, 6] с использованием окна в 3 элемента:

Вход Выход
[1,2,3] 4
[2,3,4] 5
[3,4,5] 6

Важно нормализовать данные, чтобы все значения находились в диапазоне [0,1] или [-1,1], так как это улучшает сходимость сети:

const normalize = (arr) => arr.map(x => x / Math.max(...arr));

Обучение сети

Synaptic предоставляет Trainer для удобного обучения сети с использованием алгоритма обратного распространения ошибки. Основные параметры обучения:

  • rate — скорость обучения, обычно в диапазоне 0.01–0.1.
  • iterations — количество итераций (эпох).
  • error — целевая ошибка, при достижении которой обучение останавливается.

Пример тренировки сети:

const trainer = new Trainer(myNetwork);

trainer.train(
  [
    { input: [0.166, 0.333, 0.5], output: [0.666] },
    { input: [0.333, 0.5, 0.666], output: [0.833] }
  ],
  {
    rate: 0.05,
    iterations: 5000,
    error: 0.005,
    shuffle: true
  }
);

Предсказание следующего элемента ряда

После обучения можно использовать метод activate для получения прогноза:

const nextValue = myNetwork.activate([0.5, 0.666, 0.833]);
console.log(nextValue); // значение в диапазоне [0,1]

При необходимости результат следует денормализовать, чтобы вернуть исходный масштаб:

const denormalize = (value, max) => value * max;

Улучшение точности сети

Для повышения качества предсказаний применяются следующие подходы:

  • Увеличение числа нейронов в скрытых слоях — позволяет сети выявлять более сложные зависимости.
  • Добавление дополнительных скрытых слоев — полезно для моделирования нелинейных рядов.
  • Использование функций активацииsigmoid или tanh помогают управлять выходными значениями.
  • Регуляризация и нормализация — предотвращают переобучение на малых данных.

Применение оконного метода

Ключевой принцип работы с числовыми рядами — использование скользящего окна. Размер окна определяет, сколько предыдущих элементов сеть учитывает для прогноза следующего. Практика показывает, что оптимальный размер окна подбирается экспериментально: слишком маленькое окно не захватывает зависимости, слишком большое — усложняет обучение.

Вывод

Synaptic предоставляет полный инструментарий для построения и обучения нейронных сетей для задач предсказания числовых рядов. Ключевыми этапами являются: построение сети с подходящей архитектурой, нормализация и подготовка данных, обучение методом обратного распространения ошибки и использование сети для прогноза с последующей денормализацией результатов. Правильная настройка параметров сети и использование оконного метода позволяют достигать высокой точности предсказаний.