MuseNet

diadmin

Abbiamo creato MuseNet, una rete neurale profonda che può generare composizioni musicali di 4 minuti con 10 strumenti diversi, e può combinare stili dal country a Mozart ai Beatles. MuseNet non è stata programmata esplicitamente con la nostra comprensione della musica, ma ha invece scoperto modelli di armonia, ritmo e stile imparando a prevedere il prossimo token in centinaia di migliaia di file MIDI. MuseNet usa la stessa tecnologia generale non supervisionata di GPT-2, un modello di trasformazione su larga scala addestrato a prevedere il prossimo token in una sequenza, sia essa audio o testo.

Campioni

Siccome MuseNet conosce molti stili diversi, possiamo fondere le generazioni in modi nuovi. [1] Qui al modello vengono date le prime 6 note di un Notturno di Chopin, ma gli viene chiesto di generare un pezzo in stile pop con pianoforte, batteria, basso e chitarra. Il modello riesce a fondere i due stili in modo convincente, con l’intera band che si unisce a circa 30 secondi:

Prova MuseNet

Siamo entusiasti di vedere come musicisti e non musicisti useranno MuseNet per creare nuove composizioni! [2]

In modalità semplice (mostrata di default), ascolterai campioni casuali non curati che abbiamo pre-generato. Scegli un compositore o uno stile, un inizio opzionale di un pezzo famoso, e inizia a generare. Questo ti permette di esplorare la varietà di stili musicali che il modello può creare. In modalità avanzata è possibile interagire direttamente con il modello. I completamenti richiederanno più tempo, ma creerete un pezzo completamente nuovo.

Alcuni dei limiti di MuseNet includono:

  • Gli strumenti che chiedi sono forti suggerimenti, non requisiti. MuseNet genera ogni nota calcolando le probabilità su tutte le note e gli strumenti possibili. Il modello si sposta per rendere le tue scelte di strumenti più probabili, ma c’è sempre la possibilità che scelga qualcos’altro.
  • MuseNet ha un tempo più difficile con accoppiamenti strani di stili e strumenti (come Chopin con basso e batteria). Le generazioni saranno più naturali se sceglierai gli strumenti più vicini allo stile abituale del compositore o della band.

Tokens compositore e strumentazione

Abbiamo creato i token compositore e strumentazione per dare più controllo sui tipi di campioni che MuseNet genera. Durante l’addestramento, questi token di compositore e strumentazione sono stati aggiunti ad ogni campione, in modo che il modello imparasse ad usare queste informazioni per fare previsioni sulle note. Al momento della generazione, possiamo quindi condizionare il modello a creare campioni in uno stile scelto iniziando con un prompt come un inizio di piano di Rachmaninoff:

Oppure con un prompt della band Journey, con piano, basso, chitarra e batteria:

Possiamo visualizzare le embeddings di MuseNet per capire cosa ha imparato il modello. Qui usiamo t-SNE per creare una mappa 2-D della somiglianza del coseno di varie embeddings di compositori e stili musicali.

Struttura a lungo termine

MuseNet usa la ricomputazione e i kernel ottimizzati di Sparse Transformer per addestrare una rete a 72 strati con 24 teste di attenzione – con piena attenzione su un contesto di 4096 token. Questo lungo contesto può essere uno dei motivi per cui è in grado di ricordare la struttura a lungo termine di un brano, come nel seguente esempio di imitazione di Chopin:

Può anche creare strutture melodiche musicali, come in questo campione che imita Mozart:

La generazione musicale è un dominio utile per testare lo Sparse Transformer in quanto si trova su una terra di mezzo tra il testo e le immagini. Ha la struttura a token fluida del testo (nelle immagini si può guardare indietro di N token e trovare la riga superiore, mentre nella musica non c’è un numero fisso per guardare indietro alla misura precedente). Eppure possiamo facilmente sentire se il modello sta catturando una struttura a lungo termine dell’ordine di centinaia o migliaia di token. È molto più ovvio se un modello musicale incasina la struttura cambiando il ritmo, in un modo in cui è meno chiaro se un modello di testo va su una breve tangente.

Dataset

Abbiamo raccolto i dati di allenamento per MuseNet da diverse fonti. ClassicalArchives e BitMidi hanno donato le loro grandi collezioni di file MIDI per questo progetto, e abbiamo anche trovato diverse collezioni online, tra cui jazz, pop, stili africani, indiani e arabi. Inoltre, abbiamo usato il dataset MAESTRO.

Il trasformatore è addestrato su dati sequenziali: dato un insieme di note, gli chiediamo di prevedere la nota successiva. Abbiamo sperimentato diversi modi per codificare i file MIDI in token adatti a questo compito. In primo luogo, un approccio basato sugli accordi che considerava ogni combinazione di note che suonavano in un momento come un accordo individuale, e assegnava un token ad ogni accordo. In secondo luogo, abbiamo provato a condensare i modelli musicali concentrandoci solo sulle partenze delle note, e abbiamo provato a comprimerli ulteriormente usando uno schema di codifica a coppie di byte.

Abbiamo anche provato due metodi diversi per marcare il passaggio del tempo: o gettoni che erano scalati secondo il tempo del pezzo (in modo che i gettoni rappresentassero una battuta musicale o una frazione di battuta), o gettoni che segnavano il tempo assoluto in secondi. Abbiamo optato per una codifica che combina l’espressività con la concisione: combinando le informazioni su tono, volume e strumento in un unico token.

Durante l’allenamento, noi:

    1. Sono state fatte le seguenti operazioni:
    2. Sono state fatte le seguenti operazioni.
    3. Trasponiamo le note alzando e abbassando le altezze (più avanti nell’addestramento, riduciamo la quantità di trasposizione in modo che le generazioni rimangano all’interno delle gamme dei singoli strumenti).
    4. Aumentare i volumi, alzando o abbassando i volumi complessivi dei vari campioni.
    5. Aumentare il timing (quando si usa la codifica del tempo assoluto in secondi), rallentando o accelerando leggermente i pezzi.
    6. Utilizzare il mixup sullo spazio di incorporazione dei token

Creiamo anche un critico interno: al modello viene chiesto durante l’addestramento di prevedere se un dato campione proviene veramente dal dataset o se è una delle generazioni passate del modello stesso. Questo punteggio è usato per selezionare i campioni al momento della generazione.

Embeddings

Abbiamo aggiunto diversi tipi di embeddings per dare al modello un contesto più strutturale. Oltre alle incorporazioni posizionali standard, abbiamo aggiunto un’incorporamento appreso che traccia il passaggio del tempo in un dato campione. In questo modo, tutte le note che suonano nello stesso momento ricevono la stessa incorporazione temporale. Aggiungiamo poi un’incorporazione per ogni nota in un accordo (questo imita l’attenzione relativa, poiché sarà più facile per il modello imparare che la nota 4 deve guardare indietro alla nota 3, o alla nota 4 dell’accordo precedente). Infine, aggiungiamo due incorporazioni strutturali che dicono al modello dove si trova un dato campione musicale all’interno del pezzo musicale più grande. Una incorporazione divide il pezzo più grande in 128 parti, mentre la seconda codifica è un conto alla rovescia da 127 a 0 man mano che il modello si avvicina al token (finale).

Siamo ansiosi di sentire cosa creano le persone! Se crei un pezzo che ti piace, puoi caricarlo su un servizio gratuito come Instaudio e poi twittarci il link (la demo di MuseNet ha un pulsante tweet per aiutarci in questo).

Se sei interessato a saperne di più sul lavoro musicale di OpenAI, prendi in considerazione la possibilità di unirti al nostro team. Sentiti libero di mandarci un’email con suggerimenti per la demo di MuseNet. Ci piacerebbe anche sentire da te se sei interessato a comporre con MuseNet in modo più approfondito, o se hai dei file MIDI che vorresti aggiungere al training set.

Grazie a Rewon Child e Scott Gray per il loro lavoro sullo Sparse Transformer, e a Jeff Wu e Alec Radford per il loro lavoro su GPT-2.