Изменения

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

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

1912 байт убрано, 00:59, 26 января 2019
Нет описания правки
[[File:RNN.png|450px|thumb|[http://colah.github.io/posts/2015-08-Understanding-LSTMs/ RNN и ее развернутое представление]]]
[[File:RNN_layer.png|450px|thumb|[http://colah.github.io/posts/2015-08-Understanding-LSTMs/ Схема слоя рекуррентной сети]]]
 
'''Рекуррентная нейронная сеть''' (англ. ''recurrent neural network'', ''RNN'') {{---}} вид [[:Нейронные_сети,_перцептрон|нейронных сетей]], где связи между элементами образуют направленную последовательность.
== Описание ==
[[File:RNN.png|450px|thumb|[http://colah.github.io/posts/2015-08-Understanding-LSTMs/ RNN и ее развернутое представление]]]
[[File:RNN_layer.png|450px|thumb|[http://colah.github.io/posts/2015-08-Understanding-LSTMs/ Схема слоя рекуррентной сети]]]
Рекуррентные нейронные сети {{---}} сети с циклами, которые хорошо подходят для обработки последовательностей.
[[File:RNN_BP.jpg|450px|thumb|RNN с задержкой на скрытом слое]]
[[File:RNN_BPTT.jpg|450px|thumb|Развертка RNN]]
Обучение RNN аналогично обучению обычной нейронной сети. Мы также используем [[:Обратное_распространение_ошибки|алгоритм обратного распространения ошибки (backpropagation)]], но с небольшим изменением. Поскольку одни и те же параметры используются на всех временных этапах в сети, градиент на каждом выходе зависит не только от расчетов текущего шага, но и от предыдущих временных шагов. Например, чтобы вычислить градиент при t = количестве слоев равном 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>
== Области и примеры применения ==
Используются, когда важно соблюдать последовательность, когда нужен важен порядок того, что у нас происходитпоступающих объектов.
* Обработка текста на естественном языке
** Анализ текста
=== Сети долго-краткосрочной памяти ===
[[:Долгая_краткосрочная_память_(LSTM)|Сеть долго-краткосрочной памяти ]] (англ. 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> Разберем работу слоев подробнее<ref name=Understanding_LSTM>[http://colah.github.io/posts/2015-08-Understanding-LSTMs/ Understanding LSTM Networks]</ref>: Первый слой вычисляет, насколько на данном шаге ему нужно забыть предыдущую информацию {{---}} по сути множители к компонентам вектора памяти.[[File:LSTM_F1.png|none|250px]]<math>f_t = \sigma(W_f * [h_{t-1}, x_t] + b_f)</math> Второй слой вычисляет, насколько ему интересна новая информация, пришедшая с сигналом {{---}} такой же множитель, но уже для наблюдения.[[File:LSTM_F2.png|none|250px]]<math>i_t = \sigma(W_f * [h_{t-1}, x_t] + b_i)</math> <math>\tilde{C}_t = tanh(W_C * [h_{t-1}, x_t] + b_C)</math> На третьем слое вычисляется линейная комбинация памяти и наблюдения с только вычисленными весами для каждой из компонент. Так получается новое состояние памяти, которое в таком же виде передаётся далее.[[File:LSTM_F3.png|none|250px]]<math>C_t = f_t * C_{t-1} + i_t * \tilde{C}_t</math> Осталось вычислить output. Но поскольку часть входного сигнала уже в памяти, не нужно считать активацию по всему сигналу. Сначала сигнал проходит через сигмоиду, которая решает, какая его часть важна для дальнейших решений, затем гиперболический тангенс «размазывает» вектор памяти на отрезок от -1 до 1, и в конце эти два вектора перемножаются.[[File:LSTM_F4.png|none|250px]]<math>o_t = \sigma(W_o * [h_{t-1}, x_t] + b_o)</math> <math>h_t = o_t * tanh(C_t)</math> Полученные таким образом <math>h_t</math> и <math>C_t</math> передаются далее по цепочке.
=== Управляемые рекуррентные блоки ===
==Примечания==
<references/>
 
[[Категория: Машинное обучение]]
[[Категория: Нейронные сети]]
[[Категория: Рекуррентные нейронные сети]]
215
правок

Навигация