Нормализация — критически важный этап подготовки
данных при работе с нейронными сетями в Brain.js. Она заключается в
приведении исходных числовых значений к диапазону, удобному для
обработки сетью, чаще всего в интервал [0, 1] или
[-1, 1]. Без нормализации обучение может проходить медленно
или вовсе не приводить к корректным результатам из-за слишком больших
или слишком малых чисел.
Нейронные сети обучаются с использованием градиентного спуска. Если значения входных данных сильно различаются по масштабу, градиенты могут либо исчезать, либо взрываться. Например, если одна переменная варьируется от 0 до 1, а другая — от 0 до 1000, то вес, связанный с большой переменной, будет доминировать, что приведет к неустойчивому обучению. Нормализация решает эту проблему.
Мин–Макс нормализация Преобразует значения в
заданный диапазон [0, 1] или [-1, 1] по
формуле:
x_norm = (x - min) / (max - min)
Для диапазона [-1, 1] используется преобразование:
x_norm = 2 * (x - min) / (max - min) - 1
Этот метод прост и широко применяется в Brain.js, особенно при работе с полносвязными сетями.
Нормализация Z-оценкой (Standardization) Преобразует данные так, чтобы они имели среднее значение 0 и стандартное отклонение 1:
x_norm = (x - mean) / std
Этот подход эффективен при работе с переменными, у которых разброс
значений сильно различается, однако Brain.js чаще использует мин–макс
нормализацию для простоты и совместимости с функцией активации
sigmoid и tanh.
Бинаризация данных Если входные данные являются
категориальными или представляют собой дискретные значения, их можно
преобразовать в бинарные векторы (one-hot encoding) или
простые числа от 0 до 1. Brain.js корректно работает с такими входами,
но важно сохранять согласованность между обучающими и тестовыми
данными.
Для нормализации данных в Brain.js используется подготовка массива
объектов, где входные данные (input) и выходные
(output) уже нормализованы:
const trainingData = [
{ input: { x: 0.1, y: 0.5 }, output: { result: 0 } },
{ input: { x: 0.7, y: 0.2 }, output: { result: 1 } },
];
Если исходные данные имеют произвольный диапазон, сначала необходимо выполнить нормализацию:
function minMaxNormalize(value, min, max) {
return (value - min) / (max - min);
}
// Пример подготовки данных
const rawData = [
{ x: 10, y: 200, result: 0 },
{ x: 50, y: 800, result: 1 },
];
const xValues = rawData.map(d => d.x);
const yValues = rawData.map(d => d.y);
const xMin = Math.min(...xValues);
const xMax = Math.max(...xValues);
const yMin = Math.min(...yValues);
const yMax = Math.max(...yValues);
const trainingData = rawData.map(d => ({
input: {
x: minMaxNormalize(d.x, xMin, xMax),
y: minMaxNormalize(d.y, yMin, yMax),
},
output: { result: d.result },
}));
После нормализации данные готовы для обучения сети Brain.js.
[0, 1],
рекомендуется нормализовать входные данные в [0, 1].[-1, 1], следует
нормализовать входные данные соответственно.Некорректная нормализация может привести к тому, что выходные значения будут за пределами ожидаемого диапазона функции активации, что ухудшает качество обучения.
Нормализация числовых данных является фундаментальной практикой при работе с Brain.js. Правильная подготовка входов позволяет нейронной сети быстрее обучаться, обеспечивать точные прогнозы и корректно использовать функции активации без риска нестабильности.