Создание объекта Trainer

В библиотеке Synaptic объект Trainer служит для организации процесса обучения нейронной сети. Он предоставляет высокоуровневые методы для управления обучением, включая настройку параметров, обучение с различными видами данных и контроль точности сети. Trainer является удобным инструментом для автоматизации повторяющихся операций обучения и упрощения интеграции нейросетей в приложения.

Инициализация объекта Trainer

Для создания Trainer используется конструктор:

const trainer = new synaptic.Trainer(network);

Параметры конструктора:

  • network — объект сети, который будет обучаться. Это может быть любой экземпляр класса Layer или Network.

Пример:

const { Layer, Network, Trainer } = require('synaptic');

const inputLayer = new Layer(2);
const hiddenLayer = new Layer(3);
const outputLayer = new Layer(1);

inputLayer.project(hiddenLayer);
hiddenLayer.project(outputLayer);

const myNetwork = new Network({
    input: inputLayer,
    hidden: [hiddenLayer],
    output: outputLayer
});

const trainer = new Trainer(myNetwork);

В этом примере создается трехслойная сеть и объект Trainer, связанный с этой сетью.

Методы объекта Trainer

Trainer предоставляет несколько методов для обучения сети и анализа результатов. Основные из них:

  1. train(trainingSet, options)

Метод train используется для непосредственного обучения сети.

Параметры:

  • trainingSet — массив объектов с полями input и output, представляющих обучающие данные.

  • options — объект с настройками обучения:

    • rate — скорость обучения (по умолчанию 0.3).
    • iterations — количество итераций обучения (по умолчанию 20000).
    • error — минимальная допустимая ошибка (по умолчанию 0.005).
    • shuffle — флаг перемешивания данных на каждой итерации (по умолчанию true).
    • log — интервал логирования ошибок (число или функция).
    • cost — функция вычисления ошибки (Trainer.cost.MSE по умолчанию).

Пример использования:

const trainingData = [
    { input: [0, 0], output: [0] },
    { input: [0, 1], output: [1] },
    { input: [1, 0], output: [1] },
    { input: [1, 1], output: [0] }
];

trainer.train(trainingData, {
    rate: 0.1,
    iterations: 5000,
    error: 0.005,
    log: 100,
    cost: Trainer.cost.MSE
});
  1. trainAsync(trainingSet, options)

Асинхронная версия метода train, позволяющая не блокировать основной поток выполнения. Полезна при работе с большими наборами данных. Возвращает Promise, который завершает работу после окончания обучения.

  1. test(testSet, options)

Метод test оценивает точность сети на тестовом наборе данных. Возвращает объект с метриками: средняя ошибка, количество корректных и некорректных ответов.

const results = trainer.test([
    { input: [0, 0], output: [0] },
    { input: [0, 1], output: [1] }
]);

console.log(results);
  1. export()

Метод export позволяет сохранить обученную сеть в виде JSON для последующего восстановления:

const exportedNetwork = trainer.export();

Настройка функций стоимости

Trainer поддерживает несколько стандартных функций стоимости ошибки:

  • Trainer.cost.MSE — среднеквадратичная ошибка (Mean Squared Error). Наиболее часто используемая функция для регрессии.
  • Trainer.cost.CROSS_ENTROPY — кросс-энтропия, эффективна для задач классификации.
  • Trainer.cost.BINARY — бинарная ошибка, применяется для бинарных выходов.

Можно задавать пользовательские функции стоимости:

Trainer.cost.myCustomCost = function(target, output) {
    let sum = 0;
    for (let i = 0; i < target.length; i++) {
        sum += Math.abs(target[i] - output[i]);
    }
    return sum / target.length;
};

И затем использовать в train:

trainer.train(trainingData, { cost: Trainer.cost.myCustomCost });

Особенности работы Trainer

  • Перемешивание данных: По умолчанию shuffle установлен в true, что предотвращает заучивание порядка данных и улучшает обобщающую способность сети.

  • Логирование: Параметр log позволяет отслеживать прогресс обучения. Можно указать число (интервал итераций) или функцию, которая получает текущий объект options и может выводить дополнительные данные.

  • Поддержка асинхронности: Для больших сетей и наборов данных рекомендуется использовать trainAsync, чтобы не блокировать интерфейс или основной поток приложения.

  • Гибкость: Trainer совместим с любыми сетями Synaptic, включая сложные многослойные и рекуррентные архитектуры. Это делает его универсальным инструментом для обучения и тестирования сетей.

Примеры применения

  1. Обучение сети XOR: Традиционный пример использования Trainer для обучения сети решать задачу XOR.

  2. Распознавание образов: Trainer может использоваться для обучения нейросетей на изображениях или векторных представлениях данных, с использованием MSE или кросс-энтропии в зависимости от типа задачи.

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

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