MuseNet

Wir haben MuseNet entwickelt, ein tiefes neuronales Netzwerk, das 4-minütige Musikkompositionen mit 10 verschiedenen Instrumenten erzeugen und Stile von Country über Mozart bis zu den Beatles kombinieren kann. MuseNet wurde nicht explizit mit unserem Verständnis von Musik programmiert, sondern entdeckte Muster von Harmonie, Rhythmus und Stil, indem es lernte, das nächste Token in Hunderttausenden von MIDI-Dateien vorherzusagen. MuseNet verwendet dieselbe universelle, nicht überwachte Technologie wie GPT-2, ein groß angelegtes Transformatormodell, das darauf trainiert ist, das nächste Token in einer Sequenz vorherzusagen, egal ob es sich um Audio oder Text handelt.

Beispiele

Da MuseNet viele verschiedene Stile kennt, können wir Generationen auf neuartige Weise mischen. Hier werden dem Modell die ersten 6 Noten eines Chopin-Nocturne gegeben, aber es wird gebeten, ein Stück im Pop-Stil mit Klavier, Schlagzeug, Bass und Gitarre zu erzeugen. Das Modell schafft es, die beiden Stile überzeugend zu vermischen, wobei die gesamte Band etwa bei der 30-Sekunden-Marke dazukommt:

Try MuseNet

Wir sind gespannt, wie Musiker und Nicht-Musiker MuseNet nutzen werden, um neue Kompositionen zu erstellen!

Im einfachen Modus (standardmäßig angezeigt) hören Sie zufällige, nicht kuratierte Samples, die wir vorab generiert haben. Wählen Sie einen Komponisten oder einen Stil, optional den Anfang eines berühmten Stücks, und beginnen Sie mit der Erstellung. So können Sie die Vielfalt der Musikstile erkunden, die das Modell erzeugen kann. Im fortgeschrittenen Modus können Sie direkt mit dem Modell interagieren. Die Vervollständigung wird länger dauern, aber Sie werden ein völlig neues Stück erstellen.

Zu den Einschränkungen von MuseNet gehören:

  • Die von Ihnen gewünschten Instrumente sind starke Vorschläge, keine Anforderungen. MuseNet erzeugt jede Note, indem es die Wahrscheinlichkeiten für alle möglichen Noten und Instrumente berechnet. Das Modell verschiebt sich, um Ihre Instrumentenwahl wahrscheinlicher zu machen, aber es besteht immer die Möglichkeit, dass es etwas anderes wählt.
  • MuseNet hat es schwerer mit ungeraden Paarungen von Stilen und Instrumenten (wie Chopin mit Bass und Schlagzeug). Die Generierung ist natürlicher, wenn Sie Instrumente auswählen, die dem üblichen Stil des Komponisten oder der Band am nächsten kommen.

Komponisten- und Instrumenten-Token

Wir haben Komponisten- und Instrumenten-Token erstellt, um mehr Kontrolle über die Art der von MuseNet generierten Samples zu haben. Während des Trainings wurden diese Komponisten- und Instrumenten-Token jedem Sample vorangestellt, damit das Modell lernt, diese Informationen bei der Notenvorhersage zu verwenden. Zur Generierungszeit können wir das Modell dann darauf konditionieren, Samples in einem gewählten Stil zu erstellen, indem wir mit einer Aufforderung wie einem Rachmaninoff-Klavierstart beginnen:

oder mit der Band Journey, mit Klavier, Bass, Gitarre und Schlagzeug:

Wir können die Einbettungen von MuseNet visualisieren, um einen Einblick in das zu erhalten, was das Modell gelernt hat. Hier verwenden wir t-SNE, um eine 2D-Karte der Kosinusähnlichkeit verschiedener musikalischer Komponisten- und Stileinbettungen zu erstellen.

Bewegen Sie den Mauszeiger über einen bestimmten Komponisten oder Stil, um zu sehen, wie er mit anderen in Beziehung steht.

Langfristige Struktur

MuseNet verwendet die neu berechneten und optimierten Kernel von Sparse Transformer, um ein 72-Schichten-Netzwerk mit 24 Aufmerksamkeitsköpfen zu trainieren – mit voller Aufmerksamkeit für einen Kontext von 4096 Token. Dieser lange Kontext kann ein Grund dafür sein, dass es in der Lage ist, sich langfristige Strukturen in einem Stück zu merken, wie in dem folgenden Beispiel, das Chopin imitiert:

Es kann auch musikalische melodische Strukturen erzeugen, wie in diesem Beispiel, das Mozart imitiert:

Musikgenerierung ist ein nützlicher Bereich, um den Sparse Transformer zu testen, da er sich auf einem Mittelweg zwischen Text und Bildern befindet. Sie hat die fließende Token-Struktur von Text (in Bildern kann man N Token zurückschauen und die Zeile darüber finden, während es in der Musik keine feste Zahl für den Rückblick auf den vorherigen Takt gibt). Dennoch können wir leicht hören, ob das Modell eine langfristige Struktur in der Größenordnung von Hunderten bis Tausenden von Token erfasst. Es ist viel offensichtlicher, wenn ein Musikmodell die Struktur durcheinanderbringt, indem es den Rhythmus ändert, als wenn ein Textmodell auf eine kurze Tangente geht.

Datensatz

Wir haben Trainingsdaten für MuseNet aus vielen verschiedenen Quellen gesammelt. ClassicalArchives und BitMidi haben ihre großen Sammlungen von MIDI-Dateien für dieses Projekt zur Verfügung gestellt, und wir haben auch mehrere Sammlungen online gefunden, darunter Jazz, Pop, afrikanische, indische und arabische Stile. Außerdem haben wir den MAESTRO-Datensatz verwendet.

Der Transformator wird auf sequenziellen Daten trainiert: Bei einer Reihe von Noten bitten wir ihn, die nächste Note vorherzusagen. Wir haben mit verschiedenen Methoden experimentiert, um die MIDI-Dateien in Token zu kodieren, die für diese Aufgabe geeignet sind. Erstens ein akkordweiser Ansatz, bei dem jede Kombination von gleichzeitig erklingenden Noten als individueller „Akkord“ betrachtet und jedem Akkord ein Token zugewiesen wurde. Zweitens versuchten wir, die musikalischen Muster zu verdichten, indem wir uns nur auf die Notenanfänge konzentrierten, und wir versuchten, dies mit Hilfe eines Bytepaar-Kodierungsschemas weiter zu komprimieren.

Wir versuchten auch zwei verschiedene Methoden zur Markierung des Zeitablaufs: entweder Token, die entsprechend dem Tempo des Stücks skaliert wurden (so dass die Token einen musikalischen Takt oder einen Bruchteil eines Takts repräsentierten), oder Token, die die absolute Zeit in Sekunden markierten. Wir haben uns für eine Kodierung entschieden, die Ausdruckskraft mit Prägnanz verbindet: die Kombination von Tonhöhe, Lautstärke und Instrumenteninformation in einem einzigen 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
Beispielkodierung, die Tonhöhe, Lautstärke und Instrument kombiniert.

Während des Trainings:

  1. Transponieren Sie die Noten, indem Sie die Tonhöhen anheben und absenken (später im Training reduzieren wir den Umfang der Transposition, damit die Generationen innerhalb der einzelnen Instrumentenbereiche bleiben).
  2. Anhebung der Lautstärke, indem die Gesamtlautstärke der verschiedenen Samples erhöht oder verringert wird.
  3. Anhebung des Timings (bei Verwendung der absoluten Zeit in Sekunden), indem die Stücke leicht verlangsamt oder beschleunigt werden.
  4. Mixup auf dem Token Embedding Space verwenden

Wir erstellen auch einen inneren Kritiker: Das Modell wird während der Trainingszeit gebeten, vorherzusagen, ob eine bestimmte Probe wirklich aus dem Datensatz stammt oder ob es sich um eine der eigenen vergangenen Generationen des Modells handelt. Dieser Wert wird verwendet, um Proben zur Generierungszeit auszuwählen.

Einbettungen

Wir haben verschiedene Arten von Einbettungen hinzugefügt, um dem Modell mehr strukturellen Kontext zu geben. Zusätzlich zu den standardmäßigen Positionseinbettungen haben wir eine gelernte Einbettung hinzugefügt, die den Zeitverlauf in einer bestimmten Probe verfolgt. Auf diese Weise erhalten alle Noten, die gleichzeitig erklingen, die gleiche zeitliche Einbettung. Dann fügen wir eine Einbettung für jede Note in einem Akkord hinzu (dies imitiert die relative Aufmerksamkeit, da es für das Modell einfacher ist zu lernen, dass die Note 4 auf die Note 3 oder die Note 4 des vorherigen Akkords zurückblicken muss). Schließlich fügen wir zwei strukturelle Einbettungen hinzu, die dem Modell mitteilen, wo sich ein bestimmtes Musikstück innerhalb des größeren Musikstücks befindet. Eine Einbettung unterteilt das größere Stück in 128 Teile, während die zweite Kodierung ein Countdown von 127 bis 0 ist, wenn sich das Modell dem (End-)Token nähert.

Wir sind gespannt, was die Leute kreieren! Wenn Sie ein Stück erstellen, das Ihnen gefällt, können Sie es auf einen kostenlosen Dienst wie Instaudio hochladen und uns dann den Link tweeten (die MuseNet-Demo hat einen Tweet-Button, der dabei hilft).

Wenn Sie daran interessiert sind, mehr über die Musikarbeit von OpenAI zu erfahren, können Sie sich bei unserem Team bewerben. Bitte schicken Sie uns eine E-Mail mit Vorschlägen für die MuseNet-Demo. Wir würden uns auch freuen, von Ihnen zu hören, wenn Sie daran interessiert sind, mit MuseNet zu komponieren, oder wenn Sie MIDI-Dateien haben, die Sie dem Trainingsset hinzufügen möchten.

MuseNet spielte am 25. April 2019 ein experimentelles Konzert, das auf dem Twitch-Kanal von OpenAI per Livestream übertragen wurde und bei dem kein Mensch (einschließlich uns) die Stücke zuvor gehört hatte.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.