Гated Recurrent Unit (GRU) представляет собой разновидность рекуррентной нейронной сети (RNN), созданную для решения проблемы долгосрочной зависимости в последовательных данных. GRU был предложен как упрощённая альтернатива LSTM, сохраняя ключевую способность к запоминанию информации на длительные промежутки времени, но с меньшим числом параметров и более простой архитектурой.
GRU состоит из двух основных компонентов: обновляющего гейта (update gate) и сброса гейта (reset gate). Эти гейты контролируют поток информации через нейрон, позволяя сети выбирать, какую информацию сохранять, а какую игнорировать.
[ z_t = (W_z x_t + U_z h_{t-1} + b_z)]
где (x_t) — входной вектор на текущем временном шаге, (h_{t-1}) — скрытое состояние предыдущего шага, (W_z) и (U_z) — обучаемые матрицы весов, (b_z) — смещение, () — сигмоидальная функция активации.
[ r_t = (W_r x_t + U_r h_{t-1} + b_r)]
[ t = (W_h x_t + U_h (r_t h{t-1}) + b_h)]
[ h_t = (1 - z_t) h_{t-1} + z_t _t]
Здесь () обозначает поэлементное умножение. Обновляющий гейт смешивает старое и новое состояния, а сброс гейт определяет, какую часть прошлого состояния учитывать при формировании кандидата на новое скрытое состояние.
GRU упрощает LSTM, исключая отдельную память ячейки (C_t), оставляя одно скрытое состояние (h_t). Основные различия:
Библиотека Synaptic позволяет создавать рекуррентные сети, в том числе GRU, через кастомизацию слоев и нейронных связей. Структура GRU может быть реализована как последовательность слоев с обратной связью и управлением состояния через гейты.
Layer и
соединять их через project с обратной связью.const { Layer, Network } = require('synaptic');
// Скрытое состояние
const hidden = new Layer(10);
// Обновляющий гейт
const updateGate = new Layer(10);
// Сброс гейт
const resetGate = new Layer(10);
hidden.project(hidden); // рекуррентная связь
updateGate.project(hidden); // контроль нового состояния
resetGate.project(hidden);
Определение функции активации для гейтов: В
Synaptic можно задать sigmoid для гейтов и
tanh для кандидата на новое скрытое состояние.
Формирование GRU блока как Network: Объединение
всех слоев в единый объект Network позволяет обучать модель
на последовательных данных с помощью алгоритмов обратного
распространения через время (BPTT).
const gru = new Network({
input: inputLayer,
hidden: [hidden, updateGate, resetGate],
output: outputLayer
});
GRU становится оптимальным выбором для задач, где ресурсы ограничены, а долгосрочная зависимость данных требуется учитывать. В связке с Synaptic, благодаря модульной архитектуре, возможно создавать кастомные рекуррентные блоки с гибкой настройкой гейтов, скрытых состояний и активаций.