#neural-network #nlp #lstm #bilstm
Вопрос:
Я заметил, что однослойный LSTM состоит из двух независимых (однонаправленных) слоев LSTM, один для прямого направления, а другой для обратного. Затем выходные данные двух слоев LSTM будут объединены вместе вместе с hidden
dim (всегда dim = -1
), чтобы сформировать выходные данные этого слоя LSTM.
А для многослойной модели каждый внутренний слой принимает выходные данные предыдущего слоя, а затем выводит результаты расчета на следующий слой.
До сих пор нет никакой двусмысленности.
Но для многослойного BiLSTM я обнаружил некоторую двусмысленность. Поскольку каждый слой BiLSTM имеет два независимых LSTM, я не знаю, какой правильный ввод принимает внутренний слой.
Объединенный вывод с предыдущего слоя? (Если это верно, это означает input_size
, что внутренний слой LSTM, независимо от того, слева направо или справа налево, является 2 * (hidden_size of the previous layer)
) (см. Эту реализацию) (и см. Эту картинку: Иллюстрирующую использование двух LSTM для семантической маркировки ролей. Источник: Он и др. 2017, рис. 1.)
Или рассматривайте многослойный LSTM как два однонаправленных многослойных LSTM (один для left_to_right, а другой для right_to_left), каждый однонаправленный LSTM принимает только выходные данные из предыдущих слоев. Затем, после завершения двух многослойных однонаправленных вычислений LSTM, мы объединим выходные данные слева направо и справа налево каждого слоя, чтобы сформировать выходные данные каждого слоя BiLSTM? (см. Это изображение из: Классификация аритмий в многоканальных ЭКГ-сигналах с использованием глубоких нейронных сетей: Ким.2018, рис. 3.2))
Комментарии:
1. В чем именно тогда заключается вопрос? Очевидно, что есть несколько способов сделать это, и они приведут к разным результатам. Как вы сами написали, PyTorch следует одной реализации, но это не значит, что вы также можете использовать другую (см. Второй пункт).
2. @dennlinger Мне просто интересно, какой способ реализации stacked BiLSTM правильный.
3. Опять же, я не думаю, что обязательно существует «правильный» или «неправильный» способ. Существуют случаи любого из этих вариантов; во всяком случае, я бы подумал, что большинство людей (личное мнение!), Вероятно, думают о первом способе, когда вы объединяете выходные данные каждого слоя и объединяете их в следующий.