Азбука ИИ: «Рекуррентные нейросети. Случайные дестабилизирующие воздействия

Нейронные сети. Типы НС. Обучение НС. Применение НС.

Лекция 8.

При идентификации X и Y представляют входные и выходные сигналы системы соответственно.

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

В результате отображения X → Y крайне важно обеспечить формирование правильных выходных сигналов в соответствии:

Со всœеми примерами обучающей выборки;

Со всœеми возможными входными сигналами, которые не вошли в обучающую выборку.

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

Рекуррентными нейронными сетями называются такие сети, в ко­торых выходы нейронных элементов последующих слоев имеют синаптические соединœения с нейронами предшествующих слоев. Это приво­дит к возможности учета результатов преобразования нейронной сетью информации на предыдущем этапе для обработки входного вектора на следующем этапе функционирования сети. Рекуррентные сети могут использоваться для решения задач прогнозирования и управления.

Архитектура рекуррентных сетей

Существуют различные варианты архитектур рекуррентных ней­ронных сетей.

Сеть Джордана: В 1986 ᴦ. Джордан (Jordan) предложил рекур­рентную сеть (рис.8.1), в которой выходы нейронных элементов по­следнего слоя соединœены посредством специальных входных нейронов с нейронами промежуточного слоя. Такие входные нейронные эле­менты называются контекстными нейронами (context units). Οʜᴎ рас­пределяют выходные данные нейронной сети на нейронные элементы промежуточного слоя.

Рис. 8.1 Архитектура рекуррентной ней­ронной сети с обратными связями от нейро­нов выходного слоя

Число контекстных нейронов равняется числу выходных ней­ронных элементов рекуррентной сети. В качестве выходного слоя та­ких сетей используются нейронные элементы с линœейной функцией активации. Тогда выходное значение j -го нейронного элемента последнего слоя определяется по формуле

(8.1)

где v ij - весовой коэффи­циент между i -м нейроном промежуточного и j -м ней­роном выходного слоев; P i (t )- выходное значение i -го нейрона промежуточ­ного слоя; t j - пороговое значение j -го нейрона вы­ходного слоя. Взвешенная сумма i -гo нейронного элемента промежуточного слоя определяется следующим образом:

(8.2)

где w ij – весовой коэффициент между j -м нейроном входного и i -м нейроном промежуточного слоев; р – число нейронов выходного слоя; w ki – весовой коэффициент между k -м контекстным нейроном и i -м нейроном промежуточного слоя; T – пороговое значение i -го нейрона промежуточного слоя; n – размерность входно­го вектора.

Тогда выходное значение i -го нейрона скрытого слоя:

(8.3)

В качестве функции не­линœейного преобразования F обычно используется гипер­болический тангенс или сигмоидная функция.

Для обучения рекуррентных нейронных сетей применяется алго­ритм обратного распространения ошибки (будет рассмотрен ниже).

Алгоритм обучения рекуррентной нейронной сети в общем слу­чае состоит из следующих шагов:

1. В начальный момент времени t = 1 всœе контекстные нейроны устанавливаются в нулевое состояние – выходные значения прирав­ниваются нулю.

2. Входной образ подается на сеть и происходит прямое распро­странение его в нейронной сети.

3. В соответствии с алгоритмом обратного распространения ошибки модифицируются весовые коэффициенты и пороговые значе­ния нейронных элементов.

4. Устанавливается t = t +1 и осуществляется переход к шагу 2. Обучение рекуррентной сети производится до тех пор, пока сум­марная среднеквадратичная ошибка сети не станет меньше заданной.

Приветствую! Частенько я публиковал статьи различного вида, в которых объяснял о сетях прямого распространения. В них я рассказывал о том, как нейронные сети обучаются, о том, как работают нейроны и о практическом применении сетей. Теперь я расскажу о сетях, которые подходят для чат-ботов, сложного прогнозирования, классификации текстов и многого другого.

Архитектура

Как нам известно, нейронные сети прямого распространения имеют входной слой, скрытые слои, выходной слой. Рекуррентные сети имеют почти такое же строение, только к ним добавляется слой временной задержки. Например, скрытый слой связан с временной задержкой. Мы посылаем сигналы от входного слоя на скрытый, скрытый слой посылает обработанную информацию на слой временной задержки и на выходной слой. В следующий раз, когда мы посылаем опять сигналы, информация идёт от входного слоя к скрытому, да и ещё от слоя задержки идут сигналы через такие же синапсы(веса). После этого скрытый слой обрабатывает информацию, так же посылает новые сигналы на слой временной задержки и на выходной слой. Рассмотрим это всё на рисунке:

Давайте опишем это математической формулой. Сначала мы посылаем информацию от входного слоя по весам к скрытому: h1 = (x1 * w1) + (x2 * w4); h2 = (x1 * w2) + (x2 * w3)
Теперь посылаем информацию от скрытых нейронов на слой временной задержки и на выход сети: c1 = h1, c2 = h2; выход1 = (h1 * w5) + (h2 * w6)

Всё, мы получили первый ответ. Теперь мы записали данные слой временной задержки и снова начинаем прогонять сигнал, только добавляем сигналы от временной задержки: h1 = (x1 * w1) + (x2 * w4) + (c1 * c_w1) + (c2 * c_w3); и на второй скрытый нейрон h2 = (x1 * w2) + (x2 * w3) + (c1 * c_w2) + (c2 * c_w4). Теперь мы снова отправляем полученные данные на слой задержки и на выход: c1 = h1, c2 = h2; выход1 = (h1 * w5) + (h2 * w6).

С первого взгляда не понятно, если не знать строение искусственных нейронов. Напомню, что нейрон имеет весовые коэффициенты, которые умножаются на получаемые данные, в результате мы получаем модифицированный ответ. Затем модифицированные ответы в нейроне складываются и идут в функцию активации. Функция активации делает из суммирования понятный для нас ответ. Мы можем использовать пороговую функцию или сигмоидальные(гиперболический тангенс и логистическая функция)

Пороговая функция. Когда мы имеем результат суммирования и какой-то порог, мы сравниваем их. Если суммарный результат больше порогового, то нейрон выдаст 1, а если нет, то 0.

Гиперболический тангенс преобразует суммарный результат в число от -1 до 1. Для этого используют формулу:
Экспонента — показательная функция.

Логистическая функция преобразует суммарный результат в число от 0 до 1. Для этого используют формулу:

В конечном итоге, получается, что рекуррентные нейронные сети способны на кратковременную память.

Обучение рекуррентных сетей

Для обучения таких сетей очень часто используют метод градиентного спуска. Можно было бы и обратное распространение ошибки, но о нём и так много написано.

Я не буду рассказывать об этом методе обучения подробно. Лишь скажу такой алгоритм:

1. Отправляем сигнал на нейронную сеть.
2. Вычисляем ошибку (Берём правильный ответ и вычитаем из него ответ нейронной сети)
3. Умножаем ошибку на уклон сигмоиды.
4. Умножаем входные данные на результат из 3 шага.
5. Складываем результаты из 4 пункта(вектора или матрицы)
6. Вычитаем из весов результаты 5 пункта.

Получить ошибку можно таким образом: из правильного ответа вычесть ответ сети.
Уклон сигмоиды получается таким образом: выход * (1 — выход)

Думаю, что всё хоть немного понятно. В следующей части я расскажу о том, как на практике применить такую сеть с градиентным спуском и о том, как работают LSTM сети.

(Recurrent Neural Networks, RNNs) - популярные модели, используемые в обработке естественного языка (NLP). Во-первых, они оценивают произвольные предложения на основе того, насколько часто они встречались в текстах. Это дает нам меру грамматической и семантической корректности. Такие модели используются в машинном переводе. Во-вторых, языковые модели генерируют новый текст. Обучение модели на поэмах Шекспира позволит генерировать новый текст, похожий на Шекспира.

Что такое рекуррентные нейронные сети?

Идея RNN заключается в последовательном использовании информации. В традиционных нейронных сетях подразумевается, что все входы и выходы независимы. Но для многих задач это не подходит. Если вы хотите предсказать следующее слово в предложении, лучше учитывать предшествующие ему слова. RNN называются рекуррентными, потому что они выполняют одну и ту же задачу для каждого элемента последовательности, причем выход зависит от предыдущих вычислений. Еще одна интерпретация RNN: это сети, у которых есть «память», которая учитывает предшествующую информацию. Теоретически RNN могут использовать информацию в произвольно длинных последовательностях, но на практике они ограничены лишь несколькими шагами (подробнее об этом позже).

На диаграмме выше показано, что RNN разворачивается в полную сеть. Разверткой мы просто выписываем сеть для полной последовательности. Например, если последовательность представляет собой предложение из 5 слов, развертка будет состоять из 5 слоев, по слою на каждое слово. Формулы, задающие вычисления в RNN следующие:

  • x_t - вход на временном шаге t. Например x_1 может быть вектором с одним горячим состоянием (one-hot vector), соответствующим второму слову предложения.
  • s_t - это скрытое состояние на шаге t. Это «память» сети. s_t зависит, как функция, от предыдущих состояний и текущего входа x_t: s_t=f(Ux_t+Ws_{t-1}). Функция f обычно нелинейная, например tanh или ReLU . s_{-1}, которое требуется для вычисление первого скрытого состояния, обычно инициализируется нулем (нулевым вектором).
  • o_t - выход на шаге t. Например, если мы хотим предсказать слово в предложении, выход может быть вектором вероятностей в нашем словаре. o_t = softmax(Vs_t)

Несколько заметок:

  • Можно интерпретировать s_t как память сети. s_t содержит информацию о том, что произошло на предыдущих шагах времени. Выход o_t вычисляется исключительно на основе «памяти» s_t. На практике все немного сложнее: s_t не может содержать информацию слишком большого количества предшествующих шагов;
  • В отличие от традиционной глубокой , которая использует разные параметры на каждом слое, RNN имеет одинаковые (U, V, W) на всех этапах. Это отражает тот факт, что мы выполняем одну и ту же задачу на каждом шаге, используя только разные входы. Это значительно уменьшает общее количество параметров, которые нам нужно подобрать;
  • Диаграмма выше имеет выходы на каждом шаге, но, в зависимости от задачи, они могут не понадобиться. Например при определении эмоциональной окраски предложения, целесообразно заботиться только о конечном результате, а не о окраске после каждого слова. Аналогично, нам может не потребоваться ввод данных на каждом шаге. Основной особенностью RNN является скрытое состояние, которое содержит некоторую информацию о последовательности.

Где используют рекуррентные нейросети?

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

Языковое моделирование и генерация текстов

Учитывая последовательность слов, мы хотим предсказать вероятность каждого слова (в словаре). Языковые модели позволяют нам измерить вероятность выбора, что является важным вкладом в машинный перевод (поскольку предложения с большой вероятностью правильны). Побочным эффектом такой способности является возможность генерировать новые тексты путем выбора из выходных вероятностей. Мы можем генерировать и другие вещи , в зависимости от того, что из себя представляют наши данные. В языковом моделировании наш вход обычно представляет последовательность слов (например, закодированных как вектор с одним горячим состоянием (one-hot)), а выход - последовательность предсказанных слов. При обучении , мы подаем на вход следующему слою предыдущий выход o_t=x_{t+1}, поскольку хотим, чтобы результат на шаге t был следующим словом.

Исследования по языковому моделированию и генерации текста:

Машинный перевод

Машинный перевод похож на языковое моделирование, поскольку вектор входных параметров представляет собой последовательность слов на исходном языке (например, на немецком). Мы хотим получить последовательность слов на целевом языке (например, на английском). Ключевое различие заключается в том, что мы получим эту последовательность только после того, как увидим все входные параметры, поскольку первое слово переводимого предложения может потребовать информации всей последовательности вводимых слов.

RNN для машинного перевода

Распознавание речи

По входной последовательности акустических сигналов от звуковой волны, мы можем предсказать последовательность фонетических сегментов вместе со своими вероятностями.

Генерация описания изображений

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

Глубокие визуально-семантические совмещения для генерации описания изображений.

авторитет 7 января 2016 в 15:24

Рекуррентная нейронная сеть решает задачу поддержания равновесия

  • Искусственный интеллект

Сразу постановка задачи.

Дано:
Примитивное виртуальное пространство для проведения эксперимента:
1. Аквариум высотой 1000 мм.
2. Дырявое дно аквариума. Уровень воды уменьшается на 1 мм за такт.
3. Стакан с водой, доливка которой в аквариум повышает уровень воды на 6 мм.

Также имеется заготовка нейронной сети, состоящая из:
1. 1000 рецепторов. По 1 рецептору на миллиметр.
2. 1 эффектор. Возбужденный в текущем такте, дает команду вылить стакан воды в аквариум.

Хотелось бы:
1. Добиться поддержания определенного нами уровня воды в аквариуме. Ну, или близко к нему. В текущем примере 500 мм.

Результат эксперимента:
На графике показан уровень воды с течением времени.

Укрупненный масштаб на старте эксперимента:

1. Стартуем со 100 мм уровня. Видно, что уровень воды неуклонно падает. Необученная заготовка нейросети просто не знает, что делать.
2. Достигнув нуля, т.е. иссушив аквариум, сеть запускает рефлекторную реакцию выливания порции воды.
3. Далее происходит рост уровня воды. Сеть получает поощрение, если уровень приблизился к требуемому. В противном случае - наказание.

Случайные дестабилизирующие воздействия:

4. Один раз в 1000 тактов происходит мощное дестабилизирующее воздействие на систему. Доливаем (выливаем) случайное количество воды.
5. Уровень воды в аквариуме стабилизируется.

Что происходит с сетью в процессе эксперимента:
1. Разрастается, создаются новые нейроны.
2. Синапсы обучаются.

Характеристики сети и ее структурных элементов:
1. Сеть - рекуррентная, возможны связи «на себя».
2. Синапсы, нейроны не удаляются.
3. Использовалось около 10000 нейронов и 500000 синапсов.
4. Сеть не использует математических функций над вещественным переменным. Из математики используется только суммирование целочисленных величин.

Что, собственно, предложено инновационного:
1. Способ обучения синапсов (остался за кадром, простите) .
2. Механизм добавления/удаления структурных элементов (за кадром) .
3. Ну и, в целом, не использующая математику, рекуррентная нейронная сеть.

Что еще необходимо реализовать:
1. Механизм уничтожения «бесполезных» синапсов и нейронов. В текущей реализации они вреда не приносят, но отнимают много времени на обсчет.
2. Визуализация нейросети была бы не лишней.
3. И все остальное… Пока не понятно, т.к. приходится быть последовательным.

Буду рад здоровой критике и вопросам!

Замечания:
1. Тема - хобби для меня.
2. Написано самостоятельно на C++.
3. ИИ будет чуть позже.

Спасибо!

Теги: нейронные сети, рекуррентная нейросеть, нейрон, синапс, пид-регулятор, искусственный интеллект