nlp
April 8

Вопросы с собесов. RNNs: рекуррентные нейронные сети

Разберем RNN от А до Я: как отвечать на собеседованиях и что знать про них для работы!

Что такое RNN?

Тип нейросети, предназначенный для работы с последовательностями.

Последовательно проходят по последовательности: обновляют и передают скрытое представление на следующий шаг.

Так как у нас одинаковые блоки и те же параметры, то мы как будто зацикливаемся над ячейкой - отсюда рекуррентность.

h - скрытое состояние

x - новый элемент последовательности

Что такое Bidirectional RNN?

Две рекуррентных подсети:

  • прямая (forward, токены в нее подаются от первого к последнему)
  • обратная (backward, токены подаются в обратном порядке)

Можно аггрегировать не только конкаетнацией, но и усреднением, например.

Какие проблемы возникают при работе с RNN?

При обратном распространении ошибки мы будем умножать n раз на матрицу весов (где n - длина входа). Поэтому если у нас там большие собственные числа, то будет “взрыв” градиента, если маленькие, то “затухание”.

  • Ванишинг градиент (затухание градиента)
    • При обучении на длинных последовательностях градиент становится слишком малым, и ранние токены не оказывают влияния на выход.
  • Exploding gradient (взрыв градиента)
    • Градиенты становятся слишком большими, что приводит к нестабильному обучению.
  • Затрудненное запоминание долгосрочной информации
    • Базовые RNN плохо работают с зависимостями на длинных расстояниях из-за затухания градиента в том числе

Что такое LSTM?

У нас есть теперь не только скрытые состояния h_t (краткосрочная память), но еще и состояния блока c_t (долгосрочная память).

  • Forget gate (вентиль забывания)
    На основании входа x_t и предыдущего скрытого состояния h_t-1 решаем какую долю из состояния блока c_t-1 на прошлом шаге пропустить.

Формула такая же как и обычной рнн, но меняются активация - на сигмоиду.
То есть получаем маску после сигмоиды и поэлементно умножаем на c_t-1.
Сигмоида из-за своего выхода на промежуток [0; 1] больше подходит для интерпретации, что забыть, а что пропустить.
Здесь обучаемые параметры учатся на то, чтобы эффективно определять, что нужно забыть, а что не надо забывать.

  • Input gate (вентиль входного состояния)

По той же формуле считаем с тангенсом новое состояние блока c_t по x_t и h_t-1. Но также накладываем маску после сигмоиды, но уже с параметрами, которые учатся определять, что нужно пропускать, а что пропускать не надо. Хотя шаблон слоев одинаковый.
Потом после гейта забывания и гейта входа суммируем полученное и это будет итоговое состояние c_t.

  • Output gate (вентиль выходного состояния)

По все той же формуле определяем какую долю выученной информации c_t отправить дальше на основании x_t и h_t-1.

Плюсы:

  • более умный подход, чтобы обрабатывать входы и выходы

Минусы:

  • громоздкая архитектура
  • нужно 2 состояния: скрытое h и обычное c

Что такое GRU?

Упрощение LSTM.

Оставляем только одно скрытое представление.

Теперь только 2 гейта: update и reset gate.

  • update - играет роль input и forget вентилей из LSTM
  • reset - решаем какие активации заново проинициализировать

По формулам все примерно то же самое. Но параметров меньше, обучается быстрее и часто на то же качество.

Какие особенности RNN по сложности реализации?

  • линейна по сложности от длины последовательности
  • но не распараллелить, потому что нужно проходить последовательно один за другим
  • квадратичная по размеру внутреннего представления

В чем отличие трансформеров от RNN?