MuseNet

Vytvořili jsme MuseNet, hlubokou neuronovou síť, která dokáže generovat čtyřminutové hudební skladby s 10 různými nástroji a kombinovat styly od country přes Mozarta až po Beatles. MuseNet nebyl explicitně naprogramován s ohledem na naše znalosti hudby, ale místo toho objevil vzorce harmonie, rytmu a stylu tím, že se naučil předvídat další token ve stovkách tisíc souborů MIDI. MuseNet používá stejnou univerzální technologii bez dohledu jako GPT-2, rozsáhlý transformační model naučený předpovídat další token v sekvenci, ať už zvukové nebo textové.

Příkladů

Protože MuseNet zná mnoho různých stylů, můžeme míchat generace novými způsoby. Zde je modelu zadáno prvních 6 not Chopinova nokturna, ale je požádán, aby vygeneroval skladbu v popovém stylu s klavírem, bicími, basou a kytarou. Model dokáže oba styly přesvědčivě smíchat a zhruba ve 30. sekundě se k němu připojí celá kapela:

Vyzkoušejte si MuseNet

Jsme zvědaví, jak budou hudebníci i nehudebníci používat MuseNet k vytváření nových skladeb!

V jednoduchém režimu (zobrazeném ve výchozím nastavení) uslyšíte náhodné nekultivované ukázky, které jsme předem vygenerovali. Vyberte si skladatele nebo styl, volitelný začátek slavné skladby a začněte generovat. Můžete tak prozkoumat rozmanitost hudebních stylů, které model dokáže vytvořit. V pokročilém režimu můžete s modelem přímo interagovat. Dokončení bude trvat déle, ale budete vytvářet zcela novou skladbu.

Mezi některá omezení MuseNetu patří:

  • Požadované nástroje jsou silné návrhy, nikoli požadavky. MuseNet generuje každou notu výpočtem pravděpodobností napříč všemi možnými notami a nástroji. Model se posouvá tak, aby vaše volby nástrojů byly pravděpodobnější, ale vždy existuje možnost, že vybere něco jiného.
  • MuseNet má větší potíže s lichými dvojicemi stylů a nástrojů (například Chopin s basou a bicími). Generace budou přirozenější, pokud vyberete nástroje, které jsou nejblíže obvyklému stylu skladatele nebo kapely.

Žetony skladatelů a nástrojů

Vytvořili jsme žetony skladatelů a nástrojů, abychom měli větší kontrolu nad druhy vzorků, které MuseNet generuje. Během tréninku byly tyto tokeny skladatele a instrumentace předřazeny každému vzorku, aby se model naučil tyto informace používat při předpovídání not. V době generování pak můžeme model podmínit vytvořením vzorků ve zvoleném stylu tím, že začneme výzvou, například Rachmaninovův klavírní začátek:

Nebo výzvou skupiny Journey s klavírem, basou, kytarou a bicími:

Můžeme vizualizovat vložené vzorky ze sítě MuseNet, abychom získali přehled o tom, co se model naučil. Zde používáme t-SNE k vytvoření dvourozměrné mapy kosinové podobnosti různých vložených hudebních skladatelů a stylů.

Najeďte na konkrétního skladatele nebo styl a podívejte se, jak souvisí s ostatními.

Dlouhodobá struktura

MuseNet používá přepočítávací a optimalizovaná jádra Sparse Transformer k trénování 72vrstvé sítě s 24 hlavami pozornosti – s plnou pozorností nad kontextem 4096 tokenů. Tento dlouhý kontext může být jedním z důvodů, proč si dokáže zapamatovat dlouhodobou strukturu skladby, jako v následující ukázce imitující Chopina:

Dokáže také vytvářet hudební melodické struktury, jako v této ukázce imitující Mozarta:

Tvorba hudby je užitečnou doménou pro testování Sparse Transformer, protože se nachází na pomezí mezi textem a obrázky. Má plynulou strukturu tokenů jako text (v obrázcích se můžete podívat zpět na N tokenů a najít řádek nad nimi, zatímco v hudbě neexistuje pevný počet pro pohled zpět na předchozí takt). Přesto můžeme snadno slyšet, zda model zachycuje dlouhodobou strukturu v řádu stovek až tisíců tokenů. Je mnohem zřejmější, pokud hudební model naruší strukturu změnou rytmu, a to způsobem, který je méně zřejmý, pokud se textový model vydá na krátkou tečku.

Datová sada

Tréninková data pro MuseNet jsme shromáždili z mnoha různých zdrojů. Společnosti ClassicalArchives a BitMidi věnovaly pro tento projekt své rozsáhlé sbírky souborů MIDI a také jsme našli několik sbírek online, včetně jazzových, popových, afrických, indických a arabských stylů. Kromě toho jsme použili datovou sadu MAESTRO.

Transformátor je natrénován na sekvenčních datech: zadáme-li mu sadu not, požádáme ho, aby předpověděl nadcházející notu. Experimentovali jsme s několika různými způsoby kódování souborů MIDI do tokenů vhodných pro tuto úlohu. Za prvé, akordický přístup, který považoval každou kombinaci not znějících v jednom okamžiku za samostatný „akord“ a každému akordu přiřadil token. Za druhé jsme zkusili zestručnit hudební vzory tak, že jsme se zaměřili pouze na začátky not, a to jsme se pokusili dále komprimovat pomocí schématu kódování dvojic bajtů.

Zkoušeli jsme také dva různé způsoby označování plynutí času: buď tokeny, které byly škálovány podle tempa skladby (takže tokeny představovaly hudební takt nebo zlomek taktu), nebo tokeny, které označovaly absolutní čas v sekundách. Přistoupili jsme na kódování, které kombinuje expresivitu a stručnost: kombinuje informace o výšce tónu, hlasitosti a nástroji do jediného tokenu.

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
Kódování vzorku, které kombinuje výšku tónu, hlasitost a nástroj.

Při tréninku:

  1. Transponujeme noty zvyšováním a snižováním výšek tónů (později při tréninku množství transpozice snižujeme, aby generace zůstaly v rozmezí jednotlivých nástrojů).
  2. Zvýšíme nebo snížíme celkovou hlasitost jednotlivých samplů.
  3. Zvýšíme časování (při použití kódování absolutního času v sekundách), čímž vlastně skladby mírně zpomalíme nebo zrychlíme.
  4. Použijeme mixup na prostoru vkládání tokenů

Vytvoříme také vnitřní kritiku: model je v době trénování požádán, aby předpověděl, zda je daný vzorek skutečně z datové sady, nebo zda se jedná o jednu z minulých generací modelu. Toto hodnocení se používá k výběru vzorků v době generování.

Vložky

Přidali jsme několik různých druhů vložek, abychom modelu dodali více strukturního kontextu. Kromě standardních pozičních embeddingů jsme přidali naučený embedding, který sleduje plynutí času v daném vzorku. Tímto způsobem jsou všechny noty, které zazní ve stejnou dobu, opatřeny stejným časovým vložením. Dále jsme přidali embedding pro každou notu v akordu (to napodobuje relativní pozornost, protože pro model bude snazší naučit se, že nota 4 se musí ohlédnout na notu 3, případně na notu 4 předchozího akordu). Nakonec přidáme dvě strukturní usazení, která modelu říkají, kde se daný hudební vzorek nachází v rámci větší hudební skladby. Jedno zakódování rozděluje větší skladbu na 128 částí, zatímco druhé zakódování je odpočítávání od 127 do 0, jak se model blíží k (koncovému) tokenu.

Jsme zvědaví, co lidé vytvoří! Pokud vytvoříte skladbu, která se vám líbí, můžete ji nahrát na bezplatnou službu, jako je Instaudio, a pak nám na Twitteru poslat odkaz (demo MuseNet má tlačítko tweet, které vám s tím pomůže).

Pokud máte zájem dozvědět se více o práci OpenAI v oblasti hudby, zvažte možnost přihlásit se do našeho týmu. Neváhejte nám napsat své návrhy pro demo MuseNet. Budeme také rádi, když se nám ozvete, pokud máte zájem komponovat s MuseNetem do větší hloubky nebo pokud máte soubory MIDI, které byste chtěli přidat do tréninkové sady.

MuseNet odehrál 25. dubna 2019 experimentální koncert, živě přenášený na kanálu OpenAI na Twitchi, při kterém nikdo z lidí (včetně nás) skladby předtím neslyšel.

.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.