Встроенные тесты Trainer: XOR, AND, discrete sequence recall, appending, corxor, timingTask

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

Класс Trainer

Класс Trainer в Synaptic служит для автоматизации процесса обучения сети. Он предоставляет набор встроенных тестов, которые можно использовать для проверки корректности работы модели на стандартных задачах. Trainer позволяет использовать разные стратегии обучения, включая stochastic gradient descent (SGD), мини-батчи и адаптивные скорости обучения.

Методы и свойства Trainer

  • train(trainingSet, options) — основной метод обучения, где trainingSet задаёт входные и выходные данные, а options — параметры обучения (число эпох, скорость обучения, функция ошибки, обратное распространение).
  • test(testSet) — метод для проверки точности сети на тестовых данных.
  • trainAsync(trainingSet, options) — асинхронная версия train, полезна для больших наборов данных.
  • Встроенные функции для визуализации прогресса обучения и логирования ошибок.

Встроенные тесты

XOR

Задача XOR является классическим примером обучения многослойного перцептрона. Сеть получает два бинарных входа и должна вычислить их исключающее ИЛИ.

  • Входы: [0,0], [0,1], [1,0], [1,1]
  • Выходы: [0], [1], [1], [0]

Для успешного обучения сети необходимо использовать хотя бы один скрытый слой, так как XOR не является линейно разделимой функцией. Trainer позволяет задавать количество эпох, скорость обучения и функцию ошибки, например Trainer.MSE.

AND

Тест AND представляет собой простую линейную задачу, где сеть должна реализовать логическую операцию “И”.

  • Входы: [0,0], [0,1], [1,0], [1,1]
  • Выходы: [0], [0], [0], [1]

Эта задача хорошо подходит для проверки базового обучения нейронной сети без скрытых слоёв, поскольку функция линейна.

Discrete Sequence Recall

Задача discrete sequence recall предназначена для обучения сети запоминанию последовательностей дискретных сигналов. Сеть получает последовательность на входе и должна воспроизвести её на выходе через несколько тактов времени.

  • Используется рекуррентная архитектура.
  • Trainer позволяет задать длину последовательности, количество итераций и скорость обучения.
  • Встроенные тесты проверяют способность сети хранить и воспроизводить последовательности различной длины.

Appending

Задача appending проверяет способность сети к обучению операций над последовательностями, таких как добавление нового элемента в конец последовательности.

  • Вход: последовательность + новый элемент
  • Выход: полная последовательность с добавленным элементом
  • Используется для моделирования динамического роста данных во временных рядах.
  • Trainer предоставляет метрики точности на каждом шаге добавления.

Corxor

Тест corxor представляет собой усовершенствованную задачу XOR, где на вход подаются коррелированные бинарные данные, и сеть должна вычислять сложное нелинейное сочетание этих входов.

  • Задача предназначена для проверки способности сети к распознаванию сложных зависимостей.
  • Подходит для сетей с несколькими скрытыми слоями и нелинейными активациями.
  • Trainer позволяет контролировать параметры обучения и динамику ошибки.

TimingTask

TimingTask используется для обучения сети реагированию на события с определённой задержкой.

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

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

При работе с Trainer важно корректно выбирать следующие параметры:

  • iterations — количество эпох обучения.
  • rate — скорость обучения.
  • error — целевое значение ошибки.
  • shuffle — перемешивание обучающего набора для предотвращения переобучения.
  • log — функция для логирования прогресса обучения, часто используется для визуализации сходимости.

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

const synaptic = require('synaptic');
const { Layer, Network, Trainer } = 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);

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

trainer.train(trainingSet, {
  rate: 0.1,
  iterations: 20000,
  error: 0.005,
  shuffle: true,
  log: 1000
});

В этом примере создаётся простая сеть для решения задачи XOR с одним скрытым слоем. Trainer позволяет отслеживать динамику обучения каждые 1000 итераций и завершить процесс, когда ошибка достигает заданного порога.

Особенности работы встроенных тестов

  • Все встроенные тесты Trainer имеют стандартные шаблоны входных и выходных данных.
  • Использование этих тестов помогает быстро проверить корректность архитектуры сети и методы обучения.
  • Для рекуррентных задач Trainer автоматически управляет временными шагами, что упрощает работу с последовательными данными.

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