Нормализация входных данных является ключевым этапом при работе с нейронными сетями в библиотеке Synaptic. Правильная подготовка данных позволяет улучшить сходимость обучения, ускорить процесс тренировки и повысить точность модели.
Нейронные сети чувствительны к масштабам входных данных. Если значения сильно различаются по величине, функции активации могут работать неэффективно:
Минимум–Максимум (Min-Max Scaling)
Преобразование значения (x) в диапазон [0,1] или [-1,1] по формуле: [ x_{norm} = ] Для диапазона [-1, 1]: [ x_{norm} = 2 - 1]
Применение в Synaptic требует предварительной обработки массива входных данных перед передачей их в сеть.
Стандартизация (Standardization)
Преобразование входных данных для получения среднего 0 и стандартного отклонения 1: [ x_{std} = ] где ( ) — среднее значение признака, ( ) — стандартное отклонение. Стандартизация полезна для функций активации типа tanh и ReLU.
Логарифмическое и экспоненциальное масштабирование
Используется для данных с большим разбросом значений (например, финансовые показатели). Пример логарифмической нормализации: [ x_{log} = (x + 1)]
Synaptic не предоставляет встроенных функций нормализации, поэтому обработка входных данных выполняется вручную перед тренировкой сети. Пример нормализации массива чисел с помощью Min-Max Scaling:
function normalizeArray(arr, newMin = 0, newMax = 1) {
const min = Math.min(...arr);
const max = Math.max(...arr);
return arr.map(x => ((x - min) / (max - min)) * (newMax - newMin) + newMin);
}
// Пример использования
const rawInput = [15, 20, 35, 50, 80];
const normalizedInput = normalizeArray(rawInput, 0, 1);
После нормализации значения можно подавать на вход нейронной сети Synaptic:
const { Layer, Network, Trainer } = require('synaptic');
// Создание простой сети
const inputLayer = new Layer(5);
const hiddenLayer = new Layer(3);
const outputLayer = new Layer(1);
inputLayer.project(hiddenLayer);
hiddenLayer.project(outputLayer);
const network = new Network({
input: inputLayer,
hidden: [hiddenLayer],
output: outputLayer
});
// Тренировка
const trainer = new Trainer(network);
trainer.train([
{ input: normalizedInput, output: [0.5] }
], {
rate: 0.1,
iterations: 2000,
error: 0.005,
shuffle: true
});
Для многомерных входных данных нормализация выполняется по каждому признаку отдельно. Это важно, чтобы значения одного признака не доминировали над другими:
function normalizeMatrix(matrix) {
const cols = matrix[0].length;
const normalized = matrix.map(row => [...row]);
for (let j = 0; j < cols; j++) {
const colValues = matrix.map(row => row[j]);
const min = Math.min(...colValues);
const max = Math.max(...colValues);
for (let i = 0; i < matrix.length; i++) {
normalized[i][j] = (matrix[i][j] - min) / (max - min);
}
}
return normalized;
}
Нормализация входных данных является фундаментальным шагом при использовании Synaptic. Правильное масштабирование повышает эффективность обучения, предотвращает насыщение активаций и обеспечивает стабильную работу сети при различных входных данных. Она должна выполняться индивидуально для каждого признака и с сохранением параметров для последующих предсказаний.