Интерпретация ячейки RNN / LSTM - PullRequest
1 голос
/ 24 апреля 2020

В настоящее время я изучаю RNN, особенно сети LSTM. Я прочитал много тем, включая эту , и у меня все еще есть некоторые недоразумения. Изображение ниже взято из этой статьи и представляет собой одну ячейку RNN, развернутую во времени. enter image description here 1. Правильно ли я понимаю, что клетка RNN - это не один нейрон с точки зрения нейронных сетей с прямой связью, а один слой нейронов внутри него?

Другое изображение из статьи представляет одна ячейка LSTM, развернутая во времени. enter image description here 2. Исходя из логики c первого вопроса, является ли клетка LSTM не единственным нейроном с точки зрения нейронных сетей с прямой связью, а набором из 4 слоев нейронов, которые находятся внутри него?

3. Грубо говоря, можем ли мы сказать, что слой RNN (или LSTM) (например, в терминах слоев Keras) - это то, что мы называем «ячейкой»?

Заранее спасибо за ваши ответы!

1 Ответ

1 голос
/ 26 апреля 2020

Учитывая диаграммы, которые вы разместили, как вы видите, каждая ячейка использует выходные данные своей ячейки предшественника. Например, если вы хотите ввести x2 в свою сеть LSTM, вам придется использовать h1 из предыдущей ячейки (т. Е. Выход из предыдущего временного шага) вместе с вектором для x2. Кормление этих двух даст вам h2, который затем будет передан в следующую ячейку. Это пример того, что происходит на временном шаге t=2.

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

Чтобы сделать его более понятным, рассмотрите фрагмент кода ниже.

# X is the input sequence (e.g., word embeddings vectors)
# steps is the input sequence length
# h0, and c0 are zero state vector (commonly done) that you want to 
# feed into the first RNN cell
# h_out is the hidden states that the RNN network outputs


X = torch.randn(seq_len, hidden_dim) 
steps = range(seq_len)
h0 = torch.zeros(seq_len, hidden_dim)
c0 = torch.zeros(seq_len, hidden_dim)
hidden = (h0, c0)
h_out = list()

for i in steps:
    # advance rnn
    hidden = RNN(X[i], hidden)
    hy, cy = hidden
    h_out.append(hy)

Предположим, что RNN(.,.) является ячейкой RNN (LSTM / GRU), которая имеет набор обучаемых параметров, таких как матрицы весов и смещения. Все эти параметры одинаковы и изучаются каждым экземпляром X[i] и hidden, который передается в ячейку RNN на каждой итерации.

Итак, возвращаясь к вашему вопросу, сеть RNN на самом деле представляет собой несколько копий. ячеек RNN, которые обучаются по мере прохождения обучения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...