Рекуррентные нейронные сети - Часть 5

Генерация последовательности

Навигация

Это конспекты лекции FAU Глубокое обучение на YouTube. Это полный текст лекции и соответствующие слайды. Надеемся, вам понравится это не меньше, чем видео. Конечно, эта стенограмма была создана с помощью методов глубокого обучения в значительной степени автоматически, и были внесены лишь незначительные изменения вручную. "Попробуй сам!" Если вы заметили ошибки, сообщите нам об этом!

RNN Народная музыка

Предыдущая лекция / Посмотрите это видео / Верхний уровень / Следующая лекция

Добро пожаловать в заключительную часть нашей серии видео о повторяющихся нейронных сетях! Сегодня мы хотим немного поговорить о выборке рекуррентных нейронных сетей. Когда я имею в виду выборку, я имею в виду, что мы хотим использовать рекуррентные нейронные сети для фактического создания последовательностей символов. Итак, как мы можем это сделать?

Что ж, если правильно тренировать нейронные сети. Фактически вы можете создать их таким образом, чтобы они предсказывали распределение вероятностей следующего элемента. Итак, если я научу их предсказывать следующий символ в последовательности, вы также можете использовать их для генерации последовательностей. Идея здесь в том, что вы начинаете с пустого символа, а затем используете RNN для генерации некоторого вывода. Затем вы берете этот вывод и помещаете его во вход следующего состояния. Если вы пойдете дальше и сделаете это, то увидите, что на самом деле вы можете генерировать целые последовательности из вашей обученной рекуррентной нейронной сети.

Итак, простая стратегия - выполнить жадный поиск. Итак, здесь мы начнем с пустого символа. Затем мы просто выбираем наиболее вероятный элемент в качестве входных данных для RNN в следующем состоянии и генерируем следующий, следующий и следующий, и это генерирует ровно одну последовательность выборок для каждого эксперимента. Итак, это был бы жадный поиск, и вы можете видеть, что мы получаем ровно одно предложение, построенное здесь. Предложение, которое мы здесь строим, звучит так: «Пойдем сквозь время». Что ж, недостаток, конечно, в том, что нет возможности прогнозирования. Итак, скажем, самое вероятное слово после «отпустили» - «давай». Таким образом, вы можете создавать циклы типа «давай, давай, давай» и так далее. Таким образом, вы не можете обнаружить, что «давай пройдем сквозь время» имеет более высокую общую вероятность. Таким образом, он имеет тенденцию повторять в речи последовательности часто встречающихся слов «и», «тот», «некоторые» и так далее.

Теперь мы заинтересованы в облегчении этой проблемы. Это можно сделать с помощью лучевого поиска. Теперь концепция поиска луча состоит в том, чтобы выбрать k наиболее вероятных элементов. k - это, по сути, ширина или размер луча. Итак, теперь вы выкатываете k возможных последовательностей. У вас есть префикс с этими k элементами, и вы выбираете k наиболее вероятных. Итак, в примере, который мы показываем здесь с правой стороны, мы начинаем с пустого слова. Затем мы берем два наиболее вероятных: «давайте» и «до конца». Затем мы генерируем «давайте» в качестве вывода, если мы выполняем «через». Если мы берем «давай», мы генерируем «вперед» и можем продолжить этот процесс с помощью нашего луча размером два. Мы можем сохранить две наиболее вероятные последовательности при поиске луча. Итак, теперь мы генерируем две последовательности за раз. Один из них - «давай пройдем через время», а другой - «давай пройдем время». Итак, вы видите, что мы можем использовать эту идею луча для генерации нескольких последовательностей. В конце концов, мы можем определить, какой из них нам больше всего нравится или какой из них дает наибольшую общую вероятность. Таким образом, мы можем сгенерировать несколько последовательностей за один раз, которые обычно также содержат более качественные последовательности, чем при жадном поиске. Я бы сказал, что это один из наиболее распространенных методов выборки из RNN.

Конечно, есть и другие вещи, например, случайная выборка. Здесь идея состоит в том, что вы выбираете следующий в соответствии с распределением вероятности выхода. Вы помните, мы кодировали наше слово как векторы с горячим кодированием. Затем мы можем по существу интерпретировать выходные данные RNN как распределение вероятностей и выборку из него. Затем это позволяет нам генерировать множество различных последовательностей. Итак, предположим, что если выходная вероятность «let’s» равна 0,8, оно выбирается 8 из 10 раз в качестве следующего слова. Это дает очень разные результаты и может выглядеть слишком случайным. Итак, как вы видите, здесь мы получаем довольно разные результаты и последовательности, которые мы здесь генерируем. Есть некоторая случайность, которую вы также можете наблюдать в сгенерированных последовательностях. Чтобы уменьшить случайность, вы можете увеличить или уменьшить вероятность вероятных или менее вероятных слов. Это можно сделать, например, путем отбора проб температуры. Здесь вы видите, что мы ввели эту температуру 𝜏, которую затем используем для управления вероятностной выборкой. Это распространенный метод, который вы уже видели в различных случаях в этом классе.

Итак, давайте рассмотрим несколько примеров, и одна вещь, которая мне показалась очень интересной, - это символьное языковое моделирование с помощью RNN. У нас есть отличный пост в блоге Эндрю Капарти. Я также поместил это как ссылку на описание ниже. Там он по сути обучил RNN для генерации текста на основе Шекспира. Его тренируют на уровне персонажа. Итак, у вас есть только один символ в качестве входных данных, а затем вы генерируете последовательность. Он генерирует очень интересные последовательности. Итак, здесь вы можете увидеть типичные примеры, которые были созданы. Позвольте мне прочитать вам это:

«Пандарус
Увы, я думаю, что он придет и придет тот день,
Когда маленький разум будет доведен до того, что его никогда не накормят,
И кто всего лишь цепь и подданные его смерть,
я не должен спать ».

Кроме блога Карпати

и так далее. Итак, вы можете видеть, что это очень интересно, что тип языка, который создается, очень близок к Шекспиру, но если вы прочитаете эти примеры, вы увидите, что они, по сути, полная чушь. Тем не менее, интересно, что тон генерируемого языка все еще присутствует и очень типичен для Шекспира. Итак, это действительно интересно.

Конечно, вы можете создать много-много других вещей. Один из очень хороших примеров, который я хочу показать вам сегодня, - это создание народной музыки. Итак, музыкальная композиция обычно решается с помощью RNNS, и вы можете найти различные примеры в литературе, в том числе Юргена Шмидхубера. Идея здесь состоит в том, чтобы использовать более широкие сети для создания народной музыки. Итак, то, что они используют, - это RNN уровня персонажа с использованием формата ABC, включая создание заголовка. Итак, один из примеров, который у меня есть, - это небольшое музыкальное произведение. Да, как вы слышите, это действительно народная музыка. Итак, это генерируется полностью автоматически. Интересно, правда? Если вы прислушаетесь очень внимательно, то вы также можете услышать, что народная музыка может быть особенно подходящей для этого, потому что вы можете поспорить, что она немного повторяется. Тем не менее, здорово, что вся песня создается полностью автоматически. На самом деле встречаются люди, играющие компьютерные песни как эти люди на настоящих инструментах. Очень интересное наблюдение. Так что я также помещаю ссылку сюда для справки, если вам это интересно. Вы можете послушать еще много примеров на этом сайте.

Таким образом, существуют также RNN для непоследовательных задач. RNN также могут использоваться для стационарных входов, таких как генерация изображений. Затем идея состоит в том, чтобы смоделировать процесс от наброска до окончательного изображения. Здесь вы можете увидеть один пример, в котором мы начинаем рисовать числа от размытых до четких. В этом примере они используют дополнительный механизм внимания, сообщающий сети, где искать. Затем это создает нечто похожее на мазки кисти. На самом деле он использует вариационный автокодировщик, о котором мы поговорим, когда будем говорить о теме неконтролируемого глубокого обучения.

Итак, давайте подытожим это немного. Вы видели, что рекуррентные нейронные сети могут напрямую моделировать последовательные алгоритмы. Вы тренируетесь посредством усеченного обратного распространения ошибки во времени. Простые единицы чрезвычайно страдают от взрывающихся и исчезающих градиентов. Мы видели, что LSTM и GRU - это улучшенные RNN, которые явно моделируют эту операцию забывания и запоминания. О чем мы не говорили, так это о том, что существует еще очень много событий, о которых мы не можем рассказать в этой короткой лекции. Итак, было бы интересно поговорить также о сетях памяти, нейронных машинах Тьюринга и о том, что мы только коснулись в данный момент, - это внимание и рекуррентные нейронные сети. Еще немного о внимании поговорим в одном из следующих видео.

Итак, в следующий раз, когда мы поговорим о глубоком обучении, мы хотим поговорить о визуализации. В частности, мы хотим поговорить о визуализации архитектур в процессе обучения и, конечно же, о внутренней работе сети. Мы хотим выяснить, что на самом деле происходит внутри сети, и существует довольно много методов - и, честно говоря, мы уже видели некоторые из них ранее в этом классе. В этой лекции мы действительно хотим изучить эти методы и понять, как они на самом деле работают, чтобы выяснить, что происходит внутри глубоких нейронных сетей. Одно интересное наблюдение заключается в том, что это также связано с искусством нейронных сетей. Еще одна вещь, о которой следует подумать, - это механизмы внимания, и это также будет рассмотрено в одном из следующих видеороликов.

Итак, у меня есть несколько всеобъемлющих вопросов: В чем сила RNN по сравнению с сетями с прямой связью? Затем, конечно: Как вы тренируете RNN?, Какие проблемы?, Какова основная идея LSTM? Таким образом, вы должны быть в состоянии описать развертывание RNN во время тренировки. Вы должны быть в состоянии описать ячейку Эльмана, LSTM и ГРУ. Итак, это действительно важные вещи, которые вы должны знать, если вам нужно будет пройти некоторые тесты в очень близком будущем. Так что лучше будьте готовы к таким вопросам. Хорошо, у нас есть дальнейшее чтение ниже. Есть очень хороший пост в блоге Эндрю Капарти. Есть очень классная запись в блоге о CNN для машинного перевода, которую я действительно рекомендую прочитать, и классная запись в блоге для создания музыки, которую вы также можете найти ниже. Конечно, у нас также есть множество научных ссылок. Итак, я надеюсь, вам понравилось это видео, и до встречи в следующем. Пока-пока!

Если вам понравился этот пост, вы можете найти больше эссе здесь, больше образовательных материалов по машинному обучению здесь или взглянуть на нашу Лекцию Глубокое обучение. Я также был бы признателен за подписку на YouTube, Twitter, Facebook или LinkedIn, если вы хотите получать информацию о новых эссе, видео и исследованиях в будущем. Эта статья выпущена под лицензией Creative Commons 4.0 Attribution License и может быть перепечатана и изменена при наличии ссылки. Если вас интересует создание стенограмм видеолекций, попробуйте Автоблог.

Ссылки

FolkRNN.org
MachineFolkSession.com
Стеклянный комментарий Херри 14128

использованная литература

Символьные RNN
CNN для машинного перевода
Создание музыки с RNN

[1] Дмитрий Богданау, Кёнхён Чо и Йошуа Бенжио. «Нейронный машинный перевод путем совместного обучения согласованию и переводу». В: CoRR abs / 1409.0473 (2014). arXiv: 1409.0473.
[2] Йошуа Бенжио, Патрис Симард и Паоло Фраскони. «Изучить долгосрочные зависимости с помощью градиентного спуска сложно». В: Транзакции IEEE в нейронных сетях 5.2 (1994), стр. 157–166.
[3] Джунён Чунг, Чаглар Гульчере, Кён Хён Чо и др. «Эмпирическая оценка стробированных рекуррентных нейронных сетей при последовательном моделировании». В: препринт arXiv arXiv: 1412.3555 (2014).
[4] Дуглас Эк и Юрген Шмидхубер. «Изучение долгосрочной структуры блюза». В: Искусственные нейронные сети - ICANN 2002. Берлин, Гейдельберг: Springer Berlin Heidelberg, 2002, стр. 284–289.
[5] Джеффри Элман. «Нахождение структуры во времени». В: Когнитивная наука 14.2 (1990), стр. 179–211.
[6] Йонас Геринг, Майкл Аули, Дэвид Гранджер и др. «Сверточная последовательность для последовательного обучения». В: CoRR abs / 1705.03122 (2017). arXiv: 1705.03122.
[7] Алекс Грейвс, Грег Уэйн и Иво Данихелка. «Нейронные машины Тьюринга». В: CoRR abs / 1410.5401 (2014). arXiv: 1410.5401.
[8] Кароль Грегор, Иво Данихелка, Алекс Грейвс и др. «DRAW: рекуррентная нейронная сеть для создания изображений». В: Материалы 32-й Международной конференции по машинному обучению. Vol. 37. Труды исследований машинного обучения. Лилль, Франция: PMLR, июль 2015 г., стр. 1462–1471.
[9] Кюнхён Чо, Барт Ван Мерриенбоер, Каглар Гульчере и др. «Изучение представлений фраз с использованием кодировщика-декодера RNN для статистического машинного перевода». В: препринт arXiv arXiv: 1406.1078 (2014).
[10] Дж. Дж. Хопфилд. «Нейронные сети и физические системы с возникающими коллективными вычислительными способностями». В: Proceedings of the National Academy of Sciences 79.8 (1982), pp. 2554–2558. eprint: «http://www.pnas.org/content/79/8/2554.full.pdf.»
[11] W.A. Little. «Существование стойких состояний в головном мозге». В: Mathematical Biosciences 19.1 (1974), стр. 101–120.
[12] Зепп Хохрайтер и Юрген Шмидхубер. «Долговременная кратковременная память». В: Neural computing 9.8 (1997), pp. 1735–1780.
[13] Владимир Мних, Николас Хесс, Алекс Грейвс и др. «Рекуррентные модели визуального внимания». В: CoRR abs / 1406.6247 (2014). arXiv: 1406.6247.
[14] Боб Штурм, Жоао Фелипе Сантос и Ирина Коршунова. «Моделирование стиля народной музыки с помощью рекуррентных нейронных сетей с долгосрочными единицами кратковременной памяти». англ. В: 16-я конференция Международного общества по поиску информации о музыке, последний раз Малага, Испания, 2015 г., стр. 2.
[15] Сайнбаяр Сухбаатар, Артур Шлам, Джейсон Уэстон и др. «Сквозные сети памяти». В: CoRR abs / 1503.08895 (2015). arXiv: 1503.08895.
[16] Питер М. Тодд. «Коннекционистский подход к алгоритмической композиции». В: 13 (декабрь 1989 г.)
[17] Илья Суцкевер. «Обучение рекуррентных нейронных сетей». В: Университет Торонто, Торонто, Онтарио, Канада (2013).
[18] Андрей Карпати. «Необоснованная эффективность рекуррентных нейронных сетей». В: Блог Андрея Карпати (2015).
[19] Джейсон Уэстон, Сумит Чопра и Антуан Бордес. «Сети памяти». В: CoRR abs / 1410.3916 (2014). arXiv: 1410,3916.

Рекуррентные нейронные сети - Часть 5