Метод Trainer.test и оценка на тестовой выборке

Библиотека Synaptic предоставляет инструменты для построения, обучения и тестирования нейронных сетей в JavaScript. Одним из ключевых аспектов работы с нейронными сетями является проверка их качества на данных, которые не использовались при обучении. Для этих целей используется метод Trainer.test.


Основные принципы работы метода Trainer.test

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

Синтаксис метода:

trainer.test(testSet)

где:

  • trainer — объект класса Trainer, связанный с обучаемой сетью.
  • testSet — массив объектов формата { input: [...], output: [...] }.

Метод возвращает объект с ключевыми метриками, позволяющими оценить точность сети.


Структура тестового набора

Тестовая выборка строится аналогично обучающей:

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

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


Метрики оценки

Метод test возвращает объект с двумя основными параметрами:

  1. error — среднеквадратичная ошибка (MSE, mean squared error) по всем образцам теста.

    Формула для одной выборки:

    [ = _{i=1}^{n} (y_i - _i)^2]

    где ( y_i ) — ожидаемый результат, ( _i ) — предсказанный результат сети, ( n ) — количество выходных нейронов.

  2. success — доля корректных предсказаний, если результат можно оценивать бинарно (0 или 1). Обычно применяется для классификации.

Пример структуры результата:

{
    error: 0.023,
    success: 0.95
}

Важно: метрика success имеет смысл только в задачах классификации. Для регрессии следует ориентироваться на error.


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

Для сети, решающей задачу XOR:

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

// Создание сети: 2 входа, 3 скрытых нейрона, 1 выход
const inputLayer = new Layer(2);
const hiddenLayer = new Layer(3);
const outputLayer = new Layer(1);

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

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

const trainer = new Trainer(xorNetwork);

// Обучение сети
trainer.train([
    { input: [0, 0], output: [0] },
    { input: [0, 1], output: [1] },
    { input: [1, 0], output: [1] },
    { input: [1, 1], output: [0] }
], {
    rate: 0.3,
    iterations: 20000,
    error: 0.005,
    shuffle: true,
    log: 1000,
    cost: Trainer.cost.MSE
});

// Создание тестовой выборки
const testSet = [
    { input: [0, 0], output: [0] },
    { input: [0, 1], output: [1] },
    { input: [1, 0], output: [1] },
    { input: [1, 1], output: [0] }
];

// Проверка сети на тестовых данных
const testResult = trainer.test(testSet);

console.log('Ошибка:', testResult.error);
console.log('Успех:', testResult.success);

В этом примере после обучения сеть демонстрирует практически 100% точность на тестовой выборке.


Особенности работы с различными задачами

  1. Классификация:

    • Если выход сети интерпретируется как вероятность принадлежности к классу, для success применяется порог 0.5.
    • Можно использовать более строгие пороги для многоклассовых задач.
  2. Регрессия:

    • Для непрерывных выходов success часто не используется.
    • Основной показатель — error (MSE, SSE или другой выбранный критерий).
  3. Многоклассовые задачи:

    • Для одной горячей кодировки (one-hot) success считается как совпадение индекса максимального значения предсказания и индекса истинного класса.

Влияние параметров обучения на результат тестирования

Качество сети на тестовой выборке напрямую зависит от параметров обучения:

  • rate (скорость обучения): слишком большая — сеть не сходится, слишком маленькая — обучение медленное.
  • iterations: недостаточное количество итераций приводит к недообучению, чрезмерное — к переобучению.
  • shuffle: перемешивание данных повышает способность к генерализации.
  • cost: выбор функции ошибки влияет на способ оптимизации сети.

Правильная комбинация этих параметров обеспечивает минимальное error и максимальный success.


Практические советы

  • Всегда отделять тестовую выборку от обучающей.
  • Для маленьких наборов данных использовать кросс-валидацию.
  • Анализировать обе метрики (error и success) для комплексной оценки сети.
  • Следить за переобучением: низкая ошибка на обучении и высокая на тесте — признак переобучения.

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