Имеет ли SimpleRNN в Keras скрытое состояние, или оно просто использует выходное значение в качестве скрытого состояния?

Вопрос или проблема

При использовании tf.keras.layers.SimpleRNN возникает вопрос, есть ли у SimpleRNN скрытое состояние или используется ли оно просто как выходное состояние. То есть, следует ли он формулам $h_t = \tanh(w_h\cdot h_{t-1} + w_x\cdot x_{t-1}+b_h)$, $y_t = w_o\cdot h_t + b_o$? Или же $h_t=y_t$?

Если длина входных данных равна 5, и я создаю keras.layers.SimpleRNN(1), почему согласно сводке всего 6 параметров. Должно быть 5 для $w_x$, 1 для $b_h$, 1 для $w_h$, и возможно 2 на выход, всего 7 или 9.

Согласно моему опыту и этому статье, кажется, что SimpleRNN просто использует скрытое состояние как выход. Он не вычисляет отдельный выход. Это не указано явно в официальной документации.

Используя код ниже, вы можете сами убедиться, что состояние и выход всегда одинаковы.

inputs = np.random.random([2, 3, 1]).astype(np.float32)
simple_rnn = tf.keras.layers.SimpleRNN(4, return_state=True)

output, state = simple_rnn(inputs)

print(output)
print("====")
print(state)

Примечание: В Keras у каждого SimpleRNN есть только три различных весовых матрицы, и эти веса общие для всех входных ячеек;
Другими словами, для всех пяти ячеек в вашей сети:
\begin{align}
h_t = tanh( w_{h} h_{t-1} + w_{x} x_{t} + b_h)\ ; t= 1..5
\end{align}

Для более глубокого понимания рекуррентных сетей в Keras, вам может быть интересно прочитать эту содержательную статью: Mohit Mayank – A practical guide to RNN and LSTM in Keras.

.

Ответ или решение

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

Теория

В общих чертах, рекуррентная нейронная сеть (РНС) включает в себя множество состояний, которые изменяются со временем. Основная идея заключается в том, что гхдаы—или состояния—представляют информацию о предыдущих временных шагах, что позволяет модели "помнить" контекст из прошлого для более точных предсказаний.

В терминах SimpleRNN написанного на Keras, скрытое состояние h_t может быть определено формулой:

[ h_t = \tanh(wh \cdot h{t-1} + w_x \cdot x_t + b_h) ]

Простое уравнение показывает, что скрытое состояние h_t зависит от предыдущего состояния h_{t-1}, текущего входного вектора x_t и их соответствующих весов и смещений. После вычисления данного скрытого состояния, оно может быть передано как следующее состояние в цепочке, таким образом, продолжая цикл обучения.

Пример

Важно понимать как выглядят вычисления в SimpleRNN, чтобы воспользоваться всем её потенциалом. Пример написанного кода и визуализация результатов могу быть полезными для лучшего понимания данной концепции. Возьмем следующий отрывок кода:

inputs = np.random.random([2, 3, 1]).astype(np.float32)
simple_rnn = tf.keras.layers.SimpleRNN(4, return_state=True)

output, state = simple_rnn(inputs)

print(output)
print("====")
print(state)

Что вы видите на выходе? Вы заметите, что значения output и state идентичны. Это подтверждает, что в случае SimpleRNN, выходное состояние h_t совпадает с output, т.е., нет отдельной системы для вычисления выходного значения.

Применение

Теперь, почему же количество параметров в SimpleRNN не увеличивается при использовании множества временных шагов? Причина, по которой имеется только три различных матрицы весов в слое SimpleRNN, заключается в том, что все веса используются рекурсивно для всех нейронов на каждом временном шаге. Это явление известно как "разделение весов".

Когда вы видите в сводке keras.layers.SimpleRNN(1) только 6 параметров на вход длиной 5, это объясняется следущим образом:

  • Матрица весов входного вектора w_x содержит один элемент для входа, поскольку у вас 1 нейрон и k входных особенностей, следовательно общее количество параметров равно k * 1.
  • Матрица весов предыдущих состояний w_h содержит один элемент, поскольку есть только 1 выходной нейрон, следовательно количество параметров равно 1 * 1.
  • Сдвиг b, размер которого равен количеству нейронов—в данном случае, 1.

Таким образом, SimpleRNN имеет скрытое состояние, которое также служит основной функцией для создания выходного состояния. Это иллюстрирует минимализм и эффективность работы сети, когда в одной структуре объединены и хранение временного контекста, и производные выходы в каждом временном шаге. Структурное понимание и правильное применение таких моделей критически важен, если вы хотите добиться высоких результатов в задачах оценки времени и предсказания временных рядов.

Оцените материал
Добавить комментарий

Капча загружается...