MuseNet: искусственный интеллект пишет музыку

Опубликовано 16 March 2020

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


Поскольку MuseNet знает много разных стилей, мы можем смешивать поколения новыми способами. [1]

Модели ИИ даны первые 6 нот Ноктюрна Шопена, но его попросили сгенерировать пьесу в стиле поп с фортепиано, ударными, басом и гитарой. Модель сумела убедительно смешать два стиля, с полной полосой, объединяющейся около 30 секунд.


Попробуйте MuseNet


OpenAI  приветствуют, чтобы музыканты и другие пользователи использовали MuseNet для создания своих следующих композиций! [2]

Для использования выходов, созданных MuseNet, приведите этот пост в блоге как

Пейн, Кристина. "MuseNet." OpenAI, 25 апреля 2019 года, openai.com/blog/musenet


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


Некоторые из ограничений MuseNet включают в себя:


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

MuseNet переживает более сложные времена с нечетным сочетанием стилей и инструментов (например, Шопена с басом и ударными). Поколения будут более естественными, если вы выберете инструменты, наиболее близкие к обычному стилю композитора или группы.


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

Мы можем визуализировать вложения из MuseNet, чтобы понять, что изучила модель. Здесь мы используем t-SNE для создания 2-D карты косинусного сходства разных музыкальных композиторов и стилевых вложений.



MuseNet: искусственный интеллект пишет музыку


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


MuseNet использует пересчитанные и оптимизированные ядра Sparse Transformer для обучения 72-уровневой сети с 24 головами внимания - с полным вниманием в контексте 4096 токенов. Этот длинный контекст может быть одной из причин, почему он может запомнить долговременную структуру в фрагменте, как в  примере, имитирующем Шопена. Он также может создавать музыкальные мелодические структуры, как в примере, имитирующем Моцарта.

Создание музыки - полезный домен для тестирования Sparse Transformer, поскольку он находится на середине между текстом и изображениями. Он имеет текучую структуру токенов (в изображениях вы можете просмотреть N токенов и найти строку выше, тогда как в музыке нет фиксированного числа для возврата к предыдущему такту). Тем не менее, мы можем легко услышать, захватывает ли модель долгосрочную структуру порядка от сотен до тысяч токенов. Гораздо более очевидно, если музыкальная модель нарушает структуру, изменяя ритм, таким образом, это менее ясно, если текстовая модель имеет краткую касательную.


Dataset.


Мы собрали учебные данные для MuseNet из разных источников. ClassicalArchives и BitMidi пожертвовали свои большие коллекции MIDI-файлов для этого проекта, и мы также нашли несколько коллекций онлайн, включая джаз, поп, африканский, индийский и арабский стили. Кроме того, мы использовали набор данных 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

Пример кодирования, который сочетает в себе высоту звука, громкость и инструмент.


Процесс обучения:

1. Транспонируйте ноты, поднимая и опуская высоты (позже на тренировке мы уменьшаем количество транспозиции, чтобы поколения оставались в пределах отдельных диапазонов инструментов).

2. Увеличьте объемы, увеличив или уменьшив общие объемы различных образцов.

3. Увеличение времени (при использовании абсолютного времени в секундах кодирования) эффективно немного замедляет или ускоряет фрагменты.

4. Используйте mixup в области встраивания токена.


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


Вложения.


Мы добавили несколько различных типов вложений, с целью придать модели более структурный контекст. В дополнение к стандартным позиционным встраиваниям мы добавили обученное вложение, которое отслеживает течение времени в данном образце. Таким образом, все ноты, звучащие одновременно, получают одинаковое время встраивания. Затем мы добавляем вложение для каждой ноты в аккорде (это имитирует относительное внимание, поскольку модели будет легче понять, что нота 4 должна оглянуться назад на ноту 3 или же на ноту 4 предыдущего аккорда). Наконец, мы добавляем два структурных вложения, которые сообщают модели, где данный музыкальный образец находится в большей музыкальной пьесе. Одно вложение делит большую часть на 128 частей, в то время как второе кодирование является обратным отсчетом от 127 до 0, когда модель приближается к (конечному) токену.



MuseNet отыграли экспериментальный концерт 25 апреля 2019 года, транслировавшийся в прямом эфире на канале Twitch от OpenAI, в котором ни один человек (включая нас) не слышал пьесы раньше.



Сноски

1. Если вы заинтересованы в других проектах по созданию музыки, сгенерированной искусственным интеллектом, с использованием трансформеров, мы рекомендуем ознакомиться с работой по созданию фортепьяно Magenta. 

2. Для использования выходов, созданных MuseNet, приведите этот пост в блоге как

Payne, Christine. "MuseNet." OpenAI, 25 Apr. 2019, openai.com/blog/musenet

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