MuseNet

Vi har skabt MuseNet, et dybt neuralt netværk, der kan generere musikalske kompositioner på 4 minutter med 10 forskellige instrumenter, og som kan kombinere stilarter fra country til Mozart og Beatles. MuseNet blev ikke eksplicit programmeret med vores forståelse af musik, men opdagede i stedet mønstre af harmoni, rytme og stil ved at lære at forudsige det næste token i hundredtusindvis af MIDI-filer. MuseNet bruger den samme generelle uovervågede teknologi som GPT-2, en storskala transformatormodel, der er trænet til at forudsige det næste token i en sekvens, hvad enten det er lyd eller tekst.

Samples

Da MuseNet kender mange forskellige stilarter, kan vi blande generationer på nye måder. Her får modellen de første 6 toner af en Chopin Nocturne, men bliver bedt om at generere et stykke i en popstil med klaver, trommer, bas og guitar. Det lykkes modellen at blande de to stilarter på overbevisende vis, og hele bandet slutter sig til omkring de 30 sekunder:

Prøv MuseNet

Vi er spændte på at se, hvordan både musikere og ikke-musikere vil bruge MuseNet til at skabe nye kompositioner!

I simpel tilstand (vist som standard) vil du høre tilfældige ukuraterede prøver, som vi har genereret på forhånd. Vælg en komponist eller stilart, en valgfri start af et berømt stykke, og begynd at generere. På denne måde kan du udforske de mange forskellige musikalske stilarter, som modellen kan skabe. I den avancerede tilstand kan du interagere direkte med modellen. Færdiggørelserne vil tage længere tid, men du skaber et helt nyt stykke.

Nogle af MuseNets begrænsninger omfatter:

  • De instrumenter, du beder om, er stærke forslag, ikke krav. MuseNet genererer hver tone ved at beregne sandsynlighederne på tværs af alle mulige toner og instrumenter. Modellen skifter for at gøre dine instrumentvalg mere sandsynlige, men der er altid en chance for, at den vælger noget andet.
  • MuseNet har det sværere med ulige parringer af stilarter og instrumenter (f.eks. Chopin med bas og trommer). Generationer vil være mere naturlige, hvis du vælger de instrumenter, der ligger tættest på komponistens eller bandets sædvanlige stil.

Komponist- og instrumentationstokens

Vi har oprettet komponist- og instrumentationstokens for at give mere kontrol over de typer af prøver, som MuseNet genererer. I løbet af træningstiden blev disse komponist- og instrumentationstokens tilføjet til hver prøve, så modellen kunne lære at bruge disse oplysninger til at foretage nodeforudsigelser. På genereringstidspunktet kan vi så konditionere modellen til at skabe prøver i en valgt stil ved at starte med en prompt som f.eks. en Rachmaninoff-pianostart:

Og prompte med bandet Journey, med klaver, bas, guitar og trommer:

Vi kan visualisere indlejringerne fra MuseNet for at få indsigt i, hvad modellen har lært. Her bruger vi t-SNE til at skabe et 2-D-kort over cosinusligheden mellem forskellige indlejringer af musikalske komponister og stilarter.

Hold musen over en bestemt komponist eller stilart for at se, hvordan den forholder sig til andre.

Langtidsstruktur

MuseNet bruger de genberegnede og optimerede kerner fra Sparse Transformer til at træne et netværk med 72 lag med 24 opmærksomhedshoveder – med fuld opmærksomhed over en kontekst med 4096 tokens. Denne lange kontekst kan være en af grundene til, at det er i stand til at huske langsigtede strukturer i et stykke, som i følgende eksempel, der efterligner Chopin:

Det kan også skabe musikalske melodiske strukturer, som i dette eksempel, der efterligner Mozart:

Musikgenerering er et nyttigt domæne til afprøvning af Sparse Transformer, da det befinder sig på et mellemområde mellem tekst og billeder. Den har tekstens flydende tokenstruktur (i billeder kan man kigge N tokens tilbage og finde rækken ovenover, mens der i musik ikke er et fast antal til at kigge tilbage til den foregående takt). Alligevel kan vi let høre, om modellen fanger langsigtet struktur i størrelsesordenen hundreder til tusinder af tokens. Det er meget mere tydeligt, hvis en musikmodel roder i strukturen ved at ændre rytmen, på en måde, som det er mindre tydeligt, hvis en tekstmodel går på en kort tangent.

Datasæt

Vi har indsamlet træningsdata til MuseNet fra mange forskellige kilder. ClassicalArchives og BitMidi donerede deres store samlinger af MIDI-filer til dette projekt, og vi fandt også flere samlinger online, herunder jazz, pop, afrikanske, indiske, indiske og arabiske stilarter. Derudover brugte vi MAESTRO-datasættet.

Transformeren er trænet på sekventielle data: givet et sæt noter beder vi den om at forudsige den kommende tone. Vi eksperimenterede med flere forskellige måder at kode MIDI-filerne til tokens, der er egnede til denne opgave. For det første en akkordvis tilgang, der betragtede hver kombination af noter, der lyder på et tidspunkt, som en individuel “akkord”, og tildelte et token til hver akkord. For det andet forsøgte vi at komprimere de musikalske mønstre ved kun at fokusere på starten af noderne og forsøgte yderligere at komprimere dette ved hjælp af et bytepar-kodningsskema.

Vi forsøgte også to forskellige metoder til at markere tidsforløbet: enten tokens, der var skaleret efter stykkets tempo (således at tokens repræsenterede et musikalsk beat eller en brøkdel af et beat), eller tokens, der markerede absolut tid i sekunder. Vi landede på en kodning, der kombinerer udtryksfuldhed med kortfattethed: vi kombinerede informationerne om tonehøjde, lydstyrke og instrument i et enkelt 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
Eksempelkodning, der kombinerer tonehøjde, lydstyrke og instrument.

Under træningen:

  1. Transponerer tonerne ved at hæve og sænke tonehøjderne (senere i træningen reducerer vi mængden af transponering, så generationerne holder sig inden for de enkelte instrumenters intervaller).
  2. Augmentere lydstyrken ved at skrue op eller ned for den samlede lydstyrke for de forskellige samples.
  3. Augmentere timingen (ved brug af den absolutte tid i sekunder-kodning), hvilket effektivt bremser eller fremskynder stykkerne en smule.
  4. Brug mixup på tokenembedding space

Vi skaber også en indre kritiker: modellen bliver i løbet af træningstiden bedt om at forudsige, om en given prøve virkelig er fra datasættet, eller om den er en af modellens egne tidligere generationer. Denne score bruges til at vælge prøver på generationstidspunktet.

Embeddings

Vi har tilføjet flere forskellige former for embeddings for at give modellen mere strukturel kontekst. Ud over de standardpositionelle indlejringer tilføjede vi en indlært indlejring, der følger tidens gang i en given prøve. På denne måde får alle de toner, der lyder på samme tid, den samme tidsindlejring. Vi tilføjer derefter en indlejring for hver tone i en akkord (dette efterligner relativ opmærksomhed, da det vil være lettere for modellen at lære, at tone 4 skal se tilbage på tone 3 eller på tone 4 i den foregående akkord). Endelig tilføjer vi to strukturelle indlejringer, som fortæller modellen, hvor en given musikalsk prøve befinder sig i et større musikstykke. Den ene indlejring opdeler det større stykke i 128 dele, mens den anden kodning er en nedtælling fra 127 til 0, efterhånden som modellen nærmer sig (slut)tokenet.

Vi er spændte på at høre, hvad folk skaber! Hvis du skaber et stykke, du kan lide, kan du uploade det til en gratis tjeneste som Instaudio og derefter tweete linket til os (MuseNet-demoen har en tweet-knap til at hjælpe med dette).

Hvis du er interesseret i at lære mere om OpenAI’s musikarbejde, kan du overveje at ansøge om at blive en del af vores team. Du er velkommen til at sende os en e-mail med forslag til MuseNet-demoen. Vi vil også gerne høre fra dig, hvis du er interesseret i at komponere med MuseNet mere indgående, eller hvis du har MIDI-filer, som du gerne vil tilføje til træningssættet.

MuseNet spillede en eksperimentel koncert den 25. april 2019, livestreamet på OpenAI’s Twitch-kanal, hvor intet menneske (inklusive os) havde hørt stykkerne før.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.