Базовая архитектура - полностью рекуррентная сеть (fully recurrent neural network - FRNN).
Здесь $x$ - входные данные, $y$ - выходные данные, $h$ - скрытое состояние, которое рассчитывается на основе предыдущего скрытого состояния и входных данных.
В развернутом виде один шаг по времени будет выглядеть так:
Здесь $t$ - текущий момент времени, $t-1$ - предыдущий момент времени.
Три набора весов - матрицы
и два смещения - вектор-столбцы:
Итого, работа FRNN описывается следующими уравнениями:
$ h_t = \tanh(Wx_t + Uh_{t-1} + b_h) $
$ y_t = Vh_t + b_y $
Чтобы реализовать прямое распространение нужно еще только в нулевой момент времени объявить вектор $h$ и заполнить его нулями.
В случае бинарной классификации удобно использовать функцию потерь перекрестной энтропии, как здесь.
$L = -\ln(p_c)$
Предыдущий рисунок в компактном виде:
Заметим, что $y^1$ и $y^2$ никак не используются в простейшем случае, поэтому не будем их учитывать при расчете ошибки.
BPTT (Packpropagation Through Time) из Хайкин 942/1101:
Пусть множество данных, используемое для обучения реккурентной сети, разбито на независимые эпохи, каждая из которых представляет интересующий отрезок времени. Пусть $n_0$ - время начала эпохи; $n_1$ - время ее окончания. Рассматривая такую эпоху, можно определить следующую функцию стоимости:
$ E_{общ.}(n_0,n_1) = \frac12 \sum_{n=n_0}^{n_1} \sum_{j \in A} e_j^2(n) $
где $A$ - множество индексов $j$, относящееся к тем нейронам сети, для которых определены желаемые отклики; $e_j(n)$ - сигнал ошибки на выходе этих нейронов, измеренный по отношению к некоторому желаемому отклику. Требуется вычислить чувствительность этой сети, т.е. частные производные функции стоимости $E_{общ.}(n_0,n_1)$ по синаптическим весам сети.
Алгоритм обучения по эпохам:
Сначала осуществляется прямая передача данных по сети на интервале времени $(n_0, n_1)$. Для записи входных данных состояние сети (т.е. ее синаптические веса) и желаемый отклик для этого интервала времени сохраняются.
Для вычисления значений локальных градиентов выполняется единичная обратная передача через последнюю запись:
$ \delta_j(n) = - \frac{\partial E_{общ.}(n_0, n_1)}{\partial v_j(n)} $
для всех $ j \in A $ и $n_0 < n \le n_1 $. Это вычисление выполняется с помощью формулы
где $\phi '(\cdot)$ - производная функции активации по своему агрументу; $v_j(n)$ - сигнала нейрона $j$ до применения функции активации. Предполагается, что все нейроны сети имеют одну и ту же функцию активации $\phi '(\cdot)$. Вычисления (1) повторяются с момента времени $n_1$, шаг за шагом, пока не будет достигнут момент $n_0$. Количество выполняемых шагов равно количеству шагов времени в данной эпохе.
где $\eta$ - параметр скорости обучения; $x_i(n-1)$ - входной сигнал, поданный на $i$-й синапс $j$-го нейрона в момент времени $n-1$.
Особенность подготовки данных для рекуррентных сетей в том, что мы работаем с последовательностями. Поэтому порядок следования элементов в наборе данных важен: вместо выдергивания элементов со случайных позиций, в данном случае, мы выделяем для обучающего и тестового набора последовательные непересекающиеся связные наборы (в простейшем виде, первые 70% записей в обучающую выборку, последние 30% - тестовую).
Популярные рекуррентные сети уже реализованы в библиотеке Keras:
Сеть с долговременной и кратковременной памятью (LSTM). Сеть состоит из нескольких ячеек, в которых собраны рекуррентные слои и вентили (gate), обеспечивающие механизм “забывания”.
Управляемый рекуррентный блок (GRU). Упрощенная версия предыдущей идеи, облегчающая обучение, но обладающая чуть меньшими возможностями.
Двунаправленные рекуррентные нейронные сети (biRNN). Объединяет разнонаправленные слои (например, LSTM, GRU), что обеспечивает учет не только предыдущих элементов последовательности, но и последующих.
Не столь популярные рекуррентные сети не реализованы, но есть все возможности, чтобы их доделать до необходимого.
| № варианта | 1. Задача | 2. Тип сети | 2. Задача | 3. Тип сети | 3. Задача |
|---|---|---|---|---|---|
| 1 | - | GRU | Генерация текстовых отзывов | seq2seq | Генерация аннотации по тексту научной статьи* (можно заголовка по аннотации)* |
| 2 | Предсказание 4-го слова по контексту из первых трех | LSTM | Генерация похожей музыки* | - | - |
| 3 | - | biRNN | Перевод текста с английского на русский* | Сеть Хопфилда | Запомнить несколько изображений и восстанавливать их искаженные фрагменты |
| 4 | Предсказание 4-го кадра анимации по трем предыдущим | LSTM | Бинарная классификация текстовых отзывов на рестораны | - | - |
| 5 | - | GRU | Бинарная классификация текстовых отзывов на фильмы | Сеть Элмана | Классификация изображений с наложенными фильтрами (в тестовом наборе) |
| 6 | Предсказание 4-го значения температуры по трем предыдущим | biRNN | Перевод текста с русского на английский* | - | - |
* - примеры датасетов. По желанию можете найти самостоятельно.