<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Adel</id>
		<title>Викиконспекты - Вклад участника [ru]</title>
		<link rel="self" type="application/atom+xml" href="http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Adel"/>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/Adel"/>
		<updated>2026-06-11T19:29:49Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D0%B5%D0%BA%D1%83%D1%80%D1%80%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B5_%D0%BD%D0%B5%D0%B9%D1%80%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5_%D1%81%D0%B5%D1%82%D0%B8&amp;diff=69434</id>
		<title>Рекуррентные нейронные сети</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D0%B5%D0%BA%D1%83%D1%80%D1%80%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B5_%D0%BD%D0%B5%D0%B9%D1%80%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5_%D1%81%D0%B5%D1%82%D0%B8&amp;diff=69434"/>
				<updated>2019-01-26T17:54:44Z</updated>
		
		<summary type="html">&lt;p&gt;Adel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Рекуррентная нейронная сеть''' (англ. ''recurrent neural network'', ''RNN'') {{---}} вид [[:Нейронные_сети,_перцептрон|нейронных сетей]], где связи между элементами образуют направленную последовательность.&lt;br /&gt;
&lt;br /&gt;
== Описание ==&lt;br /&gt;
[[File:RNN.png|450px|thumb|[http://colah.github.io/posts/2015-08-Understanding-LSTMs/ RNN и ее развернутое представление]]]&lt;br /&gt;
[[File:RNN_layer.png|450px|thumb|[http://colah.github.io/posts/2015-08-Understanding-LSTMs/ Схема слоя рекуррентной сети]]]&lt;br /&gt;
Рекуррентные нейронные сети {{---}} сети с циклами, которые хорошо подходят для обработки последовательностей.&lt;br /&gt;
[[File:RNN_BP.jpg|450px|thumb|RNN с задержкой на скрытом слое]]&lt;br /&gt;
[[File:RNN_BPTT.jpg|450px|thumb|Развертка RNN]]&lt;br /&gt;
Обучение RNN аналогично обучению обычной нейронной сети. Мы также используем [[:Обратное_распространение_ошибки|алгоритм обратного распространения ошибки (backpropagation)]], но с небольшим изменением. Поскольку одни и те же параметры используются на всех временных этапах в сети, градиент на каждом выходе зависит не только от расчетов текущего шага, но и от предыдущих временных шагов. Например, чтобы вычислить градиент для четвертого элемента последовательности, нам нужно было бы «распространить ошибку» на 3 шага и суммировать градиенты. Этот алгоритм называется «алгоритмом обратного распространения ошибки сквозь время» (англ. Backpropagation Through Time, BPTT).&amp;lt;ref name=BPTT_1&amp;gt;[http://andrew.gibiansky.com/blog/machine-learning/recurrent-neural-networks/ Backpropagation Through Time]&amp;lt;/ref&amp;gt;&amp;lt;ref name=BPTT_2&amp;gt;[http://www.wildml.com/2015/10/recurrent-neural-networks-tutorial-part-3-backpropagation-through-time-and-vanishing-gradients/ Backpropagation Through Time]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Алгоритм обратного распространения ошибки сквозь время:&lt;br /&gt;
&lt;br /&gt;
[[File:RNN_BPTT_GRAD.png|400px|frameless]]&lt;br /&gt;
&lt;br /&gt;
== Области и примеры применения ==&lt;br /&gt;
Используются, когда важно соблюдать последовательность, когда важен порядок поступающих объектов.&lt;br /&gt;
* Обработка текста на естественном языке&lt;br /&gt;
** Анализ текста&lt;br /&gt;
** Автоматический перевод&lt;br /&gt;
* Обработка аудио &lt;br /&gt;
** Автоматическое распознавание речи&lt;br /&gt;
* Обработка видео&lt;br /&gt;
** Прогнозирование следующего кадра на основе предыдущих&lt;br /&gt;
** Распознавание эмоций&lt;br /&gt;
* Обработка изображений&lt;br /&gt;
** Прогнозирование следующего пикселя на основе окружения&lt;br /&gt;
** Генерация описания изображений&lt;br /&gt;
&lt;br /&gt;
== Виды RNN ==&lt;br /&gt;
=== Один к одному ===&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|[[File:RNN_OTO.jpg|100px|left]]&lt;br /&gt;
|Архитектура по сути является обычной нейронной сетью.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Один ко многим ===&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|[[File:RNN_OTM.jpg|100px|left]]&lt;br /&gt;
|Один вход ко многим выходам может применяться, например, для генерации аудиозаписи. На вход подаем жанр музыки, который хотим получить, на выходе получаем последовательность аудиозаписи.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Многие к одному ===&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|[[File:RNN_MTO.jpg|100px|left]]&lt;br /&gt;
|Много входов и один выход может применяться, если мы хотим оценить тональность рецензии. На вход подаем слова рецензии, на выходе получаем оценку ее тональности: позитивная рецензия или негативная.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Многие ко многим ===&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|[[File:RNN_MTM1.jpg|100px|left]]&lt;br /&gt;
|Данную архитектуру можно использовать для перевода текста с одного языка на другой.&lt;br /&gt;
|-&lt;br /&gt;
|[[File:RNN_MTM2.jpg|100px|left]]&lt;br /&gt;
|Такой вариант подойдет для определения для классификации каждого слова в предложении в зависимости от контекста.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Архитектуры ==&lt;br /&gt;
=== Полностью рекуррентная сеть ===&lt;br /&gt;
Это базовая архитектура, разработанная в 1980-х. Сеть строится из узлов, каждый из которых соединён со всеми другими узлами. У каждого нейрона порог активации меняется со временем и является вещественным числом. Каждое соединение имеет переменный вещественный вес. Узлы разделяются на входные, выходные и скрытые.&lt;br /&gt;
&lt;br /&gt;
=== Рекурсивная сеть ===&lt;br /&gt;
[[:Рекурсивные нейронные сети|Рекурсивные нейронные сети]] представляют собой более общий случай рекуррентных сетей, когда сигнал в сети проходит через структуру в виде дерева (обычно бинарные деревья). Те же самые матрицы весов используются рекурсивно по всему графу в соответствии с его топологией.&lt;br /&gt;
&lt;br /&gt;
=== Нейронная сеть Хопфилда ===&lt;br /&gt;
Тип рекуррентной сети, когда все соединения симметричны. Изобретена Джоном Хопфилдом в 1982 году и гарантируется, что динамика такой сети сходится к одному из положений равновесия.&lt;br /&gt;
&lt;br /&gt;
=== Двунаправленная ассоциативная память (BAM) ===&lt;br /&gt;
Вариацией сети Хопфилда является двунаправленная ассоциативная память (BAM). BAM имеет два слоя, каждый из которых может выступать в качестве входного, находить (вспоминать) ассоциацию и генерировать результат для другого слоя.&lt;br /&gt;
[[File:Elman_RNN.jpg|450px|thumb|Сеть Элмана]]&lt;br /&gt;
&lt;br /&gt;
=== Сеть Элмана ===&lt;br /&gt;
Нейронная сеть Элмана состоит из трёх слоев: x, y, z (см рис. Сеть Элмана). Дополнительно к сети добавлен набор «контекстных блоков»: u (см рис. Сеть Элмана). Средний (скрытый) слой соединён с контекстными блоками с фиксированным весом, равным единице. С каждым шагом времени на вход поступает информация, которая проходит прямой ход к выходному слою в соответствии с правилами обучения. Фиксированные обратные связи сохраняют предыдущие значения скрытого слоя в контекстных блоках (до того как скрытый слой поменяет значение в процессе обучения). Таким способом сеть сохраняет своё состояние, что может использоваться в предсказании последовательностей, выходя за пределы мощности многослойного перцептрона.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;h_t = \sigma_h(W_h x_t + U_h h_{t-1} + b_h)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y_t = \sigma_y(W_y h_t + b_y)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Обозначения переменных и функций:&lt;br /&gt;
* &amp;lt;math&amp;gt;x_t&amp;lt;/math&amp;gt;: вектор входного слоя&lt;br /&gt;
* &amp;lt;math&amp;gt;h_t&amp;lt;/math&amp;gt;: вектор скрытого слоя&lt;br /&gt;
* &amp;lt;math&amp;gt;y_t&amp;lt;/math&amp;gt;: вектор выходного слоя&lt;br /&gt;
* &amp;lt;math&amp;gt;W, U, b&amp;lt;/math&amp;gt;: матрица и вектор параметров&lt;br /&gt;
* &amp;lt;math&amp;gt;\sigma_h, \sigma_y&amp;lt;/math&amp;gt;: функция активации&lt;br /&gt;
&lt;br /&gt;
=== Сеть Джордана ===&lt;br /&gt;
Нейронная сеть Джордана подобна сети Элмана, но контекстные блоки связаны не со скрытым слоем, а с выходным слоем. Контекстные блоки таким образом сохраняют своё состояние. Они обладают рекуррентной связью с собой.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;h_t = \sigma_h(W_h x_t + U_h y_{t-1} + b_h)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y_t = \sigma_y(W_y h_t + b_y)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Эхо-сети ===&lt;br /&gt;
Эхо-сеть (англ. Echo State Network, ESN) характеризуется одним скрытым слоем (который называется резервуаром) со случайными редкими связями между нейронами. При этом связи внутри резервуара фиксированы, но связи с выходным слоем подлежат обучению. Состояние резервуара (state) вычисляется через предыдущие состояния резервуара, а также предыдущие состояния входного и выходного сигналов. Так как эхо-сети обладают только одним скрытым слоем, они обладают достаточно низкой вычислительной сложностью.&lt;br /&gt;
&lt;br /&gt;
=== Нейронный компрессор истории ===&lt;br /&gt;
Нейронный компрессор исторических данных {{---}} это блок, позволяющий в сжатом виде хранить существенные исторические особенности процесса, который является своего рода стеком рекуррентной нейронной сети, формируемым в процессе самообучения.&lt;br /&gt;
[[File:LSTM.png|450px|thumb|[http://colah.github.io/posts/2015-08-Understanding-LSTMs/ Схема слоев рекуррентной сети долго-краткосрочной памяти]]]&lt;br /&gt;
&lt;br /&gt;
=== Сети долго-краткосрочной памяти ===&lt;br /&gt;
[[:Долгая_краткосрочная_память_(LSTM)|Сеть долго-краткосрочной памяти]] (англ. Long short-term memory, LSTM) является самой популярной архитектурой рекуррентной нейронной сети на данный момент, данная архитектура способна запоминать данные на долгое время.&amp;lt;ref name=LSTM&amp;gt;[https://www.bioinf.jku.at/publications/older/2604.pdf Sepp Hochreiter, Jurgen Schmidhuber. Long short-term memory (1997). Neural Computation.]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Управляемые рекуррентные блоки ===&lt;br /&gt;
Управляемые рекуррентные блоки (англ. Gated Recurrent Units, GRU) {{---}} обладает меньшим количеством параметров, чем у LSTM, и в ней отсутствует выходное управление. При этом производительность в моделях речевого сигнала или полифонической музыки оказалась сопоставимой с LSTM.&lt;br /&gt;
&lt;br /&gt;
== Пример кода ==&lt;br /&gt;
Пример кода на Python с использованием библиотеки Keras.&amp;lt;ref name=KerasRNN&amp;gt;[https://keras.io/layers/recurrent/ Keras RNN]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# Импорты&amp;lt;/font&amp;gt;&lt;br /&gt;
  '''import''' numpy '''as''' np&lt;br /&gt;
  '''from''' keras.preprocessing '''import''' sequence&lt;br /&gt;
  '''from''' keras.models '''import''' Sequential&lt;br /&gt;
  '''from''' keras.layers '''import''' Dense, Activation, Embedding&lt;br /&gt;
  '''from''' keras.layers '''import''' LSTM&lt;br /&gt;
  '''from''' keras.datasets '''import''' imdb&lt;br /&gt;
  &lt;br /&gt;
  &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# Устанавливаем seed для обеспечения повторяемости результатов&amp;lt;/font&amp;gt;&lt;br /&gt;
  np.random.seed(&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;42&amp;lt;/font&amp;gt;)&lt;br /&gt;
  &lt;br /&gt;
  &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# Указываем количество слов из частотного словаря, которое будет использоваться (отсортированы по частоте использования)&amp;lt;/font&amp;gt;&lt;br /&gt;
  max_features = &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;5000&amp;lt;/font&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# Загружаем данные (датасет IMDB содержит 25000 рецензий на фильмы с правильным ответом для обучения и 25000 рецензий на фильмы с правильным ответом для тестирования)&amp;lt;/font&amp;gt;&lt;br /&gt;
  (X_train, y_train), (X_test, y_test) = imdb.load_data(nb_words = max_features)&lt;br /&gt;
  &lt;br /&gt;
  &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# Устанавливаем максимальную длину рецензий в словах, чтобы они все были одной длины&amp;lt;/font&amp;gt;&lt;br /&gt;
  maxlen = &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;80&amp;lt;/font&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# Заполняем короткие рецензии пробелами, а длинные обрезаем&amp;lt;/font&amp;gt;&lt;br /&gt;
  X_train = sequence.pad_sequences(X_train, maxlen = maxlen)&lt;br /&gt;
  X_test = sequence.pad_sequences(X_test, maxlen = maxlen)&lt;br /&gt;
  &lt;br /&gt;
  &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# Создаем модель последовательной сети&amp;lt;/font&amp;gt;&lt;br /&gt;
  model = Sequential()&lt;br /&gt;
  &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# Добавляем слой для векторного представления слов (5000 слов, каждое представлено вектором из 32 чисел, отключаем входной сигнал с вероятностью 20% для предотвращения переобучения)&amp;lt;/font&amp;gt;&lt;br /&gt;
  model.add(Embedding(max_features, &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;32&amp;lt;/font&amp;gt;, dropout = &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;0.2&amp;lt;/font&amp;gt;))&lt;br /&gt;
  &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# Добавляем слой долго-краткосрочной памяти (100 элементов для долговременного хранения информации, отключаем входной сигнал с вероятностью 20%, отключаем рекуррентный сигнал с вероятностью 20%)&amp;lt;/font&amp;gt;&lt;br /&gt;
  model.add(LSTM(&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;100&amp;lt;/font&amp;gt;, dropout_W = &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;0.2&amp;lt;/font&amp;gt;, dropout_U = &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;0.2&amp;lt;/font&amp;gt;))&lt;br /&gt;
  &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# Добавляем полносвязный слой из 1 элемента для классификации, в качестве функции активации будем использовать сигмоидальную функцию&amp;lt;/font&amp;gt;&lt;br /&gt;
  model.add(Dense(&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;1&amp;lt;/font&amp;gt;, activation = &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;'sigmoid'&amp;lt;/font&amp;gt;))&lt;br /&gt;
  &lt;br /&gt;
  &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# Компилируем модель нейронной сети&amp;lt;/font&amp;gt;&lt;br /&gt;
  model.compile(loss = &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;'binary_crossentropy'&amp;lt;/font&amp;gt;,&lt;br /&gt;
                optimizer = &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;'adam'&amp;lt;/font&amp;gt;,&lt;br /&gt;
                metrics = [&amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;'accuracy'&amp;lt;/font&amp;gt;])&lt;br /&gt;
  &lt;br /&gt;
  &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# Обучаем нейронную сеть (данные для обучения, ответы к данным для обучения, количество рецензий после анализа которого будут изменены веса, число эпох обучения, тестовые данные, показывать progress bar или нет)&amp;lt;/font&amp;gt;&lt;br /&gt;
  model.fit(X_train, y_train, &lt;br /&gt;
            batch_size = &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;64&amp;lt;/font&amp;gt;,&lt;br /&gt;
            nb_epoch = &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;7&amp;lt;/font&amp;gt;,&lt;br /&gt;
            validation_data = (X_test, y_test),&lt;br /&gt;
            verbose = &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;1&amp;lt;/font&amp;gt;)&lt;br /&gt;
  &lt;br /&gt;
  &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# Проверяем качество обучения на тестовых данных (если есть данные, которые не участвовали в обучении, лучше использовать их, но в нашем случае таковых нет)&amp;lt;/font&amp;gt;&lt;br /&gt;
  scores = model.evaluate(X_test, y_test, batch_size = &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;64&amp;lt;/font&amp;gt;)&lt;br /&gt;
  print(&amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;'Точность на тестовых данных: %.2f%%'&amp;lt;/font&amp;gt; % (scores[1] * &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;100&amp;lt;/font&amp;gt;))&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
*[[:Сверточные_нейронные_сети|Сверточные нейронные сети]]&lt;br /&gt;
*[[:Нейронные_сети,_перцептрон|Нейронные сети, перцептрон]]&lt;br /&gt;
*[[:Рекурсивные нейронные сети|Рекурсивные нейронные сети]]&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Нейронные сети]]&lt;br /&gt;
[[Категория: Рекуррентные нейронные сети]]&lt;/div&gt;</summary>
		<author><name>Adel</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:RNN_MTM2.jpg&amp;diff=69432</id>
		<title>Файл:RNN MTM2.jpg</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:RNN_MTM2.jpg&amp;diff=69432"/>
				<updated>2019-01-26T15:01:05Z</updated>
		
		<summary type="html">&lt;p&gt;Adel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Adel</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:RNN_MTM1.jpg&amp;diff=69431</id>
		<title>Файл:RNN MTM1.jpg</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:RNN_MTM1.jpg&amp;diff=69431"/>
				<updated>2019-01-26T15:00:48Z</updated>
		
		<summary type="html">&lt;p&gt;Adel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Adel</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:RNN_MTO.jpg&amp;diff=69430</id>
		<title>Файл:RNN MTO.jpg</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:RNN_MTO.jpg&amp;diff=69430"/>
				<updated>2019-01-26T15:00:32Z</updated>
		
		<summary type="html">&lt;p&gt;Adel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Adel</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:RNN_OTM.jpg&amp;diff=69429</id>
		<title>Файл:RNN OTM.jpg</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:RNN_OTM.jpg&amp;diff=69429"/>
				<updated>2019-01-26T15:00:18Z</updated>
		
		<summary type="html">&lt;p&gt;Adel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Adel</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:RNN_OTO.jpg&amp;diff=69428</id>
		<title>Файл:RNN OTO.jpg</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:RNN_OTO.jpg&amp;diff=69428"/>
				<updated>2019-01-26T15:00:05Z</updated>
		
		<summary type="html">&lt;p&gt;Adel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Adel</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:RNN_BPTT_GRAD.png&amp;diff=69421</id>
		<title>Файл:RNN BPTT GRAD.png</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:RNN_BPTT_GRAD.png&amp;diff=69421"/>
				<updated>2019-01-26T13:57:26Z</updated>
		
		<summary type="html">&lt;p&gt;Adel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Adel</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D0%B5%D0%BA%D1%83%D1%80%D1%80%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B5_%D0%BD%D0%B5%D0%B9%D1%80%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5_%D1%81%D0%B5%D1%82%D0%B8&amp;diff=69377</id>
		<title>Рекуррентные нейронные сети</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D0%B5%D0%BA%D1%83%D1%80%D1%80%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B5_%D0%BD%D0%B5%D0%B9%D1%80%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5_%D1%81%D0%B5%D1%82%D0%B8&amp;diff=69377"/>
				<updated>2019-01-25T21:59:20Z</updated>
		
		<summary type="html">&lt;p&gt;Adel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Рекуррентная нейронная сеть''' (англ. ''recurrent neural network'', ''RNN'') {{---}} вид [[:Нейронные_сети,_перцептрон|нейронных сетей]], где связи между элементами образуют направленную последовательность.&lt;br /&gt;
&lt;br /&gt;
== Описание ==&lt;br /&gt;
[[File:RNN.png|450px|thumb|[http://colah.github.io/posts/2015-08-Understanding-LSTMs/ RNN и ее развернутое представление]]]&lt;br /&gt;
[[File:RNN_layer.png|450px|thumb|[http://colah.github.io/posts/2015-08-Understanding-LSTMs/ Схема слоя рекуррентной сети]]]&lt;br /&gt;
Рекуррентные нейронные сети {{---}} сети с циклами, которые хорошо подходят для обработки последовательностей.&lt;br /&gt;
[[File:RNN_BP.jpg|450px|thumb|RNN с задержкой на скрытом слое]]&lt;br /&gt;
[[File:RNN_BPTT.jpg|450px|thumb|Развертка RNN]]&lt;br /&gt;
Обучение RNN аналогично обучению обычной нейронной сети. Мы также используем [[:Обратное_распространение_ошибки|алгоритм обратного распространения ошибки (backpropagation)]], но с небольшим изменением. Поскольку одни и те же параметры используются на всех временных этапах в сети, градиент на каждом выходе зависит не только от расчетов текущего шага, но и от предыдущих временных шагов. Например, чтобы вычислить градиент при количестве слоев равном 4, нам нужно было бы «распространить ошибку» на 3 шага и суммировать градиенты. Этот алгоритм называется «алгоритмом обратного распространения ошибки сквозь время» (англ. Backpropagation Through Time, BPTT).&amp;lt;ref name=BPTT_1&amp;gt;[http://andrew.gibiansky.com/blog/machine-learning/recurrent-neural-networks/ Backpropagation Through Time]&amp;lt;/ref&amp;gt;&amp;lt;ref name=BPTT_2&amp;gt;[http://www.wildml.com/2015/10/recurrent-neural-networks-tutorial-part-3-backpropagation-through-time-and-vanishing-gradients/ Backpropagation Through Time]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Области и примеры применения ==&lt;br /&gt;
Используются, когда важно соблюдать последовательность, когда важен порядок поступающих объектов.&lt;br /&gt;
* Обработка текста на естественном языке&lt;br /&gt;
** Анализ текста&lt;br /&gt;
** Автоматический перевод&lt;br /&gt;
* Обработка аудио &lt;br /&gt;
** Автоматическое распознавание речи&lt;br /&gt;
* Обработка видео&lt;br /&gt;
** Прогнозирование следующего кадра на основе предыдущих&lt;br /&gt;
** Распознавание эмоций&lt;br /&gt;
* Обработка изображений&lt;br /&gt;
** Прогнозирование следующего пикселя на основе окружения&lt;br /&gt;
** Генерация описания изображений&lt;br /&gt;
&lt;br /&gt;
== Архитектуры ==&lt;br /&gt;
=== Полностью рекуррентная сеть ===&lt;br /&gt;
Это базовая архитектура, разработанная в 1980-х. Сеть строится из узлов, каждый из которых соединён со всеми другими узлами. У каждого нейрона порог активации меняется со временем и является вещественным числом. Каждое соединение имеет переменный вещественный вес. Узлы разделяются на входные, выходные и скрытые.&lt;br /&gt;
&lt;br /&gt;
=== Рекурсивная сеть ===&lt;br /&gt;
[[:Рекурсивные нейронные сети|Рекурсивные нейронные сети]] представляют собой более общий случай рекуррентных сетей, когда сигнал в сети проходит через структуру в виде дерева (обычно бинарные деревья). Те же самые матрицы весов используются рекурсивно по всему графу в соответствии с его топологией.&lt;br /&gt;
&lt;br /&gt;
=== Нейронная сеть Хопфилда ===&lt;br /&gt;
Тип рекуррентной сети, когда все соединения симметричны. Изобретена Джоном Хопфилдом в 1982 году и гарантируется, что динамика такой сети сходится к одному из положений равновесия.&lt;br /&gt;
&lt;br /&gt;
=== Двунаправленная ассоциативная память (BAM) ===&lt;br /&gt;
Вариацией сети Хопфилда является двунаправленная ассоциативная память (BAM). BAM имеет два слоя, каждый из которых может выступать в качестве входного, находить (вспоминать) ассоциацию и генерировать результат для другого слоя.&lt;br /&gt;
[[File:Elman_RNN.jpg|450px|thumb|Сеть Элмана]]&lt;br /&gt;
&lt;br /&gt;
=== Сеть Элмана ===&lt;br /&gt;
Нейронная сеть Элмана состоит из трёх слоев: x, y, z (см рис. Сеть Элмана). Дополнительно к сети добавлен набор «контекстных блоков»: u (см рис. Сеть Элмана). Средний (скрытый) слой соединён с контекстными блоками с фиксированным весом, равным единице. С каждым шагом времени на вход поступает информация, которая проходит прямой ход к выходному слою в соответствии с правилами обучения. Фиксированные обратные связи сохраняют предыдущие значения скрытого слоя в контекстных блоках (до того как скрытый слой поменяет значение в процессе обучения). Таким способом сеть сохраняет своё состояние, что может использоваться в предсказании последовательностей, выходя за пределы мощности многослойного перцептрона.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;h_t = \sigma_h(W_h x_t + U_h h_{t-1} + b_h)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y_t = \sigma_y(W_y h_t + b_y)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Обозначения переменных и функций:&lt;br /&gt;
* &amp;lt;math&amp;gt;x_t&amp;lt;/math&amp;gt;: вектор входного слоя&lt;br /&gt;
* &amp;lt;math&amp;gt;h_t&amp;lt;/math&amp;gt;: вектор скрытого слоя&lt;br /&gt;
* &amp;lt;math&amp;gt;y_t&amp;lt;/math&amp;gt;: вектор выходного слоя&lt;br /&gt;
* &amp;lt;math&amp;gt;W, U, b&amp;lt;/math&amp;gt;: матрица и вектор параметров&lt;br /&gt;
* &amp;lt;math&amp;gt;\sigma_h, \sigma_y&amp;lt;/math&amp;gt;: функция активации&lt;br /&gt;
&lt;br /&gt;
=== Сеть Джордана ===&lt;br /&gt;
Нейронная сеть Джордана подобна сети Элмана, но контекстные блоки связаны не со скрытым слоем, а с выходным слоем. Контекстные блоки таким образом сохраняют своё состояние. Они обладают рекуррентной связью с собой.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;h_t = \sigma_h(W_h x_t + U_h y_{t-1} + b_h)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y_t = \sigma_y(W_y h_t + b_y)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Эхо-сети ===&lt;br /&gt;
Эхо-сеть (англ. Echo State Network, ESN) характеризуется одним скрытым слоем (который называется резервуаром) со случайными редкими связями между нейронами. При этом связи внутри резервуара фиксированы, но связи с выходным слоем подлежат обучению. Состояние резервуара (state) вычисляется через предыдущие состояния резервуара, а также предыдущие состояния входного и выходного сигналов. Так как эхо-сети обладают только одним скрытым слоем, они обладают достаточно низкой вычислительной сложностью.&lt;br /&gt;
&lt;br /&gt;
=== Нейронный компрессор истории ===&lt;br /&gt;
Нейронный компрессор исторических данных {{---}} это блок, позволяющий в сжатом виде хранить существенные исторические особенности процесса, который является своего рода стеком рекуррентной нейронной сети, формируемым в процессе самообучения.&lt;br /&gt;
[[File:LSTM.png|450px|thumb|[http://colah.github.io/posts/2015-08-Understanding-LSTMs/ Схема слоев рекуррентной сети долго-краткосрочной памяти]]]&lt;br /&gt;
&lt;br /&gt;
=== Сети долго-краткосрочной памяти ===&lt;br /&gt;
[[:Долгая_краткосрочная_память_(LSTM)|Сеть долго-краткосрочной памяти]] (англ. Long short-term memory, LSTM) является самой популярной архитектурой рекуррентной нейронной сети на данный момент, данная архитектура способна запоминать данные на долгое время.&amp;lt;ref name=LSTM&amp;gt;[https://www.bioinf.jku.at/publications/older/2604.pdf Sepp Hochreiter, Jurgen Schmidhuber. Long short-term memory (1997). Neural Computation.]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Управляемые рекуррентные блоки ===&lt;br /&gt;
Управляемые рекуррентные блоки (англ. Gated Recurrent Units, GRU) {{---}} обладает меньшим количеством параметров, чем у LSTM, и в ней отсутствует выходное управление. При этом производительность в моделях речевого сигнала или полифонической музыки оказалась сопоставимой с LSTM.&lt;br /&gt;
&lt;br /&gt;
== Пример кода ==&lt;br /&gt;
Пример кода на Python с использованием библиотеки Keras.&amp;lt;ref name=KerasRNN&amp;gt;[https://keras.io/layers/recurrent/ Keras RNN]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# Импорты&amp;lt;/font&amp;gt;&lt;br /&gt;
  '''import''' numpy '''as''' np&lt;br /&gt;
  '''from''' keras.preprocessing '''import''' sequence&lt;br /&gt;
  '''from''' keras.models '''import''' Sequential&lt;br /&gt;
  '''from''' keras.layers '''import''' Dense, Activation, Embedding&lt;br /&gt;
  '''from''' keras.layers '''import''' LSTM&lt;br /&gt;
  '''from''' keras.datasets '''import''' imdb&lt;br /&gt;
  &lt;br /&gt;
  &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# Устанавливаем seed для обеспечения повторяемости результатов&amp;lt;/font&amp;gt;&lt;br /&gt;
  np.random.seed(&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;42&amp;lt;/font&amp;gt;)&lt;br /&gt;
  &lt;br /&gt;
  &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# Указываем количество слов из частотного словаря, которое будет использоваться (отсортированы по частоте использования)&amp;lt;/font&amp;gt;&lt;br /&gt;
  max_features = &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;5000&amp;lt;/font&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# Загружаем данные (датасет IMDB содержит 25000 рецензий на фильмы с правильным ответом для обучения и 25000 рецензий на фильмы с правильным ответом для тестирования)&amp;lt;/font&amp;gt;&lt;br /&gt;
  (X_train, y_train), (X_test, y_test) = imdb.load_data(nb_words = max_features)&lt;br /&gt;
  &lt;br /&gt;
  &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# Устанавливаем максимальную длину рецензий в словах, чтобы они все были одной длины&amp;lt;/font&amp;gt;&lt;br /&gt;
  maxlen = &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;80&amp;lt;/font&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# Заполняем короткие рецензии пробелами, а длинные обрезаем&amp;lt;/font&amp;gt;&lt;br /&gt;
  X_train = sequence.pad_sequences(X_train, maxlen = maxlen)&lt;br /&gt;
  X_test = sequence.pad_sequences(X_test, maxlen = maxlen)&lt;br /&gt;
  &lt;br /&gt;
  &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# Создаем модель последовательной сети&amp;lt;/font&amp;gt;&lt;br /&gt;
  model = Sequential()&lt;br /&gt;
  &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# Добавляем слой для векторного представления слов (5000 слов, каждое представлено вектором из 32 чисел, отключаем входной сигнал с вероятностью 20% для предотвращения переобучения)&amp;lt;/font&amp;gt;&lt;br /&gt;
  model.add(Embedding(max_features, &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;32&amp;lt;/font&amp;gt;, dropout = &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;0.2&amp;lt;/font&amp;gt;))&lt;br /&gt;
  &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# Добавляем слой долго-краткосрочной памяти (100 элементов для долговременного хранения информации, отключаем входной сигнал с вероятностью 20%, отключаем рекуррентный сигнал с вероятностью 20%)&amp;lt;/font&amp;gt;&lt;br /&gt;
  model.add(LSTM(&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;100&amp;lt;/font&amp;gt;, dropout_W = &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;0.2&amp;lt;/font&amp;gt;, dropout_U = &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;0.2&amp;lt;/font&amp;gt;))&lt;br /&gt;
  &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# Добавляем полносвязный слой из 1 элемента для классификации, в качестве функции активации будем использовать сигмоидальную функцию&amp;lt;/font&amp;gt;&lt;br /&gt;
  model.add(Dense(&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;1&amp;lt;/font&amp;gt;, activation = &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;'sigmoid'&amp;lt;/font&amp;gt;))&lt;br /&gt;
  &lt;br /&gt;
  &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# Компилируем модель нейронной сети&amp;lt;/font&amp;gt;&lt;br /&gt;
  model.compile(loss = &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;'binary_crossentropy'&amp;lt;/font&amp;gt;,&lt;br /&gt;
                optimizer = &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;'adam'&amp;lt;/font&amp;gt;,&lt;br /&gt;
                metrics = [&amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;'accuracy'&amp;lt;/font&amp;gt;])&lt;br /&gt;
  &lt;br /&gt;
  &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# Обучаем нейронную сеть (данные для обучения, ответы к данным для обучения, количество рецензий после анализа которого будут изменены веса, число эпох обучения, тестовые данные, показывать progress bar или нет)&amp;lt;/font&amp;gt;&lt;br /&gt;
  model.fit(X_train, y_train, &lt;br /&gt;
            batch_size = &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;64&amp;lt;/font&amp;gt;,&lt;br /&gt;
            nb_epoch = &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;7&amp;lt;/font&amp;gt;,&lt;br /&gt;
            validation_data = (X_test, y_test),&lt;br /&gt;
            verbose = &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;1&amp;lt;/font&amp;gt;)&lt;br /&gt;
  &lt;br /&gt;
  &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# Проверяем качество обучения на тестовых данных (если есть данные, которые не участвовали в обучении, лучше использовать их, но в нашем случае таковых нет)&amp;lt;/font&amp;gt;&lt;br /&gt;
  scores = model.evaluate(X_test, y_test, batch_size = &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;64&amp;lt;/font&amp;gt;)&lt;br /&gt;
  print(&amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;'Точность на тестовых данных: %.2f%%'&amp;lt;/font&amp;gt; % (scores[1] * &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;100&amp;lt;/font&amp;gt;))&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
*[[:Сверточные_нейронные_сети|Сверточные нейронные сети]]&lt;br /&gt;
*[[:Нейронные_сети,_перцептрон|Нейронные сети, перцептрон]]&lt;br /&gt;
*[[:Рекурсивные нейронные сети|Рекурсивные нейронные сети]]&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Нейронные сети]]&lt;br /&gt;
[[Категория: Рекуррентные нейронные сети]]&lt;/div&gt;</summary>
		<author><name>Adel</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:RNN_BPTT.jpg&amp;diff=69376</id>
		<title>Файл:RNN BPTT.jpg</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:RNN_BPTT.jpg&amp;diff=69376"/>
				<updated>2019-01-25T21:47:49Z</updated>
		
		<summary type="html">&lt;p&gt;Adel: Adel загрузил новую версию Файл:RNN BPTT.jpg&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Adel</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:RNN_BP.jpg&amp;diff=69375</id>
		<title>Файл:RNN BP.jpg</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:RNN_BP.jpg&amp;diff=69375"/>
				<updated>2019-01-25T21:47:11Z</updated>
		
		<summary type="html">&lt;p&gt;Adel: Adel загрузил новую версию Файл:RNN BP.jpg&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Adel</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D0%B5%D0%BA%D1%83%D1%80%D1%80%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B5_%D0%BD%D0%B5%D0%B9%D1%80%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5_%D1%81%D0%B5%D1%82%D0%B8&amp;diff=69205</id>
		<title>Рекуррентные нейронные сети</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D0%B5%D0%BA%D1%83%D1%80%D1%80%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B5_%D0%BD%D0%B5%D0%B9%D1%80%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5_%D1%81%D0%B5%D1%82%D0%B8&amp;diff=69205"/>
				<updated>2019-01-24T15:39:23Z</updated>
		
		<summary type="html">&lt;p&gt;Adel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:RNN.png|450px|thumb|[http://colah.github.io/posts/2015-08-Understanding-LSTMs/ RNN и ее развернутое представление]]]&lt;br /&gt;
[[File:RNN_layer.png|450px|thumb|[http://colah.github.io/posts/2015-08-Understanding-LSTMs/ Схема слоя рекуррентной сети]]]&lt;br /&gt;
&lt;br /&gt;
'''Рекуррентная нейронная сеть''' (англ. ''recurrent neural network'', ''RNN'') {{---}} вид [[:Нейронные_сети,_перцептрон|нейронных сетей]], где связи между элементами образуют направленную последовательность.&lt;br /&gt;
&lt;br /&gt;
== Описание ==&lt;br /&gt;
Рекуррентные нейронные сети {{---}} сети с циклами, которые хорошо подходят для обработки последовательностей.&lt;br /&gt;
[[File:RNN_BP.jpg|450px|thumb|RNN с задержкой на скрытом слое]]&lt;br /&gt;
[[File:RNN_BPTT.jpg|450px|thumb|Развертка RNN]]&lt;br /&gt;
Обучение RNN аналогично обучению обычной нейронной сети. Мы также используем алгоритм обратного распространения ошибки (backpropagation), но с небольшим изменением. Поскольку одни и те же параметры используются на всех временных этапах в сети, градиент на каждом выходе зависит не только от расчетов текущего шага, но и от предыдущих временных шагов. Например, чтобы вычислить градиент при t = 4, нам нужно было бы «распространить ошибку» на 3 шага и суммировать градиенты. Этот алгоритм называется «алгоритмом обратного распространения ошибки сквозь время» (англ. Backpropagation Through Time, BPTT).&amp;lt;ref name=BPTT_1&amp;gt;[http://andrew.gibiansky.com/blog/machine-learning/recurrent-neural-networks/ Backpropagation Through Time]&amp;lt;/ref&amp;gt;&amp;lt;ref name=BPTT_2&amp;gt;[http://www.wildml.com/2015/10/recurrent-neural-networks-tutorial-part-3-backpropagation-through-time-and-vanishing-gradients/ Backpropagation Through Time]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Области и примеры применения ==&lt;br /&gt;
Используются, когда важно соблюдать последовательность, когда нужен порядок того, что у нас происходит.&lt;br /&gt;
* Обработка текста на естественном языке&lt;br /&gt;
** Анализ текста&lt;br /&gt;
** Автоматический перевод&lt;br /&gt;
* Обработка аудио &lt;br /&gt;
** Автоматическое распознавание речи&lt;br /&gt;
* Обработка видео&lt;br /&gt;
** Прогнозирование следующего кадра на основе предыдущих&lt;br /&gt;
** Распознавание эмоций&lt;br /&gt;
* Обработка изображений&lt;br /&gt;
** Прогнозирование следующего пикселя на основе окружения&lt;br /&gt;
** Генерация описания изображений&lt;br /&gt;
&lt;br /&gt;
== Архитектуры ==&lt;br /&gt;
=== Полностью рекуррентная сеть ===&lt;br /&gt;
Это базовая архитектура, разработанная в 1980-х. Сеть строится из узлов, каждый из которых соединён со всеми другими узлами. У каждого нейрона порог активации меняется со временем и является вещественным числом. Каждое соединение имеет переменный вещественный вес. Узлы разделяются на входные, выходные и скрытые.&lt;br /&gt;
&lt;br /&gt;
=== Рекурсивная сеть ===&lt;br /&gt;
[[:Рекурсивные нейронные сети|Рекурсивные нейронные сети]] представляют собой более общий случай рекуррентных сетей, когда сигнал в сети проходит через структуру в виде дерева (обычно бинарные деревья). Те же самые матрицы весов используются рекурсивно по всему графу в соответствии с его топологией.&lt;br /&gt;
&lt;br /&gt;
=== Нейронная сеть Хопфилда ===&lt;br /&gt;
Тип рекуррентной сети, когда все соединения симметричны. Изобретена Джоном Хопфилдом в 1982 году и гарантируется, что динамика такой сети сходится к одному из положений равновесия.&lt;br /&gt;
&lt;br /&gt;
=== Двунаправленная ассоциативная память (BAM) ===&lt;br /&gt;
Вариацией сети Хопфилда является двунаправленная ассоциативная память (BAM). BAM имеет два слоя, каждый из которых может выступать в качестве входного, находить (вспоминать) ассоциацию и генерировать результат для другого слоя.&lt;br /&gt;
[[File:Elman_RNN.jpg|450px|thumb|Сеть Элмана]]&lt;br /&gt;
&lt;br /&gt;
=== Сеть Элмана ===&lt;br /&gt;
Нейронная сеть Элмана состоит из трёх слоев: x, y, z (см рис. Сеть Элмана). Дополнительно к сети добавлен набор «контекстных блоков»: u (см рис. Сеть Элмана). Средний (скрытый) слой соединён с контекстными блоками с фиксированным весом, равным единице. С каждым шагом времени на вход поступает информация, которая проходит прямой ход к выходному слою в соответствии с правилами обучения. Фиксированные обратные связи сохраняют предыдущие значения скрытого слоя в контекстных блоках (до того как скрытый слой поменяет значение в процессе обучения). Таким способом сеть сохраняет своё состояние, что может использоваться в предсказании последовательностей, выходя за пределы мощности многослойного перцептрона.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;h_t = \sigma_h(W_h x_t + U_h h_{t-1} + b_h)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y_t = \sigma_y(W_y h_t + b_y)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Обозначения переменных и функций:&lt;br /&gt;
* &amp;lt;math&amp;gt;x_t&amp;lt;/math&amp;gt;: вектор входного слоя&lt;br /&gt;
* &amp;lt;math&amp;gt;h_t&amp;lt;/math&amp;gt;: вектор скрытого слоя&lt;br /&gt;
* &amp;lt;math&amp;gt;y_t&amp;lt;/math&amp;gt;: вектор выходного слоя&lt;br /&gt;
* &amp;lt;math&amp;gt;W, U, b&amp;lt;/math&amp;gt;: матрица и вектор параметров&lt;br /&gt;
* &amp;lt;math&amp;gt;\sigma_h, \sigma_y&amp;lt;/math&amp;gt;: функция активации&lt;br /&gt;
&lt;br /&gt;
=== Сеть Джордана ===&lt;br /&gt;
Нейронная сеть Джордана подобна сети Элмана, но контекстные блоки связаны не со скрытым слоем, а с выходным слоем. Контекстные блоки таким образом сохраняют своё состояние. Они обладают рекуррентной связью с собой.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;h_t = \sigma_h(W_h x_t + U_h y_{t-1} + b_h)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y_t = \sigma_y(W_y h_t + b_y)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Эхо-сети ===&lt;br /&gt;
Эхо-сеть (англ. Echo State Network, ESN) характеризуется одним скрытым слоем (который называется резервуаром) со случайными редкими связями между нейронами. При этом связи внутри резервуара фиксированы, но связи с выходным слоем подлежат обучению. Состояние резервуара (state) вычисляется через предыдущие состояния резервуара, а также предыдущие состояния входного и выходного сигналов. Так как эхо-сети обладают только одним скрытым слоем, они обладают достаточно низкой вычислительной сложностью.&lt;br /&gt;
&lt;br /&gt;
=== Нейронный компрессор истории ===&lt;br /&gt;
Нейронный компрессор исторических данных {{---}} это блок, позволяющий в сжатом виде хранить существенные исторические особенности процесса, который является своего рода стеком рекуррентной нейронной сети, формируемым в процессе самообучения.&lt;br /&gt;
[[File:LSTM.png|450px|thumb|[http://colah.github.io/posts/2015-08-Understanding-LSTMs/ Схема слоев рекуррентной сети долго-краткосрочной памяти]]]&lt;br /&gt;
&lt;br /&gt;
=== Сети долго-краткосрочной памяти ===&lt;br /&gt;
Сеть долго-краткосрочной памяти (англ. Long short-term memory, LSTM) является самой популярная архитектура рекуррентной нейронной сети на данный момент, данная архитектура способна запоминать данные на долгое время.&amp;lt;ref name=LSTM&amp;gt;[https://www.bioinf.jku.at/publications/older/2604.pdf Sepp Hochreiter, Jurgen Schmidhuber. Long short-term memory (1997). Neural Computation.]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Разберем работу слоев подробнее&amp;lt;ref name=Understanding_LSTM&amp;gt;[http://colah.github.io/posts/2015-08-Understanding-LSTMs/ Understanding LSTM Networks]&amp;lt;/ref&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
Первый слой вычисляет, насколько на данном шаге ему нужно забыть предыдущую информацию {{---}} по сути множители к компонентам вектора памяти.&lt;br /&gt;
[[File:LSTM_F1.png|none|250px]]&lt;br /&gt;
&amp;lt;math&amp;gt;f_t = \sigma(W_f * [h_{t-1}, x_t] + b_f)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Второй слой вычисляет, насколько ему интересна новая информация, пришедшая с сигналом {{---}} такой же множитель, но уже для наблюдения.&lt;br /&gt;
[[File:LSTM_F2.png|none|250px]]&lt;br /&gt;
&amp;lt;math&amp;gt;i_t = \sigma(W_f * [h_{t-1}, x_t] + b_i)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\tilde{C}_t = tanh(W_C * [h_{t-1}, x_t] + b_C)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
На третьем слое вычисляется линейная комбинация памяти и наблюдения с только вычисленными весами для каждой из компонент. Так получается новое состояние памяти, которое в таком же виде передаётся далее.&lt;br /&gt;
[[File:LSTM_F3.png|none|250px]]&lt;br /&gt;
&amp;lt;math&amp;gt;C_t = f_t * C_{t-1} + i_t * \tilde{C}_t&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Осталось вычислить output. Но поскольку часть входного сигнала уже в памяти, не нужно считать активацию по всему сигналу. Сначала сигнал проходит через сигмоиду, которая решает, какая его часть важна для дальнейших решений, затем гиперболический тангенс «размазывает» вектор памяти на отрезок от -1 до 1, и в конце эти два вектора перемножаются.&lt;br /&gt;
[[File:LSTM_F4.png|none|250px]]&lt;br /&gt;
&amp;lt;math&amp;gt;o_t = \sigma(W_o * [h_{t-1}, x_t] + b_o)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;h_t = o_t * tanh(C_t)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Полученные таким образом &amp;lt;math&amp;gt;h_t&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;C_t&amp;lt;/math&amp;gt; передаются далее по цепочке.&lt;br /&gt;
&lt;br /&gt;
=== Управляемые рекуррентные блоки ===&lt;br /&gt;
Управляемые рекуррентные блоки (англ. Gated Recurrent Units, GRU) {{---}} обладает меньшим количеством параметров, чем у LSTM, и в ней отсутствует выходное управление. При этом производительность в моделях речевого сигнала или полифонической музыки оказалась сопоставимой с LSTM.&lt;br /&gt;
&lt;br /&gt;
== Пример кода ==&lt;br /&gt;
Пример кода на Python с использованием библиотеки Keras.&amp;lt;ref name=KerasRNN&amp;gt;[https://keras.io/layers/recurrent/ Keras RNN]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# Импорты&amp;lt;/font&amp;gt;&lt;br /&gt;
  '''import''' numpy '''as''' np&lt;br /&gt;
  '''from''' keras.preprocessing '''import''' sequence&lt;br /&gt;
  '''from''' keras.models '''import''' Sequential&lt;br /&gt;
  '''from''' keras.layers '''import''' Dense, Activation, Embedding&lt;br /&gt;
  '''from''' keras.layers '''import''' LSTM&lt;br /&gt;
  '''from''' keras.datasets '''import''' imdb&lt;br /&gt;
  &lt;br /&gt;
  &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# Устанавливаем seed для обеспечения повторяемости результатов&amp;lt;/font&amp;gt;&lt;br /&gt;
  np.random.seed(&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;42&amp;lt;/font&amp;gt;)&lt;br /&gt;
  &lt;br /&gt;
  &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# Указываем количество слов из частотного словаря, которое будет использоваться (отсортированы по частоте использования)&amp;lt;/font&amp;gt;&lt;br /&gt;
  max_features = &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;5000&amp;lt;/font&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# Загружаем данные (датасет IMDB содержит 25000 рецензий на фильмы с правильным ответом для обучения и 25000 рецензий на фильмы с правильным ответом для тестирования)&amp;lt;/font&amp;gt;&lt;br /&gt;
  (X_train, y_train), (X_test, y_test) = imdb.load_data(nb_words = max_features)&lt;br /&gt;
  &lt;br /&gt;
  &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# Устанавливаем максимальную длину рецензий в словах, чтобы они все были одной длины&amp;lt;/font&amp;gt;&lt;br /&gt;
  maxlen = &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;80&amp;lt;/font&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# Заполняем короткие рецензии пробелами, а длинные обрезаем&amp;lt;/font&amp;gt;&lt;br /&gt;
  X_train = sequence.pad_sequences(X_train, maxlen = maxlen)&lt;br /&gt;
  X_test = sequence.pad_sequences(X_test, maxlen = maxlen)&lt;br /&gt;
  &lt;br /&gt;
  &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# Создаем модель последовательной сети&amp;lt;/font&amp;gt;&lt;br /&gt;
  model = Sequential()&lt;br /&gt;
  &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# Добавляем слой для векторного представления слов (5000 слов, каждое представлено вектором из 32 чисел, отключаем входной сигнал с вероятностью 20% для предотвращения переобучения)&amp;lt;/font&amp;gt;&lt;br /&gt;
  model.add(Embedding(max_features, &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;32&amp;lt;/font&amp;gt;, dropout = &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;0.2&amp;lt;/font&amp;gt;))&lt;br /&gt;
  &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# Добавляем слой долго-краткосрочной памяти (100 элементов для долговременного хранения информации, отключаем входной сигнал с вероятностью 20%, отключаем рекуррентный сигнал с вероятностью 20%)&amp;lt;/font&amp;gt;&lt;br /&gt;
  model.add(LSTM(&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;100&amp;lt;/font&amp;gt;, dropout_W = &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;0.2&amp;lt;/font&amp;gt;, dropout_U = &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;0.2&amp;lt;/font&amp;gt;))&lt;br /&gt;
  &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# Добавляем полносвязный слой из 1 элемента для классификации, в качестве функции активации будем использовать сигмоидальную функцию&amp;lt;/font&amp;gt;&lt;br /&gt;
  model.add(Dense(&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;1&amp;lt;/font&amp;gt;, activation = &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;'sigmoid'&amp;lt;/font&amp;gt;))&lt;br /&gt;
  &lt;br /&gt;
  &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# Компилируем модель нейронной сети&amp;lt;/font&amp;gt;&lt;br /&gt;
  model.compile(loss = &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;'binary_crossentropy'&amp;lt;/font&amp;gt;,&lt;br /&gt;
                optimizer = &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;'adam'&amp;lt;/font&amp;gt;,&lt;br /&gt;
                metrics = [&amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;'accuracy'&amp;lt;/font&amp;gt;])&lt;br /&gt;
  &lt;br /&gt;
  &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# Обучаем нейронную сеть (данные для обучения, ответы к данным для обучения, количество рецензий после анализа которого будут изменены веса, число эпох обучения, тестовые данные, показывать progress bar или нет)&amp;lt;/font&amp;gt;&lt;br /&gt;
  model.fit(X_train, y_train, &lt;br /&gt;
            batch_size = &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;64&amp;lt;/font&amp;gt;,&lt;br /&gt;
            nb_epoch = &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;7&amp;lt;/font&amp;gt;,&lt;br /&gt;
            validation_data = (X_test, y_test),&lt;br /&gt;
            verbose = &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;1&amp;lt;/font&amp;gt;)&lt;br /&gt;
  &lt;br /&gt;
  &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# Проверяем качество обучения на тестовых данных (если есть данные, которые не участвовали в обучении, лучше использовать их, но в нашем случае таковых нет)&amp;lt;/font&amp;gt;&lt;br /&gt;
  scores = model.evaluate(X_test, y_test, batch_size = &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;64&amp;lt;/font&amp;gt;)&lt;br /&gt;
  print(&amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;'Точность на тестовых данных: %.2f%%'&amp;lt;/font&amp;gt; % (scores[1] * &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;100&amp;lt;/font&amp;gt;))&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
*[[:Сверточные_нейронные_сети|Сверточные нейронные сети]]&lt;br /&gt;
*[[:Нейронные_сети,_перцептрон|Нейронные сети, перцептрон]]&lt;br /&gt;
*[[:Рекурсивные нейронные сети|Рекурсивные нейронные сети]]&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Adel</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D0%B5%D0%BA%D1%83%D1%80%D1%80%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B5_%D0%BD%D0%B5%D0%B9%D1%80%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5_%D1%81%D0%B5%D1%82%D0%B8&amp;diff=69059</id>
		<title>Рекуррентные нейронные сети</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D0%B5%D0%BA%D1%83%D1%80%D1%80%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B5_%D0%BD%D0%B5%D0%B9%D1%80%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5_%D1%81%D0%B5%D1%82%D0%B8&amp;diff=69059"/>
				<updated>2019-01-23T13:57:52Z</updated>
		
		<summary type="html">&lt;p&gt;Adel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:RNN.png|450px|thumb|[http://colah.github.io/posts/2015-08-Understanding-LSTMs/ RNN и ее развернутое представление]]]&lt;br /&gt;
[[File:RNN_layer.png|450px|thumb|[http://colah.github.io/posts/2015-08-Understanding-LSTMs/ Схема слоя рекуррентной сети]]]&lt;br /&gt;
&lt;br /&gt;
'''Рекуррентная нейронная сеть''' (англ. ''recurrent neural network'', ''RNN'') {{---}} вид [[:Нейронные сети|нейронных сетей]], где связи между элементами образуют направленную последовательность.&lt;br /&gt;
&lt;br /&gt;
== Описание ==&lt;br /&gt;
Рекуррентные нейронные сети {{---}} сети с циклами, которые хорошо подходят для обработки последовательностей.&lt;br /&gt;
[[File:RNN_BP.jpg|450px|thumb|RNN с задержкой на скрытом слое]]&lt;br /&gt;
[[File:RNN_BPTT.jpg|450px|thumb|Развертка RNN]]&lt;br /&gt;
Обучение RNN аналогично обучению обычной нейронной сети. Мы также используем алгоритм обратного распространения ошибки (backpropagation), но с небольшим изменением. Поскольку одни и те же параметры используются на всех временных этапах в сети, градиент на каждом выходе зависит не только от расчетов текущего шага, но и от предыдущих временных шагов. Например, чтобы вычислить градиент при t = 4, нам нужно было бы «распространить ошибку» на 3 шага и суммировать градиенты. Этот алгоритм называется «алгоритмом обратного распространения ошибки сквозь время» (англ. Backpropagation Through Time, BPTT).&amp;lt;ref name=BPTT_1&amp;gt;[http://andrew.gibiansky.com/blog/machine-learning/recurrent-neural-networks/ Backpropagation Through Time]&amp;lt;/ref&amp;gt;&amp;lt;ref name=BPTT_2&amp;gt;[http://www.wildml.com/2015/10/recurrent-neural-networks-tutorial-part-3-backpropagation-through-time-and-vanishing-gradients/ Backpropagation Through Time]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Области и примеры применения ==&lt;br /&gt;
Используются, когда важно соблюдать последовательность, когда нужен порядок того, что у нас происходит.&lt;br /&gt;
* Обработка текста на естественном языке&lt;br /&gt;
** Анализ текста&lt;br /&gt;
** Автоматический перевод&lt;br /&gt;
* Обработка аудио &lt;br /&gt;
** Автоматическое распознавание речи&lt;br /&gt;
* Обработка видео&lt;br /&gt;
** Прогнозирование следующего кадра на основе предыдущих&lt;br /&gt;
** Распознавание эмоций&lt;br /&gt;
* Обработка изображений&lt;br /&gt;
** Прогнозирование следующего пикселя на основе окружения&lt;br /&gt;
** Генерация описания изображений&lt;br /&gt;
&lt;br /&gt;
== Архитектуры ==&lt;br /&gt;
=== Полностью рекуррентная сеть ===&lt;br /&gt;
Это базовая архитектура, разработанная в 1980-х. Сеть строится из узлов, каждый из которых соединён со всеми другими узлами. У каждого нейрона порог активации меняется со временем и является вещественным числом. Каждое соединение имеет переменный вещественный вес. Узлы разделяются на входные, выходные и скрытые.&lt;br /&gt;
&lt;br /&gt;
=== Рекурсивная сеть ===&lt;br /&gt;
[[:Рекурсивные нейронные сети|Рекурсивные нейронные сети]] представляют собой более общий случай рекуррентных сетей, когда сигнал в сети проходит через структуру в виде дерева (обычно бинарные деревья). Те же самые матрицы весов используются рекурсивно по всему графу в соответствии с его топологией.&lt;br /&gt;
&lt;br /&gt;
=== Нейронная сеть Хопфилда ===&lt;br /&gt;
Тип рекуррентной сети, когда все соединения симметричны. Изобретена Джоном Хопфилдом в 1982 году и гарантируется, что динамика такой сети сходится к одному из положений равновесия.&lt;br /&gt;
&lt;br /&gt;
=== Двунаправленная ассоциативная память (BAM) ===&lt;br /&gt;
Вариацией сети Хопфилда является двунаправленная ассоциативная память (BAM). BAM имеет два слоя, каждый из которых может выступать в качестве входного, находить (вспоминать) ассоциацию и генерировать результат для другого слоя.&lt;br /&gt;
[[File:Elman_RNN.jpg|450px|thumb|Сеть Элмана]]&lt;br /&gt;
&lt;br /&gt;
=== Сеть Элмана ===&lt;br /&gt;
Нейронная сеть Элмана состоит из трёх слоев: x, y, z (см рис. Сеть Элмана). Дополнительно к сети добавлен набор «контекстных блоков»: u (см рис. Сеть Элмана). Средний (скрытый) слой соединён с контекстными блоками с фиксированным весом, равным единице. С каждым шагом времени на вход поступает информация, которая проходит прямой ход к выходному слою в соответствии с правилами обучения. Фиксированные обратные связи сохраняют предыдущие значения скрытого слоя в контекстных блоках (до того как скрытый слой поменяет значение в процессе обучения). Таким способом сеть сохраняет своё состояние, что может использоваться в предсказании последовательностей, выходя за пределы мощности многослойного перцептрона.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;h_t = \sigma_h(W_h x_t + U_h h_{t-1} + b_h)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y_t = \sigma_y(W_y h_t + b_y)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Обозначения переменных и функций:&lt;br /&gt;
* &amp;lt;math&amp;gt;x_t&amp;lt;/math&amp;gt;: вектор входного слоя&lt;br /&gt;
* &amp;lt;math&amp;gt;h_t&amp;lt;/math&amp;gt;: вектор скрытого слоя&lt;br /&gt;
* &amp;lt;math&amp;gt;y_t&amp;lt;/math&amp;gt;: вектор выходного слоя&lt;br /&gt;
* &amp;lt;math&amp;gt;W, U, b&amp;lt;/math&amp;gt;: матрица и вектор параметров&lt;br /&gt;
* &amp;lt;math&amp;gt;\sigma_h, \sigma_y&amp;lt;/math&amp;gt;: функция активации&lt;br /&gt;
&lt;br /&gt;
=== Сеть Джордана ===&lt;br /&gt;
Нейронная сеть Джордана подобна сети Элмана, но контекстные блоки связаны не со скрытым слоем, а с выходным слоем. Контекстные блоки таким образом сохраняют своё состояние. Они обладают рекуррентной связью с собой.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;h_t = \sigma_h(W_h x_t + U_h y_{t-1} + b_h)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y_t = \sigma_y(W_y h_t + b_y)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Эхо-сети ===&lt;br /&gt;
Эхо-сеть (англ. Echo State Network, ESN) характеризуется одним скрытым слоем (который называется резервуаром) со случайными редкими связями между нейронами. При этом связи внутри резервуара фиксированы, но связи с выходным слоем подлежат обучению. Состояние резервуара (state) вычисляется через предыдущие состояния резервуара, а также предыдущие состояния входного и выходного сигналов. Так как эхо-сети обладают только одним скрытым слоем, они обладают достаточно низкой вычислительной сложностью.&lt;br /&gt;
&lt;br /&gt;
=== Нейронный компрессор истории ===&lt;br /&gt;
Нейронный компрессор исторических данных {{---}} это блок, позволяющий в сжатом виде хранить существенные исторические особенности процесса, который является своего рода стеком рекуррентной нейронной сети, формируемым в процессе самообучения.&lt;br /&gt;
[[File:LSTM.png|450px|thumb|[http://colah.github.io/posts/2015-08-Understanding-LSTMs/ Схема слоев рекуррентной сети долго-краткосрочной памяти]]]&lt;br /&gt;
&lt;br /&gt;
=== Сети долго-краткосрочной памяти ===&lt;br /&gt;
Сеть долго-краткосрочной памяти (англ. Long short-term memory, LSTM) является самой популярная архитектура рекуррентной нейронной сети на данный момент, данная архитектура способна запоминать данные на долгое время.&amp;lt;ref name=LSTM&amp;gt;[https://www.bioinf.jku.at/publications/older/2604.pdf Sepp Hochreiter, Jurgen Schmidhuber. Long short-term memory (1997). Neural Computation.]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Разберем работу слоев подробнее&amp;lt;ref name=Understanding_LSTM&amp;gt;[http://colah.github.io/posts/2015-08-Understanding-LSTMs/ Understanding LSTM Networks]&amp;lt;/ref&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
Первый слой вычисляет, насколько на данном шаге ему нужно забыть предыдущую информацию {{---}} по сути множители к компонентам вектора памяти.&lt;br /&gt;
[[File:LSTM_F1.png|none|250px]]&lt;br /&gt;
&amp;lt;math&amp;gt;f_t = \sigma(W_f * [h_{t-1}, x_t] + b_f)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Второй слой вычисляет, насколько ему интересна новая информация, пришедшая с сигналом {{---}} такой же множитель, но уже для наблюдения.&lt;br /&gt;
[[File:LSTM_F2.png|none|250px]]&lt;br /&gt;
&amp;lt;math&amp;gt;i_t = \sigma(W_f * [h_{t-1}, x_t] + b_i)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\tilde{C}_t = tanh(W_C * [h_{t-1}, x_t] + b_C)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
На третьем слое вычисляется линейная комбинация памяти и наблюдения с только вычисленными весами для каждой из компонент. Так получается новое состояние памяти, которое в таком же виде передаётся далее.&lt;br /&gt;
[[File:LSTM_F3.png|none|250px]]&lt;br /&gt;
&amp;lt;math&amp;gt;C_t = f_t * C_{t-1} + i_t * \tilde{C}_t&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Осталось вычислить output. Но поскольку часть входного сигнала уже в памяти, не нужно считать активацию по всему сигналу. Сначала сигнал проходит через сигмоиду, которая решает, какая его часть важна для дальнейших решений, затем гиперболический тангенс «размазывает» вектор памяти на отрезок от -1 до 1, и в конце эти два вектора перемножаются.&lt;br /&gt;
[[File:LSTM_F4.png|none|250px]]&lt;br /&gt;
&amp;lt;math&amp;gt;o_t = \sigma(W_o * [h_{t-1}, x_t] + b_o)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;h_t = o_t * tanh(C_t)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Полученные таким образом &amp;lt;math&amp;gt;h_t&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;C_t&amp;lt;/math&amp;gt; передаются далее по цепочке.&lt;br /&gt;
&lt;br /&gt;
=== Управляемые рекуррентные блоки ===&lt;br /&gt;
Управляемые рекуррентные блоки (англ. Gated Recurrent Units, GRU) {{---}} обладает меньшим количеством параметров, чем у LSTM, и в ней отсутствует выходное управление. При этом производительность в моделях речевого сигнала или полифонической музыки оказалась сопоставимой с LSTM.&lt;br /&gt;
&lt;br /&gt;
== Пример кода ==&lt;br /&gt;
Пример кода на Python с использованием библиотеки Keras.&amp;lt;ref name=KerasRNN&amp;gt;[https://keras.io/layers/recurrent/ Keras RNN]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# Импорты&amp;lt;/font&amp;gt;&lt;br /&gt;
  '''import''' numpy '''as''' np&lt;br /&gt;
  '''from''' keras.preprocessing '''import''' sequence&lt;br /&gt;
  '''from''' keras.models '''import''' Sequential&lt;br /&gt;
  '''from''' keras.layers '''import''' Dense, Activation, Embedding&lt;br /&gt;
  '''from''' keras.layers '''import''' LSTM&lt;br /&gt;
  '''from''' keras.datasets '''import''' imdb&lt;br /&gt;
  &lt;br /&gt;
  &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# Устанавливаем seed для обеспечения повторяемости результатов&amp;lt;/font&amp;gt;&lt;br /&gt;
  np.random.seed(&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;42&amp;lt;/font&amp;gt;)&lt;br /&gt;
  &lt;br /&gt;
  &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# Указываем количество слов из частотного словаря, которое будет использоваться (отсортированы по частоте использования)&amp;lt;/font&amp;gt;&lt;br /&gt;
  max_features = &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;5000&amp;lt;/font&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# Загружаем данные (датасет IMDB содержит 25000 рецензий на фильмы с правильным ответом для обучения и 25000 рецензий на фильмы с правильным ответом для тестирования)&amp;lt;/font&amp;gt;&lt;br /&gt;
  (X_train, y_train), (X_test, y_test) = imdb.load_data(nb_words = max_features)&lt;br /&gt;
  &lt;br /&gt;
  &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# Устанавливаем максимальную длину рецензий в словах, чтобы они все были одной длины&amp;lt;/font&amp;gt;&lt;br /&gt;
  maxlen = &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;80&amp;lt;/font&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# Заполняем короткие рецензии пробелами, а длинные обрезаем&amp;lt;/font&amp;gt;&lt;br /&gt;
  X_train = sequence.pad_sequences(X_train, maxlen = maxlen)&lt;br /&gt;
  X_test = sequence.pad_sequences(X_test, maxlen = maxlen)&lt;br /&gt;
  &lt;br /&gt;
  &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# Создаем модель последовательной сети&amp;lt;/font&amp;gt;&lt;br /&gt;
  model = Sequential()&lt;br /&gt;
  &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# Добавляем слой для векторного представления слов (5000 слов, каждое представлено вектором из 32 чисел, отключаем входной сигнал с вероятностью 20% для предотвращения переобучения)&amp;lt;/font&amp;gt;&lt;br /&gt;
  model.add(Embedding(max_features, &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;32&amp;lt;/font&amp;gt;, dropout = &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;0.2&amp;lt;/font&amp;gt;))&lt;br /&gt;
  &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# Добавляем слой долго-краткосрочной памяти (100 элементов для долговременного хранения информации, отключаем входной сигнал с вероятностью 20%, отключаем рекуррентный сигнал с вероятностью 20%)&amp;lt;/font&amp;gt;&lt;br /&gt;
  model.add(LSTM(&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;100&amp;lt;/font&amp;gt;, dropout_W = &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;0.2&amp;lt;/font&amp;gt;, dropout_U = &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;0.2&amp;lt;/font&amp;gt;))&lt;br /&gt;
  &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# Добавляем полносвязный слой из 1 элемента для классификации, в качестве функции активации будем использовать сигмоидальную функцию&amp;lt;/font&amp;gt;&lt;br /&gt;
  model.add(Dense(&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;1&amp;lt;/font&amp;gt;, activation = &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;'sigmoid'&amp;lt;/font&amp;gt;))&lt;br /&gt;
  &lt;br /&gt;
  &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# Компилируем модель нейронной сети&amp;lt;/font&amp;gt;&lt;br /&gt;
  model.compile(loss = &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;'binary_crossentropy'&amp;lt;/font&amp;gt;,&lt;br /&gt;
                optimizer = &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;'adam'&amp;lt;/font&amp;gt;,&lt;br /&gt;
                metrics = [&amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;'accuracy'&amp;lt;/font&amp;gt;])&lt;br /&gt;
  &lt;br /&gt;
  &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# Обучаем нейронную сеть (данные для обучения, ответы к данным для обучения, количество рецензий после анализа которого будут изменены веса, число эпох обучения, тестовые данные, показывать progress bar или нет)&amp;lt;/font&amp;gt;&lt;br /&gt;
  model.fit(X_train, y_train, &lt;br /&gt;
            batch_size = &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;64&amp;lt;/font&amp;gt;,&lt;br /&gt;
            nb_epoch = &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;7&amp;lt;/font&amp;gt;,&lt;br /&gt;
            validation_data = (X_test, y_test),&lt;br /&gt;
            verbose = &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;1&amp;lt;/font&amp;gt;)&lt;br /&gt;
  &lt;br /&gt;
  &amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;# Проверяем качество обучения на тестовых данных (если есть данные, которые не участвовали в обучении, лучше использовать их, но в нашем случае таковых нет)&amp;lt;/font&amp;gt;&lt;br /&gt;
  scores = model.evaluate(X_test, y_test, batch_size = &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;64&amp;lt;/font&amp;gt;)&lt;br /&gt;
  print(&amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;'Точность на тестовых данных: %.2f%%'&amp;lt;/font&amp;gt; % (scores[1] * &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;100&amp;lt;/font&amp;gt;))&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
*[[:Сверточные_нейронные_сети|Сверточные нейронные сети]]&lt;br /&gt;
*[[:Нейронные_сети,_перцептрон|Нейронные сети, перцептрон]]&lt;br /&gt;
*[[:Рекурсивные нейронные сети|Рекурсивные нейронные сети]]&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Adel</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D0%B5%D0%BA%D1%83%D1%80%D1%80%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B5_%D0%BD%D0%B5%D0%B9%D1%80%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5_%D1%81%D0%B5%D1%82%D0%B8&amp;diff=68980</id>
		<title>Рекуррентные нейронные сети</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D0%B5%D0%BA%D1%83%D1%80%D1%80%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B5_%D0%BD%D0%B5%D0%B9%D1%80%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5_%D1%81%D0%B5%D1%82%D0%B8&amp;diff=68980"/>
				<updated>2019-01-23T02:57:39Z</updated>
		
		<summary type="html">&lt;p&gt;Adel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:RNN.png|450px|thumb|[http://colah.github.io/posts/2015-08-Understanding-LSTMs/ RNN и ее развернутое представление]]]&lt;br /&gt;
[[File:RNN_layer.png|450px|thumb|[http://colah.github.io/posts/2015-08-Understanding-LSTMs/ Схема слоя рекуррентной сети]]]&lt;br /&gt;
&lt;br /&gt;
'''Рекуррентная нейронная сеть''' (англ. ''recurrent neural network'', ''RNN'') {{---}} вид [[:Нейронные сети|нейронных сетей]], где связи между элементами образуют направленную последовательность.&lt;br /&gt;
&lt;br /&gt;
== Описание ==&lt;br /&gt;
Рекуррентные нейронные сети {{---}} сети с циклами, которые хорошо подходят для обработки последовательностей.&lt;br /&gt;
[[File:RNN_BP.jpg|450px|thumb|RNN с задержкой на скрытом слое]]&lt;br /&gt;
[[File:RNN_BPTT.jpg|450px|thumb|Развертка RNN]]&lt;br /&gt;
Обучение RNN аналогично обучению обычной нейронной сети. Мы также используем алгоритм обратного распространения ошибки (backpropagation), но с небольшим изменением. Поскольку одни и те же параметры используются на всех временных этапах в сети, градиент на каждом выходе зависит не только от расчетов текущего шага, но и от предыдущих временных шагов. Например, чтобы вычислить градиент при t = 4, нам нужно было бы «распространить ошибку» на 3 шага и суммировать градиенты. Этот алгоритм называется «алгоритмом обратного распространения ошибки сквозь время» (англ. Backpropagation Through Time, BPTT).&amp;lt;ref name=BPTT_1&amp;gt;[http://andrew.gibiansky.com/blog/machine-learning/recurrent-neural-networks/ Backpropagation Through Time]&amp;lt;/ref&amp;gt;&amp;lt;ref name=BPTT_2&amp;gt;[http://www.wildml.com/2015/10/recurrent-neural-networks-tutorial-part-3-backpropagation-through-time-and-vanishing-gradients/ Backpropagation Through Time]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Области и примеры применения ==&lt;br /&gt;
Используются, когда важно соблюдать последовательность, когда нужен порядок того, что у нас происходит.&lt;br /&gt;
* Обработка текста на естественном языке&lt;br /&gt;
** Анализ текста&lt;br /&gt;
** Автоматический перевод&lt;br /&gt;
* Обработка аудио &lt;br /&gt;
** Автоматическое распознавание речи&lt;br /&gt;
* Обработка видео&lt;br /&gt;
** Прогнозирование следующего кадра на основе предыдущих&lt;br /&gt;
** Распознавание эмоций&lt;br /&gt;
* Обработка изображений&lt;br /&gt;
** Прогнозирование следующего пикселя на основе окружения&lt;br /&gt;
** Генерация описания изображений&lt;br /&gt;
&lt;br /&gt;
== Архитектуры ==&lt;br /&gt;
=== Полностью рекуррентная сеть ===&lt;br /&gt;
Это базовая архитектура, разработанная в 1980-х. Сеть строится из узлов, каждый из которых соединён со всеми другими узлами. У каждого нейрона порог активации меняется со временем и является вещественным числом. Каждое соединение имеет переменный вещественный вес. Узлы разделяются на входные, выходные и скрытые.&lt;br /&gt;
&lt;br /&gt;
=== Рекурсивная сеть ===&lt;br /&gt;
[[:Рекурсивные нейронные сети|Рекурсивные нейронные сети]] представляют собой более общий случай рекуррентных сетей, когда сигнал в сети проходит через структуру в виде дерева (обычно бинарные деревья). Те же самые матрицы весов используются рекурсивно по всему графу в соответствии с его топологией.&lt;br /&gt;
&lt;br /&gt;
=== Нейронная сеть Хопфилда ===&lt;br /&gt;
Тип рекуррентной сети, когда все соединения симметричны. Изобретена Джоном Хопфилдом в 1982 году и гарантируется, что динамика такой сети сходится к одному из положений равновесия.&lt;br /&gt;
&lt;br /&gt;
=== Двунаправленная ассоциативная память (BAM) ===&lt;br /&gt;
Вариацией сети Хопфилда является двунаправленная ассоциативная память (BAM). BAM имеет два слоя, каждый из которых может выступать в качестве входного, находить (вспоминать) ассоциацию и генерировать результат для другого слоя.&lt;br /&gt;
[[File:Elman_RNN.jpg|450px|thumb|Сеть Элмана]]&lt;br /&gt;
&lt;br /&gt;
=== Сеть Элмана ===&lt;br /&gt;
Нейронная сеть Элмана состоит из трёх слоев: x, y, z (см рис. Сеть Элмана). Дополнительно к сети добавлен набор «контекстных блоков»: u (см рис. Сеть Элмана). Средний (скрытый) слой соединён с контекстными блоками с фиксированным весом, равным единице. С каждым шагом времени на вход поступает информация, которая проходит прямой ход к выходному слою в соответствии с правилами обучения. Фиксированные обратные связи сохраняют предыдущие значения скрытого слоя в контекстных блоках (до того как скрытый слой поменяет значение в процессе обучения). Таким способом сеть сохраняет своё состояние, что может использоваться в предсказании последовательностей, выходя за пределы мощности многослойного перцептрона.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;h_t = \sigma_h(W_h x_t + U_h h_{t-1} + b_h)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y_t = \sigma_y(W_y h_t + b_y)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Обозначения переменных и функций:&lt;br /&gt;
* &amp;lt;math&amp;gt;x_t&amp;lt;/math&amp;gt;: вектор входного слоя&lt;br /&gt;
* &amp;lt;math&amp;gt;h_t&amp;lt;/math&amp;gt;: вектор скрытого слоя&lt;br /&gt;
* &amp;lt;math&amp;gt;y_t&amp;lt;/math&amp;gt;: вектор выходного слоя&lt;br /&gt;
* &amp;lt;math&amp;gt;W, U, b&amp;lt;/math&amp;gt;: матрица и вектор параметров&lt;br /&gt;
* &amp;lt;math&amp;gt;\sigma_h, \sigma_y&amp;lt;/math&amp;gt;: функция активации&lt;br /&gt;
&lt;br /&gt;
=== Сеть Джордана ===&lt;br /&gt;
Нейронная сеть Джордана подобна сети Элмана, но контекстные блоки связаны не со скрытым слоем, а с выходным слоем. Контекстные блоки таким образом сохраняют своё состояние. Они обладают рекуррентной связью с собой.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;h_t = \sigma_h(W_h x_t + U_h y_{t-1} + b_h)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y_t = \sigma_y(W_y h_t + b_y)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Эхо-сети ===&lt;br /&gt;
Эхо-сеть (англ. Echo State Network, ESN) характеризуется одним скрытым слоем (который называется резервуаром) со случайными редкими связями между нейронами. При этом связи внутри резервуара фиксированы, но связи с выходным слоем подлежат обучению. Состояние резервуара (state) вычисляется через предыдущие состояния резервуара, а также предыдущие состояния входного и выходного сигналов. Так как эхо-сети обладают только одним скрытым слоем, они обладают достаточно низкой вычислительной сложностью.&lt;br /&gt;
&lt;br /&gt;
=== Нейронный компрессор истории ===&lt;br /&gt;
Нейронный компрессор исторических данных {{---}} это блок, позволяющий в сжатом виде хранить существенные исторические особенности процесса, который является своего рода стеком рекуррентной нейронной сети, формируемым в процессе самообучения.&lt;br /&gt;
[[File:LSTM.png|450px|thumb|[http://colah.github.io/posts/2015-08-Understanding-LSTMs/ Схема слоев рекуррентной сети долго-краткосрочной памяти]]]&lt;br /&gt;
&lt;br /&gt;
=== Сети долго-краткосрочной памяти ===&lt;br /&gt;
Сеть долго-краткосрочной памяти (англ. Long short-term memory, LSTM) является самой популярная архитектура рекуррентной нейронной сети на данный момент, данная архитектура способна запоминать данные на долгое время.&amp;lt;ref name=LSTM&amp;gt;[https://www.bioinf.jku.at/publications/older/2604.pdf Sepp Hochreiter, Jurgen Schmidhuber. Long short-term memory (1997). Neural Computation.]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Разберем работу слоев подробнее&amp;lt;ref name=Understanding_LSTM&amp;gt;[http://colah.github.io/posts/2015-08-Understanding-LSTMs/ Understanding LSTM Networks]&amp;lt;/ref&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
Первый слой вычисляет, насколько на данном шаге ему нужно забыть предыдущую информацию {{---}} по сути множители к компонентам вектора памяти.&lt;br /&gt;
[[File:LSTM_F1.png|none|250px]]&lt;br /&gt;
&amp;lt;math&amp;gt;f_t = \sigma(W_f * [h_{t-1}, x_t] + b_f)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Второй слой вычисляет, насколько ему интересна новая информация, пришедшая с сигналом {{---}} такой же множитель, но уже для наблюдения.&lt;br /&gt;
[[File:LSTM_F2.png|none|250px]]&lt;br /&gt;
&amp;lt;math&amp;gt;i_t = \sigma(W_f * [h_{t-1}, x_t] + b_i)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\tilde{C}_t = tanh(W_C * [h_{t-1}, x_t] + b_C)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
На третьем слое вычисляется линейная комбинация памяти и наблюдения с только вычисленными весами для каждой из компонент. Так получается новое состояние памяти, которое в таком же виде передаётся далее.&lt;br /&gt;
[[File:LSTM_F3.png|none|250px]]&lt;br /&gt;
&amp;lt;math&amp;gt;C_t = f_t * C_{t-1} + i_t * \tilde{C}_t&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Осталось вычислить output. Но поскольку часть входного сигнала уже в памяти, не нужно считать активацию по всему сигналу. Сначала сигнал проходит через сигмоиду, которая решает, какая его часть важна для дальнейших решений, затем гиперболический тангенс «размазывает» вектор памяти на отрезок от -1 до 1, и в конце эти два вектора перемножаются.&lt;br /&gt;
[[File:LSTM_F4.png|none|250px]]&lt;br /&gt;
&amp;lt;math&amp;gt;o_t = \sigma(W_o * [h_{t-1}, x_t] + b_o)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;h_t = o_t * tanh(C_t)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Полученные таким образом &amp;lt;math&amp;gt;h_t&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;C_t&amp;lt;/math&amp;gt; передаются далее по цепочке.&lt;br /&gt;
&lt;br /&gt;
=== Управляемые рекуррентные блоки ===&lt;br /&gt;
Управляемые рекуррентные блоки (англ. Gated Recurrent Units, GRU) {{---}} обладает меньшим количеством параметров, чем у LSTM, и в ней отсутствует выходное управление. При этом производительность в моделях речевого сигнала или полифонической музыки оказалась сопоставимой с LSTM.&lt;br /&gt;
&lt;br /&gt;
== Пример кода ==&lt;br /&gt;
Пример кода на Python с использованием библиотеки Keras.&amp;lt;ref name=KerasRNN&amp;gt;[https://keras.io/layers/recurrent/ Keras RNN]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Импорты&lt;br /&gt;
import numpy as np&lt;br /&gt;
from keras.preprocessing import sequence&lt;br /&gt;
from keras.models import Sequential&lt;br /&gt;
from keras.layers import Dense, Activation, Embedding&lt;br /&gt;
from keras.layers import LSTM&lt;br /&gt;
from keras.datasets import imdb&lt;br /&gt;
&lt;br /&gt;
# Устанавливаем seed для обеспечения повторяемости результатов&lt;br /&gt;
np.random.seed(42)&lt;br /&gt;
&lt;br /&gt;
# Указываем количество слов из частотного словаря, которое будет использоваться (отсортированы по частоте использования)&lt;br /&gt;
max_features = 5000&lt;br /&gt;
&lt;br /&gt;
# Загружаем данные (датасет IMDB содержит 25000 рецензий на фильмы с правильным ответом для обучения и 25000 рецензий на фильмы с правильным ответом для тестирования)&lt;br /&gt;
(X_train, y_train), (X_test, y_test) = imdb.load_data(nb_words = max_features)&lt;br /&gt;
&lt;br /&gt;
# Устанавливаем максимальную длину рецензий в словах, чтобы они все были одной длины&lt;br /&gt;
maxlen = 80&lt;br /&gt;
&lt;br /&gt;
# Заполняем короткие рецензии пробелами, а длинные обрезаем&lt;br /&gt;
X_train = sequence.pad_sequences(X_train, maxlen = maxlen)&lt;br /&gt;
X_test = sequence.pad_sequences(X_test, maxlen = maxlen)&lt;br /&gt;
&lt;br /&gt;
# Создаем модель последовательной сети&lt;br /&gt;
model = Sequential()&lt;br /&gt;
# Добавляем слой для векторного представления слов (5000 слов, каждое представлено вектором из 32 чисел, отключаем входной сигнал с вероятностью 20% для предотвращения переобучения)&lt;br /&gt;
model.add(Embedding(max_features, 32, dropout = 0.2))&lt;br /&gt;
# Добавляем слой долго-краткосрочной памяти (100 элементов для долговременного хранения информации, отключаем входной сигнал с вероятностью 20%, отключаем рекуррентный сигнал с вероятностью 20%)&lt;br /&gt;
model.add(LSTM(100, dropout_W = 0.2, dropout_U = 0.2))&lt;br /&gt;
# Добавляем полносвязный слой из 1 элемента для классификации, в качестве функции активации будем использовать сигмоидальную функцию&lt;br /&gt;
model.add(Dense(1, activation = &amp;quot;sigmoid&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
# Компилируем модель нейронной сети&lt;br /&gt;
model.compile(loss = 'binary_crossentropy',&lt;br /&gt;
              optimizer = 'adam',&lt;br /&gt;
              metrics = ['accuracy'])&lt;br /&gt;
&lt;br /&gt;
# Обучаем нейронную сеть (данные для обучения, ответы к данным для обучения, количество рецензий после анализа которого будут изменены веса, число эпох обучения, тестовые данные, показывать progress bar или нет)&lt;br /&gt;
model.fit(X_train, y_train, &lt;br /&gt;
          batch_size = 64,&lt;br /&gt;
          nb_epoch = 7,&lt;br /&gt;
          validation_data = (X_test, y_test),&lt;br /&gt;
          verbose = 1)&lt;br /&gt;
&lt;br /&gt;
# Проверяем качество обучения на тестовых данных (если есть данные, которые не участвовали в обучении, лучше использовать их, но в нашем случае таковых нет)&lt;br /&gt;
scores = model.evaluate(X_test, y_test, batch_size = 64)&lt;br /&gt;
print(&amp;quot;Точность на тестовых данных: %.2f%%&amp;quot; % (scores[1] * 100))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
*[[:Сверточные_нейронные_сети|Сверточные нейронные сети]]&lt;br /&gt;
*[[:Нейронные_сети,_перцептрон|Нейронные сети, перцептрон]]&lt;br /&gt;
*[[:Рекурсивные нейронные сети|Рекурсивные нейронные сети]]&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Adel</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D0%B5%D0%BA%D1%83%D1%80%D1%80%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B5_%D0%BD%D0%B5%D0%B9%D1%80%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5_%D1%81%D0%B5%D1%82%D0%B8&amp;diff=68979</id>
		<title>Рекуррентные нейронные сети</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D0%B5%D0%BA%D1%83%D1%80%D1%80%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B5_%D0%BD%D0%B5%D0%B9%D1%80%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5_%D1%81%D0%B5%D1%82%D0%B8&amp;diff=68979"/>
				<updated>2019-01-23T02:55:24Z</updated>
		
		<summary type="html">&lt;p&gt;Adel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:RNN.png|450px|thumb|[http://colah.github.io/posts/2015-08-Understanding-LSTMs/ RNN и ее развернутое представление]]]&lt;br /&gt;
[[File:RNN_layer.png|450px|thumb|[http://colah.github.io/posts/2015-08-Understanding-LSTMs/ Схема слоя рекуррентной сети]]]&lt;br /&gt;
&lt;br /&gt;
'''Рекуррентная нейронная сеть''' (англ. ''recurrent neural network'', ''RNN'') {{---}} вид [[:Нейронные сети|нейронных сетей]], где связи между элементами образуют направленную последовательность.&lt;br /&gt;
&lt;br /&gt;
== Описание ==&lt;br /&gt;
Рекуррентные нейронные сети {{---}} сети с циклами, которые хорошо подходят для обработки последовательностей.&lt;br /&gt;
[[File:RNN_BP.jpg|450px|thumb|RNN с задержкой на скрытом слое]]&lt;br /&gt;
[[File:RNN_BPTT.jpg|450px|thumb|Развертка RNN]]&lt;br /&gt;
Обучение RNN аналогично обучению обычной нейронной сети. Мы также используем алгоритм обратного распространения ошибки (backpropagation), но с небольшим изменением. Поскольку одни и те же параметры используются на всех временных этапах в сети, градиент на каждом выходе зависит не только от расчетов текущего шага, но и от предыдущих временных шагов. Например, чтобы вычислить градиент при t = 4, нам нужно было бы «распространить ошибку» на 3 шага и суммировать градиенты. Этот алгоритм называется «алгоритмом обратного распространения ошибки сквозь время» (англ. Backpropagation Through Time, BPTT).&amp;lt;ref name=BPTT_1&amp;gt;[http://andrew.gibiansky.com/blog/machine-learning/recurrent-neural-networks/ Backpropagation Through Time]&amp;lt;/ref&amp;gt;&amp;lt;ref name=BPTT_2&amp;gt;[http://www.wildml.com/2015/10/recurrent-neural-networks-tutorial-part-3-backpropagation-through-time-and-vanishing-gradients/ Backpropagation Through Time]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Области и примеры применения ==&lt;br /&gt;
Используются, когда важно соблюдать последовательность, когда нужен порядок того, что у нас происходит.&lt;br /&gt;
* Обработка текста на естественном языке&lt;br /&gt;
** Анализ текста&lt;br /&gt;
** Автоматический перевод&lt;br /&gt;
* Обработка аудио &lt;br /&gt;
** Автоматическое распознавание речи&lt;br /&gt;
* Обработка видео&lt;br /&gt;
** Прогнозирование следующего кадра на основе предыдущих&lt;br /&gt;
** Распознавание эмоций&lt;br /&gt;
* Обработка изображений&lt;br /&gt;
** Прогнозирование следующего пикселя на основе окружения&lt;br /&gt;
** Генерация описания изображений&lt;br /&gt;
&lt;br /&gt;
== Архитектуры ==&lt;br /&gt;
=== Полностью рекуррентная сеть ===&lt;br /&gt;
Это базовая архитектура, разработанная в 1980-х. Сеть строится из узлов, каждый из которых соединён со всеми другими узлами. У каждого нейрона порог активации меняется со временем и является вещественным числом. Каждое соединение имеет переменный вещественный вес. Узлы разделяются на входные, выходные и скрытые.&lt;br /&gt;
&lt;br /&gt;
=== Рекурсивная сеть ===&lt;br /&gt;
[[:Рекурсивные нейронные сети|Рекурсивные нейронные сети]] представляют собой более общий случай рекуррентных сетей, когда сигнал в сети проходит через структуру в виде дерева (обычно бинарные деревья). Те же самые матрицы весов используются рекурсивно по всему графу в соответствии с его топологией.&lt;br /&gt;
&lt;br /&gt;
=== Нейронная сеть Хопфилда ===&lt;br /&gt;
Тип рекуррентной сети, когда все соединения симметричны. Изобретена Джоном Хопфилдом в 1982 году и гарантируется, что динамика такой сети сходится к одному из положений равновесия.&lt;br /&gt;
&lt;br /&gt;
=== Двунаправленная ассоциативная память (BAM) ===&lt;br /&gt;
Вариацией сети Хопфилда является двунаправленная ассоциативная память (BAM). BAM имеет два слоя, каждый из которых может выступать в качестве входного, находить (вспоминать) ассоциацию и генерировать результат для другого слоя.&lt;br /&gt;
[[File:Elman_RNN.jpg|450px|thumb|Сеть Элмана]]&lt;br /&gt;
&lt;br /&gt;
=== Сеть Элмана ===&lt;br /&gt;
Нейронная сеть Элмана состоит из трёх слоев: x, y, z (см рис. Сеть Элмана). Дополнительно к сети добавлен набор «контекстных блоков»: u (см рис. Сеть Элмана). Средний (скрытый) слой соединён с контекстными блоками с фиксированным весом, равным единице. С каждым шагом времени на вход поступает информация, которая проходит прямой ход к выходному слою в соответствии с правилами обучения. Фиксированные обратные связи сохраняют предыдущие значения скрытого слоя в контекстных блоках (до того как скрытый слой поменяет значение в процессе обучения). Таким способом сеть сохраняет своё состояние, что может использоваться в предсказании последовательностей, выходя за пределы мощности многослойного перцептрона.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;h_t = \sigma_h(W_h x_t + U_h h_{t-1} + b_h)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y_t = \sigma_y(W_y h_t + b_y)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Обозначения переменных и функций:&lt;br /&gt;
* &amp;lt;math&amp;gt;x_t&amp;lt;/math&amp;gt;: вектор входного слоя&lt;br /&gt;
* &amp;lt;math&amp;gt;h_t&amp;lt;/math&amp;gt;: вектор скрытого слоя&lt;br /&gt;
* &amp;lt;math&amp;gt;y_t&amp;lt;/math&amp;gt;: вектор выходного слоя&lt;br /&gt;
* &amp;lt;math&amp;gt;W, U и b&amp;lt;/math&amp;gt;: матрица и вектор параметров&lt;br /&gt;
* &amp;lt;math&amp;gt;\sigma_h и \sigma_y&amp;lt;/math&amp;gt;: функция активации&lt;br /&gt;
&lt;br /&gt;
=== Сеть Джордана ===&lt;br /&gt;
Нейронная сеть Джордана подобна сети Элмана, но контекстные блоки связаны не со скрытым слоем, а с выходным слоем. Контекстные блоки таким образом сохраняют своё состояние. Они обладают рекуррентной связью с собой.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;h_t = \sigma_h(W_h x_t + U_h y_{t-1} + b_h)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y_t = \sigma_y(W_y h_t + b_y)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Эхо-сети ===&lt;br /&gt;
Эхо-сеть (англ. Echo State Network, ESN) характеризуется одним скрытым слоем (который называется резервуаром) со случайными редкими связями между нейронами. При этом связи внутри резервуара фиксированы, но связи с выходным слоем подлежат обучению. Состояние резервуара (state) вычисляется через предыдущие состояния резервуара, а также предыдущие состояния входного и выходного сигналов. Так как эхо-сети обладают только одним скрытым слоем, они обладают достаточно низкой вычислительной сложностью.&lt;br /&gt;
&lt;br /&gt;
=== Нейронный компрессор истории ===&lt;br /&gt;
Нейронный компрессор исторических данных {{---}} это блок, позволяющий в сжатом виде хранить существенные исторические особенности процесса, который является своего рода стеком рекуррентной нейронной сети, формируемым в процессе самообучения.&lt;br /&gt;
[[File:LSTM.png|450px|thumb|[http://colah.github.io/posts/2015-08-Understanding-LSTMs/ Схема слоев рекуррентной сети долго-краткосрочной памяти]]]&lt;br /&gt;
&lt;br /&gt;
=== Сети долго-краткосрочной памяти ===&lt;br /&gt;
Сеть долго-краткосрочной памяти (англ. Long short-term memory, LSTM) является самой популярная архитектура рекуррентной нейронной сети на данный момент, данная архитектура способна запоминать данные на долгое время.&amp;lt;ref name=LSTM&amp;gt;[https://www.bioinf.jku.at/publications/older/2604.pdf Sepp Hochreiter, Jurgen Schmidhuber. Long short-term memory (1997). Neural Computation.]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Разберем работу слоев подробнее&amp;lt;ref name=Understanding_LSTM&amp;gt;[http://colah.github.io/posts/2015-08-Understanding-LSTMs/ Understanding LSTM Networks]&amp;lt;/ref&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
Первый слой вычисляет, насколько на данном шаге ему нужно забыть предыдущую информацию {{---}} по сути множители к компонентам вектора памяти.&lt;br /&gt;
[[File:LSTM_F1.png|none|250px]]&lt;br /&gt;
&amp;lt;math&amp;gt;f_t = \sigma(W_f * [h_{t-1}, x_t] + b_f)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Второй слой вычисляет, насколько ему интересна новая информация, пришедшая с сигналом {{---}} такой же множитель, но уже для наблюдения.&lt;br /&gt;
[[File:LSTM_F2.png|none|250px]]&lt;br /&gt;
&amp;lt;math&amp;gt;i_t = \sigma(W_f * [h_{t-1}, x_t] + b_i)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\tilde{C}_t = tanh(W_C * [h_{t-1}, x_t] + b_C)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
На третьем слое вычисляется линейная комбинация памяти и наблюдения с только вычисленными весами для каждой из компонент. Так получается новое состояние памяти, которое в таком же виде передаётся далее.&lt;br /&gt;
[[File:LSTM_F3.png|none|250px]]&lt;br /&gt;
&amp;lt;math&amp;gt;C_t = f_t * C_{t-1} + i_t * \tilde{C}_t&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Осталось вычислить output. Но поскольку часть входного сигнала уже в памяти, не нужно считать активацию по всему сигналу. Сначала сигнал проходит через сигмоиду, которая решает, какая его часть важна для дальнейших решений, затем гиперболический тангенс «размазывает» вектор памяти на отрезок от -1 до 1, и в конце эти два вектора перемножаются.&lt;br /&gt;
[[File:LSTM_F4.png|none|250px]]&lt;br /&gt;
&amp;lt;math&amp;gt;o_t = \sigma(W_o * [h_{t-1}, x_t] + b_o)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;h_t = o_t * tanh(C_t)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Полученные таким образом &amp;lt;math&amp;gt;h_t&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;C_t&amp;lt;/math&amp;gt; передаются далее по цепочке.&lt;br /&gt;
&lt;br /&gt;
=== Управляемые рекуррентные блоки ===&lt;br /&gt;
Управляемые рекуррентные блоки (англ. Gated Recurrent Units, GRU) {{---}} обладает меньшим количеством параметров, чем у LSTM, и в ней отсутствует выходное управление. При этом производительность в моделях речевого сигнала или полифонической музыки оказалась сопоставимой с LSTM.&lt;br /&gt;
&lt;br /&gt;
== Пример кода ==&lt;br /&gt;
Пример кода на Python с использованием библиотеки Keras.&amp;lt;ref name=KerasRNN&amp;gt;[https://keras.io/layers/recurrent/ Keras RNN]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Импорты&lt;br /&gt;
import numpy as np&lt;br /&gt;
from keras.preprocessing import sequence&lt;br /&gt;
from keras.models import Sequential&lt;br /&gt;
from keras.layers import Dense, Activation, Embedding&lt;br /&gt;
from keras.layers import LSTM&lt;br /&gt;
from keras.datasets import imdb&lt;br /&gt;
&lt;br /&gt;
# Устанавливаем seed для обеспечения повторяемости результатов&lt;br /&gt;
np.random.seed(42)&lt;br /&gt;
&lt;br /&gt;
# Указываем количество слов из частотного словаря, которое будет использоваться (отсортированы по частоте использования)&lt;br /&gt;
max_features = 5000&lt;br /&gt;
&lt;br /&gt;
# Загружаем данные (датасет IMDB содержит 25000 рецензий на фильмы с правильным ответом для обучения и 25000 рецензий на фильмы с правильным ответом для тестирования)&lt;br /&gt;
(X_train, y_train), (X_test, y_test) = imdb.load_data(nb_words = max_features)&lt;br /&gt;
&lt;br /&gt;
# Устанавливаем максимальную длину рецензий в словах, чтобы они все были одной длины&lt;br /&gt;
maxlen = 80&lt;br /&gt;
&lt;br /&gt;
# Заполняем короткие рецензии пробелами, а длинные обрезаем&lt;br /&gt;
X_train = sequence.pad_sequences(X_train, maxlen = maxlen)&lt;br /&gt;
X_test = sequence.pad_sequences(X_test, maxlen = maxlen)&lt;br /&gt;
&lt;br /&gt;
# Создаем модель последовательной сети&lt;br /&gt;
model = Sequential()&lt;br /&gt;
# Добавляем слой для векторного представления слов (5000 слов, каждое представлено вектором из 32 чисел, отключаем входной сигнал с вероятностью 20% для предотвращения переобучения)&lt;br /&gt;
model.add(Embedding(max_features, 32, dropout = 0.2))&lt;br /&gt;
# Добавляем слой долго-краткосрочной памяти (100 элементов для долговременного хранения информации, отключаем входной сигнал с вероятностью 20%, отключаем рекуррентный сигнал с вероятностью 20%)&lt;br /&gt;
model.add(LSTM(100, dropout_W = 0.2, dropout_U = 0.2))&lt;br /&gt;
# Добавляем полносвязный слой из 1 элемента для классификации, в качестве функции активации будем использовать сигмоидальную функцию&lt;br /&gt;
model.add(Dense(1, activation = &amp;quot;sigmoid&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
# Компилируем модель нейронной сети&lt;br /&gt;
model.compile(loss = 'binary_crossentropy',&lt;br /&gt;
              optimizer = 'adam',&lt;br /&gt;
              metrics = ['accuracy'])&lt;br /&gt;
&lt;br /&gt;
# Обучаем нейронную сеть (данные для обучения, ответы к данным для обучения, количество рецензий после анализа которого будут изменены веса, число эпох обучения, тестовые данные, показывать progress bar или нет)&lt;br /&gt;
model.fit(X_train, y_train, &lt;br /&gt;
          batch_size = 64,&lt;br /&gt;
          nb_epoch = 7,&lt;br /&gt;
          validation_data = (X_test, y_test),&lt;br /&gt;
          verbose = 1)&lt;br /&gt;
&lt;br /&gt;
# Проверяем качество обучения на тестовых данных (если есть данные, которые не участвовали в обучении, лучше использовать их, но в нашем случае таковых нет)&lt;br /&gt;
scores = model.evaluate(X_test, y_test, batch_size = 64)&lt;br /&gt;
print(&amp;quot;Точность на тестовых данных: %.2f%%&amp;quot; % (scores[1] * 100))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
*[[:Сверточные_нейронные_сети|Сверточные нейронные сети]]&lt;br /&gt;
*[[:Нейронные_сети,_перцептрон|Нейронные сети, перцептрон]]&lt;br /&gt;
*[[:Рекурсивные нейронные сети|Рекурсивные нейронные сети]]&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Adel</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D0%B5%D0%BA%D1%83%D1%80%D1%80%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B5_%D0%BD%D0%B5%D0%B9%D1%80%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5_%D1%81%D0%B5%D1%82%D0%B8&amp;diff=68978</id>
		<title>Рекуррентные нейронные сети</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D0%B5%D0%BA%D1%83%D1%80%D1%80%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B5_%D0%BD%D0%B5%D0%B9%D1%80%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5_%D1%81%D0%B5%D1%82%D0%B8&amp;diff=68978"/>
				<updated>2019-01-23T02:36:37Z</updated>
		
		<summary type="html">&lt;p&gt;Adel: Новая страница: «[http://colah.github.io/posts/2015-08-Understanding-LSTMs/ RNN и ее развернутое представление] File:RNN_…»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:RNN.png|450px|thumb|[http://colah.github.io/posts/2015-08-Understanding-LSTMs/ RNN и ее развернутое представление]]]&lt;br /&gt;
[[File:RNN_layer.png|450px|thumb|[http://colah.github.io/posts/2015-08-Understanding-LSTMs/ Схема слоя рекуррентной сети]]]&lt;br /&gt;
&lt;br /&gt;
'''Рекуррентная нейронная сеть''' (англ. ''recurrent neural network'', ''RNN'') {{---}} вид [[:Нейронные сети|нейронных сетей]], где связи между элементами образуют направленную последовательность.&lt;br /&gt;
&lt;br /&gt;
== Описание ==&lt;br /&gt;
Рекуррентные нейронные сети {{---}} сети с циклами, которые хорошо подходят для обработки последовательностей.&lt;br /&gt;
[[File:RNN_BP.jpg|450px|thumb|RNN с задержкой на скрытом слое]]&lt;br /&gt;
[[File:RNN_BPTT.jpg|450px|thumb|Развертка RNN]]&lt;br /&gt;
Обучение RNN аналогично обучению обычной нейронной сети. Мы также используем алгоритм обратного распространения ошибки (backpropagation), но с небольшим изменением. Поскольку одни и те же параметры используются на всех временных этапах в сети, градиент на каждом выходе зависит не только от расчетов текущего шага, но и от предыдущих временных шагов. Например, чтобы вычислить градиент при t = 4, нам нужно было бы «распространить ошибку» на 3 шага и суммировать градиенты. Этот алгоритм называется «алгоритмом обратного распространения ошибки сквозь время» (англ. Backpropagation Through Time, BPTT).&amp;lt;ref name=BPTT_1&amp;gt;[http://andrew.gibiansky.com/blog/machine-learning/recurrent-neural-networks/ Backpropagation Through Time]&amp;lt;/ref&amp;gt;&amp;lt;ref name=BPTT_2&amp;gt;[http://www.wildml.com/2015/10/recurrent-neural-networks-tutorial-part-3-backpropagation-through-time-and-vanishing-gradients/ Backpropagation Through Time]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Области и примеры применения ==&lt;br /&gt;
Используются, когда важно соблюдать последовательность, когда нужен порядок того, что у нас происходит.&lt;br /&gt;
* Обработка текста на естественном языке&lt;br /&gt;
** Анализ текста&lt;br /&gt;
** Автоматический перевод&lt;br /&gt;
* Обработка аудио &lt;br /&gt;
** Автоматическое распознавание речи&lt;br /&gt;
* Обработка видео&lt;br /&gt;
** Прогнозирование следующего кадра на основе предыдущих&lt;br /&gt;
** Распознавание эмоций&lt;br /&gt;
* Обработка изображений&lt;br /&gt;
** Прогнозирование следующего пикселя на основе окружения&lt;br /&gt;
** Генерация описания изображений&lt;br /&gt;
&lt;br /&gt;
== Архитектуры ==&lt;br /&gt;
=== Полностью рекуррентная сеть ===&lt;br /&gt;
Это базовая архитектура, разработанная в 1980-х. Сеть строится из узлов, каждый из которых соединён со всеми другими узлами. У каждого нейрона порог активации меняется со временем и является вещественным числом. Каждое соединение имеет переменный вещественный вес. Узлы разделяются на входные, выходные и скрытые.&lt;br /&gt;
=== Рекурсивная сеть ===&lt;br /&gt;
[[:Рекурсивные нейронные сети|Рекурсивные нейронные сети]] представляют собой более общий случай рекуррентных сетей, когда сигнал в сети проходит через структуру в виде дерева (обычно бинарные деревья). Те же самые матрицы весов используются рекурсивно по всему графу в соответствии с его топологией.&lt;br /&gt;
=== Нейронная сеть Хопфилда ===&lt;br /&gt;
Тип рекуррентной сети, когда все соединения симметричны. Изобретена Джоном Хопфилдом в 1982 году и гарантируется, что динамика такой сети сходится к одному из положений равновесия.&lt;br /&gt;
=== Двунаправленная ассоциативная память (BAM) ===&lt;br /&gt;
Вариацией сети Хопфилда является двунаправленная ассоциативная память (BAM). BAM имеет два слоя, каждый из которых может выступать в качестве входного, находить (вспоминать) ассоциацию и генерировать результат для другого слоя.&lt;br /&gt;
[[File:Elman_RNN.jpg|450px|thumb|Сеть Элмана]]&lt;br /&gt;
=== Сеть Элмана ===&lt;br /&gt;
Нейронная сеть Элмана состоит из трёх слоев: x, y, z (см рис. Сеть Элмана). Дополнительно к сети добавлен набор «контекстных блоков»: u (см рис. Сеть Элмана). Средний (скрытый) слой соединён с контекстными блоками с фиксированным весом, равным единице. С каждым шагом времени на вход поступает информация, которая проходит прямой ход к выходному слою в соответствии с правилами обучения. Фиксированные обратные связи сохраняют предыдущие значения скрытого слоя в контекстных блоках (до того как скрытый слой поменяет значение в процессе обучения). Таким способом сеть сохраняет своё состояние, что может использоваться в предсказании последовательностей, выходя за пределы мощности многослойного перцептрона.&lt;br /&gt;
=== Сеть Джордана ===&lt;br /&gt;
Нейронная сеть Джордана подобна сети Элмана, но контекстные блоки связаны не со скрытым слоем, а с выходным слоем. Контекстные блоки таким образом сохраняют своё состояние. Они обладают рекуррентной связью с собой.&lt;br /&gt;
=== Эхо-сети ===&lt;br /&gt;
Эхо-сеть (англ. Echo State Network, ESN) характеризуется одним скрытым слоем (который называется резервуаром) со случайными редкими связями между нейронами. При этом связи внутри резервуара фиксированы, но связи с выходным слоем подлежат обучению. Состояние резервуара (state) вычисляется через предыдущие состояния резервуара, а также предыдущие состояния входного и выходного сигналов. Так как эхо-сети обладают только одним скрытым слоем, они обладают достаточно низкой вычислительной сложностью.&lt;br /&gt;
=== Нейронный компрессор истории ===&lt;br /&gt;
Нейронный компрессор исторических данных {{---}} это блок, позволяющий в сжатом виде хранить существенные исторические особенности процесса, который является своего рода стеком рекуррентной нейронной сети, формируемым в процессе самообучения.&lt;br /&gt;
[[File:LSTM.png|450px|thumb|[http://colah.github.io/posts/2015-08-Understanding-LSTMs/ Схема слоев рекуррентной сети долго-краткосрочной памяти]]]&lt;br /&gt;
=== Сети долго-краткосрочной памяти ===&lt;br /&gt;
Сеть долго-краткосрочной памяти (англ. Long short-term memory, LSTM) является самой популярная архитектура рекуррентной нейронной сети на данный момент, данная архитектура способна запоминать данные на долгое время.&amp;lt;ref name=LSTM&amp;gt;[https://www.bioinf.jku.at/publications/older/2604.pdf Sepp Hochreiter, Jurgen Schmidhuber. Long short-term memory (1997). Neural Computation.]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Разберем работу слоев подробнее&amp;lt;ref name=Understanding_LSTM&amp;gt;[http://colah.github.io/posts/2015-08-Understanding-LSTMs/ Understanding LSTM Networks]&amp;lt;/ref&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
Первый слой вычисляет, насколько на данном шаге ему нужно забыть предыдущую информацию {{---}} по сути множители к компонентам вектора памяти.&lt;br /&gt;
[[File:LSTM_F1.png|none|250px]]&lt;br /&gt;
&amp;lt;math&amp;gt;f_t = \sigma(W_f * [h_t-1, x_t] + b_f)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Второй слой вычисляет, насколько ему интересна новая информация, пришедшая с сигналом {{---}} такой же множитель, но уже для наблюдения.&lt;br /&gt;
[[File:LSTM_F2.png|none|250px]]&lt;br /&gt;
&amp;lt;math&amp;gt;i_t = \sigma(W_f * [h_t-1, x_t] + b_i)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\tilde{C}_t = tanh(W_C * [h_t-1, x_t] + b_C)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
На третьем слое вычисляется линейная комбинация памяти и наблюдения с только вычисленными весами для каждой из компонент. Так получается новое состояние памяти, которое в таком же виде передаётся далее.&lt;br /&gt;
[[File:LSTM_F3.png|none|250px]]&lt;br /&gt;
&amp;lt;math&amp;gt;C_t = f_t * C_t-1 + i_t * \tilde{C}_t&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Осталось вычислить output. Но поскольку часть входного сигнала уже в памяти, не нужно считать активацию по всему сигналу. Сначала сигнал проходит через сигмоиду, которая решает, какая его часть важна для дальнейших решений, затем гиперболический тангенс «размазывает» вектор памяти на отрезок от -1 до 1, и в конце эти два вектора перемножаются.&lt;br /&gt;
[[File:LSTM_F4.png|none|250px]]&lt;br /&gt;
&amp;lt;math&amp;gt;o_t = \sigma(W_o * [h_t-1, x_t] + b_o)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;h_t = o_t * tanh(C_t)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Полученные таким образом &amp;lt;math&amp;gt;h_t&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;C_t&amp;lt;/math&amp;gt; передаются далее по цепочке.&lt;br /&gt;
&lt;br /&gt;
=== Управляемые рекуррентные блоки ===&lt;br /&gt;
Управляемые рекуррентные блоки (англ. Gated Recurrent Units, GRU) {{---}} обладает меньшим количеством параметров, чем у LSTM, и в ней отсутствует выходное управление. При этом производительность в моделях речевого сигнала или полифонической музыки оказалась сопоставимой с LSTM.&lt;br /&gt;
&lt;br /&gt;
== Пример кода ==&lt;br /&gt;
Пример кода на Python с использованием библиотеки Keras.&amp;lt;ref name=KerasRNN&amp;gt;[https://keras.io/layers/recurrent/ Keras RNN]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Импорты&lt;br /&gt;
import numpy as np&lt;br /&gt;
from keras.preprocessing import sequence&lt;br /&gt;
from keras.models import Sequential&lt;br /&gt;
from keras.layers import Dense, Activation, Embedding&lt;br /&gt;
from keras.layers import LSTM&lt;br /&gt;
from keras.datasets import imdb&lt;br /&gt;
&lt;br /&gt;
# Устанавливаем seed для обеспечения повторяемости результатов&lt;br /&gt;
np.random.seed(42)&lt;br /&gt;
&lt;br /&gt;
# Указываем количество слов из частотного словаря, которое будет использоваться (отсортированы по частоте использования)&lt;br /&gt;
max_features = 5000&lt;br /&gt;
&lt;br /&gt;
# Загружаем данные (датасет IMDB содержит 25000 рецензий на фильмы с правильным ответом для обучения и 25000 рецензий на фильмы с правильным ответом для тестирования)&lt;br /&gt;
(X_train, y_train), (X_test, y_test) = imdb.load_data(nb_words = max_features)&lt;br /&gt;
&lt;br /&gt;
# Устанавливаем максимальную длину рецензий в словах, чтобы они все были одной длины&lt;br /&gt;
maxlen = 80&lt;br /&gt;
&lt;br /&gt;
# Заполняем короткие рецензии пробелами, а длинные обрезаем&lt;br /&gt;
X_train = sequence.pad_sequences(X_train, maxlen = maxlen)&lt;br /&gt;
X_test = sequence.pad_sequences(X_test, maxlen = maxlen)&lt;br /&gt;
&lt;br /&gt;
# Создаем модель последовательной сети&lt;br /&gt;
model = Sequential()&lt;br /&gt;
# Добавляем слой для векторного представления слов (5000 слов, каждое представлено вектором из 32 чисел, отключаем входной сигнал с вероятностью 20% для предотвращения переобучения)&lt;br /&gt;
model.add(Embedding(max_features, 32, dropout = 0.2))&lt;br /&gt;
# Добавляем слой долго-краткосрочной памяти (100 элементов для долговременного хранения информации, отключаем входной сигнал с вероятностью 20%, отключаем рекуррентный сигнал с вероятностью 20%)&lt;br /&gt;
model.add(LSTM(100, dropout_W = 0.2, dropout_U = 0.2))&lt;br /&gt;
# Добавляем полносвязный слой из 1 элемента для классификации, в качестве функции активации будем использовать сигмоидальную функцию&lt;br /&gt;
model.add(Dense(1, activation = &amp;quot;sigmoid&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
# Компилируем модель нейронной сети&lt;br /&gt;
model.compile(loss = 'binary_crossentropy',&lt;br /&gt;
              optimizer = 'adam',&lt;br /&gt;
              metrics = ['accuracy'])&lt;br /&gt;
&lt;br /&gt;
# Обучаем нейронную сеть (данные для обучения, ответы к данным для обучения, количество рецензий после анализа которого будут изменены веса, число эпох обучения, тестовые данные, показывать progress bar или нет)&lt;br /&gt;
model.fit(X_train, y_train, &lt;br /&gt;
          batch_size = 64,&lt;br /&gt;
          nb_epoch = 7,&lt;br /&gt;
          validation_data = (X_test, y_test),&lt;br /&gt;
          verbose = 1)&lt;br /&gt;
&lt;br /&gt;
# Проверяем качество обучения на тестовых данных (если есть данные, которые не участвовали в обучении, лучше использовать их, но в нашем случае таковых нет)&lt;br /&gt;
scores = model.evaluate(X_test, y_test, batch_size = 64)&lt;br /&gt;
print(&amp;quot;Точность на тестовых данных: %.2f%%&amp;quot; % (scores[1] * 100))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
*[[:Сверточные_нейронные_сети|Сверточные нейронные сети]]&lt;br /&gt;
*[[:Нейронные_сети,_перцептрон|Нейронные сети, перцептрон]]&lt;br /&gt;
*[[:Рекурсивные нейронные сети|Рекурсивные нейронные сети]]&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Adel</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:LSTM_F4.png&amp;diff=68977</id>
		<title>Файл:LSTM F4.png</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:LSTM_F4.png&amp;diff=68977"/>
				<updated>2019-01-23T02:24:49Z</updated>
		
		<summary type="html">&lt;p&gt;Adel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Adel</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:LSTM_F3.png&amp;diff=68976</id>
		<title>Файл:LSTM F3.png</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:LSTM_F3.png&amp;diff=68976"/>
				<updated>2019-01-23T02:24:39Z</updated>
		
		<summary type="html">&lt;p&gt;Adel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Adel</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:LSTM_F2.png&amp;diff=68975</id>
		<title>Файл:LSTM F2.png</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:LSTM_F2.png&amp;diff=68975"/>
				<updated>2019-01-23T02:24:29Z</updated>
		
		<summary type="html">&lt;p&gt;Adel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Adel</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:LSTM_F1.png&amp;diff=68974</id>
		<title>Файл:LSTM F1.png</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:LSTM_F1.png&amp;diff=68974"/>
				<updated>2019-01-23T02:23:46Z</updated>
		
		<summary type="html">&lt;p&gt;Adel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Adel</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:RNN_layer.png&amp;diff=68973</id>
		<title>Файл:RNN layer.png</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:RNN_layer.png&amp;diff=68973"/>
				<updated>2019-01-23T02:10:05Z</updated>
		
		<summary type="html">&lt;p&gt;Adel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Adel</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:LSTM.png&amp;diff=68972</id>
		<title>Файл:LSTM.png</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:LSTM.png&amp;diff=68972"/>
				<updated>2019-01-23T01:34:32Z</updated>
		
		<summary type="html">&lt;p&gt;Adel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Adel</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Elman_RNN.jpg&amp;diff=68971</id>
		<title>Файл:Elman RNN.jpg</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Elman_RNN.jpg&amp;diff=68971"/>
				<updated>2019-01-23T01:28:33Z</updated>
		
		<summary type="html">&lt;p&gt;Adel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Adel</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:RNN_BPTT.jpg&amp;diff=68970</id>
		<title>Файл:RNN BPTT.jpg</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:RNN_BPTT.jpg&amp;diff=68970"/>
				<updated>2019-01-23T01:13:17Z</updated>
		
		<summary type="html">&lt;p&gt;Adel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Adel</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:RNN_BP.jpg&amp;diff=68969</id>
		<title>Файл:RNN BP.jpg</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:RNN_BP.jpg&amp;diff=68969"/>
				<updated>2019-01-23T01:07:54Z</updated>
		
		<summary type="html">&lt;p&gt;Adel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Adel</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:RNN.png&amp;diff=68968</id>
		<title>Файл:RNN.png</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:RNN.png&amp;diff=68968"/>
				<updated>2019-01-23T01:04:19Z</updated>
		
		<summary type="html">&lt;p&gt;Adel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Adel</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B8%D0%B7%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D1%83%D1%80%D0%BE%D0%B2%D0%B5%D0%BD%D1%8C_-_%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D0%B8&amp;diff=58172</id>
		<title>Физический уровень - Модуляции</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B8%D0%B7%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D1%83%D1%80%D0%BE%D0%B2%D0%B5%D0%BD%D1%8C_-_%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D0%B8&amp;diff=58172"/>
				<updated>2016-12-21T19:52:15Z</updated>
		
		<summary type="html">&lt;p&gt;Adel: /* Аналоговая модуляция */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Введение=&lt;br /&gt;
Для начала разберемся, зачем вообще нужна модуляция и что она из себя представляет.&lt;br /&gt;
&lt;br /&gt;
==Зачем нужна модуляция?==&lt;br /&gt;
[[Файл:Modulation.gif|right|Модуляция]]В рамках одного устройства для передачи информации используются низкочастотные колебания, передача которых на расстояние свыше нескольких метров крайне затруднительна, в силу их быстрого ослабевания. Но нам все равно хочется передавать сигналы на большие расстояния, вот тут на помощь приходит модуляция.&lt;br /&gt;
&lt;br /&gt;
==В чем суть модуляции?==&lt;br /&gt;
Возьмем высокочастотное колебание. Само по себе оно не несет никакой информации. Его мы будем использовать в качестве основного компонента передаваемого сигнала. Частоту этого колебания называют несущей.&lt;br /&gt;
Для того, чтобы начать передавать полезную информацию, нам нужно каким-нибудь образом видоизменить несущую частоту так, чтобы она повторяла закономерности сигнала, который мы хотим передать. Иными словами, нам нужно сделать так, чтобы она несла информацию о нашем полезном сигнале.&lt;br /&gt;
Это самое видоизменение называется модуляцией.&lt;br /&gt;
Модуляция осуществляется с помощью модулятора со стороны отправителя, а с помощью демодулятора на стороне получателя высокочастотный сигнал преобразуется обратно в низкочастотный. Они собраны в одно устройство под названием модем, которое получилось благодаря слиянию слов МОдулятор и ДЕМодулятор.&lt;br /&gt;
Есть разные принципы модуляции, некоторые из которых рассмотрим ниже.&lt;br /&gt;
Самым древним методом модуляции можно назвать прерывание несущей частоты, которое использовалось в телеграфах. Этот метод, конечно, нельзя назвать в полной мере модуляцией, но тем не менее о нем нельзя не упомянуть в данной теме.&lt;br /&gt;
&lt;br /&gt;
=Виды модуляции=&lt;br /&gt;
Теперь рассмотрим более формальные определения.&lt;br /&gt;
{{Определение|definition =&lt;br /&gt;
'''Модуляцией''' называется процесс изменения одного или нескольких параметров высокочастотного несущего колебания по закону низкочастотного информационного сигнала.&lt;br /&gt;
}}{{Определение|definition =&lt;br /&gt;
'''Модулирующий сигнал''' - сигнал, хранящий передаваемую информацию.&lt;br /&gt;
}}{{Определение|definition =&lt;br /&gt;
'''Несущий сигнал''' - сигнал, выполняющий роль переносчика информации.&lt;br /&gt;
}}{{Определение|definition =&lt;br /&gt;
'''Модулированный сигнал''' - сигнал, получающийся после посадки модулирующего сигнала на несущий сигнал.&lt;br /&gt;
}}&lt;br /&gt;
[[Файл:Sygnal_types.png|Модулирующий, несущий и модулированный сигналы]]&lt;br /&gt;
&lt;br /&gt;
[[Файл:Modulation_types.png|right|Типы модуляции в зависимости от несущего сигнала]]В зависимости от типа несущего сигнала используются разные виды модуляции. Ниже представлена таблица соответствия типа сигнала виду модуляции.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
|+ Несущий сигнал&lt;br /&gt;
|-&lt;br /&gt;
! Фиксированный уровень !! Гармонический сигнал !! Импульсы&lt;br /&gt;
|-&lt;br /&gt;
| Прямая модуляция || Аналоговая модуляция || Импульсная модуляция&lt;br /&gt;
|-&lt;br /&gt;
| || Цифровая модуляция ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
==Прямая модуляция==&lt;br /&gt;
[[Файл:Modulation_1.png|right|Прямая модуляция для последовательности 1010]]Это самый простой вид модуляции, при котором передача того или иного сигнала происходит путем изменения напряжения.&lt;br /&gt;
Зададим нормальное напряжение &amp;lt;math&amp;gt;U_H&amp;lt;/math&amp;gt;, тогда при уменьшении нормального уровня напряжения на &amp;lt;math&amp;gt;\Delta U_M&amp;lt;/math&amp;gt; передается двоичный 0, а при увеличении на ту же величину двоичная 1.&lt;br /&gt;
&amp;lt;br /&amp;gt;Для кодирования нескольких одинаковых значений подряд зададим промежуток времени &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;, в течение которого передается одна цифра.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
==Аналоговая модуляция==&lt;br /&gt;
[[Файл:Analog_modulation.png|right|Виды аналоговой модуляции]]Носителем этого типа модуляции является колебание.&lt;br /&gt;
В зависимости от того, какой параметр несущего колебания изменяется, различают 3 основных вида аналоговой модуляций:&lt;br /&gt;
* Амплитудная&lt;br /&gt;
* Фазовая&lt;br /&gt;
* Частотная&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
|+ Аналоговая модуляция&lt;br /&gt;
|-&lt;br /&gt;
! Амплитудная !! Фазовая !! Частотная&lt;br /&gt;
|-&lt;br /&gt;
| Меняется амплитуда импульсов&lt;br /&gt;
| Меняется фаза колебания&lt;br /&gt;
| Меняется частота колебания&lt;br /&gt;
|-&lt;br /&gt;
| С увеличением амплитуды модулирующего сигнала увеличивается амплитуда несущего сигнала&lt;br /&gt;
| С увеличением амплитуды модулирующего сигнала увеличивается сдвиг относительно такта времени&lt;br /&gt;
| С увеличением амплитуды модулирующего сигнала увеличивается частота несущего колебания&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Цифровая модуляция (манипуляция)==&lt;br /&gt;
Тот самый вид модуляции, который используется для передачи данных в компьютерных сетях.&lt;br /&gt;
{{Определение|definition =&lt;br /&gt;
'''Цифровой модуляцией''' называется процесс преобразования битов в соответствующие аналоговые сигналы.&lt;br /&gt;
}}&lt;br /&gt;
Цифровую модуляцию принято называть манипуляцией, поэтому часто может встречаться именно этот термин.&amp;lt;br /&amp;gt;&lt;br /&gt;
Носителем так же, как и в случае аналоговой модуляции является колебание.&lt;br /&gt;
===Основные методы цифровой модуляции===&lt;br /&gt;
[[Файл:Digital_modulation.png|right|Виды цифровой модуляции]]Так же, как и в других видах модуляции, цифровая делится на разные методы преобразования, в зависимости от того, какой параметр несущего колебания изменяется:&lt;br /&gt;
* Амплитудная&lt;br /&gt;
* Частотная&lt;br /&gt;
* Фазовая&lt;br /&gt;
* Квадратурная амплитудная (амплитудно-фазовая)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
|+ Цифровая модуляция&lt;br /&gt;
|-&lt;br /&gt;
! Амплитудная (ASK - Amplitude Shift Keying) !! Частотная (FSK - Frequency Shift Keying) !! Фазовая (PSK - Phase Shift Keying) !! Квадратурная амплитудная (QAM - Quadrature Amplitude Modulation)&lt;br /&gt;
|-&lt;br /&gt;
| Меняется амплитуда импульсов&lt;br /&gt;
| Меняется частота импульсов&lt;br /&gt;
| Меняется фаза колебания&lt;br /&gt;
| Меняется одновременно и амплитуда, и фаза&lt;br /&gt;
|-&lt;br /&gt;
| Для передачи 1 используется большая амплитуда, для передачи 0 - малая, иногда нулю соответствует отсутствие колебания.&lt;br /&gt;
| Для передачи 1 используется высокая частота колебаний, для передачи 0 - низкая.&lt;br /&gt;
| Для передачи 1 используется сдвиг фазы на &amp;lt;math&amp;gt;\pi /2&amp;lt;/math&amp;gt;.&lt;br /&gt;
| Для передачи 1 используется большая амплитуда и сдвиг фазы на &amp;lt;math&amp;gt;\pi /2&amp;lt;/math&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Многопозиционные методы===&lt;br /&gt;
Для разных видов манипуляции существуют методы, позволяющие передавать не только 0 и 1 в рамках одного сигнала, такие методы получили название многопозиционные.&lt;br /&gt;
Суть этих методов в том, что один элемент линейного сигнала несет информацию о большем числе битов, чем в обычных двухпозиционных методах.&lt;br /&gt;
Работает это очень просто. Например, в многопозиционной амплитудной манипуляции зададим не 2 амплитуды, которые будут кодировать 0 или 1, а 4, которые будут соответствовать 00, 01, 10, 11 по мере увеличения амплитуды. Для многопозиционной частотной манипуляции используется больше частот, а для многопозиционной фазовой манипуляции, соответственно, больше сдвигов.&lt;br /&gt;
Да, это действительно позволяет повысить удельную скорость передачи информации, но при этом начинают возникать ошибки, связанные с погрешностью передачи.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим самые распространенные методы:&lt;br /&gt;
&lt;br /&gt;
====BPSK, QPSK, 8-PSK====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
|+ Фазовые манипуляции&lt;br /&gt;
|-&lt;br /&gt;
! BPSK !! QPSK !! 8-PSK&lt;br /&gt;
|-&lt;br /&gt;
| Binary Phase Shift Keying является обычной бинарной фазовой манипуляцией, которую мы рассматривали выше в рамках основных методов, позволяет закодировать 1 бит информации за сигнал. Не является многопозиционным методом.&lt;br /&gt;
| Quadrature Phase Shift Keying переводится как квадратурная фазовая манипуляция и представляет собой разделение на 4 фазы, которые позволяют закодировать 2 бита за сигнал.&lt;br /&gt;
| 8 Phase Shift Keying представляет собой разделение на 8 фаз, которые позволяют закодировать 3 бита за сигнал.&lt;br /&gt;
|}&lt;br /&gt;
[[Файл:BPSK.png|Бинарная фазовая манипуляция BPSK]]&lt;br /&gt;
[[Файл:QPSK.png|Квадратурная фазовая манипуляция QPSK]]&lt;br /&gt;
[[Файл:8PSK.png|8 фазовая манипуляция 8-PSK]]&lt;br /&gt;
&lt;br /&gt;
====QAM-16, QAM-64====&lt;br /&gt;
С простой квадратурной амплитудной манипуляцией мы уже знакомы, теперь посмотрим на 2 многопозиционные вариации. Напомню, что это комбинация амплитудной и фазовой манипуляций.&lt;br /&gt;
QAM-16 использует 16 комбинаций амплитудных и фазовых сдвигов, которые позволяют передавать 4 бита информации за 1 сигнал, а с помощью QAM-64, который использует 64 комбинации, можно передать целых 6 бит за сигнал.&lt;br /&gt;
Каждая комбинация задается углом, который соответствует фазе и расстоянием от начала координат, которое показывает величину амплитуды.&lt;br /&gt;
Ниже показана симуляция принципа работы квадратурной амплитудной манипуляции на примере QAM-16 и расположение точек для QAM-16 и QAM-64 соответственно.&lt;br /&gt;
[[Файл:QAM16.gif|Симуляция квадратурной амплитудной манипуляции QAM-16]][[Файл:QAM.png|Расположение точек QAM-16 и QAM-64 соответственно]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
==Импульсная модуляция==&lt;br /&gt;
[[Файл:Impuls_modulation.gif|right|Виды импульсной модуляции]]При импульсной модуляции носителем сигнала являются импульсы.&lt;br /&gt;
Импульсная модуляция делится на 4 основных вида:&lt;br /&gt;
* Амплитудно-импульсная&lt;br /&gt;
* Широтно-импульсная&lt;br /&gt;
* Частотно-импульсная&lt;br /&gt;
* Фазово-импульсная&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
|+ Импульсная модуляция&lt;br /&gt;
|-&lt;br /&gt;
! Амплитудо-импульсная !! Широтно-импульсная !! Частотно-импульсная !! Фазово-импульсная&lt;br /&gt;
|-&lt;br /&gt;
| Меняется амплитуда импульсов&lt;br /&gt;
| Меняется длительность (ширина) импульсов&lt;br /&gt;
| Меняется частота импульсов&lt;br /&gt;
| Меняется сдвиг импульсов относительно тактовых моментов времени&lt;br /&gt;
|-&lt;br /&gt;
| С увеличением напряжения модулирующего сигнала увеличивается амплитуда несущего сигнала&lt;br /&gt;
| С увеличением напряжения модулирующего сигнала увеличивается длительность импульсов&lt;br /&gt;
| С увеличением напряжения модулирующего сигнала увеличивается частота импульсов&lt;br /&gt;
| С увеличением напряжения модулирующего сигнала увеличивается сдвиг относительно такта времени&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Мультиплексирование=&lt;br /&gt;
Сами по себе, схемы модуляции позволяют посылать только один сигнал, что достаточно плохо, учитывая количество пользователей сетями. Поэтому были разработаны схемы мультиплексирования, которые позволяют многим сигналам совместно использовать одни линии.&lt;br /&gt;
&lt;br /&gt;
==Частотное уплотнение FDM==&lt;br /&gt;
Частотное уплотнение использует передачу в полосе пропускания, чтобы совместно использовать канал. Спектр делится на диапазоны частот, каждый пользователь получает владение некоторой полосой, в которой он может послать свой сигнал.&lt;br /&gt;
Наглядным примером частотного уплотнения служит AM-радиовещание. Его выделенный  спектр составляет приблизительно 1 МГц, примерно от 500 до 1500 кГц. Другие частоты выделены другим логическим каналам (станциям), каждая станция действует в части спектра, с межканальным разделением, достаточно большим, чтобы предотвратить помехи.&lt;br /&gt;
&lt;br /&gt;
На рисунке приведен пример объединения трех телефонных линий в одну. Можно заметить, что каждой линии выделяется полоса в 4000 Гц, хотя она занимает примерно 3100 Гц. Избыток в 900 Гц называется защитной полосой. Она сохраняет каналы хорошо отделенными друг от друга.&lt;br /&gt;
&lt;br /&gt;
[[Файл:FDM.jpg|Частотное уплотнение FDM]]&lt;br /&gt;
&lt;br /&gt;
==Мультиплексирование с ортогональным частотным разделением OFDM==&lt;br /&gt;
При отправке цифровых данных возможно эффективно разделить спектр, не используя защитные полосы. В OFDM полоса канала разделена на многие поднесущие, которые независимо передают данные (например, с квадратурной амплитудной модуляцией).&lt;br /&gt;
Поднесущие плотно упакованы вместе в частотной области, но из за того, что характеристика каждой поднесущей разработана так, чтобы в центре смежных поднесущих это был ноль, каждая из них может быть выбрана в своей центральной частоте без помех от соседних.&lt;br /&gt;
&lt;br /&gt;
[[Файл:OFDM.jpg|Мультиплексирование с ортогональным частотным разделением ОFDM]]&lt;br /&gt;
&lt;br /&gt;
==Мультиплексирование с разделением времени TDM==&lt;br /&gt;
Альтернатива частотному уплотнению FDM - временнОе уплотнение TDM.&lt;br /&gt;
В этом методе каждый пользователь получает в пользование всю полосу, но на небольшой отрезок времени. Чтобы все работало, потоки должны быть синхронизированы по времени. Чтобы компенсировать небольшие отклонения синхронизации, между блоками имеется небольшой промежуток времени, именуемый защитным интервалом.&lt;br /&gt;
&lt;br /&gt;
[[Файл:TDM.png|Мультиплексирование с разделением времени TDM]]&lt;br /&gt;
&lt;br /&gt;
==Мультиплексирование со статистическим временным разделением STDM==&lt;br /&gt;
Метод аналогичен предыдущему, только отдельные потоки поступают в мультиплексный поток не по фиксированному распорядку, а согласно статистике их запросов.&lt;br /&gt;
&lt;br /&gt;
==Кодовое разделение каналов CDM==&lt;br /&gt;
В кодовом разделении каналов, в отличии от FDM и TDM, для каждого узла выделяется весь спектр частот и всё время. CDM использует специальные коды для идентификации соединений. При таком способе разделения среды каналы трафика создаются посредством применения широкополосного кодо-модулированного радиосигнала — шумоподобного сигнала, передаваемого в общий для других аналогичных передатчиков канал в едином широком частотном диапазоне. Эфир в данном частотном диапазоне в результате работы нескольких передатчиков становится ещё более шумоподобным. Каждый передатчик модулирует сигнал с применением присвоенного в данный момент каждому пользователю отдельного числового кода, а приёмник, настроенный на аналогичный код, может вычленять из общей кучи радиосигналов ту часть сигнала, которая предназначена данному приёмнику.&lt;br /&gt;
&lt;br /&gt;
[[Файл:CDM.png|Кодовое разделение каналов CDM]]&lt;/div&gt;</summary>
		<author><name>Adel</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B8%D0%B7%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D1%83%D1%80%D0%BE%D0%B2%D0%B5%D0%BD%D1%8C_-_%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D0%B8&amp;diff=58171</id>
		<title>Физический уровень - Модуляции</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B8%D0%B7%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D1%83%D1%80%D0%BE%D0%B2%D0%B5%D0%BD%D1%8C_-_%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D0%B8&amp;diff=58171"/>
				<updated>2016-12-21T19:45:55Z</updated>
		
		<summary type="html">&lt;p&gt;Adel: Мультиплексирование&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Введение=&lt;br /&gt;
Для начала разберемся, зачем вообще нужна модуляция и что она из себя представляет.&lt;br /&gt;
&lt;br /&gt;
==Зачем нужна модуляция?==&lt;br /&gt;
[[Файл:Modulation.gif|right|Модуляция]]В рамках одного устройства для передачи информации используются низкочастотные колебания, передача которых на расстояние свыше нескольких метров крайне затруднительна, в силу их быстрого ослабевания. Но нам все равно хочется передавать сигналы на большие расстояния, вот тут на помощь приходит модуляция.&lt;br /&gt;
&lt;br /&gt;
==В чем суть модуляции?==&lt;br /&gt;
Возьмем высокочастотное колебание. Само по себе оно не несет никакой информации. Его мы будем использовать в качестве основного компонента передаваемого сигнала. Частоту этого колебания называют несущей.&lt;br /&gt;
Для того, чтобы начать передавать полезную информацию, нам нужно каким-нибудь образом видоизменить несущую частоту так, чтобы она повторяла закономерности сигнала, который мы хотим передать. Иными словами, нам нужно сделать так, чтобы она несла информацию о нашем полезном сигнале.&lt;br /&gt;
Это самое видоизменение называется модуляцией.&lt;br /&gt;
Модуляция осуществляется с помощью модулятора со стороны отправителя, а с помощью демодулятора на стороне получателя высокочастотный сигнал преобразуется обратно в низкочастотный. Они собраны в одно устройство под названием модем, которое получилось благодаря слиянию слов МОдулятор и ДЕМодулятор.&lt;br /&gt;
Есть разные принципы модуляции, некоторые из которых рассмотрим ниже.&lt;br /&gt;
Самым древним методом модуляции можно назвать прерывание несущей частоты, которое использовалось в телеграфах. Этот метод, конечно, нельзя назвать в полной мере модуляцией, но тем не менее о нем нельзя не упомянуть в данной теме.&lt;br /&gt;
&lt;br /&gt;
=Виды модуляции=&lt;br /&gt;
Теперь рассмотрим более формальные определения.&lt;br /&gt;
{{Определение|definition =&lt;br /&gt;
'''Модуляцией''' называется процесс изменения одного или нескольких параметров высокочастотного несущего колебания по закону низкочастотного информационного сигнала.&lt;br /&gt;
}}{{Определение|definition =&lt;br /&gt;
'''Модулирующий сигнал''' - сигнал, хранящий передаваемую информацию.&lt;br /&gt;
}}{{Определение|definition =&lt;br /&gt;
'''Несущий сигнал''' - сигнал, выполняющий роль переносчика информации.&lt;br /&gt;
}}{{Определение|definition =&lt;br /&gt;
'''Модулированный сигнал''' - сигнал, получающийся после посадки модулирующего сигнала на несущий сигнал.&lt;br /&gt;
}}&lt;br /&gt;
[[Файл:Sygnal_types.png|Модулирующий, несущий и модулированный сигналы]]&lt;br /&gt;
&lt;br /&gt;
[[Файл:Modulation_types.png|right|Типы модуляции в зависимости от несущего сигнала]]В зависимости от типа несущего сигнала используются разные виды модуляции. Ниже представлена таблица соответствия типа сигнала виду модуляции.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
|+ Несущий сигнал&lt;br /&gt;
|-&lt;br /&gt;
! Фиксированный уровень !! Гармонический сигнал !! Импульсы&lt;br /&gt;
|-&lt;br /&gt;
| Прямая модуляция || Аналоговая модуляция || Импульсная модуляция&lt;br /&gt;
|-&lt;br /&gt;
| || Цифровая модуляция ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
==Прямая модуляция==&lt;br /&gt;
[[Файл:Modulation_1.png|right|Прямая модуляция для последовательности 1010]]Это самый простой вид модуляции, при котором передача того или иного сигнала происходит путем изменения напряжения.&lt;br /&gt;
Зададим нормальное напряжение &amp;lt;math&amp;gt;U_H&amp;lt;/math&amp;gt;, тогда при уменьшении нормального уровня напряжения на &amp;lt;math&amp;gt;\Delta U_M&amp;lt;/math&amp;gt; передается двоичный 0, а при увеличении на ту же величину двоичная 1.&lt;br /&gt;
&amp;lt;br /&amp;gt;Для кодирования нескольких одинаковых значений подряд зададим промежуток времени &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;, в течение которого передается одна цифра.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
==Аналоговая модуляция==&lt;br /&gt;
[[Файл:Analog_modulation.png|right|Виды аналоговой модуляции]]Носителем этого типа модуляции является колебание.&lt;br /&gt;
В зависимости от того, какой параметр несущего колебания изменяется, различают 3 основных вида аналоговой модуляций:&lt;br /&gt;
* Амплитудная&lt;br /&gt;
* Фазовая&lt;br /&gt;
* Частотная&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
|+ Аналоговая модуляция&lt;br /&gt;
|-&lt;br /&gt;
! Амплитудная !! Фазовая !! Частотная&lt;br /&gt;
|-&lt;br /&gt;
| Меняется амплитуда импульсов&lt;br /&gt;
| Меняется фаза колебания&lt;br /&gt;
| Меняется частота импульсов&lt;br /&gt;
|-&lt;br /&gt;
| С увеличением амплитуды модулирующего сигнала увеличивается амплитуда несущего сигнала&lt;br /&gt;
| С увеличением амплитуды модулирующего сигнала увеличивается сдвиг относительно такта времени&lt;br /&gt;
| С увеличением амплитуды модулирующего сигнала изменяется фаза несущего колебания&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
==Цифровая модуляция (манипуляция)==&lt;br /&gt;
Тот самый вид модуляции, который используется для передачи данных в компьютерных сетях.&lt;br /&gt;
{{Определение|definition =&lt;br /&gt;
'''Цифровой модуляцией''' называется процесс преобразования битов в соответствующие аналоговые сигналы.&lt;br /&gt;
}}&lt;br /&gt;
Цифровую модуляцию принято называть манипуляцией, поэтому часто может встречаться именно этот термин.&amp;lt;br /&amp;gt;&lt;br /&gt;
Носителем так же, как и в случае аналоговой модуляции является колебание.&lt;br /&gt;
===Основные методы цифровой модуляции===&lt;br /&gt;
[[Файл:Digital_modulation.png|right|Виды цифровой модуляции]]Так же, как и в других видах модуляции, цифровая делится на разные методы преобразования, в зависимости от того, какой параметр несущего колебания изменяется:&lt;br /&gt;
* Амплитудная&lt;br /&gt;
* Частотная&lt;br /&gt;
* Фазовая&lt;br /&gt;
* Квадратурная амплитудная (амплитудно-фазовая)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
|+ Цифровая модуляция&lt;br /&gt;
|-&lt;br /&gt;
! Амплитудная (ASK - Amplitude Shift Keying) !! Частотная (FSK - Frequency Shift Keying) !! Фазовая (PSK - Phase Shift Keying) !! Квадратурная амплитудная (QAM - Quadrature Amplitude Modulation)&lt;br /&gt;
|-&lt;br /&gt;
| Меняется амплитуда импульсов&lt;br /&gt;
| Меняется частота импульсов&lt;br /&gt;
| Меняется фаза колебания&lt;br /&gt;
| Меняется одновременно и амплитуда, и фаза&lt;br /&gt;
|-&lt;br /&gt;
| Для передачи 1 используется большая амплитуда, для передачи 0 - малая, иногда нулю соответствует отсутствие колебания.&lt;br /&gt;
| Для передачи 1 используется высокая частота колебаний, для передачи 0 - низкая.&lt;br /&gt;
| Для передачи 1 используется сдвиг фазы на &amp;lt;math&amp;gt;\pi /2&amp;lt;/math&amp;gt;.&lt;br /&gt;
| Для передачи 1 используется большая амплитуда и сдвиг фазы на &amp;lt;math&amp;gt;\pi /2&amp;lt;/math&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Многопозиционные методы===&lt;br /&gt;
Для разных видов манипуляции существуют методы, позволяющие передавать не только 0 и 1 в рамках одного сигнала, такие методы получили название многопозиционные.&lt;br /&gt;
Суть этих методов в том, что один элемент линейного сигнала несет информацию о большем числе битов, чем в обычных двухпозиционных методах.&lt;br /&gt;
Работает это очень просто. Например, в многопозиционной амплитудной манипуляции зададим не 2 амплитуды, которые будут кодировать 0 или 1, а 4, которые будут соответствовать 00, 01, 10, 11 по мере увеличения амплитуды. Для многопозиционной частотной манипуляции используется больше частот, а для многопозиционной фазовой манипуляции, соответственно, больше сдвигов.&lt;br /&gt;
Да, это действительно позволяет повысить удельную скорость передачи информации, но при этом начинают возникать ошибки, связанные с погрешностью передачи.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим самые распространенные методы:&lt;br /&gt;
&lt;br /&gt;
====BPSK, QPSK, 8-PSK====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
|+ Фазовые манипуляции&lt;br /&gt;
|-&lt;br /&gt;
! BPSK !! QPSK !! 8-PSK&lt;br /&gt;
|-&lt;br /&gt;
| Binary Phase Shift Keying является обычной бинарной фазовой манипуляцией, которую мы рассматривали выше в рамках основных методов, позволяет закодировать 1 бит информации за сигнал. Не является многопозиционным методом.&lt;br /&gt;
| Quadrature Phase Shift Keying переводится как квадратурная фазовая манипуляция и представляет собой разделение на 4 фазы, которые позволяют закодировать 2 бита за сигнал.&lt;br /&gt;
| 8 Phase Shift Keying представляет собой разделение на 8 фаз, которые позволяют закодировать 3 бита за сигнал.&lt;br /&gt;
|}&lt;br /&gt;
[[Файл:BPSK.png|Бинарная фазовая манипуляция BPSK]]&lt;br /&gt;
[[Файл:QPSK.png|Квадратурная фазовая манипуляция QPSK]]&lt;br /&gt;
[[Файл:8PSK.png|8 фазовая манипуляция 8-PSK]]&lt;br /&gt;
&lt;br /&gt;
====QAM-16, QAM-64====&lt;br /&gt;
С простой квадратурной амплитудной манипуляцией мы уже знакомы, теперь посмотрим на 2 многопозиционные вариации. Напомню, что это комбинация амплитудной и фазовой манипуляций.&lt;br /&gt;
QAM-16 использует 16 комбинаций амплитудных и фазовых сдвигов, которые позволяют передавать 4 бита информации за 1 сигнал, а с помощью QAM-64, который использует 64 комбинации, можно передать целых 6 бит за сигнал.&lt;br /&gt;
Каждая комбинация задается углом, который соответствует фазе и расстоянием от начала координат, которое показывает величину амплитуды.&lt;br /&gt;
Ниже показана симуляция принципа работы квадратурной амплитудной манипуляции на примере QAM-16 и расположение точек для QAM-16 и QAM-64 соответственно.&lt;br /&gt;
[[Файл:QAM16.gif|Симуляция квадратурной амплитудной манипуляции QAM-16]][[Файл:QAM.png|Расположение точек QAM-16 и QAM-64 соответственно]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
==Импульсная модуляция==&lt;br /&gt;
[[Файл:Impuls_modulation.gif|right|Виды импульсной модуляции]]При импульсной модуляции носителем сигнала являются импульсы.&lt;br /&gt;
Импульсная модуляция делится на 4 основных вида:&lt;br /&gt;
* Амплитудно-импульсная&lt;br /&gt;
* Широтно-импульсная&lt;br /&gt;
* Частотно-импульсная&lt;br /&gt;
* Фазово-импульсная&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
|+ Импульсная модуляция&lt;br /&gt;
|-&lt;br /&gt;
! Амплитудо-импульсная !! Широтно-импульсная !! Частотно-импульсная !! Фазово-импульсная&lt;br /&gt;
|-&lt;br /&gt;
| Меняется амплитуда импульсов&lt;br /&gt;
| Меняется длительность (ширина) импульсов&lt;br /&gt;
| Меняется частота импульсов&lt;br /&gt;
| Меняется сдвиг импульсов относительно тактовых моментов времени&lt;br /&gt;
|-&lt;br /&gt;
| С увеличением напряжения модулирующего сигнала увеличивается амплитуда несущего сигнала&lt;br /&gt;
| С увеличением напряжения модулирующего сигнала увеличивается длительность импульсов&lt;br /&gt;
| С увеличением напряжения модулирующего сигнала увеличивается частота импульсов&lt;br /&gt;
| С увеличением напряжения модулирующего сигнала увеличивается сдвиг относительно такта времени&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Мультиплексирование=&lt;br /&gt;
Сами по себе, схемы модуляции позволяют посылать только один сигнал, что достаточно плохо, учитывая количество пользователей сетями. Поэтому были разработаны схемы мультиплексирования, которые позволяют многим сигналам совместно использовать одни линии.&lt;br /&gt;
&lt;br /&gt;
==Частотное уплотнение FDM==&lt;br /&gt;
Частотное уплотнение использует передачу в полосе пропускания, чтобы совместно использовать канал. Спектр делится на диапазоны частот, каждый пользователь получает владение некоторой полосой, в которой он может послать свой сигнал.&lt;br /&gt;
Наглядным примером частотного уплотнения служит AM-радиовещание. Его выделенный  спектр составляет приблизительно 1 МГц, примерно от 500 до 1500 кГц. Другие частоты выделены другим логическим каналам (станциям), каждая станция действует в части спектра, с межканальным разделением, достаточно большим, чтобы предотвратить помехи.&lt;br /&gt;
&lt;br /&gt;
На рисунке приведен пример объединения трех телефонных линий в одну. Можно заметить, что каждой линии выделяется полоса в 4000 Гц, хотя она занимает примерно 3100 Гц. Избыток в 900 Гц называется защитной полосой. Она сохраняет каналы хорошо отделенными друг от друга.&lt;br /&gt;
&lt;br /&gt;
[[Файл:FDM.jpg|Частотное уплотнение FDM]]&lt;br /&gt;
&lt;br /&gt;
==Мультиплексирование с ортогональным частотным разделением OFDM==&lt;br /&gt;
При отправке цифровых данных возможно эффективно разделить спектр, не используя защитные полосы. В OFDM полоса канала разделена на многие поднесущие, которые независимо передают данные (например, с квадратурной амплитудной модуляцией).&lt;br /&gt;
Поднесущие плотно упакованы вместе в частотной области, но из за того, что характеристика каждой поднесущей разработана так, чтобы в центре смежных поднесущих это был ноль, каждая из них может быть выбрана в своей центральной частоте без помех от соседних.&lt;br /&gt;
&lt;br /&gt;
[[Файл:OFDM.jpg|Мультиплексирование с ортогональным частотным разделением ОFDM]]&lt;br /&gt;
&lt;br /&gt;
==Мультиплексирование с разделением времени TDM==&lt;br /&gt;
Альтернатива частотному уплотнению FDM - временнОе уплотнение TDM.&lt;br /&gt;
В этом методе каждый пользователь получает в пользование всю полосу, но на небольшой отрезок времени. Чтобы все работало, потоки должны быть синхронизированы по времени. Чтобы компенсировать небольшие отклонения синхронизации, между блоками имеется небольшой промежуток времени, именуемый защитным интервалом.&lt;br /&gt;
&lt;br /&gt;
[[Файл:TDM.png|Мультиплексирование с разделением времени TDM]]&lt;br /&gt;
&lt;br /&gt;
==Мультиплексирование со статистическим временным разделением STDM==&lt;br /&gt;
Метод аналогичен предыдущему, только отдельные потоки поступают в мультиплексный поток не по фиксированному распорядку, а согласно статистике их запросов.&lt;br /&gt;
&lt;br /&gt;
==Кодовое разделение каналов CDM==&lt;br /&gt;
В кодовом разделении каналов, в отличии от FDM и TDM, для каждого узла выделяется весь спектр частот и всё время. CDM использует специальные коды для идентификации соединений. При таком способе разделения среды каналы трафика создаются посредством применения широкополосного кодо-модулированного радиосигнала — шумоподобного сигнала, передаваемого в общий для других аналогичных передатчиков канал в едином широком частотном диапазоне. Эфир в данном частотном диапазоне в результате работы нескольких передатчиков становится ещё более шумоподобным. Каждый передатчик модулирует сигнал с применением присвоенного в данный момент каждому пользователю отдельного числового кода, а приёмник, настроенный на аналогичный код, может вычленять из общей кучи радиосигналов ту часть сигнала, которая предназначена данному приёмнику.&lt;br /&gt;
&lt;br /&gt;
[[Файл:CDM.png|Кодовое разделение каналов CDM]]&lt;/div&gt;</summary>
		<author><name>Adel</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:CDM.png&amp;diff=58170</id>
		<title>Файл:CDM.png</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:CDM.png&amp;diff=58170"/>
				<updated>2016-12-21T19:41:40Z</updated>
		
		<summary type="html">&lt;p&gt;Adel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Adel</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:TDM.png&amp;diff=58169</id>
		<title>Файл:TDM.png</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:TDM.png&amp;diff=58169"/>
				<updated>2016-12-21T19:27:52Z</updated>
		
		<summary type="html">&lt;p&gt;Adel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Adel</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:OFDM.jpg&amp;diff=58168</id>
		<title>Файл:OFDM.jpg</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:OFDM.jpg&amp;diff=58168"/>
				<updated>2016-12-21T19:20:04Z</updated>
		
		<summary type="html">&lt;p&gt;Adel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Adel</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:FDM.jpg&amp;diff=58167</id>
		<title>Файл:FDM.jpg</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:FDM.jpg&amp;diff=58167"/>
				<updated>2016-12-21T19:04:14Z</updated>
		
		<summary type="html">&lt;p&gt;Adel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Adel</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:QAM.png&amp;diff=58166</id>
		<title>Файл:QAM.png</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:QAM.png&amp;diff=58166"/>
				<updated>2016-12-21T18:27:25Z</updated>
		
		<summary type="html">&lt;p&gt;Adel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Adel</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:BPSK.png&amp;diff=58165</id>
		<title>Файл:BPSK.png</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:BPSK.png&amp;diff=58165"/>
				<updated>2016-12-21T18:08:49Z</updated>
		
		<summary type="html">&lt;p&gt;Adel: загружена новая версия «Файл:BPSK.png»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Adel</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:QPSK.png&amp;diff=58164</id>
		<title>Файл:QPSK.png</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:QPSK.png&amp;diff=58164"/>
				<updated>2016-12-21T18:07:21Z</updated>
		
		<summary type="html">&lt;p&gt;Adel: загружена новая версия «Файл:QPSK.png»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Adel</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:8PSK.png&amp;diff=58163</id>
		<title>Файл:8PSK.png</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:8PSK.png&amp;diff=58163"/>
				<updated>2016-12-21T18:06:18Z</updated>
		
		<summary type="html">&lt;p&gt;Adel: загружена новая версия «Файл:8PSK.png»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Adel</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:8PSK.png&amp;diff=58162</id>
		<title>Файл:8PSK.png</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:8PSK.png&amp;diff=58162"/>
				<updated>2016-12-21T17:59:46Z</updated>
		
		<summary type="html">&lt;p&gt;Adel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Adel</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:QPSK.png&amp;diff=58161</id>
		<title>Файл:QPSK.png</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:QPSK.png&amp;diff=58161"/>
				<updated>2016-12-21T17:57:49Z</updated>
		
		<summary type="html">&lt;p&gt;Adel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Adel</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:BPSK.png&amp;diff=58160</id>
		<title>Файл:BPSK.png</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:BPSK.png&amp;diff=58160"/>
				<updated>2016-12-21T17:56:23Z</updated>
		
		<summary type="html">&lt;p&gt;Adel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Adel</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:QAM16.gif&amp;diff=58159</id>
		<title>Файл:QAM16.gif</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:QAM16.gif&amp;diff=58159"/>
				<updated>2016-12-21T17:42:36Z</updated>
		
		<summary type="html">&lt;p&gt;Adel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Adel</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Modulation.gif&amp;diff=58158</id>
		<title>Файл:Modulation.gif</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Modulation.gif&amp;diff=58158"/>
				<updated>2016-12-21T17:02:52Z</updated>
		
		<summary type="html">&lt;p&gt;Adel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Adel</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Digital_modulation.png&amp;diff=58157</id>
		<title>Файл:Digital modulation.png</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Digital_modulation.png&amp;diff=58157"/>
				<updated>2016-12-21T13:10:36Z</updated>
		
		<summary type="html">&lt;p&gt;Adel: загружена новая версия «Файл:Digital modulation.png»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Adel</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Digital_modulation.png&amp;diff=58156</id>
		<title>Файл:Digital modulation.png</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Digital_modulation.png&amp;diff=58156"/>
				<updated>2016-12-21T12:44:20Z</updated>
		
		<summary type="html">&lt;p&gt;Adel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Adel</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B8%D0%B7%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D1%83%D1%80%D0%BE%D0%B2%D0%B5%D0%BD%D1%8C_-_%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D0%B8&amp;diff=58152</id>
		<title>Физический уровень - Модуляции</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B8%D0%B7%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D1%83%D1%80%D0%BE%D0%B2%D0%B5%D0%BD%D1%8C_-_%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D0%B8&amp;diff=58152"/>
				<updated>2016-12-20T23:29:28Z</updated>
		
		<summary type="html">&lt;p&gt;Adel: Виды модуляции&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Введение==&lt;br /&gt;
Для начала разберемся, зачем вообще нужна модуляция и что она из себя представляет.&lt;br /&gt;
&lt;br /&gt;
===Зачем нужна модуляция?===&lt;br /&gt;
В рамках одного устройства для передачи информации используются низкочастотные колебания, передача которых на расстояние свыше нескольких метров крайне затруднительна, в силу их быстрого ослабевания. Но нам все равно хочется передавать сигналы на большие расстояния, вот тут на помощь приходит модуляция.&lt;br /&gt;
&lt;br /&gt;
===В чем суть модуляции?===&lt;br /&gt;
Возьмем высокочастотное колебание. Само по себе оно не несет никакой информации. Его мы будем использовать в качестве основного компонента передаваемого сигнала. Частоту этого колебания называют несущей.&lt;br /&gt;
Для того, чтобы начать передавать полезную информацию, нам нужно каким-нибудь образом видоизменить несущую частоту так, чтобы она повторяла закономерности сигнала, который мы хотим передать. Иными словами, нам нужно сделать так, чтобы она несла информацию о нашем полезном сигнале.&lt;br /&gt;
Это самое видоизменение называется модуляцией.&lt;br /&gt;
Модуляция осуществляется с помощью модулятора со стороны отправителя, а с помощью демодулятора на стороне получателя высокочастотный сигнал преобразуется обратно в низкочастотный. Они собраны в одно устройство под названием модем, которое получилось благодаря слиянию слов МОдулятор и ДЕМодулятор.&lt;br /&gt;
Есть разные принципы модуляции, некоторые из которых рассмотрим ниже.&lt;br /&gt;
Самым древним методом модуляции можно назвать прерывание несущей частоты, которое использовалось в телеграфах. Этот метод, конечно, нельзя назвать в полной мере модуляцией, но тем не менее о нем нельзя не упомянуть в данной теме.&lt;br /&gt;
&lt;br /&gt;
==Виды модуляции==&lt;br /&gt;
Теперь рассмотрим более формальные определения.&lt;br /&gt;
{{Определение|definition =&lt;br /&gt;
'''Модуляцией''' называется процесс изменения одного или нескольких параметров высокочастотного несущего колебания по закону низкочастотного информационного сигнала.&lt;br /&gt;
}}{{Определение|definition =&lt;br /&gt;
'''Модулирующий сигнал''' - сигнал, хранящий передаваемую информацию.&lt;br /&gt;
}}{{Определение|definition =&lt;br /&gt;
'''Несущий сигнал''' - сигнал, выполняющий роль переносчика информации.&lt;br /&gt;
}}{{Определение|definition =&lt;br /&gt;
'''Модулированный сигнал''' - сигнал, получающийся после посадки модулирующего сигнала на несущий сигнал.&lt;br /&gt;
}}&lt;br /&gt;
[[Файл:Sygnal_types.png|Модулирующий, несущий и модулированный сигналы]]&lt;br /&gt;
&lt;br /&gt;
[[Файл:Modulation_types.png|right|Типы модуляции в зависимости от несущего сигнала]]В зависимости от типа несущего сигнала используются разные виды модуляции. Ниже представлена таблица соответствия типа сигнала виду модуляции.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
|+ Несущий сигнал&lt;br /&gt;
|-&lt;br /&gt;
! Фиксированный уровень !! Гармонический сигнал !! Импульсы&lt;br /&gt;
|-&lt;br /&gt;
| Прямая модуляция || Аналоговая модуляция || Импульсная модуляция&lt;br /&gt;
|-&lt;br /&gt;
| || Цифровая модуляция ||&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
===Прямая модуляция===&lt;br /&gt;
[[Файл:Modulation_1.png|right|Прямая модуляция для последовательности 1010]]Это самый простой вид модуляции, при котором передача того или иного сигнала происходит путем изменения напряжения.&lt;br /&gt;
Зададим нормальное напряжение &amp;lt;math&amp;gt;U_H&amp;lt;/math&amp;gt;, тогда при уменьшении нормального уровня напряжения на &amp;lt;math&amp;gt;\Delta U_M&amp;lt;/math&amp;gt; передается двоичный 0, а при увеличении на ту же величину двоичная 1.&lt;br /&gt;
&amp;lt;br /&amp;gt;Для кодирования нескольких одинаковых значений подряд зададим промежуток времени &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;, в течение которого передается одна цифра.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
===Аналоговая модуляция===&lt;br /&gt;
[[Файл:Analog_modulation.png|right|Виды аналоговой модуляции]]Носителем этого типа модуляции является колебание.&lt;br /&gt;
В зависимости от того, какой параметр несущего колебания изменяется, различают 3 основных вида аналоговой модуляций:&lt;br /&gt;
* Амплитудная&lt;br /&gt;
* Фазовая&lt;br /&gt;
* Частотная&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
|+ Аналоговая модуляция&lt;br /&gt;
|-&lt;br /&gt;
! Амплитудная !! Фазовая !! Частотная&lt;br /&gt;
|-&lt;br /&gt;
| Меняется амплитуда импульсов&lt;br /&gt;
| Меняется фаза колебания&lt;br /&gt;
| Меняется частота импульсов&lt;br /&gt;
|-&lt;br /&gt;
| С увеличением напряжения модулирующего сигнала увеличивается амплитуда несущего сигнала&lt;br /&gt;
| С увеличением напряжения модулирующего сигнала увеличивается сдвиг относительно такта времени&lt;br /&gt;
| С увеличением напряжения модулирующего сигнала изменяется фаза несущего колебания&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
===Цифровая модуляция (манипуляция)===&lt;br /&gt;
Тот самый тип модуляции, который используется для передачи данных в компьютерных сетях.&lt;br /&gt;
{{Определение|definition =&lt;br /&gt;
'''Цифровой модуляцией''' называется процесс преобразования битов в соответствующие аналоговые сигналы.&lt;br /&gt;
}}&lt;br /&gt;
Носителем так же, как и в случае аналоговой модуляции является колебание, но состояний у него всего два, поскольку передача идет только двух сигналов 0 и 1.&lt;br /&gt;
В зависимости от того, какой параметр несущего колебания изменяется, различают несколько видов цифровой модуляций:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
===Импульсная модуляция===&lt;br /&gt;
[[Файл:Impuls_modulation.gif|right|Виды импульсной модуляции]]При импульсной модуляции носителем сигнала являются импульсы.&lt;br /&gt;
Импульсная модуляция делится на 4 основных вида:&lt;br /&gt;
* Амплитудно-импульсная&lt;br /&gt;
* Широтно-импульсная&lt;br /&gt;
* Частотно-импульсная&lt;br /&gt;
* Фазово-импульсная&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
|+ Импульсная модуляция&lt;br /&gt;
|-&lt;br /&gt;
! Амплитудо-импульсная !! Широтно-импульсная !! Частотно-импульсная !! Фазово-импульсная&lt;br /&gt;
|-&lt;br /&gt;
| Меняется амплитуда импульсов&lt;br /&gt;
| Меняется длительность (ширина) импульсов&lt;br /&gt;
| Меняется частота импульсов&lt;br /&gt;
| Меняется сдвиг импульсов относительно тактовых моментов времени&lt;br /&gt;
|-&lt;br /&gt;
| С увеличением напряжения модулирующего сигнала увеличивается амплитуда несущего сигнала&lt;br /&gt;
| С увеличением напряжения модулирующего сигнала увеличивается длительность импульсов&lt;br /&gt;
| С увеличением напряжения модулирующего сигнала увеличивается частота импульсов&lt;br /&gt;
| С увеличением напряжения модулирующего сигнала увеличивается сдвиг относительно такта времени&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Adel</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Modulation_1.png&amp;diff=58126</id>
		<title>Файл:Modulation 1.png</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Modulation_1.png&amp;diff=58126"/>
				<updated>2016-12-20T18:54:38Z</updated>
		
		<summary type="html">&lt;p&gt;Adel: загружена новая версия «Файл:Modulation 1.png»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Adel</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Analog_modulation.png&amp;diff=58124</id>
		<title>Файл:Analog modulation.png</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Analog_modulation.png&amp;diff=58124"/>
				<updated>2016-12-20T18:48:37Z</updated>
		
		<summary type="html">&lt;p&gt;Adel: загружена новая версия «Файл:Analog modulation.png»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Adel</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Analog_modulation.png&amp;diff=58119</id>
		<title>Файл:Analog modulation.png</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Analog_modulation.png&amp;diff=58119"/>
				<updated>2016-12-20T18:24:20Z</updated>
		
		<summary type="html">&lt;p&gt;Adel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Adel</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Impuls_modulation.gif&amp;diff=58118</id>
		<title>Файл:Impuls modulation.gif</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Impuls_modulation.gif&amp;diff=58118"/>
				<updated>2016-12-20T17:55:23Z</updated>
		
		<summary type="html">&lt;p&gt;Adel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Adel</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B8%D0%B7%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D1%83%D1%80%D0%BE%D0%B2%D0%B5%D0%BD%D1%8C_-_%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D0%B8&amp;diff=57736</id>
		<title>Физический уровень - Модуляции</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B8%D0%B7%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D1%83%D1%80%D0%BE%D0%B2%D0%B5%D0%BD%D1%8C_-_%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D0%B8&amp;diff=57736"/>
				<updated>2016-12-12T18:53:31Z</updated>
		
		<summary type="html">&lt;p&gt;Adel: Виды модуляции&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Введение==&lt;br /&gt;
Для начала разберемся, зачем вообще нужна модуляция и что она из себя представляет.&lt;br /&gt;
&lt;br /&gt;
===Зачем нужна модуляция?===&lt;br /&gt;
В рамках одного устройства для передачи информации используются низкочастотные колебания, передача которых на расстояние свыше нескольких метров крайне затруднительна, в силу их быстрого ослабевания. Но нам все равно хочется передавать сигналы на большие расстояния, вот тут на помощь приходит модуляция.&lt;br /&gt;
&lt;br /&gt;
===В чем суть модуляции?===&lt;br /&gt;
Возьмем высокочастотное колебание. Само по себе оно не несет никакой информации. Его мы будем использовать в качестве основного компонента передаваемого сигнала. Частоту этого колебания называют несущей.&lt;br /&gt;
Для того, чтобы начать передавать полезную информацию, нам нужно каким-нибудь образом видоизменить несущую частоту так, чтобы она повторяла закономерности сигнала, который мы хотим передать. Иными словами, нам нужно сделать так, чтобы она несла информацию о нашем полезном сигнале.&lt;br /&gt;
Это самое видоизменение называется модуляцией.&lt;br /&gt;
Модуляция осуществляется с помощью модулятора со стороны отправителя, а с помощью демодулятора на стороне получателя высокочастотный сигнал преобразуется обратно в низкочастотный. Они собраны в одно устройство под названием модем, которое получилось благодаря слиянию слов МОдулятор и ДЕМодулятор.&lt;br /&gt;
Есть разные принципы модуляции, некоторые из которых рассмотрим ниже.&lt;br /&gt;
Самым древним методом модуляции можно назвать прерывание несущей частоты, которое использовалось в телеграфах. Этот метод, конечно, нельзя назвать в полной мере модуляцией, но тем не менее о нем нельзя не упомянуть в данной теме.&lt;br /&gt;
&lt;br /&gt;
==Виды модуляции==&lt;br /&gt;
Теперь рассмотрим более формальные определения.&lt;br /&gt;
{{Определение|definition =&lt;br /&gt;
'''Модуляцией''' называется процесс изменения одного или нескольких параметров высокочастотного несущего колебания по закону низкочастотного информационного сигнала.&lt;br /&gt;
}}{{Определение|definition =&lt;br /&gt;
'''Модулирующий сигнал''' - сигнал, хранящий передаваемую информацию.&lt;br /&gt;
}}{{Определение|definition =&lt;br /&gt;
'''Несущий сигнал''' - сигнал, выполняющий роль переносчика информации.&lt;br /&gt;
}}{{Определение|definition =&lt;br /&gt;
'''Модулированный сигнал''' - сигнал, получающийся после посадки модулирующего сигнала на несущий сигнал.&lt;br /&gt;
}}&lt;br /&gt;
[[Файл:Sygnal_types.png|Модулирующий, несущий и модулированный сигналы]]&lt;br /&gt;
&lt;br /&gt;
[[Файл:Modulation_types.png|right|Типы модуляции в зависимости от несущего сигнала]]В зависимости от типа несущего сигнала используются разные виды модуляции. Ниже представлена таблица соответствия типа сигнала типу модуляции.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
|+ Несущий сигнал&lt;br /&gt;
|-&lt;br /&gt;
! Фиксированный уровень !! Гармонический сигнал !! Импульсы&lt;br /&gt;
|-&lt;br /&gt;
| Прямая модуляция || Аналоговая модуляция || Импульсная модуляция&lt;br /&gt;
|-&lt;br /&gt;
| || Цифровая модуляция ||&lt;br /&gt;
|}&lt;br /&gt;
===Прямая модуляция===&lt;br /&gt;
[[Файл:Modulation_1.png|right|Прямая модуляция для последовательности 1010]]Это самый простой вид модуляции, при котором передача того или иного сигнала происходит путем изменения напряжения.&lt;br /&gt;
Зададим нормальное напряжение Un&lt;/div&gt;</summary>
		<author><name>Adel</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Modulation_1.png&amp;diff=57704</id>
		<title>Файл:Modulation 1.png</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Modulation_1.png&amp;diff=57704"/>
				<updated>2016-12-12T17:11:43Z</updated>
		
		<summary type="html">&lt;p&gt;Adel: загружена новая версия «Файл:Modulation 1.png»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Adel</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Modulation_1.png&amp;diff=57702</id>
		<title>Файл:Modulation 1.png</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Modulation_1.png&amp;diff=57702"/>
				<updated>2016-12-12T17:07:32Z</updated>
		
		<summary type="html">&lt;p&gt;Adel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Adel</name></author>	</entry>

	</feed>