Изменения

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

Рекуррентные нейронные сети

614 байт добавлено, 05:55, 23 января 2019
Нет описания правки
=== Полностью рекуррентная сеть ===
Это базовая архитектура, разработанная в 1980-х. Сеть строится из узлов, каждый из которых соединён со всеми другими узлами. У каждого нейрона порог активации меняется со временем и является вещественным числом. Каждое соединение имеет переменный вещественный вес. Узлы разделяются на входные, выходные и скрытые.
 
=== Рекурсивная сеть ===
[[:Рекурсивные нейронные сети|Рекурсивные нейронные сети]] представляют собой более общий случай рекуррентных сетей, когда сигнал в сети проходит через структуру в виде дерева (обычно бинарные деревья). Те же самые матрицы весов используются рекурсивно по всему графу в соответствии с его топологией.
 
=== Нейронная сеть Хопфилда ===
Тип рекуррентной сети, когда все соединения симметричны. Изобретена Джоном Хопфилдом в 1982 году и гарантируется, что динамика такой сети сходится к одному из положений равновесия.
 
=== Двунаправленная ассоциативная память (BAM) ===
Вариацией сети Хопфилда является двунаправленная ассоциативная память (BAM). BAM имеет два слоя, каждый из которых может выступать в качестве входного, находить (вспоминать) ассоциацию и генерировать результат для другого слоя.
[[File:Elman_RNN.jpg|450px|thumb|Сеть Элмана]]
 
=== Сеть Элмана ===
Нейронная сеть Элмана состоит из трёх слоев: x, y, z (см рис. Сеть Элмана). Дополнительно к сети добавлен набор «контекстных блоков»: u (см рис. Сеть Элмана). Средний (скрытый) слой соединён с контекстными блоками с фиксированным весом, равным единице. С каждым шагом времени на вход поступает информация, которая проходит прямой ход к выходному слою в соответствии с правилами обучения. Фиксированные обратные связи сохраняют предыдущие значения скрытого слоя в контекстных блоках (до того как скрытый слой поменяет значение в процессе обучения). Таким способом сеть сохраняет своё состояние, что может использоваться в предсказании последовательностей, выходя за пределы мощности многослойного перцептрона.
 
<math>h_t = \sigma_h(W_h x_t + U_h h_{t-1} + b_h)</math>
 
<math>y_t = \sigma_y(W_y h_t + b_y)</math>
 
Обозначения переменных и функций:
* <math>x_t</math>: вектор входного слоя
* <math>h_t</math>: вектор скрытого слоя
* <math>y_t</math>: вектор выходного слоя
* <math>W, U и b</math>: матрица и вектор параметров
* <math>\sigma_h и \sigma_y</math>: функция активации
 
=== Сеть Джордана ===
Нейронная сеть Джордана подобна сети Элмана, но контекстные блоки связаны не со скрытым слоем, а с выходным слоем. Контекстные блоки таким образом сохраняют своё состояние. Они обладают рекуррентной связью с собой.
 
<math>h_t = \sigma_h(W_h x_t + U_h y_{t-1} + b_h)</math>
 
<math>y_t = \sigma_y(W_y h_t + b_y)</math>
 
=== Эхо-сети ===
Эхо-сеть (англ. Echo State Network, ESN) характеризуется одним скрытым слоем (который называется резервуаром) со случайными редкими связями между нейронами. При этом связи внутри резервуара фиксированы, но связи с выходным слоем подлежат обучению. Состояние резервуара (state) вычисляется через предыдущие состояния резервуара, а также предыдущие состояния входного и выходного сигналов. Так как эхо-сети обладают только одним скрытым слоем, они обладают достаточно низкой вычислительной сложностью.
 
=== Нейронный компрессор истории ===
Нейронный компрессор исторических данных {{---}} это блок, позволяющий в сжатом виде хранить существенные исторические особенности процесса, который является своего рода стеком рекуррентной нейронной сети, формируемым в процессе самообучения.
[[File:LSTM.png|450px|thumb|[http://colah.github.io/posts/2015-08-Understanding-LSTMs/ Схема слоев рекуррентной сети долго-краткосрочной памяти]]]
 
=== Сети долго-краткосрочной памяти ===
Сеть долго-краткосрочной памяти (англ. Long short-term memory, LSTM) является самой популярная архитектура рекуррентной нейронной сети на данный момент, данная архитектура способна запоминать данные на долгое время.<ref name=LSTM>[https://www.bioinf.jku.at/publications/older/2604.pdf Sepp Hochreiter, Jurgen Schmidhuber. Long short-term memory (1997). Neural Computation.]</ref>
Первый слой вычисляет, насколько на данном шаге ему нужно забыть предыдущую информацию {{---}} по сути множители к компонентам вектора памяти.
[[File:LSTM_F1.png|none|250px]]
<math>f_t = \sigma(W_f * [h_th_{t-1}, x_t] + b_f)</math>
Второй слой вычисляет, насколько ему интересна новая информация, пришедшая с сигналом {{---}} такой же множитель, но уже для наблюдения.
[[File:LSTM_F2.png|none|250px]]
<math>i_t = \sigma(W_f * [h_th_{t-1}, x_t] + b_i)</math>
<math>\tilde{C}_t = tanh(W_C * [h_th_{t-1}, x_t] + b_C)</math>
На третьем слое вычисляется линейная комбинация памяти и наблюдения с только вычисленными весами для каждой из компонент. Так получается новое состояние памяти, которое в таком же виде передаётся далее.
[[File:LSTM_F3.png|none|250px]]
<math>C_t = f_t * C_tC_{t-1 } + i_t * \tilde{C}_t</math>
Осталось вычислить output. Но поскольку часть входного сигнала уже в памяти, не нужно считать активацию по всему сигналу. Сначала сигнал проходит через сигмоиду, которая решает, какая его часть важна для дальнейших решений, затем гиперболический тангенс «размазывает» вектор памяти на отрезок от -1 до 1, и в конце эти два вектора перемножаются.
[[File:LSTM_F4.png|none|250px]]
<math>o_t = \sigma(W_o * [h_th_{t-1}, x_t] + b_o)</math>
<math>h_t = o_t * tanh(C_t)</math>
215
правок

Навигация