Генерация Классической Музыки С Использованием Рекуррентной Нейронной Сети

Сегодня обученные нейронные сети делают удивительные вещи, но эксперименты в этой области продолжают открывать что-то новое.

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

К сожалению, вы не можете встроить аудиофайл в GT, поэтому вам придется предоставить прямую ссылку для прослушивания одного из результатов: http://hexahedria.com/files/nnet_music_2.mp3 .

Как он это сделал? Дэниел Джонсон говорит, что сосредоточился на таком свойстве, как инвариантность.

Большинство существующих нейронных сетей для генерации музыки инвариантны ко времени, но не к нотам.

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

Здесь хотелось бы добиться гармонии созвучий.

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



Генерация классической музыки с использованием рекуррентной нейронной сети

Автор адаптировал сверточную модель, добавив рекуррентную нейронную сеть со своей памятью для каждого пикселя и заменив пиксели нотами.

Таким образом, он получил систему, инвариантную как во времени, так и в нотах.



Генерация классической музыки с использованием рекуррентной нейронной сети

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

Чтобы добиться сочетания нот, Джонсон использовал такую модель, как RNN-RBM, где одна часть нейронной сети отвечает за время, а другая часть — за согласные аккорды.

Чтобы обойти ограничения RBM, ему пришла в голову идея реализовать две оси: для времени и для заметок (и псевдоось для направления вычислений).



Генерация классической музыки с использованием рекуррентной нейронной сети

Использование библиотеки Теано автор сгенерировал нейронную сеть на основе своей модели.

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

Затем запускались самогенерирующиеся блоки на основе кратковременной долговременной памяти (LSTM): в одном рекуррентные связи направлены по оси времени, в другом — по оси ноты.

После финального блока LSTM существует простой неповторяющийся слой для получения окончательного результата, он имеет два выходных значения: вероятность воспроизведения конкретной ноты и вероятность артикуляции (то есть вероятность того, что нота будет объединена с другой).

При обучении использовался случайно выбранный набор коротких музыкальных фрагментов из MIDI-коллекции.

Миди-страница классического фортепиано .

Затем мы немного поигрались с логарифмами, чтобы параметр кросс-энтропии в выводе был хотя бы не слишком низким.

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

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

Обучение проводилось на виртуальной машине g2.2xlarge в облаке Amazon Web Services.



Полученные результаты

Исходный код программы опубликовано на Github .

Теги: #искусственный интеллект #нейронная сеть #Демосцена #теано #классическая музыка #миди

Вместе с данным постом часто просматривают: