Нормализация и стандартизация

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

Основные понятия

Нормализация — это приведение значений признаков к определённому диапазону, чаще всего [0, 1] или [-1, 1]. Цель нормализации — исключить влияние различной шкалы признаков на обучение модели.

Стандартизация — процесс преобразования данных так, чтобы они имели среднее значение 0 и стандартное отклонение 1. Стандартизация особенно эффективна, когда данные имеют распределение, близкое к нормальному, и важна для нейронных сетей с активациями, чувствительными к масштабу входов, например, tanh или sigmoid.

Методы нормализации и стандартизации

  1. Min-Max нормализация Формула: [ x’ = ] где (x) — исходное значение признака, (x_) и (x_) — минимальное и максимальное значения признака. После нормализации все значения находятся в диапазоне [0, 1].

  2. Z-преобразование (стандартизация) Формула: [ x’ = ] где () — среднее значение признака, () — стандартное отклонение. В результате получаем признаки с нулевым средним и единичной дисперсией.

  3. Нормализация вектором Используется для нормализации строк матрицы данных по длине вектора (L1 или L2 нормы): [ x’ = ] где (|x|) — выбранная норма вектора. Часто применяется при работе с изображениями или текстовыми признаками.

Интеграция с Keras.js

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));
}

Влияние на работу модели

  1. Сходимость градиентного спуска Нормализованные данные ускоряют обучение и помогают избежать проблем с затухающими или взрывающимися градиентами.

  2. Стабильность предсказаний Стандартизированные признаки обеспечивают одинаковое влияние каждого признака на выход модели, что повышает качество предсказаний.

  3. Совместимость с активациями Некоторые функции активации чувствительны к масштабу входа. Например, tanh оптимально работает, если данные находятся в диапазоне [-1, 1].

Практические рекомендации

  • Для изображений чаще используется нормализация в диапазоне [0,1] или стандартизация с центром 0.
  • Для табличных данных — стандартизация с Z-преобразованием.
  • Минимизировать вычислительные расходы в браузере можно за счёт предвычисления средних и стандартных отклонений на сервере.
  • Сохранять параметры нормализации (min, max, mean, std) для последующего применения на новых данных, чтобы избежать смещения модели.

Подготовка данных для Keras.js

  1. Преобразование изображений в массивы чисел (Float32Array или Array).
  2. Применение нормализации или стандартизации перед передачей в model.predict().
  3. Убедиться, что размерность данных соответствует входу модели.

Эффективная нормализация и стандартизация данных позволяют нейронной сети быстрее адаптироваться к задаче и обеспечивают корректную работу модели при переносе с Python Keras на Keras.js.