Telegram: @ninachely
Будем выбирать архитектуру нейронки в зависимости от того, какая у нас будет задача
{То, что ожидаем на вход}-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 |
<aside> 💡 До появления трансформера это была лучшая архитектура для обработки последовательностей
</aside>
Представим, что у нас есть последовательность, каждый элемент которой — это вектор, закодированный с помощью слоя эмбеддингов:
$$ \dots, \underbrace{x_{t-2}}{\in \mathbb{R}^{d}}, x{t-1}, x_{t}, \dots $$
Это могут быть как предобученные эмбеддинги, так и слой эмбеддингов, который будет учиться вместе с нейронкой
Попытаемся придумать архитектуру, которая бы обрабатывала эти векторы последовательно
Идея: возьмем наш любимый линейный слой и будем подавать туда иксы. Но это параллельная обработка, у нас пока нет никаких взаимодействий между соседними иксами
Хитрость: скажем, что у нас будет какой-то вектор $h_{t}$, который мы тоже будем подавать в этот линейный слой. Например, мы можем сконкатенировать его с иксом, сделать матрицу побольше, потому что у нас увеличивается число признаков, ведь мы теперь не только иксы обрабатываем, но еще и $h_t$
Чтобы все было последовательно, будем подавать вектор $h_t$ в каждый следующий слой