на главную ] 

О рекуррентных нейронных сетях

Евгений Борисов

среда, 29 марта 2017 г.

в этой статье мы поговорим о рекуррентной нейронной сети Элмана [1], которую так же называют Simple Recurrent Neural Network (Simple RNN, SRN).

1. Введение

Существуют актуальные задачи обработки данных, при решении которых мы сталкиваемся не с отдельными объектами но с их последовательностями, т.е. порядок следования объектов играет существенную роль в задаче. Например, это задача распознавания речи, где мы имеем дело с последовательностями звуков или некоторые задачи обработки текстов на естественном языке [2], где мы имеем дело с последовательностями слов.

Для решения такого рода задач можно применять рекуррентные нейронные сети, которые в процессе работы могут сохранять информацию о своих предыдущих состояниях. Далее мы рассмотрим принципы работы таких сетей на примере рекуррентной сети Элмана [1].

2. Схема работы рекуррентной нейронной сети

Искусственная нейронная сеть Элмана [1], известная так же как Simple Recurrent Neural Network, состоит из трех слоёв - входного (распределительного) слоя, скрытого и выходного (обрабатывающих) слоёв. При этом скрытый слой имеет обратную связь сам на себя. На рис.1 представлена схема нейронной сети Элмана.

elman neural net
Рис 1: схема нейронной сети Элмана

В отличии от обычной сети прямого распространения [3], входной образ рекуррентной сети это не один вектор но последовательность векторов $\{x(1),\ldots x(n)\}$, векторы входного образа в заданном порядке подаются на вход, при этом новое состояние скрытого слоя зависит от его предыдущих состояний. Сеть Элмана можно описать следующими соотношениями. $$ h(t) = f \left( V\cdot x(t) + U\cdot h(t-1)+ b_h \right) $$ $$ y(t) = g \left(W \cdot h(t) + b_y \right) $$ здесь
$x(t)$ - входной вектор номер $t$,
$h(t)$ - состояние скрытого слоя для входа $x(t)$ ( $h(0) = 0$ ),
$y(t)$ - выход сети для входа $x(t)$,
$U$ - весовая матрица распределительного слоя,
$W$ - весовая (квадратная) матрица обратных связей скрытого слоя,
$b_h$ - вектор сдвигов скрытого слоя,
$V$ - весовая матрица выходного слоя,
$b_y$ - вектор сдвигов выходного слоя
$f$ - функция активации скрытого слоя
$g$ - функция активации выходного слоя

При этом возможны различные схемы работы сети, о которых мы поговорим в следующем разделе.

3. Схемы работы рекуррентной нейронной сети

В зависимости от того как сформировать вход и выход рекуррентной сети, можно разными способами задать схему её работы. Рассмотрим этот вопрос подробнее, для этого развернём схему рекуррентной сети во времени (рис.2).

rnn neural net many-one rnn neural net one-many ffn
a) b) c)

rnn neural net one-many
d)

Рис 2: схемы работы рекуррентной нейронной сети

Перечислим возможные способы организации работы рекуррентной сети [4,5].

Далее мы рассмотрим метод обучения сети Элмана.

4. Метод обучения рекуррентной нейронной сети (BPTT)

В этом разделе мы опишем метод обучения рекуррентной сети Элмана по схеме many-to-one (рис.2a), для реализации классификатора объектов, заданных последовательностями векторов. Для обучения сети Элмана применяются те же градиентные методы [3], что и для обычных сетей прямого распространения, но с определёнными модификациями для корректного вычисления градиента функции ошибки. Он вычисляется с помощью модифицированного метода обратного распространения [3], который носит название Backpropagation through time (метод обратного распространения с разворачиванием сети во времени, BPTT) [6]. Идея метода - развернуть последовательность, превратив рекуррентную сеть в "обычную" (рис.2a). Как и в методе обратного распространения для сетей прямого распространения [3], процесс вычисления градиента (изменения весов) происходит в три следующих этапа.
  1. прямой проход - вычисляем состояния слоёв,
  2. обратный проход - вычисляем ошибку слоёв,
  3. вычисление изменения весов, на основе данных полученных на первом и втором этапах.

Рассмотрим эти этапы подробнее.

1. Прямой проход: для каждого вектора последовательности $\{x(1),\ldots x(n)\}$ :
вычисляем состояния скрытого слоя $\{s(1),\ldots s(n)\}$ и выходы скрытого слоя $\{h(1),\ldots h(n)\}$
$$ s(t) = V\cdot x(t)+U\cdot h(t-1)+ a $$ $$ h(t) = f \left( s(t) \right) $$ вычисляем выход сети $y$
$$ y(n) = g\left( W \cdot h(n) + b \right) $$

2. Обратный проход: вычисляем ошибку выходного слоя $\delta_o$
$$ \delta_o = y - d $$ вычисляем ошибку скрытого слоя в конечном состоянии $\delta_h(n)$
$$ \delta_h(n) = W^T \cdot \delta_o \odot f'(s(n)) $$ вычисляем ошибки скрытого слоя в промежуточных состояниях $\delta_h(t)$ ($t=1,\ldots n$)
$$ \delta_h(t) = U^T \cdot \delta_h(t+1) \odot f'(s(n)) $$

3. Вычисляем изменение весов: $$ \Delta W = \delta_o \cdot (h(n))^T $$ $$ \Delta b_y = \sum \delta_o $$ $$ \Delta V = \sum_t \delta_h(t) \cdot (x(t))^T $$ $$ \Delta U = \sum_t \delta_h(t) \cdot (h(t-1))^T $$ $$ \Delta b_h = \sum\sum_t \delta_h(t) $$

Найдя способ вычисления градиента функции ошибки, далее мы можем применить одну из модификаций метода градиентного спуска, которые подробно описаны в [3].

5. Реализация

В этом разделе представлена реализация рекуррентной сети Элмана по схеме many-to-one (рис.2a), активация скрытого слоя - гиберболический тангенс (tanh), активация выходного слоя (softmax), функция ошибки - средняя кросс-энтропия. Учебные данные генерируются случайным образом.
rnn neural net error history 1 rnn neural net error history 2
Рис 3:история изменения ошибки обучения

Полный текст на octave можно скачать [здесь].

Литература

  1. Jeffrey L. Elman Finding Structure in Time // COGNITIVE SCIENCE 14, 179-211 (1990)
  2. Е.С.Борисов Классификатор текстов на естественном языке.
    - http://mechanoid.kiev.ua/neural-net-classifier-text.html
  3. Е.С.Борисов О методах обучения многослойных нейронных сетей прямого распространения.
    - http://mechanoid.kiev.ua/neural-net-backprop.html
  4. Andrej Karpathy The Unreasonable Effectiveness of Recurrent Neural Networks
    - http://karpathy.github.io/2015/05/21/rnn-effectiveness/
  5. Павел Нестеров Рекуррентные нейронные сети
    - https://www.youtube.com/watch?v=KPT8akr3udk
  6. Werbos, P. J. Backpropagation through time: what it does and how to do it.
    - Proc. IEEE, 1990 78(10):1550-1560.
При использовании материалов этого сайта, пожалуйста вставляйте в свой текст ссылку на мою статью.