В машинном обучении корректная обработка данных является критически важной для стабильной и быстрой сходимости моделей. В контексте использования Keras.js, библиотеки, позволяющей запускать модели Keras непосредственно в браузере на JavaScript, процессы нормализации и стандартизации данных занимают центральное место.
Нормализация — это приведение значений признаков к определённому диапазону, чаще всего [0, 1] или [-1, 1]. Цель нормализации — исключить влияние различной шкалы признаков на обучение модели.
Стандартизация — процесс преобразования данных так, чтобы они имели среднее значение 0 и стандартное отклонение 1. Стандартизация особенно эффективна, когда данные имеют распределение, близкое к нормальному, и важна для нейронных сетей с активациями, чувствительными к масштабу входов, например, tanh или sigmoid.
Min-Max нормализация Формула: [ x’ = ] где (x) — исходное значение признака, (x_) и (x_) — минимальное и максимальное значения признака. После нормализации все значения находятся в диапазоне [0, 1].
Z-преобразование (стандартизация) Формула: [ x’ = ] где () — среднее значение признака, () — стандартное отклонение. В результате получаем признаки с нулевым средним и единичной дисперсией.
Нормализация вектором Используется для нормализации строк матрицы данных по длине вектора (L1 или L2 нормы): [ x’ = ] где (|x|) — выбранная норма вектора. Часто применяется при работе с изображениями или текстовыми признаками.
Keras.js не предоставляет встроенные функции для нормализации данных
на уровне API, как это делает Python Keras с preprocessing.
Поэтому нормализация и стандартизация выполняются на стороне JavaScript
до передачи данных в модель.
Пример стандартизации входного изображения:
function standardizeImage(imageData) {
const mean = 127.5;
const std = 127.5;
const standardized = new Float32Array(imageData.length);
for (let i = 0; i < imageData.length; i++) {
standardized[i] = (imageData[i] - mean) / std;
}
return standardized;
}
Пример нормализации значений признаков в диапазон [0,1]:
function normalizeFeatures(features) {
const min = Math.min(...features);
const max = Math.max(...features);
return features.map(x => (x - min) / (max - min));
}
Сходимость градиентного спуска Нормализованные данные ускоряют обучение и помогают избежать проблем с затухающими или взрывающимися градиентами.
Стабильность предсказаний Стандартизированные признаки обеспечивают одинаковое влияние каждого признака на выход модели, что повышает качество предсказаний.
Совместимость с активациями Некоторые функции
активации чувствительны к масштабу входа. Например, tanh
оптимально работает, если данные находятся в диапазоне [-1, 1].
min,
max, mean, std) для последующего
применения на новых данных, чтобы избежать смещения модели.Float32Array или Array).model.predict().Эффективная нормализация и стандартизация данных позволяют нейронной сети быстрее адаптироваться к задаче и обеспечивают корректную работу модели при переносе с Python Keras на Keras.js.