Параметры конфигурации сети

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


Типы нейронных сетей и их конфигурации

В Brain.js доступны несколько типов сетей, каждый из которых имеет свои особенности:

  1. feedforward (Feedforward Neural Network) Сеть с прямым распространением сигналов. Основные параметры:

    • hiddenLayers — массив чисел, задающий количество нейронов в каждом скрытом слое. Например, [10, 20] создаст два скрытых слоя с 10 и 20 нейронами соответственно.

    • activation — функция активации, определяющая нелинейное преобразование сигнала в нейроне. Доступные значения:

      • 'sigmoid' — классическая сигмоидная функция, полезна для выхода в диапазоне [0,1].
      • 'relu' — ускоряет обучение на больших данных, подходит для глубинных сетей.
      • 'leaky-relu' — модифицированная ReLU, предотвращающая «мертвые нейроны».
      • 'tanh' — функция с выходом в диапазоне [-1,1], подходит для нормализованных данных.
  2. recurrent (RNN, LSTM, GRU) Сети с обратной связью для обработки последовательностей данных, текста или временных рядов. Основные параметры:

    • inputSize — количество входов сети, определяет размерность входного вектора.
    • hiddenLayers — структура скрытых слоев, как и в feedforward.
    • outputSize — количество выходов сети.
    • learningRate — скорость обучения, число от 0 до 1, влияющее на величину корректировок весов.
    • decayRate — коэффициент затухания для LSTM, контролирует забывание предыдущих состояний.

Настройки обучения

Для обучения сети используется метод train(), принимающий объект конфигурации:

  • iterations — максимальное количество итераций обучения. Чем выше значение, тем точнее может стать модель, но время обучения увеличивается.
  • errorThresh — порог допустимой ошибки. Обучение завершится, когда средняя ошибка станет меньше этого значения.
  • log — логирование процесса обучения. Можно передавать функцию console.log или true для стандартного вывода.
  • logPeriod — интервал в итерациях для вывода логов.
  • learningRate — скорость обучения (0–1). Для recurrent сетей может быть тонко настроена для каждого слоя.
  • momentum — коэффициент импульса, помогает избежать локальных минимумов при оптимизации весов.
  • callback — функция обратного вызова после каждой итерации, полезна для визуализации процесса обучения в реальном времени.

Настройка входных и выходных данных

  • normalize — автоматическая нормализация входных данных в диапазоне [0,1]. Позволяет избежать проблем с разными масштабами данных.
  • binaryThresh — порог бинаризации выходов для сетей с бинарным выводом. Значение по умолчанию 0.5.
  • inputRange — диапазон нормализации входных данных, задается массивом [min, max].

Регулировка структуры сети

  • hiddenLayers Гибкость выбора числа и размера скрытых слоев критична для производительности. Слишком маленькая сеть может недообучиться, а слишком большая — переобучиться. Пример оптимального выбора: [16, 32, 16] для задачи классификации с умеренным количеством признаков.

  • activation Выбор функции активации зависит от природы данных:

    • Для числовых регрессий часто используют relu или leaky-relu.
    • Для вероятностных задач — sigmoid.
    • Для нормализованных данных с отрицательными значениями — tanh.

Сохранение и восстановление конфигурации

После обучения сети важно сохранить её состояние для последующего использования:

const json = net.toJSON(); // Сохраняет веса, структуру и конфигурацию
const restoredNet = new brain.NeuralNetwork();
restoredNet.fromJSON(json);

С помощью toJSON() сохраняются все ключевые параметры сети, включая слои, функции активации и веса, что позволяет полностью восстановить сеть без необходимости повторного обучения.


Тонкая настройка обучения

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

  • momentum — ускоряет обучение, предотвращает застревание в локальных минимумах. Значение обычно в диапазоне 0.5–0.9.
  • decay — постепенное уменьшение скорости обучения, помогает стабилизировать процесс на поздних итерациях.
  • epsilon — минимальное значение градиента, используется для предотвращения численных ошибок при обратном распространении.

Практическая рекомендация по выбору конфигурации

  • Для простых задач классификации: один скрытый слой с числом нейронов около (количество входов + количество выходов) × 2.
  • Для временных рядов или текста: LSTM с 2–3 скрытыми слоями и learningRate около 0.01–0.05.
  • Для больших наборов данных: использовать нормализацию входов, relu или leaky-relu, а также включить логирование и периодическую проверку ошибки.

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