Подготовка обучающей выборки

Подготовка обучающей выборки является ключевым этапом при работе с нейронными сетями в библиотеке ConvNetJS. От корректности и структуры данных зависит точность обучения, скорость сходимости и общая эффективность модели.

Форматы данных

ConvNetJS поддерживает несколько типов входных данных:

  1. Векторы (Vector Input) Каждый объект представлен одномерным массивом чисел. Например, для задачи классификации числовых признаков можно использовать Vol объект:

    var x = new convnetjs.Vol([0.1, 0.5, -0.3]);

    Здесь Vol — базовый контейнер для всех данных, включая изображения и векторы признаков.

  2. Изображения (Image Input) Для изображений данные должны быть представлены в виде многомерного тензора (width, height, depth). Глубина depth соответствует количеству каналов (например, 3 для RGB).

    var img = new convnetjs.Vol(width, height, depth);
    // Заполнение данных пикселей
    for(var i=0; i<width*height*depth; i++) {
        img.w[i] = pixelValue[i]; // pixelValue от 0 до 1
    }

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

  3. Метки (Labels) Для задач классификации используется целочисленная метка label от 0 до N-1, где N — количество классов. Метки напрямую передаются в функцию train при обучении модели:

    trainer.train(x, label);

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

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

  1. Min-Max нормализация: Приведение значений признаков к диапазону [0,1] или [-1,1].

    var normalized = (value - min) / (max - min);
  2. Z-score стандартизация: Центрирование данных относительно среднего и масштабирование по стандартному отклонению:

    var standardized = (value - mean) / std;

Для изображений чаще всего используется нормализация через деление на 255 или стандартизация каждого канала.

Разделение данных

Для корректной оценки модели необходимо разделять выборку на три части:

  • Обучающая (Training Set) — основной набор для обновления весов сети.
  • Валидационная (Validation Set) — используется для контроля переобучения и подбора гиперпараметров.
  • Тестовая (Test Set) — окончательная проверка качества модели на невидимых данных.

Пример разбиения массива изображений:

var trainData = allData.slice(0, Math.floor(0.8*allData.length));
var valData = allData.slice(Math.floor(0.8*allData.length), Math.floor(0.9*allData.length));
var testData = allData.slice(Math.floor(0.9*allData.length));

Аугментация данных

Для повышения обобщающей способности сети целесообразно применять аугментацию:

  • Повороты и отражения
  • Масштабирование и кроппинг
  • Изменение яркости и контраста

Пример аугментации изображения в ConvNetJS:

function augmentImage(vol) {
    // случайный горизонтальный флип
    if(Math.random() > 0.5) {
        vol = horizontalFlip(vol);
    }
    // небольшое смещение
    vol = translate(vol, Math.floor(Math.random()*3)-1, Math.floor(Math.random()*3)-1);
    return vol;
}

Аугментация увеличивает разнообразие данных без необходимости собирать дополнительные примеры.

Формирование батчей

Обучение нейронной сети на отдельных примерах неэффективно. ConvNetJS использует батчи, группы объектов, которые одновременно подаются в сеть:

var batchSize = 32;
for(var i=0; i<trainData.length; i+=batchSize) {
    var batch = trainData.slice(i, i+batchSize);
    batch.forEach(function(example) {
        trainer.train(example.vol, example.label);
    });
}

Батчи улучшают скорость обучения и стабилизируют градиенты.

Особенности Vol

Объект Vol является основным контейнером данных в ConvNetJS и имеет несколько ключевых свойств:

  • w — одномерный массив весов или значений признаков.
  • dw — массив градиентов, который используется в процессе обратного распространения ошибки.
  • sx, sy, depth — размеры тензора по осям.

Для подготовки обучающих данных необходимо создавать Vol для каждого объекта и заполнять массив w нормализованными значениями признаков или пикселей.

Итоговые рекомендации

  • Использовать Vol для каждого элемента данных.
  • Приводить все признаки к одинаковой шкале через нормализацию или стандартизацию.
  • Разделять данные на тренировочные, валидационные и тестовые наборы.
  • Применять аугментацию для увеличения объема и разнообразия обучающих данных.
  • Формировать батчи для стабильного и эффективного обучения.

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