Матрица ошибок

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

Понятие ошибки и функции потерь

Ошибка (или функция потерь) — это числовое выражение разницы между предсказанными значениями и реальными данными. В Brain.js по умолчанию используется Mean Squared Error (MSE) для полносвязных сетей, которая вычисляется по формуле:

[ MSE = _{i=1}^{n} (y_i - _i)^2]

где (y_i) — истинное значение, (_i) — предсказанное сетью, (n) — количество примеров в обучающей выборке. Эта формула позволяет количественно оценить степень отклонения сети от правильного ответа.

Структура матрицы ошибок

В Brain.js матрица ошибок формируется на этапе обратного распространения ошибки (backpropagation). Она представляет собой многомерный массив, где хранятся значения градиентов для каждого веса нейронной сети. Каждый элемент матрицы отражает:

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

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

Обратное распространение ошибки

Алгоритм обратного распространения работает по шагам:

  1. Прямое распространение (forward pass): входные данные проходят через все слои сети, формируя выходные значения.
  2. Вычисление ошибки: на основе функции потерь определяется отклонение сети от целевых данных.
  3. Обратное распространение (backward pass): ошибка «распределяется» по слоям сети. В Brain.js это реализовано автоматически при вызове метода train.

Важно, что матрица ошибок позволяет динамически корректировать веса сети на каждом шаге обучения, минимизируя функцию потерь.

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

В Brain.js обучение нейросети производится через объект конфигурации:

const net = new brain.NeuralNetwork({
  hiddenLayers: [10, 10],
  learningRate: 0.01,
  decayRate: 0.999,
});
  • hiddenLayers — массив с количеством нейронов в каждом скрытом слое.
  • learningRate — скорость корректировки весов на каждом шаге.
  • decayRate — коэффициент уменьшения влияния предыдущих обновлений весов.

Эти параметры напрямую влияют на матрицу ошибок: слишком высокая скорость обучения может вызвать «скачки» значений, приводя к нестабильности сети, а слишком низкая — замедлит процесс минимизации ошибки.

Визуализация матрицы ошибок

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

const trainingResult = net.train(data, {
  iterations: 20000,
  log: true,
  logPeriod: 100
});

Параметр log выводит в консоль значения функции потерь на каждом периоде, что позволяет увидеть динамику уменьшения ошибки и скорректировать параметры обучения.

Применение матрицы ошибок

Использование матрицы ошибок не ограничивается обучением:

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

Особенности рекуррентных сетей

В Recurrent Neural Network (RNN) и LSTM в Brain.js матрица ошибок учитывает зависимость между шагами времени. Ошибка на каждом временном шаге суммируется или усредняется, после чего корректируются веса, влияющие на все предыдущие состояния. Это обеспечивает обучение сети последовательным паттернам данных, например, временным рядам или тексту.

В Brain.js использование recurrent.LSTM выглядит следующим образом:

const net = new brain.recurrent.LSTM();
net.train([
  { input: "Привет", output: "Здравствуйте" },
  { input: "Как дела?", output: "Хорошо" }
]);

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