Telegram: @ninachely


Sequential tasks

Будем выбирать архитектуру нейронки в зависимости от того, какая у нас будет задача

{То, что ожидаем на вход}-to-{то, что ожидаем на выход}

many — это последовательность, которую мы будем ожидать на вход/выход

one — это один вход/выход

many-to-one one-to-many many-to-many
text classification word definition sequence generation
text-to-image image captioning machine translation
conditional generation

RNN (Recurrent Neural Network)

<aside> 💡 До появления трансформера это была лучшая архитектура для обработки последовательностей

</aside>

Представим, что у нас есть последовательность, каждый элемент которой — это вектор, закодированный с помощью слоя эмбеддингов:

$$ \dots, \underbrace{x_{t-2}}{\in \mathbb{R}^{d}}, x{t-1}, x_{t}, \dots $$

Это могут быть как предобученные эмбеддинги, так и слой эмбеддингов, который будет учиться вместе с нейронкой

Попытаемся придумать архитектуру, которая бы обрабатывала эти векторы последовательно

Идея: возьмем наш любимый линейный слой и будем подавать туда иксы. Но это параллельная обработка, у нас пока нет никаких взаимодействий между соседними иксами

Screenshot 2023-01-31 at 05.10.16.png

Хитрость: скажем, что у нас будет какой-то вектор $h_{t}$, который мы тоже будем подавать в этот линейный слой. Например, мы можем сконкатенировать его с иксом, сделать матрицу побольше, потому что у нас увеличивается число признаков, ведь мы теперь не только иксы обрабатываем, но еще и $h_t$

Чтобы все было последовательно, будем подавать вектор $h_t$ в каждый следующий слой

Screenshot 2023-01-31 at 05.13.05.png