MuseNet

Utworzyliśmy MuseNet, głęboką sieć neuronową, która może generować 4-minutowe kompozycje muzyczne z 10 różnymi instrumentami i może łączyć style od country przez Mozarta do Beatlesów. MuseNet nie został zaprogramowany na podstawie naszej wiedzy o muzyce, ale odkrył wzorce harmonii, rytmu i stylu, ucząc się przewidywać następny token w setkach tysięcy plików MIDI. MuseNet wykorzystuje tę samą technologię ogólnego przeznaczenia bez nadzoru, co GPT-2, model transformaty na dużą skalę, wyszkolony do przewidywania następnego tokena w sekwencji, czy to audio, czy tekstowej.

Próbki

Ponieważ MuseNet zna wiele różnych stylów, możemy łączyć pokolenia na nowe sposoby. Tutaj model otrzymuje 6 pierwszych nut Nokturnu Chopina, ale jest proszony o wygenerowanie utworu w stylu pop z fortepianem, perkusją, basem i gitarą. Modelowi udaje się w przekonujący sposób połączyć te dwa style, a cały zespół dołącza do niego około 30 sekundy później:

Wypróbuj MuseNet

Jesteśmy podekscytowani tym, jak muzycy i niemuzycy będą używać MuseNet do tworzenia nowych kompozycji!

W trybie prostym (wyświetlanym domyślnie) usłyszysz losowo wybrane próbki, które zostały wstępnie wygenerowane. Wybierz kompozytora lub styl, opcjonalnie początek słynnego utworu i zacznij generować. Pozwala to na poznanie różnorodności stylów muzycznych, które model może stworzyć. W trybie zaawansowanym możesz wejść w bezpośrednią interakcję z modelem. Uzupełnianie będzie trwało dłużej, ale stworzysz zupełnie nowy utwór.

Niektóre z ograniczeń MuseNet obejmują:

  • Instrumenty, o które pytasz, są silnymi sugestiami, a nie wymaganiami. MuseNet generuje każdą nutę poprzez obliczenie prawdopodobieństwa dla wszystkich możliwych nut i instrumentów. Model przesuwa się, aby uczynić Twój wybór instrumentu bardziej prawdopodobnym, ale zawsze jest szansa, że wybierze coś innego.
  • MuseNet ma trudniejszy czas z dziwnymi parami stylów i instrumentów (np. Chopin z basem i perkusją). Generacje będą bardziej naturalne, jeśli wybierzesz instrumenty najbliższe stylowi kompozytora lub zespołu.

Kompozytor i tokeny instrumentacji

Utworzyliśmy tokeny kompozytora i instrumentacji, aby dać większą kontrolę nad rodzajami próbek generowanych przez MuseNet. Podczas treningu, tokeny kompozytora i instrumentacji były dodawane do każdej próbki, tak aby model nauczył się wykorzystywać te informacje w przewidywaniu nut. W czasie generowania próbki, możemy uwarunkować model do tworzenia próbek w wybranym stylu, zaczynając od podpowiedzi takiej jak Rachmaninoff piano start:

Albo od podpowiedzi zespołu Journey, z fortepianem, basem, gitarą i perkusją:

Możemy zwizualizować embeddingi z MuseNet, aby uzyskać wgląd w to, czego nauczył się model. Używamy t-SNE do stworzenia dwuwymiarowej mapy podobieństwa cosinusowego różnych kompozytorów i stylów muzycznych.

Najedź kursorem na konkretnego kompozytora lub styl, aby zobaczyć, jak ma się on do innych.

Struktura długoterminowa

MuseNet używa rekompilacji i zoptymalizowanych jąder Sparse Transformer do wytrenowania 72-warstwowej sieci z 24 głowicami uwagi – z pełną uwagą nad kontekstem 4096 tokenów. Ten długi kontekst może być jednym z powodów, dla których sieć jest w stanie zapamiętać długoterminową strukturę w utworze, jak w poniższej próbce imitującej Chopina:

Może również tworzyć muzyczne struktury melodyczne, jak w tej próbce imitującej Mozarta:

Generowanie muzyki jest użyteczną domeną do testowania Sparse Transformer, ponieważ znajduje się w środku pomiędzy tekstem a obrazami. Posiada płynną strukturę tokenów tekstu (w obrazach możesz spojrzeć wstecz na N tokenów i znaleźć wiersz powyżej, podczas gdy w muzyce nie ma stałej liczby pozwalającej spojrzeć wstecz do poprzedniej miary). Mimo to możemy łatwo usłyszeć, czy model wychwytuje długoterminową strukturę rzędu setek do tysięcy tokenów. Jest to o wiele bardziej oczywiste, jeśli model muzyczny namiesza w strukturze poprzez zmianę rytmu, w sposób, w jaki jest to mniej oczywiste, jeśli model tekstowy pójdzie na krótką styczną.

Dataset

Zebraliśmy dane treningowe dla MuseNet z wielu różnych źródeł. ClassicalArchives i BitMidi przekazały swoje duże kolekcje plików MIDI na potrzeby tego projektu, a my znaleźliśmy również kilka kolekcji online, w tym jazz, pop, style afrykańskie, indyjskie i arabskie. Dodatkowo, użyliśmy zbioru danych MAESTRO.

Transformator jest trenowany na danych sekwencyjnych: podając zestaw nut, prosimy go o przewidzenie nadchodzącej nuty. Eksperymentowaliśmy z kilkoma różnymi sposobami kodowania plików MIDI w tokeny odpowiednie do tego zadania. Po pierwsze, podejście akordowe, które traktowało każdą kombinację nut brzmiących w jednym czasie jako indywidualny „akord” i przypisywało token do każdego akordu. Po drugie, próbowaliśmy skondensować wzorce muzyczne poprzez skupienie się tylko na początkach nut, i próbowaliśmy to jeszcze bardziej skompresować używając schematu kodowania parami bajtów.

Próbowaliśmy również dwóch różnych metod oznaczania upływu czasu: albo tokenów, które były skalowane zgodnie z tempem utworu (tak, że tokeny reprezentowały rytm muzyczny lub ułamek rytmu), albo tokenów, które oznaczały czas bezwzględny w sekundach. Wylądowaliśmy na kodowaniu, które łączy ekspresyjność ze zwięzłością: łącząc wysokość dźwięku, głośność i informacje o instrumencie w jednym tokenie.

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
Próbka kodowania, które łączy wysokość dźwięku, głośność i instrument.

Podczas treningu:

  1. Transponujemy nuty przez podnoszenie i obniżanie wysokości dźwięków (później w treningu zmniejszamy ilość transpozycji, aby pokolenia pozostały w poszczególnych zakresach instrumentów).
  2. Augmentuj głośność, zwiększając lub zmniejszając ogólną głośność różnych próbek.
  3. Augmentuj czas (kiedy używasz absolutnego czasu w sekundach kodowania), efektywnie lekko spowalniając lub przyspieszając kawałki.
  4. Użyj mixup na przestrzeni osadzania tokenów

Tworzymy również wewnętrznego krytyka: model jest proszony w czasie treningu o przewidzenie, czy dana próbka jest naprawdę ze zbioru danych, czy też jest to jedna z własnych przeszłych generacji modelu. Wynik ten jest używany do wyboru próbek w czasie generacji.

Embeddingi

Dodaliśmy kilka różnych rodzajów embeddingów, aby nadać modelowi więcej kontekstu strukturalnego. Oprócz standardowego osadzenia pozycyjnego, dodaliśmy wyuczone osadzenie, które śledzi upływ czasu w danej próbce. W ten sposób wszystkie nuty, które brzmią w tym samym czasie otrzymują to samo osadzenie czasowe. Następnie dodajemy osadzenie dla każdej nuty w akordzie (naśladuje to względną uwagę, ponieważ modelowi łatwiej będzie nauczyć się, że nuta 4 musi patrzeć wstecz na nutę 3, lub na nutę 4 poprzedniego akordu). Wreszcie, dodajemy dwa strukturalne osadzenia, które mówią modelowi, gdzie dana próbka muzyczna znajduje się w obrębie większego utworu muzycznego. Jedno z nich dzieli większy utwór na 128 części, podczas gdy drugie kodowanie jest odliczaniem od 127 do 0, gdy model zbliża się do (końcowego) tokena.

Jesteśmy podekscytowani słysząc, co ludzie tworzą! Jeśli stworzysz utwór, który Ci się spodoba, możesz przesłać go do darmowego serwisu, takiego jak Instaudio, a następnie przesłać nam link na Twitterze (demo MuseNet ma przycisk tweet, który w tym pomoże).

Jeśli chcesz dowiedzieć się więcej o pracy OpenAI nad muzyką, rozważ dołączenie do naszego zespołu. Nie wahaj się napisać do nas maila z sugestiami dotyczącymi dema MuseNet. Chętnie usłyszymy też od Ciebie, jeśli jesteś zainteresowany głębszym komponowaniem z MuseNet lub jeśli masz pliki MIDI, które chciałbyś dodać do zestawu treningowego.

MuseNet zagrał eksperymentalny koncert 25 kwietnia 2019 roku, livestreamowany na kanale Twitch OpenAI, w którym żaden człowiek (w tym my) nie słyszał wcześniej utworów.

.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.