GRU (Gated Recurrent Unit) — это разновидность рекуррентной нейронной сети, созданная для решения задач, связанных с последовательными данными: временными рядами, текстом, аудио и другими потоками информации. GRU обеспечивает эффективное запоминание и обработку долгосрочных зависимостей, сохраняя преимущества LSTM при меньшей вычислительной сложности.
GRU состоит из двух основных управляющих ворот:
Update Gate (ворота обновления) Определяют, какую часть предыдущего состояния необходимо сохранить, а какую — заменить новым входом. Это позволяет сети гибко контролировать поток информации и предотвращать затухание градиентов при обучении.
Reset Gate (ворота сброса) Контролируют, насколько старое состояние должно влиять на создание нового состояния. Сброс ненужной информации помогает сети сосредоточиться на актуальных входных данных.
Формально состояние на шаге (t) вычисляется следующим образом:
[ z_t = (W_z x_t + U_z h_{t-1})] [ r_t = (W_r x_t + U_r h_{t-1})] [ t = (W x_t + U (r_t h{t-1}))] [ h_t = (1 - z_t) h_{t-1} + z_t _t]
где (z_t) — ворота обновления, (r_t) — ворота сброса, (_t) — кандидат состояния, (h_t) — новое скрытое состояние, () — поэлементное умножение, () — сигмоида.
Brain.js предоставляет простой интерфейс для работы с рекуррентными
сетями. Для создания GRU используется класс
recurrent.GRU.
const brain = require('brain.js');
// Инициализация сети GRU
const net = new brain.recurrent.GRU({
inputSize: 1, // размер входного вектора
hiddenLayers: [10], // скрытые слои с 10 нейронами
outputSize: 1, // размер выходного вектора
learningRate: 0.01 // скорость обучения
});
Параметры сети:
inputSize — размер входного вектора. В задачах с
числовыми временными рядами обычно равен 1.hiddenLayers — массив, задающий количество нейронов в
каждом скрытом слое.outputSize — размер выходного вектора.learningRate — скорость обучения, важна для сходимости
сети.GRU хорошо работает с последовательными данными. В Brain.js
последовательности представляются массивами чисел или объектов с ключом
input и output.
const trainingData = [
{ input: [1, 2, 3], output: [4] },
{ input: [2, 3, 4], output: [5] },
{ input: [3, 4, 5], output: [6] }
];
Для текстовых задач данные преобразуются в массивы символов или слов, а выход — в категориальные метки или последовательности.
Обучение GRU в Brain.js осуществляется методом train.
Можно задать дополнительные параметры для контроля процесса:
net.train(trainingData, {
iterations: 2000,
learningRate: 0.01,
log: true,
logPeriod: 100,
errorThresh: 0.005
});
Основные параметры обучения:
iterations — максимальное количество эпох.learningRate — скорость изменения весов.log и logPeriod — позволяют отслеживать
прогресс обучения.errorThresh — критерий остановки при достижении
минимальной ошибки.После обучения GRU можно использовать для предсказания следующего значения в последовательности или генерации текста.
const output = net.run([4, 5, 6]); // предсказание следующего элемента
console.log(output); // вывод результата
Сеть может работать с последовательностями произвольной длины благодаря рекуррентной структуре и управляемым воротам.
Для повышения качества модели можно:
run с последовательностью.GRU в Brain.js предоставляет компактный и эффективный инструмент для работы с последовательными данными. Управляющие ворота обеспечивают гибкость в обучении и позволяют сети запоминать значимые события в долгосрочной перспективе, сохраняя при этом простоту архитектуры и удобство интеграции в проекты на JavaScript.