MuseNet

Musenet

Иллюстрация: Бен Барри

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

Примеры

Аудиопример MuseNet 1
Аудиопример MuseNet 2
Аудиопример MuseNet 3
Аудиопример MuseNet 4

Поскольку MuseNet знает множество различных стилей, мы можем смешивать генерации новыми способами.A Здесь модели заданы первые 6 нот ноктюрна Шопена, но ей предлагается сгенерировать произведение в поп-стиле для фортепиано, ударных, баса и гитары. Модели удается убедительно смешать два стиля, причем полный состав группы вступает примерно на 30-й секунде:

Аудиопример MuseNet

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

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

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

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

Токены композитора и инструментовки

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

Аудиопример MuseNet

Или с подсказкой для группы Journey с фортепиано, басом, гитарой и ударными:

Аудиопример MuseNet

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

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

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

Аудиопример MuseNet

Она также может создавать музыкальные мелодические структуры, как в этом семпле, имитирующем Моцарта:

Аудиопример MuseNet

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

Набор данных

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

Трансформер обучается на последовательных данных: имея набор нот, мы просим его предсказать следующую ноту. Мы экспериментировали с несколькими различными способами кодирования MIDI-файлов в токены, подходящие для этой задачи. Первый — аккордовый подход, при котором каждая комбинация нот, звучащих одновременно, рассматривалась как индивидуальный «аккорд», и каждому аккорду присваивался свой токен. Во-вторых, мы попытались сжать музыкальные паттерны, сосредоточившись только на началах нот, а также попытались дополнительно сжать их с помощью схемы кодирования пар байтов (byte pair encoding).

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

Обычный текст

1
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 по мере приближения модели к токену окончания (end).

Нам не терпится услышать, что создадут люди! Если вы создали композицию, которая вам нравится, вы можете загрузить ее на бесплатный сервис, такой как Instaudio, а затем отправить нам ссылку в твиттере (в демоверсии MuseNet есть специальная кнопка для публикации в Twitter).

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

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

Сноски

  1. A

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

Источники

  1. При использовании результатов, созданных MuseNet, пожалуйста, ссылайтесь на эту запись в блоге следующим образом:

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

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

Полный текст статьи читайте на OpenAI