Сколько единиц RNN необходимо для задач, включающих последовательности? - PullRequest
0 голосов
/ 05 декабря 2018

Я тренирую RNN по следующей задаче: учитывая последовательность из тридцати слов, а затем классифицирую последовательность в двоичный класс.

Есть ли преимущество в наличии более 30 ячеек (LSTM, GRU илиобычный рнн) в моей сети?Я видел много примеров в Интернете, где подобные сети обучаются с несколькими слоями, каждый из которых имеет 100 ячеек, но для меня это не имеет смысла.Как это помогает иметь больше ячеек, чем длина последовательности?(в моем случае это длина 30)

Я запутался, потому что, насколько я понимаю, каждая ячейка принимает два входа 1. Новый элемент последовательности 2. Выход из предыдущей ячейки Итак, после 30 ячеек, не будет новых элементов последовательности для ввода в ячейку.Каждая ячейка будет просто обрабатывать выходные данные предыдущей ячейки (не получая новой информации).

Я использую ячейки LSTM для этой задачи (однако, я предполагаю, что фактический тип используемой ячейки RNN не имеет значения).

Когда единицы измерения GRU совпадают с длиной моей последовательности

visible = Input(shape=(30,))
print(np.shape(visible ))
embed=Embedding(vocab_size,2)(visible)
print(np.shape(embed ))
x2=keras.layers.GRU(30, return_sequences=True)(embed)
print(np.shape(x2))

формы:

(?, 30)

(?, 30, 2)

(?, ?, 30)

Когда единицы измерения GRU не совпадают с длиной моей последовательности

visible = Input(shape=(30,))
print(np.shape(visible ))
embed=Embedding(vocab_size,2)(visible)
print(np.shape(embed ))
x2=keras.layers.GRU(250, return_sequences=True)(embed)
print(np.shape(x2))

формы:

(?, 30)

(?, 30, 2)

(?, ?, 250)

Как форма меняется с (?, 30, 2) на (?, ?, 250) или на (?, ?, 30) даже?

1 Ответ

0 голосов
/ 05 декабря 2018

Вам нужно немного почитать об уравнениях RNN и документации keras .Первым аргументом инициализатора GRU является не количество используемых ячеек, а размерность скрытого состояния (или, в неуклюжей терминологии Кераса, единиц ),

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

Чтобы прояснить ситуацию, RNN реализует функцию f: (x, h) → h.Вы даете ему первый элемент вашей последовательности, x 0 и некоторый предварительно инициализированный h -1 , он возвращает вам h 0 .Затем вы можете дать такую ​​же ячейку x 1 и h 0 , и она даст вам h 1 , и так далее, и так далее,Теперь аргумент, с которым вы играете, просто регулирует размер скрытого векторного пространства;вы все равно будете получать столько же h векторов, сколько и раньше (== длина входной последовательности), но теперь каждый из этих h векторов живет в ℝ 250 , а не в ℝ 30 .

* В случае мелкого RNN

...