Класс NeuralNetworkGPU

NeuralNetworkGPU — это специализированный класс библиотеки Brain.js, предназначенный для ускоренного обучения нейронных сетей с использованием графического процессора (GPU). В отличие от стандартного NeuralNetwork, который выполняет вычисления на CPU, NeuralNetworkGPU позволяет значительно сократить время обучения при обработке больших наборов данных и сложных архитектур.


Инициализация и основные параметры

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

const brain = require('brain.js');
const net = new brain.NeuralNetworkGPU({
  hiddenLayers: [64, 32], 
  activation: 'relu',
  learningRate: 0.01,
  decayRate: 0.999,
  errorThresh: 0.005
});

Ключевые параметры конструктора:

  • hiddenLayers — массив, задающий количество нейронов в каждом скрытом слое. Например, [64, 32] создаёт два скрытых слоя с 64 и 32 нейронами соответственно.
  • activation — функция активации нейронов: 'sigmoid', 'relu', 'leaky-relu', 'tanh'. Выбор функции влияет на скорость обучения и способность сети аппроксимировать сложные зависимости.
  • learningRate — коэффициент обучения, определяющий величину изменения весов на каждом шаге.
  • decayRate — коэффициент затухания скорости обучения, используется для постепенного уменьшения learningRate во время тренировки.
  • errorThresh — порог ошибки, при достижении которого обучение останавливается.

Структура входных и выходных данных

Для работы с NeuralNetworkGPU данные должны быть нормализованы в диапазоне [0, 1]. Входные и выходные данные задаются в виде объектов:

const trainingData = [
  { input: { r: 0.1, g: 0.2, b: 0.3 }, output: { dark: 1 } },
  { input: { r: 0.8, g: 0.7, b: 0.6 }, output: { light: 1 } }
];
  • input — объект с числовыми признаками.
  • output — объект с целевыми значениями, обычно используется формат one-hot encoding для классификации.

Для числовых задач регрессии output может содержать одно число:

{ input: { x: 0.5 }, output: { y: 0.75 } }

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

Метод .train() запускает процесс обучения:

net.train(trainingData, {
  iterations: 20000,
  log: true,
  logPeriod: 100,
  learningRate: 0.01
});

Параметры метода train:

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

Метод возвращает объект с итоговой ошибкой:

{ error: 0.0047, iterations: 842, time: 2150 }

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

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

const output = net.run({ r: 0.2, g: 0.3, b: 0.4 });
console.log(output); // { dark: 0.89, light: 0.12 }
  • Результат — объект с вероятностями классов или значениями регрессии.
  • Для многоклассовой классификации удобно выбирать класс с наибольшим значением.

Сохранение и загрузка сети

Для дальнейшего использования обученную сеть можно сериализовать:

const json = net.toJSON();

Восстановление выполняется через конструктор или метод .fromJSON():

const net2 = new brain.NeuralNetworkGPU();
net2.fromJSON(json);

Такой подход позволяет переносить сеть между проектами или сохранять её состояние на диск.


Особенности и рекомендации при работе с GPU

  1. Совместимость устройств: Для работы NeuralNetworkGPU требуется наличие WebGL. В Node.js используется пакет gpu.js, который автоматически интегрируется с Brain.js.
  2. Размер слоёв: Очень большие скрытые слои увеличивают нагрузку на GPU. Оптимальный размер подбирается экспериментально.
  3. Формат данных: Все входные данные должны быть числовыми и нормализованными. Любые пропуски или некорректные значения приведут к ошибкам выполнения на GPU.
  4. Функции активации: relu и leaky-relu быстрее для больших сетей, sigmoid более стабилен для маленьких наборов данных.
  5. Тренировка и тестирование: Для оценки качества сети рекомендуется разделять данные на тренировочные и тестовые, чтобы избежать переобучения.

Примеры применения

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

Настройка производительности

  • batchSize — размер мини-батча для ускоренного обучения на больших данных.
  • gpu — можно принудительно включить или отключить использование GPU:
const net = new brain.NeuralNetworkGPU({ gpu: true });
  • тестирование производительности рекомендуется проводить на разных конфигурациях слоёв и функции активации, чтобы найти баланс между точностью и временем обучения.

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