Что такое нейронная музыка
Создаем музыку: когда простые решения превосходят по эффективности глубокое обучение
Представляю вашему вниманию перевод статьи «Создаем музыку: когда простые решения превосходят по эффективности глубокое обучение» о том, как искусственный интеллект применяется для создания музыки. Автор не использует нейронные сети для генерации музыки, а подходит к задаче, исходя из знания теории музыки, на основе мелодии и гармонии. Другой особенностью статьи является метод сравнения музыкальных произведений на основе матриц самоподобия. Такой подход, конечно, не является исчерпывающим, но он полезен как промежуточный шаг для генерации качественной музыки методами машинного обучения.
Использование искусственного интеллекта в творчестве сегодня стало встречаться все чаще и в развлекательных целях, и в коммерческих и уже перестало удивлять публику. С одной стороны — это инструменты смены стиля изображения типа Prizma. С другой — нейронная сеть, продукт работы которой был продан в виде картины на аукционе Christieʼs за 432,5 тысячи долларов. Нельзя не вспомнить нашего отечественного специалиста по генерации музыки с помощью машинного обучения Ивана Ямщикова, несколько лет назад представившего проект «Нейронная оборона» (подробнее можно прочитать здесь, а это интервью Ивана на Хабре). Другим хорошим примером использования нейронных сетей для генерации музыки может быть статья «Мечтают ли андроиды об электропанке? Как я учил нейронную сеть писать музыку» эксперта Artezio.
Помимо понимания теории машинного обучения, использование искусственного интеллекта для решения творческих задач предполагает также наличие экспертизы в доменной области искусства. Это делает проект на стыке двух областей особенно многогранным и интересным, но и уязвимым для критики с двух сторон, т. к. проект может попасть под перекрестный огонь замечаний и от искусствоведов, и от data scientist-ов.
Расширяя свой кругозор в рамках темы использования искусственного интеллекта в музыке, я встретил статью «Создаем музыку: когда простые решения превосходят по эффективности глубокое обучение», перевод которой хотел бы представить сообществу Хабра. Одним из достоинств этой статьи для меня стало то, что автор не использует нейронные сети как черный ящик, а подходит к задаче генерации музыки, исходя из знания теории музыки, на основе мелодии и гармонии. В представленной статье не используются ни рекуррентные нейронные сети (RNN, LSTM), ни генеративные состязательные сети (GAN), — все эти методы дают поразительные результаты (например, в статье «Мечтают ли андроиды об электропанке? Как я учил нейронную сеть писать музыку»), и мы активно их используем в решении наших задач в компании CleverData. Автор сделал упор на модели на основе марковских цепей, дающих возможность работать с вероятностями перехода от текущего состояния музыкального произведения в последующее. В используемых автором методах есть дополнительное достоинство: автору не пришлось жертвовать интерпретируемостью результата в угоду использования модного и популярного алгоритма.
Другой особенностью статьи, привлекшей мое внимание, стал интересный метод сравнения музыкальных произведений на основе матриц самоподобия. Если структуру песни можно представить в виде матрицы самоподобия, то появляется еще одна количественная мера сравнения песен.
Краткое содержание: как я столкнулся с проблемой, используя глубокое обучение для создания музыки, и как я её решил, придумав собственное решение.
Задача: как я столкнулся с проблемами при использовании техник глубокого обучения для создания поп-музыки.
Решение: как я создал собственную машину для создания музыки, которая могла бы конкурировать с глубоким обучением, но на основе более простых решений.
Оценка: как я создал оценочную метрику, которая могла бы математически доказать, что моя музыка «больше похожа на поп», чем та, что создана при помощи глубокого обучения.
Обобщение: как я нашёл способ применять своё решение к проблемам, не связанным с созданием музыки.
Вишенка на торте
Я создал простую вероятностную модель, генерирующую поп-музыку. Также, используя объективную метрику, я могу с уверенностью сказать, что музыка, созданная моей моделью, больше похожа на поп-музыку, чем та, что была создана с применением техник глубокого обучения. Как я это сделал? Частично, я достиг этого, сфокусировавшись на том, что для меня – суть поп-музыки: на статистической взаимосвязи между гармонией и мелодией.
Мелодия — это вокал, мотив. Гармония — это аккорды, последовательность аккордов. На рояле мелодия играется правой рукой, а гармония — левой.
Задача
Прежде чем углубиться в их отношения, позвольте мне сначала очертить проблему. Проект начался с моего желания попробовать создать музыку при помощи глубокого обучения – ИИ, как называют это непрофессионалы. Довольно быстро я пришёл к LSTM (долгая краткосрочная память, long short-term memory), одной из версий рекуррентной нейронной сети (RNN), очень популярной при генерировании текстов и создании музыки.
Но чем больше я вчитывался в предмет, тем больше я стал сомневаться в логике применения RNN и их вариаций для создания поп-музыки. Эта логика, казалось, основывалась на нескольких предположениях о внутренней структуре (поп) музыки, с которой я не мог полностью согласиться.
Одно конкретное предположение — это независимая связь между гармонией и мелодией (определение этих двух см. выше).
Например, рассмотрим публикацию Университета Торонто от 2017 года «Song from Pi: A Musically Plausible Network for Pop Music Generation» (Хан Чу и др.). В этой статье авторы явно «предполагают… аккорды не зависимы от мелодии» (курсив мой). Основываясь на этом предположении, авторы построили сложную многослойную RNN-модель. Для мелодии выделен отдельный слой, где создаются ноты (слой key, слой press), не зависимый от слоя аккордов (Chord Layer). Помимо независимости, эта конкретная модель предполагает, что гармония опирается на мелодию. Другими словами, гармония зависит от мелодии при генерации нот.
RNN-модель, предложенная Хан Чу. Каждый слой отвечает за отдельный аспект музыки.
Такой способ моделирования кажется мне очень странным, поскольку это совсем не похоже на то, как люди подходят к написанию поп-музыки. Будучи пианистом классической школы, я никогда не рассматривал сочинение мелодии без того, чтобы сначала обозначить гармонию. Гармония определяет и ограняет мелодию. Axis of Awesome в своём когда-то вирусном видео давно уже продемонстрировали правдивость этой идеи.
Это видео демонстрирует главное свойство западной поп-музыки: эта гармония, эти четыре аккорда сильно влияют на то, какой в итоге будет мелодия. Говоря языком Data Science, условная вероятность регулирует и определяет статистическую связь между гармонией и мелодией. Так происходит, потому что ноты мелодии, естественно, зависят от нот гармонии. Таким образом, можно утверждать, что ноты гармонии по своей сути указывают, какие мелодические ноты могут быть выбраны в конкретной песне.
Решение
Мне нравится находить оригинальные решения для сложных проблем. Поэтому я решил построить свою собственную модель, которая могла бы по-своему отражать богатую структуру музыкальных данных. Я начал с того, что сосредоточился на предопределенной вероятностной силе, регулирующей отношения между различными видами музыкальных нот. Например, выше я уже упоминал «вертикальные» отношения между гармонией и мелодией.
(Обработка) данных
В качестве данных я использовал 20 разнообразных западных поп-песен в midi формате (полный список песен можно найти здесь).
Используя библиотеку music21 python, я проанализировал midi-файлы при помощи цепи Маркова. Это позволило мне выделить статистические взаимоотношения между разными типами нот в моих входящих данных. В частности, я рассчитал вероятности перехода моих музыкальных нот. По сути, это означает, что наблюдая переход нот от одной к другой, мы можем вычислить вероятность того, что этот переход произойдет. (Более подробное объяснение ниже)
Midi: диджитал-версия песни
Сначала я извлек «вертикальные» вероятности перехода между нотами гармонии и нотами мелодии. Я также рассчитал все «горизонтальные» вероятности перехода между нотами мелодии в соответствии с набором данных. Я провел эту процедуру и для нот гармонии. Таблица ниже демонстрирует пример трех разных переходных матриц между различными типами нот в музыкальных данных.
Варианты перехода, варианты. Верхняя – между нотами гармонии и мелодии. Средняя – между нотами мелодии. Нижняя – между нотами гармонии.
Модель
Опираясь на эти три модели вероятностей, моя модель будет действовать следующим образом:
Конкретный пример применения алгоритма:
Какие нейросети умеют «петь» и исполнять дэт-метал
Расскажем об интеллектуальных инструментах, способных генерировать треки и даже тексты песен. Речь пойдет о решениях корпораций и лабораторий, а также разработках энтузиастов.
Нейросети пишут музыку…
Делает это синтезатор NSynth Super. Он построен на базе системы ИИ, формирующей из предварительно записанных семплов новые, не существующие в природе, звуки. Алгоритм может объединить звучание флейты и барабана. NSynth умеет работать с 16 музыкальными инструментами — на их основе он генерирует более 100 тыс. звуков. Он анализирует их входящие характеристики, а затем линейно интерполирует, формируя математическое представление.
NSynth Super — это проект с открытым кодом. Исходники и схемы для сборки доступны всем желающим в репозитории на GitHub.
Другой пример — система искусственного интеллекта Dadabots, которую разработали музыканты Си Джей Карр (CJ Carr) и Зак Жуковски (Zack Zukowski). Нейросеть сочиняет мелодии в стиле дэт-метал — её обучали на творчестве канадского коллектива Archspire. Решение на базе ИИ генерирует вполне гармоничные, хотя и не всегда приятные на слух композиции — на них периодически накладываются резкие акустические эффекты. Хотя для выбранного стиля это смотрится волне органично. Прослушать работы Dadabots можно на YouTube, там идет круглосуточная прямая трансляция.
Разработкой музыкальных систем ИИ также занимаются в Jukedeck. Этот стартап разрабатывает инструмент для генерации треков с заданным настроением и темпом. Год назад его приобрела компания, владеющая TikTok. Технологии Jukedeck помогут социальной сети экономить на роялти.
…и умеют петь
В конце апреля такой инструмент представили в OpenAI, его назвали Jukebox. Он генерирует композиции с осмысленными текстами и вокалом. Вот пример:
Инженеры обучили нейросеть на наборе данных из 1,2 млн песен (600 тыс. были на английском языке). Текст и метаданные для них взяли из библиотеки LyricWiki. Для генерации новых треков система ИИ использует метод VQ-VAE (Vector Quantized Variational AutoEncoder) — он сжимает треки и выделяет из них нужную акустическую информацию. Затем на её основе формирует новую композицию. На написание одной минуты песни Jukebox тратит около девяти часов, но пока не умеет генерировать привычные нам песни с повторяющимися припевами. Также система требует больших вычислительных ресурсов — протестировать её дома на компьютере или в студии пока нельзя. В перспективе разработчики планируют исправить эти недостатки.
Но заменят ли музыкантов
Авторы интеллектуальных инструментов для генерации музыки говорят, что машинные алгоритмы призваны не заменить композиторов, а расширить их артистические возможности.
Американская певица Тэрин Саузерн (Taryn Southern) записала альбом при помощи решения на основе системы ИИ. Нейросеть написала музыку для трека Break Free и сгенерировала видеоряд клипа. Солистка группы YACHT Клэр Эванс (Claire Evans) также использовала машинные алгоритмы при написании альбома «Chain Tripping». Компьютер генерировал новые мелодии на основе предыдущих работ Клэр, а исполнительница связывала наиболее интересные сэмплы между собой.
Также алгоритмы машинного обучения помогают музыкантам решать технические вопросы. Например, разработчики из LANDR предлагают систему искусственного интеллекта, которая проводит автоматический мастеринг треков. Ей уже пользуются более 2 млн исполнителей.
«Машинный звук»: синтезаторы на базе нейросетей
История синтезаторов речи: первые механические установки
История синтезаторов речи: компьютерная эра
Жанровая меломания нейросетей
Пишете музыку, но внезапно настиг творческий кризис? Или вам хочется получить треки уровня royalty-free, потыкав несколько слайдеров в Colab ноутбуке? Вы не готовы получать PhD в нейронных сетях и разбираться с теорией музыки, а попробовать себя в роли нейросетевого музыканта очень уж хочется?
А ещё вы узнаете, как связаны трансформеры и шедевры классической музыки. Но обо всем по порядку.
Что не так с имеющимися моделями?
С чего начинается путь падавана нейросетевой музыки? Разумеется, пишем в google “neural network music generator” и видим следующее:
OpenAI мы доверяем, ведь благодаря им мы имеем DALL-E, CLIP и GPT-3, превзошедшие многие другие модели и подходы. Начнем с MuseNet (ведь он выше в поиске, а значит годнее). Прослушаем несколько любезно предоставленных примеров для повышения мотивации:
Ваша мотивация повысилась? Открываем демонстрационный ноутбук на Google Colab, запускаем все ячейки подряд и вожделенно ожидаем музыкального шедевра…
Однако вместо него ноутбук перезагружается и ставит нас перед фактом:
Но мы готовы немного потанцевать с бубном, взять урезанную модель и сократить длину трека. В таком случае спустя несколько часов мы получим наше творение (упс, сорри, очень скверный звук):
Стоп, а почему так много шума? Всё потому, что надо произвести дополнительный шаг апсемплинга со слоёв меньшего разрешения.
К нашему сожалению, генерация музыки на колабе с урезанной моделью заняла у нас больше времени, чем продолжительность бесплатных инстансов Colab:
«Я волна» VS «Набор нот»
Всё дело в том, что Jukebox синтезирует музыку в волновом формате. А это ни много ни мало, а 44100 точек данных в одной секунде трека студийной записи. Выглядит это следующим образом:
На первый взгляд может показаться, что от смены формата ничего радикально не поменялось. На самом же деле даже с самым базовым MIDI мы сильно сокращаем запись. Мы на практике получали треки продолжительностью до 2.5 минут используя всего 2048 нот. Разница в генерации 2048 и 1 323 000 значений очень ощутима, не правда ли? Плюс перед нами открылся огромный творческий простор для того, чтобы придумать оптимальный способ кодирования данных.
Эксперименты с кодированием в борьбе за длину трека
Поэтому все, кто работает в этой области только и думают о том, как бы предложить что-нибудь свое. Мы, однако, для пилотной версии модели решили не запариваться и взяли самый простой, родной event-based MIDI энкодинг из статьи Music Transformer.
Суть event-based MIDI энкодинга в том, что мы отслеживаем нажатия и отпускания клавиш, учитывая силу нажатия. Так, MIDI преобразуется в последовательность событий нажатия, отпускания клавиши (по 128 токенов), установки громкости (32 токена) и шага по времени (100 токенов).
Пример Event-Based Encoding.
Углубляться в способы кодирования можно очень долго, и это выйдет за рамки вводной статьи, так что оставим это в качестве материала на будущее.
Что делать с энкодингом?
Что же такое Relative Positional Self-Attention, и с чем его едят? Тут в отличие от дефолтного Self-Attention, учитывается относительное положение каждой пары токенов, а не абсолютное. Это сильно помогает модели обрабатывать музыкальную информацию, так как в музыке часто встречаются повторения музыкальных фраз или повторения с небольшими изменениями.
Сравнение генерации модели с Relative Attention (верхняя строка) с моделями без него (средняя и нижняя строка).
Как приручить трансформер?
Использованная архитектура Music Transformer на самом деле в некотором смысле неконтролируема. Вы можете часами генерировать музыку, ожидая вам трек ожидаемого вами жанра. И он может оказаться неприемлемого качества. Мы решили, что это бессмысленно и постарались сымитировать механизм генерации Jukebox. Для этого в начало генерируемой последовательности мы подаем специальный код, отвечающий за жанр. Через него модель понимает какое подмножество треков от неё хотят получить и генерирует в этом стиле.
Сейчас мы смогли создать модель на четыре жанра: classic, pop, jazz, ambient. Но это не предел и в перспективе никто не мешает из метаинформации о треках достать исполнителей и большее число жанров, расширить их список, позволив генерировать в их стиле.
Для этого мы добавляем штрафы за частую генерацию с повторами. Также у нас есть температурный скейлинг, позволяющий балансировать между моделью, зажатой в рамках и моделью-импровизатором. Ну и конечно же beam search, использующийся во многих NLP-задачах генерации текста.
Стандартный способ генерации основан на случайном сэмплировании по распределению вероятностей, полученному из модели. Генерация происходит авторегрессионно, то есть за один шаг генерируется один токен с учётом всех предыдущих. Каждый новый токен добавляется к последовательности уже сгенерированных токенов, и вся последовательность подаётся на вход для генерации следующего.
При t=1.0 ничего не изменит (дефолтное значение).
Где можно приобщиться?
Сейчас мы предоставляем доступ к коду модели, обучения и генерации в нашем репозитории. Там же можно найти предобученные веса для экспериментов с подбором параметров генерации. Пытливые умы и знакомые с PyTorch смогут разобраться с кодом, подгрузить веса и сгенерировать всё, что душе угодно.
Пока мы готовили демо-ноутбук на свет появилась картинка с «рыбов продаёте?» и теперь с его наличием она уже не актуальна. Но выбрасывать жалко, поэтому она занимает почетное место в заключении. Ну а напоследок можете оценить результаты генерации нашей модели:
Один из самых длинных треков. В жанре ambient, т.к. в нём музыка спокойная и расход токенов на генерацию меньше. Благодаря этому удаётся растянуть 2048 токенов на 2 минуты.
Еще один ambient. Звучит энергичнее чем предыдущий, оттого и длина меньше.
Интересный спокойный душевный джазовый трек. Модель довольно смело раскидывается красивыми джазовыми аккордами в нужных местах и в нужное время, не скупясь, при этом, на импровизацию, и, сохраняя общую спокойную идею трека.
Более динамичный современный джаз. Напоминает лёгкое джазовое музыкальное оформление в кафе.
Жанр pop. Интересна тенденция модели к запоминанию основной ведущей партии в поп треках. Поп сам по себе склонен к частым повторениям простых мелодий и аккомпанемента, поэтому модель это успешно усвоила.
Как видим лучше получаются жанры Jazz(в нем проще всего импровизировать) и Ambient(в нем треки простые)
Стилизация музыки с помощью нейросетей
За последнее десятилетие глубокие нейросети (Deep Neural Networks, DNN) превратились в превосходный инструмент для ряда ИИ-задач вроде классификации изображений, распознавания речи и даже участия в играх. По мере того, как разработчики пытались показать, чем обусловлен успех DNN в сфере классификации изображений, и создавали инструменты для визуализации (например, Deep Dream, Filters), помогающие понять, «что» именно «изучает» DNN-модель, возникло новое интересное применение: извлечение «стиля» из одного изображения и применение к другому, иного содержания. Это назвали «переносом визуального стиля» (image style transfer).
Слева: изображение с полезным содержимым, в центре: изображение со стилем, справа: содержимое + стиль (источник: Google Research Blog)
Это не только всколыхнуло интерес многих других исследователей (например, 1 и 2), но и привело к появлению нескольких успешных мобильных приложений. За последние пару лет эти методы переноса визуального стиля сильно улучшились.
Перенос стиля от Adobe (источник: Engadget)
Пример с сайта Prisma
Короткое введение в работу подобных алгоритмов:
Однако несмотря на достижения в работе с изображениями, применение этих методик в других областях, например, для обработки музыки, было весьма ограниченным (см. 3 и 4), а результаты вовсе не такие впечатляющие, как в случае с изображениями. Это наводит на мысль, что в музыке переносить стиль гораздо сложнее. В этой статье мы рассмотрим задачу подробнее и обсудим некоторые возможные подходы.
Почему так трудно переносить стиль в музыке?
Давайте сначала ответим на вопрос: что такое «перенос стиля» в музыке? Ответ вовсе не так очевиден. В изображениях концепции «содержимого» и «стиля» интуитивно понятны. «Содержимое изображения» описывает представленные объекты, например, собак, дома, лица и так далее, а под «стилем изображения» понимаются цвета, освещение, мазки кисти и текстура.
Однако музыка по своей природе семантически абстрактна и многомерна. «Содержимое музыки» может означать разные вещи в разных контекстах. Зачастую содержимое музыки ассоциируется с мелодией, а стиль — с аранжировкой или гармонизацией. Однако содержимым может быть и текст песни, а разные мелодии, использованные для пения, можно интерпретировать как разные стили. В классической музыке содержимым можно считать партитуру (включающую в себя и гармонизацию), в то время как стилем будет интерпретация нот исполнителем, который привносит свою собственную экспрессию (варьируя и добавляя от себя какие-то звуки). Чтобы лучше понять суть переноса стиля в музыке, посмотрите пару этих видео:
Во втором ролике использованы различные методики машинного обучения.
Итак, перенос стиля в музыке по определению трудно формализовать. Есть и другие ключевые факторы, усложняющие задачу:
Дискретная природа музыкальных нот в равномерно темперированном строе.
Следовательно, методики, используемые для переноса стиля в изображениях, не применимы в музыке напрямую. Для этого их нужно переработать с акцентом на музыкальные концепции и идеи.
Для чего нужен перенос стиля в музыке?
Зачем вообще нужно решать эту задачу? Как и в случае с изображениями, потенциальные применения переноса стиля в музыке довольно интересны. Например, разработка инструмента в помощь композиторам. Скажем, автоматический инструмент, способный трансформировать мелодию с использованием аранжировок из разных жанров, будет крайне полезен для композиторов, которым нужно быстро попробовать разные идеи. Заинтересуются такими инструментами и диджеи.
Косвенным результатом подобных изысканий будет значительное улучшение систем музыкальной информатики. Как пояснялось выше, чтобы в музыке работал перенос стиля, создаваемые нами модели должны научиться лучше «понимать» разные аспекты.
Упрощение задачи переноса стиля в музыке
Начнём с очень простой задачи по анализу монофонических мелодий в разных жанрах. Монофонические мелодии — это последовательности нот, каждая из которых определяется тоном и длительностью. Тоновая прогрессия по большей части зависит от звукоряда мелодии, а прогрессия длительности зависит от ритма. Так что сначала чётко разделим «тоновое содержимое» (pitch content) и «ритмовый стиль» (rhythmic style) в качестве двух сущностей, с помощью которых можно перефразировать задачу переноса стиля. Также при работе с монофоническими мелодиями мы сейчас будем избегать задач, связанных с аранжировкой и текстом.
В отсутствие заранее обученных моделей, способных успешно различать тоновые прогрессии и ритмы монофонических мелодий, мы сначала прибегнем к очень простому подходу к переносу стиля. Вместо того, чтобы пытаться изменить тоновое содержимое, выученное на целевой мелодии, ритмовым стилем, выученным на целевом ритме, мы попытаемся по отдельности обучить паттернам тонов и длительностей из разных жанров, а затем попробуем объединить их. Примерная схема подхода:
Схема метода межжанрового переноса стиля.
Обучаем отдельно тоновым и ритмовым прогрессиям
Представление данных
Представление данных.
Архитектура модели
Воспользуемся такой же архитектурой, которую использовали Коломбо с коллегами — они одновременно обучали две LSTM-нейросети одному музыкальному жанру: а) тоновая сеть училась предсказывать следующий тон на основе предыдущей ноты и предыдущей длительности, б) сеть длительностей училась предсказывать следующую длительность на основе следующей ноты и предыдущей длительности. Также перед LSTM-сетями мы добавим уровни встраивания (embedding layer) для сопоставления индексов входных тона и длительности в заучиваемых пространствах встраивания. Архитектура нейросети показана на картинке:
Процедура обучения
По каждому жанру сети, отвечающие за тоны и длительности, обучаются одновременно. Мы воспользуемся двумя датасетами: a) Norbeck Folk Dataset, охватывающий около 2000 ирландских и шведских народных мелодий, б) джазовый датасет (публично не доступен), охватывающий около 500 джазовых мелодий.
Слияние обученных моделей
При тестировании мелодия сначала генерируется с помощью тоновой сети и сети длительностей, обученных на первом жанре (допустим, фолк). Затем последовательность тонов из сгенерированной мелодии используется на входе для сети последовательностей, обученной на другом жанре (скажем, джазе), и в результате получается новая последовательность длительностей. Следовательно, мелодия, созданная с помощью комбинации двух нейросетей, имеет последовательность тонов, соответствующей первому жанру (фолк), и последовательность длительностей, соответствующих второму жанру (джаз).
Предварительные результаты
Короткие отрывки из некоторых получившихся мелодий:
Фолк-тоны и фолк-длительности
Выдержка из нотной записи.
Выдержка из нотной записи.
Выдержка из нотной записи.
Выдержка из нотной записи.
Заключение
Хотя текущий алгоритм неплох для начала, у него есть ряд критических недостатков:
В следующих статьях мы рассмотрим способы обхода этих недостатков.