Imprimer
Catégorie : Musique assistée par ordinateur


Photo de l'auteur, Dr Christopher Melen

Christopher Melen est l'ingénieur logiciel de recherche de PRiSM, le laboratoire du Conservatoire de Manchester. Il conçoit et développe la technologie qui sous-tend ses recherches et ses collaborations. Dans ce premier volet sur l'IA et la musique, Chris présente la synthèse neuronale, une technique passionnante au coeur du travail artistique de l'équipe PRiSM.

La synthèse neuronale suscite un grand intérêt en cette période importante pour l'IA et la musique - et constitue un concept clé dans l'exploration par PRiSM-RNCM de ce que signifie la co-création de musique par l'homme et l'ordinateur.

 

 

 

 

 




Génération automatique d’un modèle des 32 Sonates de Beethoven, par la station de deep learning Sample RNN

Ces dernières années, l'intérêt pour l'apprentissage automatique (Machine Learning, ML) et l'intelligence artificielle (Artificial Intelligence, AI) a connu une croissance accélérée dans de nombreux secteurs et disciplines. L'émergence de logiciels tels que TensorFlow (Google) et PyTorch (FaceBook) a été un facteur important. Cela a rendu l’apprentissage automatique (ML/AI) plus accessible aux utilisateurs non spécialisés. L'omniprésence du langage de programmation Python ne peut pas non plus être ignorée comme facteur de ce développement rapide, étant donné son accessibilité et sa relative facilité d'utilisation, par rapport à des langages tels que C++. L'essor récent du ML/AI a suscité un regain d'intérêt pour l'utilisation d'outils et de techniques informatiques dans les disciplines créatives, et peut-être nulle part ailleurs de manière aussi évidente que dans la musique.

Nous nous concentrons ici sur un domaine de recherche qui a récemment suscité beaucoup d'intérêt, à savoir la "synthèse neuronale", c'est-à-dire la génération de sons basée sur des réseaux neuronaux artificiels. Cet article propose une introduction au sujet et donne un bref aperçu des solutions actuellement disponibles dans ce domaine.

Réseaux artificiels de neurones
À quoi devons-nous l'essor actuel de l'IA ? La naissance du web a coïncidé avec le début de ce que l'on a appelé "l'hiver de l'IA", qui a vu la première grande vague de recherche sur l'IA s'arrêter après une décennie de succès médiatique, mais qui n'a finalement pas répondu aux attentes. Après ce creux du début des années 90, l'enthousiasme pour l'IA a commencé à se raviver au début de ce siècle. La croissance de l'intérêt depuis cette époque a été alimentée en partie par l'augmentation inévitable de la capacité de calcul au fil du temps, la croissance du Cloud et l'accessibilité considérablement accrue des composants matériels tels que les GPU. Cette croissance régulière s'est accélérée au cours de la dernière décennie grâce à l'émergence de solutions logicielles qui ont rendu les réseaux neuronaux plus accessibles et plus faciles à programmer. En effet, les plates-formes logicielles de ML telles que TensorFlow et PyTorch peuvent être comparées aux "killer apps" (navigateurs Web graphiques comme Netscape et messagerie électronique en ligne), qui ont conduit à la croissance exponentielle du Web au milieu des années 90.

Un réseau neuronal, ou réseau de neurones, est un système composé de neurones artificiels, des unités d'entrée-sortie calquées sur le fonctionnement des cellules de systèmes biologiques tels que ceux du cerveau. Les premiers réseaux de ce type datent de la fin des années 1950 et ont été développés sur des systèmes spécialisés dans des laboratoires de recherche.


Figure 1 : Le perceptron, le type le plus simple de réseau neuronal

Les réseaux neuronaux sont généralement constitués de plusieurs couches, chacune composée d'un ou plusieurs neurones. Une couche d'entrée et de sortie peut encapsuler plusieurs couches internes ou "cachées", une seule de ces couches étant constituée de plusieurs centaines, voire de milliers de cellules. Cependant, les neurones artificiels eux-mêmes sont généralement des structures très simples, essentiellement des systèmes d'entrée-sortie, auxquels on ajoute des poids et des biais aléatoires. La figure 1 montre le perceptron, la forme la plus simple de réseau neuronal, constitué d'une seule unité ou neurone. On peut y voir quatre entrées distinctes (an), chacune multipliée par un poids (wn). Une valeur d'unité de biais (b) est ajoutée à la somme de celles-ci et le résultat est multiplié à la sortie par une fonction d'activation (s), dont la valeur détermine si le neurone se déclenche ou non.

Pour qu'un réseau neuronal apprenne, il doit être formé, ce qui implique d'exposer de manière répétée le réseau à un ensemble de données d'apprentissage, un processus laborieux qui peut prendre plusieurs heures, voire plusieurs jours, selon la taille et la complexité des données d'entrée. Au cours de plusieurs "époques" ou passages complets dans l'ensemble de données, les poids et les biais de chaque couche du réseau sont automatiquement ajustés et réglés.


Figure 2 : Régression linéaire, montrant un ensemble de points de données aléatoires et la ligne de meilleur ajustement.

Historiquement, le processus de formation des réseaux neuronaux trouve son précurseur dans le concept mathématique de régression linéaire, qui consiste à trouver une "ligne de meilleur ajustement" pour un ensemble de points de données. Dans les deux cas, le degré d'adéquation est mesuré à l'aide d'une fonction de perte, qui renvoie l'erreur entre l'étape de formation actuelle et l'ensemble de données.

Notre fonction de perte doit être plus faible à la fin de la formation qu'au début, un processus connu sous le nom de “minimisation de la perte”.

Une fois que notre réseau a été formé, le "modèle" résultant peut être enregistré dans un stockage permanent et utilisé pour générer une nouvelle sortie basée sur le matériel source appris.

En utilisant TensorFlow, par exemple, il suffit de quelques minutes pour mettre en place un réseau qui peut être entraîné sur l'intégralité des sonnets de Shakespeare, puis utilisé pour générer des imitations passables de l'œuvre du Barde (l'extrait suivant est extrait du site de TensorFlow, sous licence Creative Commons Attribution 4.0) :


Exemple de Sonnet de Shakespeare en Tensorflow

Si l’on n’obtient pas réellement une fidèle imitation, on peut au moins obtenir des variations intéressantes. Notez que les résultats ci-dessus sont générés après seulement quelques séquences, et qu'une plus grande précision peut être obtenue par un entraînement supplémentaire, sur de nombreuses séquences.

Étant donné le succès des réseaux neuronaux dans la modélisation des textes, on peut raisonnablement penser que ces mêmes processus pourraient, au moins en principe, être appliqués à d'autres types de séquences sémantiques, comme par exemple la musique. Il est important à ce stade de reconnaître ici l'existence de deux domaines distincts et communément manipulés en musique par ordinateur, le premier étant le signal audio, et le second la représentation symbolique de ces signaux, sous des formes telles que le texte écrit ou la partition musicale. Plusieurs tentatives ont été réalisées pour modéliser ce dernier, par exemple MuseNet d'OpenAi, qui traite et génère des fichiers MIDI. Nous nous concentrerons ici sur un type différent et sans doute plus intéressant de modèle génératif neuronal, qui, plutôt que des données symboliques, prend des signaux audio bruts en entrée, générant de nouveaux signaux audio en sortie (té. Il existe un certain nombre de systèmes "de bout en bout" de ce type, dont les deux plus connus sont WaveNet et SampleRNN.

WaveNet
WaveNet, un système développé par le projet DeepMind (soutenu par Google depuis 2014), utilise des réseaux neuronaux pour générer un nouvel audio à partir de jeux de données d'échantillons audio bruts (voir l'article de 2016 Wavenet : A Generative Model for Raw Audio). Il a été développé à l'origine dans le contexte de la synthèse de la parole à partir du texte (TSS), mais a également été adopté comme outil créatif par les musiciens et les compositeurs (par exemple Sam Salem, de notre laboratoire PRiSM-RNCM). WaveNet utilise une classe spécifique de réseau, le réseau neuronal convolutif (CNN ou ConvNet), bien connu des domaines du traitement de l'image et de la vision par ordinateur, où il a connu un grand succès dans des tâches telles que la classification d'images et la détection de caractéristiques. Le fonctionnement de base d'un CNN implique l'application incrémentielle d'un ou plusieurs filtres sur la surface bidimensionnelle d'une image d'entrée. Grâce à un processus de multiplication et de sommation, ces filtres (ou "noyaux") sont capables de résumer le contenu en pixels de différentes parties de l'image à la fois. Vous trouverez ci dessous une explication plus détaillée. Pour la génération audio, étant basée sur la séquence, la dimensionnalité est réduite de 2 à la seule dimension du temps, mais le principe et le fonctionnement de base restent les mêmes.


Figure 3 : Convolution 2D. Chaque cellule de la matrice d'entrée est d'abord multipliée par la cellule correspondante du noyau. Ces nouvelles valeurs sont ensuite additionnées, le résultat représentant une seule cellule dans la matrice de sortie. L'ensemble du processus est répété avec le noyau décalé vers la droite d'un ou plusieurs pas, jusqu'à ce que toute la matrice d'entrée ait été consommée.

Le modèle génératif de WaveNet est composé de plusieurs couches de convolution, qui se combinent pour produire une distribution de probabilité pour l'échantillon suivant, conditionnellement à tous les échantillons précédents. WaveNet utilise une forme modifiée de convolution impliquant un processus appelé dilatation (parfois appelé "convolution avec trous"), dans lequel les sorties des couches cachées successives sont "élaguées", certaines sorties étant omises comme entrées de la couche suivante. Comme le montre la figure 4 ci-dessous, à chaque nouvelle couche, l'entrée de la couche précédente est dilatée, l'augmentation exponentielle de ces dilatations permettant au système de s'étendre rapidement à des milliers d’échantillons.


Figure 4 : Architecture de WaveNet.

WaveNet s'est avéré très efficace pour produire une sortie audio de haute qualité, en particulier pour la synthèse vocale, où il représente une amélioration considérable par rapport aux efforts antérieurs dans ce domaine (qui consistaient généralement à concaténer de nombreux petits échantillons à partir de données audio préexistantes, ce qui donnait une sortie à consonance "robotique"). Il est aujourd’hui utilisé entre autre par Google dans son produit Google Assistant. Malgré des concurrents notables, WaveNet reste le modèle le plus populaire de génération neuronale d'audio utilisé aujourd'hui (une implémentation TensorFlow peut être trouvée ici). Cependant, la nature conditionnelle de l'architecture, où chaque échantillon généré dépend des échantillons de toutes les étapes précédentes, a un impact majeur sur les performances. Comme le réseau est essentiellement un arbre binaire, son coût de calcul global est de O(2^L), ce qui rend le système peu pratique pour les grandes valeurs de L.

Quelques exemples audio générés à l'aide de WaveNet peuvent être trouvés dans la documentation de Google sur la synthèse vocale ici, et également intégrés dans le blog original de DeepMind+ sur l'architecture WaveNet.

WaveNet a obtenu des résultats particulièrement impressionnants dans la synthèse vocale, où une focalisation discrète est un avantage net. WaveNet a sans doute eu moins de succès dans la modélisation de la structure musicale au-delà de quelques secondes, ce qui ne veut pas dire qu'il est incapable de produire des séquences musicales étendues, mais plutôt que leur cohérence structurelle tend à diminuer à mesure que les échelles de temps augmentent.

SampleRNN
Comme WaveNet, SampleRNN traite directement des échantillons audio bruts, mais diffère par le type de réseau neuronal qu'il utilise. Alors que WaveNet est basé sur des réseaux de convolution, SampleRNN utilise un type de réseau neuronal connu sous le nom de réseau neuronal récurrent, ou RNN. Ces réseaux ont été développés pour traiter les données séquentielles, telles que les séries temporelles, ou tout ce qui peut être modélisé de manière séquentielle, comme le texte, et même les données audio telles que la parole ou la musique. Contrairement aux réseaux simples de type "feedforward" comme le perceptron, les RNN conservent une sorte de "mémoire" interne de leurs états précédents (d'où le terme "récurrent").


Figure 5 : réseau neuronal récurrent (RNN).

La figure 5 illustre la structure de base d'un RNN, déroulée sur plusieurs étapes temporelles, de t-1 à t+1. L'état de sortie d'une unité à une étape est introduit comme état d'entrée dans la suivante. Notez que cette structure déroulée est ici purement schématique, car un RNN typique sera en fait constitué d'une seule unité qui itère (?réitère?) sur les pas de temps dans une boucle, en ré-injectant sa propre sortie à chaque pas. En plus de "se souvenir", ces réseaux sont également capables d'"oublier", les états dépassant une certaine limite de temps configurable étant effacés de l'histoire.

Comme WaveNet, la sortie du modèle SampleRNN représente une distribution de probabilité, à partir de laquelle le prochain échantillon peut être prédit. Comme nous l'avons noté lors de la discussion sur WaveNet, l'un des principaux problèmes de la modélisation des signaux audio est celui de l'échelle : les structures d'un signal existent souvent sur plusieurs échelles simultanément, les échantillons ayant des relations sémantiques avec les échantillons voisins et ceux séparés par de nombreuses unités telmporelles. Un problème connexe est l'écart entre la dimensionnalité du signal d'entrée audio brut et cette sortie échantillon par échantillon. Même avec une fréquence d'échantillonnage faible de 16 kHz, il faut généralement produire plusieurs milliers d'échantillons avant d'obtenir un résultat reconnaissable ou utile. La modélisation des dépendances à long terme dans l'ensemble des données d'entrée est donc intrinsèquement problématique.

Pour résoudre ces problèmes, SampleRNN adopte une architecture hiérarchique, constituée de réseaux récurrents distincts superposés en niveaux, chaque niveau ayant une résolution temporelle plus large que le niveau immédiatement inférieur. Des trames d'échantillons d'une taille fixe sont consommées à chaque niveau, le niveau le plus bas résolvant au niveau des échantillons individuels (le niveau le plus bas n'est en fait pas un RNN mais plutôt un perceptron multicouche ou MLP, un simple réseau de type feed-forward). Chaque niveau, à l'exception du plus élevé, est également conditionné par la sortie du niveau immédiatement supérieur.

L'architecture SampleRNN a été présentée publiquement dans l'article SampleRNN : An Unconditional End-to-End Neural Audio Generation Model1 , présenté à l'ICLR2 en 2017. Les auteurs ont publié une implémentation peu de temps après, mise à disposition sur GitHub. Le code n'est pas actuellement en développement actif, et dépend de plusieurs logiciels obsolètes (dont Python 2.7, non supporté à partir de 2020), il est donc effectivement déprécié.

Quelques exemples d'audio générés avec SampleRNN peuvent être trouvés ici. Le même article compare les résultats de SampleRNN et WaveNet.

SampleRNN s'est fait plus largement connaître en 2018 par la publication de Relentless Doppelganger de Dadabots, un flux continu de death metal technique généré à l'aide de SampleRNN publié sur YouTube. Depuis lors, un certain nombre d'expériences génératives similaires utilisant SampleRNN ont fait surface, avec des degrés de réussite variables, et aucune ne capturant tout à fait le nihilisme musical malicieusement faux des Dadabots. Dadabots a publié son propre code sur GitHub, mais comme il est basé sur la base de code originale de Python 2 plutôt que sur une nouvelle implémentation, il est actuellement difficile de le réutiliser.

Conclusions
Dans cet article, nous avons examiné l'un des domaines les plus passionnants de la recherche actuelle à l'interface entre la musique et la technologie, la synthèse neuronale, et nous avons brièvement considéré deux des concurrents les plus remarqués dans ce domaine - WaveNet et SampleRNN. Depuis l’apparition de ces outils, d'autres propositions ont émergé, et n’ont pu être examinées ici. WaveNet en particulier a donné naissance à un certain nombre de variantes, chacune cherchant à améliorer d'une manière ou d'une autre la conception de l'original (par exemple nv-wavenet de NVIDIA). Au-delà de ce qu'offrent WaveNet et SampleRNN, on s'intéresse de près à la façon dont les réseaux adversariaux génératifs (GAN) - un type d'architecture de réseau neuronal qui a connu un succès alarmant (?) dans le domaine de la synthèse d'images - pourraient être appliqués au domaine audio.

PRiSM va bientôt publier sa propre mise en œuvre, à l'aide de TensorFlow 2, et nous expliquerons les caractéristiques du PRiSM SampleRNN dans notre prochain article - lorsque nous mettrons également le code à disposition sur les pages GitHub de PRiSM, ainsi qu'un certain nombre de modèles pré-entraînés et optimisés.

Ces pistes promettent des possibilités passionnantes d'exploration future dans cet espace où la science, la technologie et les arts créatifs semblent de plus en plus se chevaucher et cohabiter confortablement. Dans le même temps, nous ne pouvons ignorer les questions philosophiques qui se posent - des questions non seulement d'ordre esthétique, mais aussi, et c'est plus urgent, d'ordre éthique. Nous connaissons bien les effets de l'IA sur l'industrie et le commerce, mais dans quelle mesure pouvons-nous être à l'aise avec des technologies qui menacent apparemment de remplacer les humains dans des activités telles que les arts créatifs, où l'action humaine est traditionnellement considérée comme inéliminable ? Une machine peut-elle vraiment "composer" de la musique ? Qu'est-ce que cela signifierait si un ordinateur était capable de produire une musique capable de nous émouvoir, ou de nous faire pleurer ?

1 https://arxiv.org/abs/1612.07837
2 The International Conference on Learning Representations (ICLR)

Christopher Melen, traduction Jonathan Bell
Lien vers la publication originale:

https://www.rncm.ac.uk/research/research-centres-rncm/prism/prism-blog/a-short-history-of-neural-synthesis/

 

© L'ÉDUCATION MUSICALE 2021