Полносвязная сеть NeuralNetwork

Полносвязная нейронная сеть (Feedforward Neural Network) в библиотеке Brain.js реализуется через класс NeuralNetwork. Это базовый тип сети, в которой каждый нейрон одного слоя соединён с каждым нейроном следующего слоя. Такая структура обеспечивает возможность моделирования сложных нелинейных зависимостей между входными и выходными данными.

Инициализация сети

Создание сети осуществляется через конструктор:

const brain = require('brain.js');
const net = new brain.NeuralNetwork({
  hiddenLayers: [3], // количество скрытых слоёв и нейронов в каждом
  activation: 'sigmoid' // функция активации: 'sigmoid', 'relu', 'leaky-relu', 'tanh'
});

Параметры конструктора:

  • hiddenLayers — массив, задающий количество нейронов в каждом скрытом слое. Например, [4, 5] создаёт два скрытых слоя: первый с 4 нейронами, второй с 5.
  • activation — функция активации. От неё зависит нелинейность сети и скорость сходимости обучения. Чаще всего используется 'sigmoid' для классификационных задач и 'relu' для регрессий с положительными значениями.

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

Данные для обучения передаются в виде массива объектов, где input — входной сигнал, а output — ожидаемый результат:

const trainingData = [
  { input: { red: 1, green: 0, blue: 0 }, output: { color: 'red' } },
  { input: { red: 0, green: 1, blue: 0 }, output: { color: 'green' } },
  { input: { red: 0, green: 0, blue: 1 }, output: { color: 'blue' } }
];

Важно, чтобы входные значения были нормализованы (обычно в диапазоне 0–1), а выходные — либо бинарными, либо в формате one-hot encoding, если задача классификации.

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

Обучение сети происходит с помощью метода train:

const stats = net.train(trainingData, {
  iterations: 20000, // максимальное количество итераций
  learningRate: 0.01, // скорость обучения
  log: true, // вывод прогресса
  logPeriod: 1000, // каждые 1000 итераций
  errorThresh: 0.005 // порог ошибки
});

Ключевые параметры метода train:

  • iterations — число эпох, в течение которых сеть будет обновлять веса.
  • learningRate — коэффициент, регулирующий величину шагов при обновлении весов.
  • log и logPeriod — позволяют отслеживать динамику снижения ошибки во время обучения.
  • errorThresh — цель обучения: если средняя ошибка сети падает ниже этого значения, процесс завершится раньше.

Метод возвращает объект с информацией о процессе обучения:

{
  iterations: 12345,
  error: 0.0048
}

Прогнозирование

После обучения сеть способна делать предсказания методом run:

const output = net.run({ red: 0, green: 1, blue: 0 });
console.log(output); // { color: 0.01, ... }

Выход представляет собой объект с вероятностями для каждого класса. Для интерпретации результатов можно выбрать наибольшее значение.

Сохранение и загрузка модели

Сеть можно сериализовать и хранить для дальнейшего использования:

const json = net.toJSON(); // экспорт в JSON
net.fromJSON(json); // восстановление сети из JSON

Это полезно для сохранения обученной модели без повторного обучения.

Настройка архитектуры сети

  • Количество скрытых слоёв. Увеличение числа слоёв и нейронов повышает способность сети моделировать сложные зависимости, но увеличивает риск переобучения и время обучения.
  • Функция активации. Для классификации с бинарными выходами предпочтительна sigmoid, для регрессии с положительными числами — relu. Функция tanh обеспечивает диапазон значений от -1 до 1, что полезно для нормализованных данных.
  • Параметры обучения. Малые значения learningRate делают обучение более стабильным, но медленным, большие — ускоряют обучение, но могут вызвать расходимость сети.

Практические рекомендации

  • Всегда нормализовать входные данные.
  • Начинать с небольшой архитектуры и увеличивать сложность постепенно.
  • Использовать log для контроля процесса обучения.
  • Разделять данные на тренировочные и тестовые, чтобы оценивать способность сети к обобщению.

Полносвязная сеть NeuralNetwork в Brain.js позволяет быстро создавать простые и среднесложные модели, обеспечивая гибкость архитектуры и прозрачность процесса обучения. Она подходит для задач классификации, регрессии и моделирования зависимостей между многомерными данными.