MuseNet

We hebben MuseNet gemaakt, een diep neuraal netwerk dat muziekcomposities van 4 minuten kan genereren met 10 verschillende instrumenten, en stijlen kan combineren van country tot Mozart tot de Beatles. MuseNet is niet expliciet geprogrammeerd met ons begrip van muziek, maar ontdekte in plaats daarvan patronen van harmonie, ritme en stijl door te leren de volgende token in honderdduizenden MIDI-bestanden te voorspellen. MuseNet maakt gebruik van dezelfde technologie voor algemene doeleinden zonder toezicht als GPT-2, een grootschalig transformatormodel dat is getraind om de volgende token in een sequentie te voorspellen, of het nu om audio of tekst gaat.

Samples

Omdat MuseNet veel verschillende stijlen kent, kunnen we generaties op nieuwe manieren mengen. Hier krijgt het model de eerste 6 noten van een Nocturne van Chopin, maar wordt gevraagd om een stuk in popstijl te genereren met piano, drums, bas en gitaar. Het model slaagt erin om de twee stijlen overtuigend te mengen, met de volledige band erbij rond de 30 seconden:

Probeer MuseNet

We zijn enthousiast om te zien hoe muzikanten en niet-muzikanten MuseNet zullen gebruiken om nieuwe composities te maken!

In de eenvoudige modus (die standaard wordt getoond), hoor je willekeurige niet-gecurateerde samples die we vooraf hebben gegenereerd. Kies een componist of stijl, een optioneel begin van een beroemd stuk, en begin met genereren. Zo kun je de verscheidenheid aan muziekstijlen verkennen die het model kan creëren. In de geavanceerde modus kun je direct met het model interageren. De voltooiing duurt dan langer, maar je maakt dan wel een geheel nieuw stuk.

Enkele beperkingen van MuseNet zijn:

  • De instrumenten die je vraagt zijn sterke suggesties, geen vereisten. MuseNet genereert elke noot door de waarschijnlijkheid te berekenen over alle mogelijke noten en instrumenten. Het model verschuift om uw instrumentkeuzes waarschijnlijker te maken, maar er is altijd een kans dat het iets anders kiest.
  • MuseNet heeft het moeilijker met vreemde combinaties van stijlen en instrumenten (zoals Chopin met bas en drums). Generaties zullen natuurlijker zijn als je instrumenten kiest die het dichtst bij de gebruikelijke stijl van de componist of band liggen.

Composer and instrumentation tokens

We hebben componist en instrumentation tokens gemaakt om meer controle te krijgen over het soort samples dat MuseNet genereert. Tijdens de training werden deze componist- en instrumentatietokens aan elk voorbeeld toegevoegd, zodat het model zou leren om deze informatie te gebruiken bij het voorspellen van noten. Op het moment van genereren kunnen we het model conditioneren om samples te maken in een gekozen stijl door te beginnen met een prompt zoals een Rachmaninoff piano start:

Of gevraagd met de band Journey, met piano, bas, gitaar en drums:

We kunnen de embeddings van MuseNet visualiseren om inzicht te krijgen in wat het model heeft geleerd. Hier gebruiken we t-SNE om een 2D-kaart te maken van de cosinusgelijkenis van verschillende muzikale componist- en stijl-embeddings.

Beweeg de muis over een specifieke componist of stijl om te zien hoe deze zich verhoudt tot anderen.

Lange-termijn structuur

MuseNet gebruikt de herberekening en geoptimaliseerde kernels van Sparse Transformer om een 72-lagen netwerk te trainen met 24 aandachtshoofden-met volledige aandacht over een context van 4096 tokens. Deze lange context kan een van de redenen zijn waarom het in staat is om lange-termijn structuur in een stuk te onthouden, zoals in het volgende voorbeeld het imiteren van Chopin:

Het kan ook muzikale melodische structuren creëren, zoals in dit voorbeeld het imiteren van Mozart:

Muziek generatie is een nuttig domein voor het testen van de Sparse Transformer als het zit op een middengebied tussen tekst en afbeeldingen. Het heeft de vloeiende token structuur van tekst (in afbeeldingen kun je N tokens terug kijken en de rij erboven vinden, terwijl er in muziek geen vast nummer is om terug te kijken naar de vorige maat). Toch kunnen we gemakkelijk horen of het model een lange-termijn structuur vastlegt in de orde van honderden tot duizenden tokens. Het is veel duidelijker als een muziekmodel de structuur verknoeit door het ritme te veranderen, op een manier die minder duidelijk is als een tekstmodel een korte tangens volgt.

Dataset

We hebben trainingsgegevens voor MuseNet verzameld uit veel verschillende bronnen. ClassicalArchives en BitMidi doneerden hun grote collecties MIDI-bestanden voor dit project, en we vonden ook verschillende collecties online, waaronder jazz, pop, Afrikaanse, Indiase, en Arabische stijlen. Daarnaast hebben we gebruik gemaakt van de MAESTRO dataset.

De transformator is getraind op sequentiële data: gegeven een set noten, vragen we het om de komende noot te voorspellen. We hebben geëxperimenteerd met verschillende manieren om de MIDI-bestanden te coderen in tokens die geschikt zijn voor deze taak. Ten eerste, een akkoordgewijze benadering die elke combinatie van noten die op een bepaald moment klinken beschouwt als een individueel “akkoord”, en aan elk akkoord een token toewijst. Ten tweede hebben we geprobeerd de muzikale patronen te comprimeren door ons alleen te richten op het begin van noten, en probeerden dat verder te comprimeren met behulp van een byte-paar coderingsschema.

We hebben ook twee verschillende methoden geprobeerd om het verstrijken van de tijd te markeren: ofwel tokens die werden geschaald volgens het tempo van het stuk (zodat de tokens een muzikale beat of fractie van een beat vertegenwoordigden), of tokens die de absolute tijd in seconden markeerden. We zijn uitgekomen op een codering die expressiviteit combineert met beknoptheid: het combineren van de toonhoogte, volume, en instrument informatie in een enkele token.

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
Sample codering die toonhoogte, volume, en instrument.

Tijdens de training, we:

  1. Transponeer de noten door het verhogen en verlagen van de toonhoogtes (later in de training, verminderen we de hoeveelheid transpositie, zodat de generaties blijven binnen de individuele instrument bereiken).
  2. Verhoog de volumes, door de totale volumes van de verschillende samples te verhogen of te verlagen.
  3. Verhoog de timing (bij gebruik van de absolute tijd in seconden codering), door de stukken effectief iets te vertragen of te versnellen.
  4. Gebruik mixup op de token inbedding ruimte

We creëren ook een innerlijke criticus: het model wordt gevraagd tijdens de trainingstijd om te voorspellen of een bepaald monster echt uit de dataset is of dat het een van de eigen vorige generaties van het model is. Deze score wordt gebruikt om monsters te selecteren op het moment van generatie.

Embeddings

We hebben verschillende soorten embeddings toegevoegd om het model meer structurele context te geven. Naast de standaard positionele inbeddingen hebben we een geleerde inbedding toegevoegd die het verstrijken van de tijd in een gegeven sample volgt. Op die manier krijgen alle noten die op hetzelfde moment klinken dezelfde timing-embedding. Vervolgens voegen we een inbedding toe voor elke noot in een akkoord (dit imiteert relatieve aandacht, aangezien het voor het model gemakkelijker zal zijn om te leren dat noot 4 moet terugkijken naar noot 3, of anders naar noot 4 van het vorige akkoord). Tenslotte voegen we twee structurele inbeddingen toe die het model vertellen waar een gegeven muziekstuk zich bevindt binnen het grotere muziekstuk. Eén inbedding verdeelt het grotere muziekstuk in 128 delen, terwijl de tweede inbedding een aftelling is van 127 naar 0 als het model het (eind)token nadert.

We zijn benieuwd naar wat mensen maken! Als je een stuk maakt dat je leuk vindt, kun je het uploaden naar een gratis dienst zoals Instaudio en ons dan de link tweeten (de MuseNet-demo heeft een tweet-knop om hierbij te helpen).

Als je geïnteresseerd bent om meer te leren over het muziekwerk van OpenAI, overweeg dan om je aan te melden voor ons team. Aarzel niet om ons te e-mailen met suggesties voor de MuseNet-demo. We zouden ook graag van je horen als je geïnteresseerd bent in het componeren met MuseNet in meer diepgang, of als je MIDI-bestanden hebt die je zou willen toevoegen aan de trainingsset.

MuseNet speelde een experimenteel concert op 25 april 2019, livestreamed op OpenAI’s Twitch-kanaal, waarin geen mens (inclusief wij) de stukken eerder had gehoord.

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.