Редактирование: Рекуррентные нейронные сети

Перейти к: навигация, поиск

Внимание! Вы не авторизовались на сайте. Ваш IP-адрес будет публично видимым, если вы будете вносить любые правки. Если вы войдёте или создадите учётную запись, правки вместо этого будут связаны с вашим именем пользователя, а также у вас появятся другие преимущества.

Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.
Текущая версия Ваш текст
Строка 2: Строка 2:
  
 
== Описание ==
 
== Описание ==
[[File:RNN.png|450px|thumb|Рисунок 1. RNN и ее развернутое представление <ref>[http://colah.github.io/posts/2015-08-Understanding-LSTMs Understanding LSTM Networks]</ref>]]
+
[[File:RNN.png|450px|thumb|Рисунок 1. RNN и ее развернутое представление]]
[[File:RNN_layer.png|450px|thumb|Рисунок 2. Схема слоя рекуррентной сети <ref>[http://colah.github.io/posts/2015-08-Understanding-LSTMs Understanding LSTM Networks]</ref>]]
+
[[File:RNN_layer.png|450px|thumb|Рисунок 2. Схема слоя рекуррентной сети]]
 
Рекуррентные нейронные сети {{---}} сети с циклами, которые хорошо подходят для обработки последовательностей (рис. 1).
 
Рекуррентные нейронные сети {{---}} сети с циклами, которые хорошо подходят для обработки последовательностей (рис. 1).
 
[[File:RNN_BP.jpg|450px|thumb|Рисунок 3. RNN с задержкой на скрытом слое]]
 
[[File:RNN_BP.jpg|450px|thumb|Рисунок 3. RNN с задержкой на скрытом слое]]
 
[[File:RNN_BPTT.jpg|450px|thumb|Рисунок 4. Развертка RNN]]
 
[[File:RNN_BPTT.jpg|450px|thumb|Рисунок 4. Развертка RNN]]
Обучение RNN аналогично обучению обычной нейронной сети. Мы также используем [[:Обратное_распространение_ошибки|алгоритм обратного распространения ошибки]] (англ. Backpropagation), но с небольшим изменением. Поскольку одни и те же параметры используются на всех временных этапах в сети, градиент на каждом выходе зависит не только от расчетов текущего шага, но и от предыдущих временных шагов (рис. 4). Например, чтобы вычислить градиент для четвертого элемента последовательности, нам нужно было бы «распространить ошибку» на 3 шага и суммировать градиенты. Этот алгоритм называется «алгоритмом обратного распространения ошибки сквозь время» (англ. Backpropagation Through Time, BPTT).<ref name=BPTT_1>[http://andrew.gibiansky.com/blog/machine-learning/recurrent-neural-networks/ Backpropagation Through Time]</ref><ref name=BPTT_2>[http://www.wildml.com/2015/10/recurrent-neural-networks-tutorial-part-3-backpropagation-through-time-and-vanishing-gradients/ Backpropagation Through Time]</ref>
+
Обучение RNN аналогично обучению обычной нейронной сети. Мы также используем [[:Обратное_распространение_ошибки|алгоритм обратного распространения ошибки (backpropagation)]]<sup>[на 28.01.19 не создан]</sup>, но с небольшим изменением. Поскольку одни и те же параметры используются на всех временных этапах в сети, градиент на каждом выходе зависит не только от расчетов текущего шага, но и от предыдущих временных шагов (рис. 4). Например, чтобы вычислить градиент для четвертого элемента последовательности, нам нужно было бы «распространить ошибку» на 3 шага и суммировать градиенты. Этот алгоритм называется «алгоритмом обратного распространения ошибки сквозь время» (англ. Backpropagation Through Time, BPTT).<ref name=BPTT_1>[http://andrew.gibiansky.com/blog/machine-learning/recurrent-neural-networks/ Backpropagation Through Time]</ref><ref name=BPTT_2>[http://www.wildml.com/2015/10/recurrent-neural-networks-tutorial-part-3-backpropagation-through-time-and-vanishing-gradients/ Backpropagation Through Time]</ref>
  
 
Алгоритм обратного распространения ошибки сквозь время:
 
Алгоритм обратного распространения ошибки сквозь время:
Строка 64: Строка 64:
  
 
=== Рекурсивная сеть ===
 
=== Рекурсивная сеть ===
[[:Рекурсивные нейронные сети|Рекурсивные нейронные сети]] (англ. Recurrent neural networks) представляют собой более общий случай рекуррентных сетей, когда сигнал в сети проходит через структуру в виде дерева (обычно бинарные деревья). Те же самые матрицы весов используются рекурсивно по всему графу в соответствии с его топологией.
+
[[:Рекурсивные нейронные сети|Рекурсивные нейронные сети]]<sup>[на 28.01.19 не создан]</sup> представляют собой более общий случай рекуррентных сетей, когда сигнал в сети проходит через структуру в виде дерева (обычно бинарные деревья). Те же самые матрицы весов используются рекурсивно по всему графу в соответствии с его топологией.
  
 
=== Нейронная сеть Хопфилда ===
 
=== Нейронная сеть Хопфилда ===
Строка 74: Строка 74:
  
 
=== Сеть Элмана ===
 
=== Сеть Элмана ===
Нейронная сеть Элмана состоит из трёх слоев: <math>x</math>, <math>y</math>, <math>z</math>. Дополнительно к сети добавлен набор «контекстных блоков»: <math>u</math> (рис. 5). Средний (скрытый) слой соединён с контекстными блоками с фиксированным весом, равным единице. С каждым шагом времени на вход поступает информация, которая проходит прямой ход к выходному слою в соответствии с правилами обучения. Фиксированные обратные связи сохраняют предыдущие значения скрытого слоя в контекстных блоках (до того как скрытый слой поменяет значение в процессе обучения). Таким способом сеть сохраняет своё состояние, что может использоваться в предсказании последовательностей, выходя за пределы мощности многослойного перцептрона.
+
Нейронная сеть Элмана состоит из трёх слоев: x, y, z. Дополнительно к сети добавлен набор «контекстных блоков»: u (рис. 5). Средний (скрытый) слой соединён с контекстными блоками с фиксированным весом, равным единице. С каждым шагом времени на вход поступает информация, которая проходит прямой ход к выходному слою в соответствии с правилами обучения. Фиксированные обратные связи сохраняют предыдущие значения скрытого слоя в контекстных блоках (до того как скрытый слой поменяет значение в процессе обучения). Таким способом сеть сохраняет своё состояние, что может использоваться в предсказании последовательностей, выходя за пределы мощности многослойного перцептрона.
  
 
<math>h_t = \sigma_h(W_h x_t + U_h h_{t-1} + b_h)</math>,
 
<math>h_t = \sigma_h(W_h x_t + U_h h_{t-1} + b_h)</math>,
Строка 99: Строка 99:
 
=== Нейронный компрессор истории ===
 
=== Нейронный компрессор истории ===
 
Нейронный компрессор исторических данных {{---}} это блок, позволяющий в сжатом виде хранить существенные исторические особенности процесса, который является своего рода стеком рекуррентной нейронной сети, формируемым в процессе самообучения.
 
Нейронный компрессор исторических данных {{---}} это блок, позволяющий в сжатом виде хранить существенные исторические особенности процесса, который является своего рода стеком рекуррентной нейронной сети, формируемым в процессе самообучения.
[[File:LSTM.png|450px|thumb|Рисунок 6. Схема слоев рекуррентной сети долго-краткосрочной памяти <ref>[http://colah.github.io/posts/2015-08-Understanding-LSTMs Understanding LSTM Networks]</ref>]]
+
[[File:LSTM.png|450px|thumb|Рисунок 6. Схема слоев рекуррентной сети долго-краткосрочной памяти]]
  
 
=== Сети долго-краткосрочной памяти ===
 
=== Сети долго-краткосрочной памяти ===
Строка 108: Строка 108:
  
 
=== Двунаправленные рекуррентные сети ===
 
=== Двунаправленные рекуррентные сети ===
[[File:biRNN.png|450px|thumb|Рисунок 7. Двунаправленная рекуррентная сеть <ref>[https://towardsdatascience.com/understanding-bidirectional-rnn-in-pytorch-5bd25a5dd66 Understanding Bidirectional RNN in PyTorch]</ref>]]
+
[[File:biRNN.png|450px|thumb|Рисунок 7. Двунаправленная рекуррентная сеть]]
 
Двунаправленная рекуррентная сеть (англ. Bidirectional Recurrent Neural Network, biRNN) представляет собой две однонаправленные рекуррентные сети, одна из которых обрабатывает входную последовательность в прямом порядке, а другая {{---}} в обратном (рис. 7). Таким образом, для каждого элемента входной последовательности считается два вектора скрытых состояний, на основе которых вычисляется выход сети. Благодаря данной архитектуре сети доступна информация о контексте как из прошлого, так и из будущего, что решает проблему однонаправленных рекуррентных сетей. Для обучения biRNN используются те же алгоритмы, что и для RNN.
 
Двунаправленная рекуррентная сеть (англ. Bidirectional Recurrent Neural Network, biRNN) представляет собой две однонаправленные рекуррентные сети, одна из которых обрабатывает входную последовательность в прямом порядке, а другая {{---}} в обратном (рис. 7). Таким образом, для каждого элемента входной последовательности считается два вектора скрытых состояний, на основе которых вычисляется выход сети. Благодаря данной архитектуре сети доступна информация о контексте как из прошлого, так и из будущего, что решает проблему однонаправленных рекуррентных сетей. Для обучения biRNN используются те же алгоритмы, что и для RNN.
 
<math>H_t^f = \sigma^f(W_x^f X_t + W_h^f H_{t-1}^f + b^f)</math>,
 
 
<math>H_t^b = \sigma^b(W_x^b X_t + W_h^b H_{t+1}^b + b^b)</math>,
 
 
<math>O_t = W^q H_t + b^q</math>,
 
 
где <math>W_x^f</math>, <math>W_x^b</math>, <math>W_h^f</math>, <math>W_h^b</math>, <math>W^q</math>, {{---}} матрицы весов, <math>b^f</math>, <math>b^b</math>, <math>b^q</math>, {{---}} байесы, <math>\sigma^f</math>, <math>\sigma^b</math>, {{---}} функции активаций, <math>H_t^f</math> и <math>H_t^b</math> {{---}} выходы однонаправленных рекуррентных сетей, <math>H_t</math> {{---}} их конкатенированный вектор, а <math>O_t</math> {{---}} выход сети на шаге <math>t</math>.
 
  
 
=== Seq-2-seq сети ===
 
=== Seq-2-seq сети ===
[[File:Seq2seq.png|450px|thumb|Рисунок 8. Seq-2-seq сеть <ref>[https://medium.com/guan-hong/implement-of-seq2seq-model-117c32492e57 Implementation of seq2seq model]</ref>]]
+
[[File:Seq2seq.png|450px|thumb|Рисунок 8. Seq-2-seq сеть]]
 
Seq-2-seq (Sequence to sequence, Seq2seq) сеть является базовой архитектурой many-to-many RNN и используется для трансляции одной последовательности в другую (рис. 8). Она состоит из двух рекуррентных сетей: кодировщика и декодировщика. Кодировщик вычисляет вектор, кодирующий входную последовательность. Далее данный вектор передается декодировщику, который в свою очередь по полученному скрытому представлению восстанавливает целевую последовательность. При этом каждый посчитанный выход используется для обновления скрытого представления.  
 
Seq-2-seq (Sequence to sequence, Seq2seq) сеть является базовой архитектурой many-to-many RNN и используется для трансляции одной последовательности в другую (рис. 8). Она состоит из двух рекуррентных сетей: кодировщика и декодировщика. Кодировщик вычисляет вектор, кодирующий входную последовательность. Далее данный вектор передается декодировщику, который в свою очередь по полученному скрытому представлению восстанавливает целевую последовательность. При этом каждый посчитанный выход используется для обновления скрытого представления.  
 
<br clear="both" />  
 
<br clear="both" />  
Строка 182: Строка 174:
 
*[[:Сверточные_нейронные_сети|Сверточные нейронные сети]]
 
*[[:Сверточные_нейронные_сети|Сверточные нейронные сети]]
 
*[[:Нейронные_сети,_перцептрон|Нейронные сети, перцептрон]]
 
*[[:Нейронные_сети,_перцептрон|Нейронные сети, перцептрон]]
*[[:Рекурсивные нейронные сети|Рекурсивные нейронные сети]]
+
*[[:Рекурсивные нейронные сети|Рекурсивные нейронные сети]]<sup>[на 28.01.19 не создан]</sup>
  
 
==Примечания==
 
==Примечания==

Пожалуйста, учтите, что любой ваш вклад в проект «Викиконспекты» может быть отредактирован или удалён другими участниками. Если вы не хотите, чтобы кто-либо изменял ваши тексты, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений, или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого (см. Викиконспекты:Авторские права). НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ МАТЕРИАЛЫ!

Чтобы изменить эту страницу, пожалуйста, ответьте на приведённый ниже вопрос (подробнее):

Отменить | Справка по редактированию (в новом окне)

Шаблон, используемый на этой странице: