Работа с многомерными входами и выходами

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

Многомерные входные данные

Многомерные входы представляют собой векторы или матрицы значений, где каждая строка соответствует одному объекту, а столбцы — признакам объекта. В ml5.js для работы с такими данными используется объект NeuralNetwork, который позволяет автоматически масштабировать входы и управлять размерностью.

Пример структуры многомерного входа:

const trainingData = [
  { input: { x: 0.1, y: 0.2, z: 0.5 }, output: { label: 'A' } },
  { input: { x: 0.3, y: 0.6, z: 0.1 }, output: { label: 'B' } },
  { input: { x: 0.8, y: 0.4, z: 0.9 }, output: { label: 'C' } }
];

В этом примере каждый объект имеет три признака x, y, z, что делает входную матрицу размерностью N x 3, где N — количество объектов в обучающем наборе.

Определение архитектуры нейросети

Для работы с многомерными входами нужно задать конфигурацию сети с учетом количества признаков. В ml5.js это делается через опции при создании NeuralNetwork:

const options = {
  task: 'classification',
  debug: true,
  inputs: ['x', 'y', 'z'],
  outputs: ['label']
};

const nn = ml5.neuralNetwork(options);

Ключевой момент: inputs и outputs должны соответствовать названиям ключей в тренировочных данных. Для регрессии outputs задаются числовыми значениями.

Добавление данных и подготовка к обучению

После создания сети необходимо добавить данные:

trainingData.forEach(item => nn.addData(item.input, item.output));

Подготовка данных к обучению включает нормализацию признаков, что критично для корректной работы с многомерными данными:

nn.normalizeData();

Нормализация автоматически масштабирует значения каждого признака в диапазон [0,1], что предотвращает доминирование одного признака над другими.

Настройка параметров обучения

Многомерные выходы требуют особого внимания к выбору функции потерь и метрики. В ml5.js для классификации используется categoricalCrossentropy, для регрессии — meanSquaredError. Параметры обучения задаются через объект trainOptions:

const trainOptions = {
  epochs: 100,
  batchSize: 12
};

nn.train(trainOptions, whileTraining, finishedTraining);

Функция whileTraining позволяет отслеживать прогресс обучения:

function whileTraining(epoch, loss) {
  console.log(`Эпоха: ${epoch}, Потеря: ${loss.loss}`);
}

Работа с многомерными выходами

Многомерный выход — это несколько предсказаний одновременно, например, координаты точки в пространстве или вероятности нескольких классов. Для примера регрессии с тремя выходами:

const outputData = [
  { input: { x: 0.1, y: 0.2, z: 0.3 }, output: { a: 0.5, b: 0.7, c: 0.2 } },
  { input: { x: 0.4, y: 0.6, z: 0.1 }, output: { a: 0.2, b: 0.9, c: 0.3 } }
];

const options = {
  task: 'regression',
  debug: true,
  inputs: ['x', 'y', 'z'],
  outputs: ['a', 'b', 'c']
};

const nn = ml5.neuralNetwork(options);
outputData.forEach(item => nn.addData(item.input, item.output));
nn.normalizeData();
nn.train({ epochs: 200 });

После обучения модель способна предсказывать сразу три значения для каждого набора входных данных:

nn.predict({ x: 0.2, y: 0.4, z: 0.6 }, (err, results) => {
  console.log(results); // [{ a: 0.45, b: 0.72, c: 0.28 }]
});

Рекомендации по работе с многомерными данными

  • Сбалансированность признаков: все входные признаки должны быть приведены к одинаковому масштабу для предотвращения доминирования одного признака.
  • Корреляция признаков: при высоко коррелированных признаках может возникнуть переобучение. Важно предварительно анализировать данные.
  • Выбор архитектуры сети: сложные зависимости между многомерными входами и выходами требуют более глубоких слоев, но увеличение числа слоев повышает риск переобучения.
  • Валидация модели: для проверки качества прогнозов рекомендуется выделять часть данных в тестовый набор, особенно при многомерных выходах.

Интеграция с другими типами данных

Многомерные входы и выходы легко комбинируются с изображениями, звуком и сенсорными потоками, используя возможности ml5.js для предварительной обработки. Например, признаки изображения можно представить как многомерный вектор, который затем подается на нейросеть вместе с числовыми данными из сенсоров.

Отладка и визуализация

ml5.js поддерживает вывод статистики обучения и визуализацию ошибок через callback whileTraining. Для сложных многомерных задач рекомендуется строить графики потерь и прогнозов по каждому выходу, чтобы оценить эффективность модели на каждом компоненте выходного вектора.