Простой пример RNN, показывающий цифры - PullRequest
0 голосов
/ 26 апреля 2018

Я пытаюсь понять RNN, и я хотел бы найти простой пример, который фактически показывает один горячий вектор и числовые операции. Предпочтительно концептуальный, поскольку реальный код может сделать его еще более запутанным. В большинстве примеров, которые я гуглю, просто показаны поля с выходящими из них циклами, и действительно трудно понять, что именно происходит. В редком случае, когда они показывают векторы, все еще трудно увидеть, как они получают значения.

например, я не знаю, откуда берутся значения на этой картинке https://i1.wp.com/karpathy.github.io/assets/rnn/charseq.jpeg

Если бы в примере могли быть интегрированы LSTM и другие популярные расширения, это тоже было бы здорово.

1 Ответ

0 голосов
/ 27 апреля 2018

В простом случае RNN сеть принимает входную последовательность x и создает выходную последовательность y , тогда как скрытая последовательность h хранит динамическое состояние сети так, что на временном шаге i: x (i) 100 ℝ M , h (i) ∊ ℝ N , y (i) ℝ ℝ P действительное значимые векторы измерений M / N / P, соответствующие входным, скрытым и выходным значениям соответственно. RNN изменяет свое состояние и пропускает выходные данные на основе уравнений состояния:

  1. h (t) = tanh (W xh ∗ [x (t); h (t-1)]), где W xh линейная карта: ℝ M + N ↦ ℝ N , * матричное умножение и; операция конкатенации. Конкретно, чтобы получить h (t), вы соединяете x (t) с h (t-1), вы применяете умножение матриц между W xh (формы (M + N, N)) и сцепленным вектором (формы M + N), и вы используете нелинейную переменную tanh для каждого элемента результирующего вектора (формы N).
  2. y (t) = сигмовидная (W hy * h (t)), где W hy линейная карта: ℝ N ↦ ℝ P . Конкретно, вы применяете матричное умножение между W hy (формы (N, P)) и h (t) (формы N), чтобы получить P-мерный выходной вектор, к которому применяется сигмоидальная функция .

Другими словами, получение выходных данных в момент времени t требует итерации вышеуказанных уравнений для i = 0,1, ..., t. Следовательно, скрытое состояние выступает в качестве конечного запоминающего устройства для системы, что позволяет выполнять контекстно-зависимые вычисления (т. Е. H (t) полностью зависит как от истории вычислений, так и от текущего ввода, как и y (t)).

В случае стробированных RNN (GRU или LSTM) уравнениям состояния становится немного сложнее следовать из-за стробирующих механизмов, которые по существу позволяют выбирать между входом и памятью, но основная концепция остается той же.


Числовой пример

Давайте последуем вашему примеру; у нас M = 4, N = 3, P = 4, поэтому W xh имеет форму (7, 3) и W hy имеет форму (3, 4). Мы, конечно, не знаем значений ни одной матрицы W, поэтому мы не можем воспроизвести те же результаты; мы все еще можем следить за процессом, хотя.

  • На шаге t <0 имеем h (t) = [0, 0, 0]. </li>
  • На временном шаге t = 0 мы получаем вход x (0) = [1, 0, 0, 0]. Объединяя x (0) с h (0 - ), мы получаем [x (t); h (t-1)] = [1, 0, 0 ..., 0] (назовем этот вектор u для упрощения обозначений). Мы применяем u * W xh (т.е. умножаем 7-мерный вектор на матрицу 7 на 3) и получаем вектор v = [v 1 , v 2 , v 3 ], где v i = Σ j u j W ji = u 1 Ш 1i + u 2 Ш 2i + ... + u 7 Ш 7i . Наконец, мы применяем tanh к v, получая h (0) = [tanh (v 1 ), tanh (v 2 ), tanh (v 3 ) ] = [0,3, -0,1, 0,9]. Из h (0) мы также можем получить y (0) через тот же процесс; умножить h (0) на W hy (т.е. трехмерный вектор с матрицей 3 на 4), получить вектор s = [s 1 , s 2, s 3 , s 4 ], примените сигмоидальный элемент к s и получите σ (s) = y (0).
  • На временном шаге t = 1 мы получаем вход x (1) = [0, 1, 0, 0]. Мы объединяем x (1) с h (0), чтобы получить новое значение u = [0, 1, 0, 0, 0.3, -0.1, 0.9]. u снова умножается на W xh , и tanh снова применяется к результату, давая нам h (1) = [1, 0,3, 1]. Аналогично, h (1) умножается на W hy , давая нам новый вектор s, к которому мы применяем сигмоидную форму, чтобы получить σ (s) = y (1).
  • Этот процесс продолжается до тех пор, пока не завершится входная последовательность и не завершится вычисление.

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

...