Рекуррентные нейронные сети (RNN, Recurrent Neural Networks) предназначены для обработки данных, обладающих последовательной структурой: текста, временных рядов, аудиосигналов, последовательностей событий. Ключевое отличие RNN от обычных полносвязных сетей состоит в наличии состояния памяти, которое переносится между шагами последовательности. Это позволяет сети учитывать контекст предыдущих элементов при анализе текущего.
RNN можно рассматривать как цепочку повторяющихся модулей, каждый из которых принимает на вход текущий элемент последовательности и скрытое состояние, сформированное на предыдущем шаге. Формально работа одного временного шага описывается выражениями:
[ h_t = h(W{xh} x_t + W_{hh} h_{t-1} + b_h)]
[ y_t = y(W{hy} h_t + b_y)]
где:
Особенность: скрытое состояние (h_t) аккумулирует информацию обо всех предыдущих входах, что позволяет сети моделировать зависимости во времени.
В библиотеке Brain.js RNN реализованы через класс
recurrent.LSTM или recurrent.RNN. Для работы с
последовательностями используются объекты, представляющие
векторы или строки, а сеть обучается прогнозировать
следующий элемент или классифицировать последовательность.
const brain = require('brain.js');
const net = new brain.recurrent.LSTM({
inputSize: 10, // Размерность входного вектора
hiddenLayers: [20, 20], // Количество нейронов в скрытых слоях
outputSize: 10, // Размерность выходного вектора
learningRate: 0.01, // Скорость обучения
});
inputSize и outputSize определяют форму
входных и выходных данных.hiddenLayers задаёт глубину сети и количество нейронов
в каждом скрытом слое.learningRate контролирует скорость корректировки весов
при обучении.RNN требует, чтобы данные были представлены в последовательной форме. Для текстовых задач это обычно строки, для числовых — массивы чисел. В Brain.js можно использовать:
const trainingData = [
{ input: "привет", output: "здравствуй" },
{ input: "как дела", output: "хорошо" },
];
Каждая пара input-output представляет шаги
последовательности, которые сеть будет использовать для
обучения.
net.train(trainingData, {
iterations: 2000,
log: true,
logPeriod: 100,
errorThresh: 0.005
});
iterations — максимальное число проходов по всему
набору данных.log и logPeriod позволяют отслеживать
прогресс обучения.errorThresh задаёт порог ошибки для завершения
обучения.const output = net.run("привет");
console.log(output); // Выдаст наиболее вероятный результат для последовательности
RNN возвращает следующий элемент последовательности или прогноз для текущей входной последовательности на основе накопленного состояния.
LSTM, что делает работу
с длинными текстами и временными рядами более устойчивой.RNN в Brain.js обеспечивает мощный инструмент для работы с последовательными данными, позволяя прогнозировать элементы, классифицировать строки и моделировать временные зависимости. Правильная подготовка данных, настройка архитектуры сети и контроль параметров обучения критически важны для эффективного использования RNN в практических задачах.