Gated Recurrent Unit (GRU) является разновидностью рекуррентной нейронной сети (RNN), которая была разработана для упрощения архитектуры LSTM, сохранив при этом способность моделировать долгосрочные зависимости в последовательных данных. В отличие от LSTM, GRU имеет меньше компонентов и, как следствие, требует меньше вычислительных ресурсов, что делает её популярной в задачах обработки текста, временных рядов и аудио.
GRU состоит из двух основных элементов: обновляющего (update) и сбрасывающего (reset) гейтов. Эти гейты управляют потоком информации через скрытое состояние и позволяют сети эффективно хранить и извлекать важные данные без чрезмерного накопления или потери информации.
Обновляющий гейт (update gate)
определяет, какая часть предыдущего скрытого состояния сохраняется, а
какая обновляется новым значением:
[ z_t = (W_z )]
Сбрасывающий гейт (reset gate)
контролирует, насколько прошлое скрытое состояние влияет на текущее
состояние:
[ r_t = (W_r )]
Формирование нового скрытого состояния происходит через комбинацию текущего входа и модифицированного предыдущего состояния:
[ *t = (W )]
Окончательное скрытое состояние рассчитывается как линейная интерполяция между предыдущим состоянием и новым кандидатом:
[ h_t = (1 - z_t) * h_{t-1} + z_t * _t]
Такое упрощение по сравнению с LSTM исключает отдельное состояние памяти и выходной гейт, что уменьшает количество параметров и ускоряет обучение.
TensorFlow.js предоставляет удобный интерфейс для работы с GRU через
слой tf.layers.gru. Основные параметры слоя включают:
tanh);sigmoid по умолчанию);Пример создания модели с GRU:
import * as tf from '@tensorflow/tfjs';
const model = tf.sequential();
model.add(tf.layers.gru({
units: 128,
inputShape: [null, 50],
returnSequences: true,
recurrentActivation: 'sigmoid'
}));
model.add(tf.layers.dense({units: 10, activation: 'softmax'}));
model.compile({
optimizer: 'adam',
loss: 'categoricalCrossentropy',
metrics: ['accuracy']
});
В этом примере сеть принимает последовательности длиной произвольного размера, каждая с 50 признаками, и предсказывает распределение по 10 классам.
Преимущества GRU:
Ограничения:
GRU широко применяются в задачах прогнозирования временных рядов благодаря способности учитывать последовательную информацию без чрезмерного усложнения модели.
Типичный pipeline включает:
returnSequences
для промежуточных прогнозов или без него для прогнозирования следующего
значения;model.predict.Пример:
const gruLayer = tf.layers.gru({units: 64, returnSequences: false});
const outputLayer = tf.layers.dense({units: 1});
const timeSeriesModel = tf.sequential();
timeSeriesModel.add(tf.layers.inputLayer({inputShape: [20, 1]}));
timeSeriesModel.add(gruLayer);
timeSeriesModel.add(outputLayer);
timeSeriesModel.compile({
optimizer: 'adam',
loss: 'meanSquaredError'
});
Эта модель способна прогнозировать следующее значение ряда на основе 20 предыдущих точек.
GRU сочетает простоту и эффективность, предоставляя удобный инструмент для построения RNN с долгосрочной памятью в TensorFlow.js. Компактная структура слоя облегчает интеграцию в браузерные и серверные приложения на JavaScript, сохраняя при этом способность решать сложные задачи анализа последовательностей.