Розуміння одиниць LSTM та клітин


32

Я вивчав LSTM деякий час. Я на високому рівні розумію, як все працює. Тим НЕ менше, збирається реалізувати їх з допомогою Tensorflow я помітив , що BasicLSTMCell вимагає кількість одиниць (тобто num_units) параметра.

З цього дуже ретельного пояснення LSTM я зрозумів, що одна одиниця LSTM - це одне з наступних

LSTM одиниця

що насправді є підрозділом ГРУ.

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

Це залишає питання - що таке "клітина" в цьому контексті? Чи "осередок" еквівалентний шару в нормальній нейронній мережі подачі вперед?


Я все ще плутаюсь , я читав colah.github.io/posts/2015-08-U Understanding-LSTMs, і я це добре розумію. Як застосовується термін комірка стосовно цієї статті? Здається, що клітина LSTM у статті є вектором, як у Tensorflow, правда?
Буратіно

Відповіді:


17

На жаль, термінологія суперечлива. num_unitsу TensorFlow - це кількість прихованих станів, тобто розмірність в рівняннях, які ви дали.годт

Також з 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-U Understanding-LSTMs, і я це добре розумію. Як застосовується термін комірка стосовно цієї статті? Здається, що клітина LSTM у статті є вектором, як у Tensorflow, правда?
Буратіно

4

Більшість діаграм LSTM / RNN просто показують приховані комірки, але ніколи одиниці цих комірок. Звідси плутанина. У кожному прихованому шарі є приховані комірки, стільки ж, скільки разів кроки. А далі кожна прихована комірка складається з декількох прихованих одиниць, як на схемі нижче. Тому розмірність матриці прихованого шару в RNN становить (кількість часових кроків, кількість прихованих одиниць).

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


4

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

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

Кожен наведений вище, - це одна і та ж клітина в різному часовому кроці (клітинка GRU або LSTM, як у вашому запитанні), а вагові вектори (не зміщення) у комірці мають однаковий розмір (num_units / num_hidden або state_size або output_size ) .годi


Я вважаю, що num_units = nця цифра
повідомляє

-1

На мій погляд, комірка означає вузол, такий як прихована комірка, який також називається прихованим вузлом, для багатошарової моделі LSTM кількість комірок може бути обчислено тимчасовими кроками * num_layers, а число_одиниць дорівнює time_steps


-1

Ці одиниці в Керасі - це розмір вихідного простору, який дорівнює тривалості затримки (time_step), з якою мережа повторюється.

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

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.