Brain.js — это библиотека на JavaScript для создания, обучения и использования нейросетей. Она поддерживает как классические полносвязные нейронные сети, так и рекуррентные сети. Одним из центральных понятий при обучении нейросети является матрица ошибок, которая определяет, насколько точной является модель при прогнозировании.
Ошибка (или функция потерь) — это числовое выражение разницы между предсказанными значениями и реальными данными. В Brain.js по умолчанию используется Mean Squared Error (MSE) для полносвязных сетей, которая вычисляется по формуле:
[ MSE = _{i=1}^{n} (y_i - _i)^2]
где (y_i) — истинное значение, (_i) — предсказанное сетью, (n) — количество примеров в обучающей выборке. Эта формула позволяет количественно оценить степень отклонения сети от правильного ответа.
В Brain.js матрица ошибок формируется на этапе обратного распространения ошибки (backpropagation). Она представляет собой многомерный массив, где хранятся значения градиентов для каждого веса нейронной сети. Каждый элемент матрицы отражает:
Для полносвязной сети матрица ошибок соответствует вектору градиентов на каждом слое. Для рекуррентной сети структура сложнее: ошибка распространяется не только по слоям, но и по временной оси, что требует аккуратного хранения промежуточных градиентов.
Алгоритм обратного распространения работает по шагам:
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 происходит формирование матрицы ошибок по
всем временным шагам и слоям, что позволяет сети учиться предсказывать
последовательности слов с минимальной общей ошибкой.