Понимание единиц LSTM против клеток

32

Я некоторое время изучал LSTM. Я понимаю на высоком уровне, как все работает. Однако, собираясь реализовать их с помощью Tensorflow, я заметил, что BasicLSTMCell требует параметра количества единиц (то есть num_units).

Из этого очень подробного объяснения LSTM я понял, что один блок LSTM является одним из следующих

Блок LSTM

который на самом деле является подразделением ГРУ.

Я предполагаю , что параметр num_unitsиз BasicLSTMCellимеет в виду , сколько из них мы хотим подключить друг к другу в слое.

Это оставляет вопрос - что такое «клетка» в этом контексте? Является ли «ячейка» эквивалентом слоя в обычной нейронной сети с прямой связью?

nbro
источник
Я все еще в замешательстве, я читал colah.github.io/posts/2015-08-Understanding-LSTMs и хорошо это понимаю. Как термин ячейка применяется в отношении этой статьи? Кажется, что ячейка LSTM в статье является вектором, как в Tensorflow, верно?
Буратино

Ответы:

17

num_unitsht

Кроме того, из https://github.com/tensorflow/tensorflow/blob/master/tensorflow/g3doc/api_docs/python/functions_and_classes/shard9/tf.nn.rnn_cell.RNNCell.md :

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

«Уровень LSTM», вероятно, более явный, пример :

def lstm_layer(tparams, state_below, options, prefix='lstm', mask=None):
    nsteps = state_below.shape[0]
    if state_below.ndim == 3:
        n_samples = state_below.shape[1]
    else:
        n_samples = 1

    assert mask is not None
    […]
Франк Дернонкур
источник
Ах, я вижу, тогда «ячейка» - это num_unitразмерный горизонтальный массив взаимосвязанных ячеек LSTM. Имеет смысл. Так что же тогда будет аналогом скрытого слоя в стандартной сети прямой связи?
* Государственные единицы LSTM
@rec Это правильно
Франк Дернонкур
1
@Sycorax, например, если вход нейронной сети является временной серией с 10 временными шагами, горизонтальное измерение имеет 10 элементов.
Франк Дернонкур
1
Я все еще в замешательстве, я читал colah.github.io/posts/2015-08-Understanding-LSTMs и хорошо это понимаю. Как термин ячейка применяется в отношении этой статьи? Кажется, что ячейка LSTM в статье является вектором, как в Tensorflow, верно?
Буратино
4

Большинство диаграмм LSTM / RNN показывают только скрытые ячейки, но не единицы этих ячеек. Отсюда и путаница. Каждый скрытый слой имеет скрытые ячейки, столько же, сколько и количество временных шагов. Кроме того, каждая скрытая ячейка состоит из нескольких скрытых элементов, как показано на схеме ниже. Следовательно, размерность матрицы скрытого слоя в RNN равна (количество временных шагов, количество скрытых единиц).

введите описание изображения здесь

Гарима Джайн
источник
4

Хотя проблема почти такая же, как я ответил в этом ответе , я хотел бы проиллюстрировать эту проблему, которая также немного смутила меня сегодня в модели seq2seq (благодаря ответу @Franck Dernoncourt), на графике. В этой простой схеме кодера:

введите описание изображения здесь

hя ).

Лернер Чжан
источник
Я верю num_units = nв эту цифру
notilas
-1

На мой взгляд, под ячейкой подразумевается такой узел, как скрытая ячейка, которая также называется скрытым узлом, для многоуровневой модели LSTM число ячеек может быть вычислено с помощью time_steps * num_layers, а num_units равно time_steps

user210864
источник
-1

Этими единицами в Керасе является размерность выходного пространства, равная длине задержки (time_step), к которой повторяется сеть.

keras.layers.LSTM(units, activation='tanh', ....)

https://keras.io/layers/recurrent/

notilas
источник