Система генерації музики за допомогою рекурентних нейронних мереж



В роботі розглядається можливість генерації музичних композицій використовуючи рекурентні нейронні мережі. Запропоновано та розглянуто два підходи генерації музичних творів, а саме за допомогою методу нот та методу акордів. Проведено дослідження обох методів і сформульовані їх переваги та недоліки. Детально описано процес пошуку та обробки даних для навчання музичної нейронної мережі. Запропоноване рішення дозволяє легко генерувати музичні твори без втручання людини.

Ключові слова--генерація музики, машинне навчання, рекурентні нейронні мережі, LSTM, RNN.

Вступ

Машинне навчання покращило багато аспектів нашого повсякденного життя, як очевидних, так й непомітних. Штучний інтелект відіграє ключову роль у таких речах, як системи рекомендацій в медіа-сервісах, розумні будинки, комп’ютерний зір, системи виявлення підозрілих дій, тощо. І навіть незважаючи на вже реалізовані застосування, досі існує величезний потенціал для покращення використання машинного навчання в різних сферах людської діяльності, включаючи медицину, віртуальні помічники, електронну комерцію та сферу фінансів.

Водночас не менш важливим і цікавим напрямом, в якому машинне навчання може зіграти свою роль є творчість. Комп'ютерна творчість – це дійсно захоплююча сфера, в якій штучний інтелект перетинається з мистецтвом, а метою стоїть розробка систем, які можуть моделювати, вдосконалювати або розуміти творчість людини.

Генерація музики є найбільш абстрактним напрямком творчої діяльності, оскільки на відміну від написання книжок, картин або віршів, музика не прив’язана до контексту оточуючого нас світу.

Генеративне мистецтво

Автоматична генерація музики – це процес створення музичного твору з мінімальним втручанням людини.

Алгоритмічний підхід до створення музики існує вже кілька століть, починаючи з Гвідо д’Ареццо, який в 1024 винайшов перший алгоритм для складання музики. Саме через величезні можливості, які може запропонувати обчислювальна техніка, алгоритмічні музичні композиції почали розквітати з початку 1950-х років та до сьогодні.

Вибір технічних засобів

Для побудови нейронної мережі необхідно було обрати базову модель машинного навчання. Проаналізувавши всі наявні моделі рекурентних нейронних мереж, як базову було обрано модель AWD-LSTM [1], яка найчастіше використовується для побудови нейронних мереж в сфері мовних досліджень. Для реалізації програмної частини було обрано мову програмування Python, оскільки має велику кількість бібліотек та модулів для роботи в цьому напряму. Основним фреймворком для реалізації архітектури мережі було обрано PyTorch [2]. Також був використаний модуль CUDA [3], для реалізації навчання мережі використовуючи графічний процесор.

Методи нот та акордів

Як одне з можливих рішень для генерації музики – це кожного разу запитувати модель, чи грати їй зараз дану ноту для кожної з 88 клавіш фортепіано на кожному музичному кроці. Однак, оскільки кожна окрема нота мовчить більшість часу, то для нейронної мережі було б дуже важко навчитись передбачати ствердну відповідь «так» для нот. Тому було розглянуто два можливі способи для рішення цієї проблеми. Мовні нейронні мережі часто працюють на рівні символів, або на рівні слів. Так само для генерації музики, було досліджено два аналогічних рівня – нот та акордів. Акордом вважається комбінація нот, які коли-небудь зустрічались в музичній композиції. Тобто ставитись до акорду, можна так само як до слів мови. Це означає, що можливо запитати нейронну мережу, яким буде наступний акорд (слово), надавши їй попередню послідовність акордів (речення). Для методу, який використовує ноти, вважаємо, що початок та кінець кожної ноти є різними словами, наприклад «p28» та «endp28» в текстовому форматі MIDI є різними словами, та будуть використовуватись для початку та зупинки ноти №28.

В обох методах було використано трохи зменшений діапазон нот – 62 ноти замість повних 88 на фортепіано. Ноти, які виходили з цього діапазону, було переміщено вниз або вгору на октаву. В результаті експериментів були визначені характеристики кожного з двох методів.

Характеристика методу акордів:

  • Нейронна мережа добре генерує довгі музичні патерни, але не може вийти за рамки навчальних даних, та згенерувати щось нове.
  • Зазвичай для прийняття рішення, щодо наступного акорду, найефективніше вибирати найбільш ймовірний прогноз на кожному часовому відрізку.
  • Зустрічається ефект, коли час від часу музична композиція перестрибує на іншу неочікувану ноту, але потім одразу продовжує грати мелодію в звичайному ритмі.

Характеристика методу нот:

  • Нейронна мережа створює гармонійні ритмічні малюнки, які можуть легко та гармонійно переходити в один з одного.
  • Легко обробляє параметри тривалості натискання ноти, за рахунок чого мелодія здається більше інтуїтивно зрозумілою для людини.
  • Для прийняття рішення, щодо наступної ноти найефективніше чергувати між собою три найбільш ймовірні прогнози на кожному часовому відрізку.

Отже в результаті цих порівнянь, було прийнято рішення про використання методу нот, як основного для генерації музики в системі.

Навчання нейронної мережі

Навчання моделі нейронної мережі потребує багато обчислювальних ресурсів, та велику кількість якісних навчальних даних [2].

Для прискорення навчання були використані хмарні обчислення.

Рис. 1 Порівняння швидкості навчання нейронної мережі з використанням CPU та GPU

Обчислення робились за допомогою ресурсів графічного процесора, оскільки такий підхід забезпечує більшу швидкість опрацювання даних, ніж центральний процесор. Це видно з результатів порівняння зображених на рис. 1. Для порівняння були використані центральний процесор i7 8550 U на 4 ядра, та графічний процесор Geforce MX150 з 2 гігабайтами оперативної пам'яті. Як видно з графіків, зі зростанням кількості даних – зростала швидкість їх обробки, особливо використовуючи графічний процесор, який при максимальній кількості даних був швидше ніж центральний процесор в 5,5 разів.

Вибір даних для тренування є важливою складовою будь-якої нейронної мережі, оскільки вона отримує всі свої «знання» про музику лише з навчальних даних. Також необхідно мати дані для тестування нейронної мережі, які повинні відрізнятись від даних для тренування, щоб визначати, чи змогла модель абстрагуватись від даних тренування та скласти нові мелодії, а не просто відтворювати дані, якими її навчали.

До тренувальних даних є дві вимоги. Перша – музичні композиції повинні бути в одному жанрі та написані людьми, а не іншою нейронною мережею. Друга вимога – мелодії повинні приємно звучати. Оскільки зазвичай різні жанри музики для людей звучать по-різному та залежать від їх смаку, було вирішено обрати для навчання класичну музику як найбільш нейтральний жанр.

Для збору навчального датасету було написано декілька скриптів, за допомогою яких були зібрані файли з найбільшого сайта агрегатора класичної музики – «Classical Piano Midi Page», де представлені композиції таких композиторів як Моцарт, Бах, Бетховен та багато інших.

Для навчання моделі необхідно було перетворити MIDI-файли у формат, який зможе зрозуміти нейронна мережа. Файли MIDI [3] надають інформацію про час початку гри та зупинки на кожну ноту, а також інформацію про музичний інструмент, значення гучності та темпу гри. На виході нейронної мережі музичні композиції подаються спочатку у вигляді власного текстового формату, а далі кодуються в MIDI та MP3.

Висновки

В роботі була розглянута та реалізована можливість використання рекурентних нейронних мереж для задачі генеративного мистецтва. Були розглянуті два підходи, які використовують метод нот та метод акордів. В результаті досліджень як основний був обраний метод нот, оскільки результатом його роботи були більш цікаві та гармонійні музичні композиції, на відміну від результатів які вдалось отримати методом акордів. Також було проведено порівняння швидкості навчання нейронної мережі з використанням центрального та графічного процесорів, за результатами якого графічний процесор оброблював дані швидше ніж центральний у 5,5 разів.

Література

{1} https://paperswithcode.com/method/awd\-lstm (дата звернення 10.11.2021). \bibitem{2} https://pytorch.org/docs/stable/index.html (дата звернення 10.11.2021).

{3} https://docs.nvidia.com/cuda/cuda\-c\-programming\-guide/index.html\#introduction (дата звернення 10.11.2021).

{4} Ian Goodfellow Deep Learning (Adaptive Computation and Machine Learning series) / Ian Goodfellow, Yoshua Bengio, Aaron Courville – 2016. – p 276.

{5} http://www.music.mcgill.ca/~ich/classes/mumt306/ StandardMIDIfileformat.html (дата звернення 11.11.2021).

Dec 2, 2021