python

Глубокая нейронная сеть MuseNet пишет музыку

  • четверг, 16 мая 2019 г. в 00:21:59
https://habr.com/ru/company/otus/blog/451912/
  • Python
  • Машинное обучение
  • Блог компании OTUS. Онлайн-образование


У нас 29 мая стартует курс «Нейронные сети на Python», который рассказывает о глубоком машинном обучении и учит решать самые сложные задачи, находящиеся в ведении инженера по глубокому обучению. Чтобы показать, насколько интересна и многогранна работа в сфере машинного обучения, предлагаем ознакомиться с серией переводов статей на тему нейронных сетей на Python.



Что такое MuseNet


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

В основу сети легко не наше восприятие и понимание музыки, а навык находить образцы гармонии, ритма и стиля в сотнях тысяч MIDI-файлов, а затем создавать собственные произведения. Нейросеть MuseNet использует ту же технологию, что и GPT-2 — масштабная модель обучена предсказывать наилучшие последовательности как в тексте, так и в аудио. Знание множества стилей позволяет сети создавать совершенно уникальные комбинации музыки разных поколений.

Композитор и инструментальные токены


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

Долгосрочная структура


MuseNet использует пересчитанные и оптимизированные ядра Sparse Transformer для обучения 72-уровневой сети. На наш взгляд, генерация музыки является очень удачной нишей для тестирования и развития возможностей Sparse Transformer.

Сбор и обработка данных


Мы собирали данные для обучения MuseNet в самых разных источниках. Нам очень помогли проекты ClassicalArchives и BitMidi, которые предоставили свои колоссальные коллекции в наше распоряжение. Мы также использовали найденные на просторах интернета коллекции самой разной музыки: джаза, поп-музыки, африканской, индийской и арабской музыки. Кроме того, мы использовали коллекцию MAESTRO.

Обучение происходит на последовательных данных, с учетом набора токенов мы просим сеть предсказать следующий токен. Мы пробовали использовать несколько различных способов кодирования MIDI-файлов. Сначала мы думали над аккордным подходом, который рассматривал каждую комбинацию нот, звучащих одновременно, как отдельный аккорд и назначал соответствующий токен. Также мы пытались конденсировать музыкальные паттерны, сконцентрировавшись на начале каждой ноты.

bach piano_strings start tempo90 piano:v72:G1 piano:v72:G2 piano:v72:B4 piano:v72:D4 violin:v80:G4 piano:v72:G4 piano:v72:B5 piano:v72:D5 wait:12 piano:v0:B5 wait:5 piano:v72:D5 wait:12 piano:v0:D5 wait:4 piano:v0:G1 piano:v0:G2 piano:v0:B4 piano:v0:D4 violin:v0:G4 piano:v0:G4 wait:1 piano:v72:G5 wait:12 piano:v0:G5 wait:5 piano:v72:D5 wait:12 piano:v0:D5 wait:5 piano:v72:B5 wait:12

Во время обучения мы:

  • Перемещаем ноты по шкале высоты звука (по ходу обучения количество транспозиций снижается);
  • Прибавляем и уменьшаем как общий звук, так и звук отдельных сэмплов;
  • Работаем с таймингом: ускоряем и замедляем отдельные фрагменты композиции;
  • Используем для работы с токенами mixup.

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

Интеграции


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

MuseNet уже дает концерты


Желающие могут ближе познакомиться с творчеством MuseNet, нейросеть уже даже дает собственные онлайн-концерты на Twitch. Для тех, кому интересно создание нейронных сетей на Python и глубокое машинное обучение, мы проводим открытый вебинар, где расскажем о программе курса и навыках, которые получат студенты.