Последовательности в TensorFlow
Текст, речь и сигналы во времени удобно подавать в модель как цепочку шагов. Каждый шаг - число или набор признаков, а порядок несёт смысл: тот же набор символов в другом порядке уже другое сообщение.
Слова перед рекуррентным блоком часто переводят в вектор слова - строку обучаемых чисел фиксированной длины. Так модель опирается не на случайный номер в словаре, а на близость смыслов в пространстве признаков.
Для длинной зависимости между шагами применяют LSTM: блок запоминает важное из прошлого и обновляет внутреннюю память на каждом шаге. Иногда нужен не один итог в конце, а скрытое состояние после каждого шага - например, чтобы подписать каждое слово в предложении.
Реальные наборы редко состоят из цепочек одной длины. Хвост из нулей добавляют для выравнивания, и маска помогает не учитывать такие шаги при расчёте. Если строки разной длины хранят без лишнего заполнения, удобен рваный тензор с отдельной длиной для каждой строки.
Кроме LSTM встречаются другие рекуррентные блоки - проще или быстрее по числу параметров. Чтение в обе стороны прогоняет цепочку слева направо и справа налево, а ответы объединяют, чтобы учесть контекст с обеих сторон.
Со всем этим мы и будем разбираться в рамках данного раздела.