Qu’est-ce que l’apprentissage profond. Réseaux de neurones et deep learning : l’avenir est proche

Qu’est-ce que l’apprentissage profond ? 3 mars 2016

De nos jours, on parle des technologies d’apprentissage profond à la mode comme s’il s’agissait d’une manne tombée du ciel. Mais les intervenants comprennent-ils réellement de quoi il s’agit ? Mais cela n'a aucun concept définition formelle, et il combine toute une pile de technologies. Dans cet article, je souhaite expliquer de manière aussi populaire et essentielle que possible ce qui se cache derrière ce terme, pourquoi il est si populaire et ce que ces technologies nous apportent.


En bref, ce nouveau terme (apprentissage profond) concerne la manière d’assembler une abstraction (représentation) plus complexe et plus profonde à partir de quelques abstractions simples. malgré le fait que même les abstractions les plus simples doivent être assemblées par l'ordinateur lui-même et non par une personne. Ceux. Il ne s’agit plus seulement d’apprendre, mais de méta-apprentissage. Au sens figuré, l’ordinateur lui-même doit apprendre la meilleure façon d’apprendre. Et, en fait, c’est exactement ce qu’implique le terme « profond ». Presque toujours, ce terme est appliqué aux réseaux de neurones artificiels qui utilisent plus d’une couche cachée, donc formellement « profond » signifie également une architecture de réseau de neurones plus profonde.

Ici, dans la diapositive de développement, vous pouvez clairement voir en quoi l'apprentissage profond diffère de l'apprentissage régulier. je le répète, Ce qui est unique dans le deep learning, c'est que la machine trouve elle-même les fonctionnalités.(les caractéristiques clés de quelque chose par lequel il est plus facile de séparer une classe d'objets d'une autre) et structure ces signes de manière hiérarchique : les plus simples sont combinés en plus complexes. Ci-dessous, nous examinerons cela avec un exemple.

Regardons un exemple de tâche de reconnaissance d'image : auparavant, ils en inséraient une énorme dans un réseau neuronal classique avec une seule couche (1024 × 768 - environ 800 000 valeurs numériques) et j'ai vu l'ordinateur mourir lentement, étouffé par le manque de mémoire et l'incapacité de comprendre quels pixels sont importants pour la reconnaissance et lesquels ne le sont pas. Sans parler de l’efficacité de cette méthode. Voici l'architecture d'un tel réseau neuronal régulier (peu profond).

Ensuite, ils ont écouté comment le cerveau distingue les caractéristiques, et il le fait de manière strictement hiérarchique, et ils ont également décidé d'extraire une structure hiérarchique des images. Pour ce faire, il était nécessaire d'ajouter davantage de couches cachées (couches situées entre l'entrée et la sortie ; en gros, les étapes de transformation de l'information) au réseau neuronal. Bien qu’ils aient décidé de le faire presque immédiatement après l’invention des neurones, les réseaux comportant une seule couche cachée ont été formés avec succès. Ceux. En principe, les réseaux profonds existent depuis aussi longtemps que les réseaux classiques, mais nous ne pouvions tout simplement pas les former. Qu'est-ce qui a changé ?

En 2006, plusieurs chercheurs indépendants ont immédiatement résolu ce problème (en outre, les capacités matérielles étaient déjà suffisamment développées et des cartes vidéo assez puissantes sont apparues). Ces chercheurs sont : Geoffrey Hinton (et son collègue Ruslan Salakhutidinov) avec la technique de pré-entraînement de chaque couche d'un réseau de neurones avec une machine de Boltzmann contrainte (pardonnez-moi ces termes...), Yann LeCun avec les réseaux de neurones convolutifs, et Yoshuay Bengio avec auto-encodeurs en cascade. Les deux premiers ont été immédiatement recrutés respectivement par Google et Facebook. Voici deux conférences : une - Hinton, l'autre - Lyakuna, dans lequel ils expliquent ce qu'est l'apprentissage profond. Personne mieux qu’eux ne peut vous en parler. Encore un cool conférence Schmidhuber sur le développement du deep learning, également l'un des piliers de cette science. Et Hinton propose également un excellent cours sur les neurones.

Que peuvent faire les réseaux de neurones profonds maintenant ? Ils sont capables de reconnaître et de décrire des objets ; on pourrait dire qu’ils « comprennent » de quoi il s’agit. Il s'agit de reconnaître des significations.

Regardez simplement cette vidéo de reconnaissance en temps réel de ce que voit la caméra.

Comme je l'ai déjà dit, les technologies de deep learning sont tout un groupe de technologies et de solutions. J'en ai déjà répertorié plusieurs dans le paragraphe ci-dessus, un autre exemple est celui des réseaux récurrents, qui sont justement utilisés dans la vidéo ci-dessus pour décrire ce que voit le réseau. Mais le représentant le plus populaire de la technologie de cette classe- ce sont toujours des réseaux de neurones convolutifs LyaKun. Ils sont construits par analogie avec les principes de fonctionnement du cortex visuel du cerveau du chat, dans lequel ont été découvertes des cellules dites simples qui répondent à des lignes droites sous différents angles, et complexe - dont la réaction est associée à l'activation d'un certain ensemble de cellules simples. Bien que, pour être honnête, LaCun lui-même ne se concentre pas sur la biologie, il décide tâche spécifique(regardez ses conférences), et puis ça a coïncidé.

Pour le dire très simplement, les réseaux convolutifs sont des réseaux où le principal élément structurel de l'apprentissage est un groupe (une combinaison) de neurones (généralement un carré de 3x3, 10x10, etc.), et pas un seul. Et à chaque niveau du réseau, des dizaines de ces groupes sont formés. Le réseau trouve des combinaisons de neurones qui maximisent les informations sur l'image. Au premier niveau, le réseau extrait les éléments les plus fondamentaux et structurellement simples de l'image - on pourrait dire, les unités de construction : frontières, traits, segments, contrastes. Plus haut se trouvent déjà des combinaisons stables d'éléments du premier niveau, et ainsi de suite dans la chaîne. Je voudrais souligner une fois de plus séparément la principale caractéristique du deep learning : les réseaux eux-mêmes forment ces éléments et décident lesquels d'entre eux sont les plus importants et lesquels ne le sont pas. C’est important, car dans le domaine de l’apprentissage automatique, la création de fonctionnalités est essentielle et nous arrivons désormais au stade où l’ordinateur lui-même apprend à créer et à sélectionner des fonctionnalités. La machine elle-même identifie une hiérarchie de fonctionnalités informatives.

Ainsi, au cours du processus d'apprentissage (visualisation de centaines d'images), le réseau convolutif forme une hiérarchie de caractéristiques de différents niveaux de profondeur. Au premier niveau, ils peuvent mettre en valeur par exemple de tels éléments (contraste réfléchissant, angle, bordure, etc.).


Au deuxième niveau, ce sera déjà un élément parmi les éléments du premier niveau. Le troisième - à partir du deuxième. Vous devez comprendre que cette photo n'est qu'une démonstration. Maintenant à application industrielle, ces réseaux comportent de 10 à 30 couches (niveaux).

Une fois qu'un tel réseau s'est formé, nous pouvons l'utiliser pour la classification. Après avoir donné une image en entrée, des groupes de neurones de la première couche parcourent l'image, s'activant aux endroits où se trouve un élément de l'image correspondant à un élément spécifique. Ceux. ce réseau analyse l'image en parties - d'abord en lignes, traits, angles d'inclinaison, puis en parties plus complexes et à la fin il arrive à la conclusion que l'image est issue de ce genre de combinaison éléments de base- c'est le visage.

En savoir plus sur les réseaux convolutifs -

Il y a aujourd’hui beaucoup de discussions et d’écrits sur les réseaux de neurones artificiels, à la fois dans le contexte du big data et de l’apprentissage automatique et en dehors de ceux-ci. Dans cet article, nous rappellerons le sens de ce concept, exposerons à nouveau le champ de son application et parlerons également de approche importante, qui est associé aux réseaux de neurones - apprentissage profond, nous décrirons son concept, ainsi que les avantages et les inconvénients dans des cas d'utilisation spécifiques.

Qu'est-ce qu'un réseau de neurones ?

Comme vous le savez, le concept de réseau neuronal (NN) vient de la biologie et constitue un modèle quelque peu simplifié de la structure du cerveau humain. Mais n’entrons pas dans les profondeurs des sciences naturelles : le moyen le plus simple est d’imaginer un neurone (y compris artificiel) comme une sorte de boîte noire avec de nombreux trous d’entrée et une sortie.

Mathématiquement, un neurone artificiel transforme un vecteur de signaux d'entrée (impacts) X en un vecteur de signaux de sortie Y à l'aide d'une fonction appelée fonction d'activation. Au sein de la connexion (réseau de neurones artificiels - ANN), trois types de neurones fonctionnent : l'entrée (réception d'informations de monde extérieur- les valeurs des variables qui nous intéressent), la sortie (renvoyant les variables souhaitées - par exemple, des prévisions ou des signaux de contrôle), ainsi que les neurones intermédiaires qui remplissent certaines fonctions internes (« cachées »). Un ANN classique se compose donc de trois couches ou plus de neurones, et dans la deuxième couche et les suivantes (« cachée » et sortie), chacun des éléments est connecté à tous les éléments de la couche précédente.

Il est important de rappeler le concept retour, qui détermine le type de structure ANN : transmission directe du signal (les signaux passent séquentiellement de la couche d'entrée à travers la couche cachée et entrent dans la couche de sortie) et structure récurrente, lorsque le réseau contient des connexions remontant, des neurones les plus éloignés vers les plus proches). Tous ces concepts constituent l'information minimale nécessaire pour passer au niveau suivant de compréhension de l'ANN : former un réseau de neurones, classer ses méthodes et comprendre les principes de fonctionnement de chacune d'elles.

Formation aux réseaux de neurones

Nous ne devons pas oublier pourquoi de telles catégories sont utilisées en général - sinon nous risquons de nous enliser dans des mathématiques abstraites. En fait, les réseaux de neurones artificiels désignent une classe de méthodes permettant de résoudre certains problèmes. problèmes pratiques, parmi lesquels les principaux sont les problèmes de reconnaissance de formes, de prise de décision, d'approximation et de compression de données, ainsi que les problèmes les plus intéressants pour nous d'analyse et de prévision de clusters.

Sans tomber dans l’autre extrême et sans entrer dans le détail du fonctionnement des méthodes ANN dans chaque cas précis, rappelons qu’en toutes circonstances c’est la capacité d’un réseau de neurones à apprendre (avec un professeur ou « tout seul »). ) c'est point clé l'utiliser pour résoudre des problèmes pratiques.

En général, la formation d’un ANN est la suivante :

  1. les neurones d'entrée reçoivent des variables (« stimuli ») de l'environnement externe ;
  2. conformément aux informations reçues, les paramètres libres du réseau neuronal changent (les couches intermédiaires de neurones fonctionnent) ;
  3. En raison des changements dans la structure du réseau neuronal, le réseau « réagit » différemment aux informations.

C'est comme ça algorithme général entraîner un réseau neuronal (rappelez-vous le chien de Pavlov - oui, le mécanisme interne de formation réflexe conditionné c’est exactement ça – et oublions tout de suite : après tout, notre contexte suppose de fonctionner avec des concepts et des exemples techniques).

Il est clair qu’un algorithme d’apprentissage universel n’existe pas et, très probablement, ne peut pas exister ; Conceptuellement, les approches d’apprentissage sont divisées en apprentissage supervisé et apprentissage non supervisé. Le premier algorithme suppose que pour chaque vecteur d'entrée (« apprentissage »), il existe une valeur requise du vecteur de sortie (« cible ») - ainsi, ces deux valeurs forment une paire d'apprentissage, et l'ensemble de ces paires est le ensemble de formation. Dans le cas d'un apprentissage non supervisé, l'ensemble de formation est constitué uniquement de vecteurs d'entrée - et cette situation est plus plausible du point de vue de la vie réelle.

Apprentissage profond

Le concept d'apprentissage profond fait référence à une autre classification et désigne une approche de formation de structures dites profondes, qui incluent des réseaux neuronaux à plusieurs niveaux. Un exemple simple dans le domaine de la reconnaissance d'images : il est nécessaire d'apprendre à une machine à identifier des traits de plus en plus abstraits par rapport à d'autres traits abstraits, c'est-à-dire à déterminer la relation entre l'expression de l'ensemble du visage, des yeux et de la bouche, et, en fin de compte, des groupes de pixels colorés mathématiquement. Ainsi, dans un réseau neuronal profond, chaque niveau de fonctionnalités possède sa propre couche ; il est clair que pour former un tel « colosse », l’expérience appropriée des chercheurs et le niveau de matériel. Les conditions favorables à l'apprentissage neuronal profond ne se sont développées qu'en 2006 - et huit ans plus tard, nous pouvons parler de la révolution que cette approche a produite dans l'apprentissage automatique.

Ainsi, tout d'abord, dans le contexte de notre article, il convient de noter ce qui suit : dans la plupart des cas, l'apprentissage profond n'est pas contrôlé par les humains. Autrement dit, cette approche implique la formation d'un réseau de neurones sans enseignant. C’est le principal avantage de l’approche « profonde » : l’apprentissage automatique supervisé, notamment dans le cas de structures profondes, nécessite d’énormes coûts de temps – et de main d’œuvre. L'apprentissage profond est une approche qui modélise l'humain pensée abstraite(ou du moins représente une tentative de s'en approcher) plutôt que de l'utiliser.

L'idée, comme d'habitude, est merveilleuse, mais des problèmes tout à fait naturels surgissent dans la manière d'approcher - en premier lieu, enracinés dans ses prétentions à l'universalité. En fait, même si les approches d’apprentissage profond ont connu des succès significatifs dans le domaine de la reconnaissance d’images, le même traitement du langage naturel soulève encore bien plus de questions que de réponses. Il est évident que dans les n années à venir, il est peu probable qu'il soit possible de créer un « Léonard de Vinci artificiel » ou même - du moins ! - « l'homo sapiens artificiel ».

Mais les chercheurs en intelligence artificielle sont déjà confrontés à la question de l’éthique : les craintes exprimées dans tout film de science-fiction qui se respecte, de « Terminator » à « Transformers », ne paraissent plus drôles (les réseaux de neurones modernes et sophistiqués peuvent déjà être considérés comme un modèle plausible du travail du cerveau de l'insecte !), mais sont clairement inutiles pour l'instant.

L'avenir technologique idéal nous apparaît comme une époque où l'homme pourra déléguer la plupart de ses pouvoirs à une machine - ou du moins lui permettre de faciliter une partie importante de son travail intellectuel. Le concept d’apprentissage profond est un pas vers ce rêve. Le chemin à parcourir est long, mais il est déjà clair que les réseaux de neurones et les approches en constante évolution qui leur sont associées sont capables de réaliser les aspirations des écrivains de science-fiction au fil du temps.

La révolution à venir robots intelligents est prévue tous les dix ans depuis les années 1950. Cependant, cela ne s’est jamais produit. Des progrès sur le terrain intelligence artificielle s'est déroulé de manière incertaine, parfois ennuyeuse, provoquant la déception de nombreux passionnés. Succès visibles - ordinateur Bleu profond, créé au milieu des années 1990 par IBM et qui a battu Garry Kasparov aux échecs en 1997, ou l'apparition d'un traducteur électronique à la fin des années 1990 - étaient plus le résultat de calculs « grossiers » que le transfert de mécanismes perception humaine sur les processus informatiques.

Cependant, l’histoire de la déception et de l’échec est en train de changer radicalement. Il y a à peine dix ans, les algorithmes de vision par ordinateur et de reconnaissance d’objets pouvaient identifier une sphère ou une boîte sur un fond uni. Ils peuvent désormais reconnaître les visages humains aussi bien que les humains, même dans des environnements complexes et complexes. fond naturel. Il y a six mois, Google a lancé une application pour smartphones capable de traduire du texte à partir de plus de 20 langues étrangères en lisant des mots issus de photographies, de panneaux routiers ou de textes manuscrits !

Tout cela est devenu possible après qu'il est devenu clair que certaines vieilles idées dans le domaine des réseaux de neurones, si elles étaient légèrement modifiées en ajoutant « vie », c'est-à-dire projeter les détails de la perception humaine et animale peut donner un résultat époustouflant auquel personne ne s'attendait. Cette fois, la révolution de l’intelligence artificielle semble bien réelle.

La recherche sur les réseaux de neurones dans le domaine de l'apprentissage automatique a toujours été consacrée à la recherche de nouvelles techniques de reconnaissance. différents types données. Ainsi, un ordinateur connecté à la caméra doit, grâce à un algorithme de reconnaissance d'image, être capable de distinguer mauvaise qualité visage humain, une tasse de thé ou un chien. Historiquement, cependant, l’utilisation des réseaux de neurones à ces fins s’est accompagnée de difficultés importantes. Même un succès mineur nécessitait une intervention humaine - les gens ont aidé le programme à déterminer caractéristiques importantes images, telles que des bordures d’images ou des formes géométriques simples. Algorithmes existants Ils ne pouvaient pas apprendre à le faire eux-mêmes.

La situation a radicalement changé grâce à la création de ce qu'on appelle réseaux de neurones avec apprentissage profond, qui peut désormais analyser une image presque aussi efficacement qu’un humain. De tels réseaux neuronaux utilisent une image de mauvaise qualité comme entrée pour les « neurones » du premier niveau, qui transmettent ensuite « l’image » via des connexions non linéaires aux neurones du niveau suivant. Après un certain entraînement, les « neurones » sont plus niveaux élevés peut utiliser des aspects plus abstraits d’une image pour la reconnaissance. Par exemple, ils peuvent utiliser des détails tels que les bordures de l’image ou les caractéristiques de sa localisation dans l’espace. Étonnamment, de tels réseaux peuvent apprendre à estimer les caractéristiques les plus importantes d’une image sans aide humaine !

Un bon exemple d'utilisation des réseaux neuronaux d'apprentissage profond consiste à reconnaître des objets identiques photographiés sous différents angles ou dans des poses différentes (si nécessaire). nous parlons de sur une personne ou un animal). Les algorithmes qui utilisent la numérisation pixel par pixel « pensent » qu’ils regardent deux images différentes, tandis que les réseaux neuronaux « intelligents » « comprennent » qu’ils regardent le même objet. Et vice versa : les images de deux chiens de races différentes, photographiés dans la même pose, pourraient être perçues par les algorithmes précédents comme des photographies du même chien. Réseaux de neurones Grâce à l'apprentissage profond, ils peuvent identifier les détails des images qui les aideront à distinguer les animaux.

Combinant techniques d'apprentissage profond, connaissances avancées en neurosciences et puissance ordinateurs modernes ouvre des perspectives pour l’intelligence artificielle que nous ne pouvons même pas encore évaluer. La vérité est déjà évidente : l’esprit peut avoir non seulement une nature biologique.

Aujourd'hui, un graphique est l'un des moyens les plus acceptables pour décrire les modèles créés dans un système d'apprentissage automatique. Ces graphiques informatiques sont composés de sommets de neurones reliés par des arêtes de synapse qui décrivent les connexions entre les sommets.

Contrairement à un processeur graphique central ou vectoriel scalaire, un IPU, un nouveau type de processeur conçu pour l'apprentissage automatique, permet la construction de tels graphiques. Un ordinateur conçu pour manipuler des graphiques est une machine idéale pour calculer des modèles de graphiques créés grâce à l’apprentissage automatique.

L'un des plus des moyens simples La façon de décrire le processus de l’intelligence artificielle est de le visualiser. L'équipe de développement de Graphcore a créé une collection de ces images qui sont affichées sur l'UIP. C'était basé sur logiciel Poplar, qui visualise le travail de l'intelligence artificielle. Les chercheurs de cette société ont également découvert pourquoi les réseaux profonds nécessitent autant de mémoire et quelles solutions existent pour résoudre le problème.

Poplar comprend un compilateur graphique conçu dès le départ pour traduire les opérations d'apprentissage automatique standard en code d'application IPU hautement optimisé. Il vous permet de rassembler ces graphiques en utilisant le même principe que la collecte des POPNN. La bibliothèque contient un ensemble de différents types de sommets pour les primitives généralisées.

Les graphiques sont le paradigme sur lequel reposent tous les logiciels. Dans Poplar, les graphiques vous permettent de définir un processus de calcul, dans lequel les sommets effectuent des opérations et les arêtes décrivent la relation entre eux. Par exemple, si vous souhaitez additionner deux nombres, vous pouvez définir un sommet avec deux entrées (les nombres que vous souhaitez ajouter), quelques calculs (une fonction pour additionner deux nombres) et une sortie (le résultat).

Généralement, les opérations avec les sommets sont beaucoup plus complexes que dans l'exemple décrit ci-dessus. Ils sont souvent définis par de petits programmes appelés codelets (noms de code). L'abstraction graphique est attrayante car elle ne fait aucune hypothèse sur la structure du calcul et décompose le calcul en composants que l'UIP peut utiliser pour fonctionner.

Poplar utilise cette abstraction simple pour créer de très grands graphiques représentés sous forme d'images. La génération logicielle du graphique signifie que nous pouvons l'adapter aux calculs spécifiques nécessaires pour garantir le meilleur utilisation efficace Ressources de l'UIP.

Le compilateur traduit les opérations standard utilisées dans les systèmes d'apprentissage automatique en code d'application hautement optimisé pour l'UIP. Le compilateur de graphiques crée une image intermédiaire du graphique informatique, qui est déployée sur un ou plusieurs appareils IPU. Le compilateur peut afficher ce graphique de calcul, de sorte qu'une application écrite au niveau du cadre de réseau neuronal affiche une image du graphique de calcul qui s'exécute sur l'UIP.


Graphique du cycle complet de formation AlexNet dans les sens avant et arrière

Le compilateur graphique Poplar a transformé la description AlexNet en un graphe informatique de 18,7 millions de sommets et 115,8 millions d'arêtes. Le clustering clairement visible est le résultat d’une communication forte entre les processus de chaque couche du réseau, avec une communication plus facile entre les couches.

Un autre exemple est un simple réseau entièrement connecté, qualifié sur MNIST - un simple ensemble de données pour la vision par ordinateur, une sorte de « Bonjour le monde » dans l'apprentissage automatique. Un réseau simple pour explorer cet ensemble de données permet de comprendre les graphiques pilotés par les applications Poplar. En intégrant des bibliothèques de graphiques à des frameworks tels que TensorFlow, la société propose l'un des moyens les plus simples d'utiliser les IPU dans les applications d'apprentissage automatique.

Une fois le graphique construit à l’aide du compilateur, il doit être exécuté. Ceci est possible en utilisant le moteur graphique. L'exemple de ResNet-50 démontre son fonctionnement.


Graphique ResNet-50

L'architecture ResNet-50 permet la création de réseaux profonds à partir de partitions répétitives. Le processeur n'a besoin de définir ces sections qu'une seule fois et de les rappeler. Par exemple, le cluster de niveau conv4 est exécuté six fois, mais mappé une seule fois sur le graphique. L'image montre également la variété de formes de couches convolutives, car chacune d'elles possède un graphique construit selon forme naturelle calculs.

Le moteur crée et gère l'exécution d'un modèle d'apprentissage automatique à l'aide d'un graphique généré par le compilateur. Une fois déployé, le moteur graphique surveille et répond aux IPU, ou appareils, utilisés par les applications.

L'image ResNet-50 montre l'intégralité du modèle. À ce niveau, il est difficile d'identifier les connexions entre les sommets individuels, il vaut donc la peine de regarder des images agrandies. Vous trouverez ci-dessous quelques exemples de sections au sein des couches de réseaux neuronaux.

Pourquoi les réseaux profonds ont-ils besoin d’autant de mémoire ?

De grandes quantités de mémoire occupée sont l'une des plus gros problèmes réseaux de neurones profonds. Les chercheurs tentent de lutter contre la bande passante limitée des dispositifs DRAM, que les systèmes modernes doivent utiliser pour stocker un grand nombre de poids et d'activations dans un réseau neuronal profond.

Les architectures ont été conçues à l'aide de puces de processeur conçues pour le traitement séquentiel et l'optimisation de la DRAM pour la mémoire haute densité. L'interface entre ces deux appareils constitue un goulot d'étranglement qui introduit des limitations de bande passante et ajoute une surcharge importante en termes de consommation d'énergie.

Bien que nous n’ayons pas encore une compréhension complète du cerveau humain et de son fonctionnement, il est généralement admis qu’il n’existe pas de grande mémoire séparée. On pense que la fonction de la mémoire à long et à court terme dans le cerveau humain est ancrée dans la structure des neurones et des synapses. Même organismes simples comme les vers avec une structure cérébrale neurale d'un peu plus de 300 neurones, une sorte de fonction de mémoire.

Construire de la mémoire dans les processeurs conventionnels est un moyen de contourner le problème goulots d'étranglement mémoire, libérant une énorme bande passante avec une consommation d'énergie bien inférieure. Cependant, la mémoire sur puce est coûteuse et n'est pas conçue pour les très grandes quantités de mémoire attachées aux CPU et aux GPU actuellement utilisés pour former et déployer des réseaux neuronaux profonds.

Il est donc utile d'examiner comment la mémoire est utilisée aujourd'hui dans les processeurs et les systèmes d'apprentissage profond basés sur GPU et de se demander : pourquoi ont-ils besoin de dispositifs de stockage de mémoire aussi volumineux alors que le cerveau humain fonctionne très bien sans eux ?

Les réseaux de neurones ont besoin de mémoire pour stocker les données d'entrée, les poids et les fonctions d'activation au fur et à mesure que l'entrée se propage à travers le réseau. En apprentissage, l'activation sur l'entrée doit être maintenue jusqu'à ce qu'elle puisse être utilisée pour calculer les erreurs dans les gradients de sortie.

Par exemple, un réseau ResNet à 50 couches possède environ 26 millions de paramètres de poids et calcule 16 millions d'activations par direction vers l'avant. Si vous utilisez un float 32 bits pour stocker chaque poids et activation, cela nécessitera environ 168 Mo d'espace. En utilisant une valeur de précision inférieure pour stocker ces poids et activations, nous pourrions réduire de moitié, voire quadrupler ce besoin de stockage.

Un problème majeur de mémoire vient du fait que les GPU s’appuient sur des données représentées sous forme de vecteurs denses. Par conséquent, ils peuvent utiliser un thread d’instruction unique (SIMD) pour réaliser haute densité calculs. Le processeur utilise des unités vectorielles similaires pour le calcul haute performance.

Les GPU ont une largeur de synapse de 1 024 bits, ils utilisent donc des données à virgule flottante de 32 bits, ils les divisent donc souvent en mini-lots parallèles de 32 échantillons pour créer des vecteurs de données de 1 024 bits. Cette approche du parallélisme vectoriel augmente de 32 fois le nombre d'activations et le besoin de stockage local d'une capacité supérieure à 2 Go.

Les GPU et autres machines conçues pour l'algèbre matricielle sont également soumis à une charge de mémoire due aux poids ou aux activations de réseaux neuronaux. Les GPU ne peuvent pas effectuer efficacement les petites convolutions utilisées dans les réseaux neuronaux profonds. Par conséquent, une transformation appelée « réduction » est utilisée pour convertir ces convolutions en multiplications matrice-matrice(GEMM), que les accélérateurs graphiques peuvent gérer efficacement.

Une mémoire supplémentaire est également nécessaire pour stocker les données d'entrée, les valeurs temporaires et les instructions du programme. La mesure de l'utilisation de la mémoire lors de l'entraînement du ResNet-50 sur un GPU haut de gamme a montré qu'il nécessitait plus de 7,5 Go de DRAM locale.

Certains pourraient penser qu’une précision de calcul moindre pourrait réduire la quantité de mémoire requise, mais ce n’est pas le cas. En basculant les valeurs des données sur une demi-précision pour les poids et les activations, vous ne remplirez que la moitié de la largeur du vecteur SIMD, gaspillant ainsi la moitié des ressources de calcul disponibles. Pour compenser cela, lorsque vous passerez de la pleine précision à la demi-précision sur le GPU, vous devrez alors doubler la taille du mini-batch pour forcer suffisamment de parallélisme des données pour utiliser tous les calculs disponibles. Ainsi, passer à des pondérations et des activations de précision inférieures sur le GPU nécessite toujours plus de 7,5 Go de mémoire dynamique en libre accès.

Avec ça un grand nombre données qui doivent être stockées, il est tout simplement impossible de toutes les intégrer dans le GPU. Chaque couche de réseau neuronal convolutif doit stocker l'état de la DRAM externe, charger la couche réseau suivante, puis charger les données dans le système. En conséquence, l'interface de mémoire externe, déjà limitée en bande passante, souffre de la charge supplémentaire liée au rechargement constant des balances et au stockage et à la récupération des fonctions d'activation. Cela ralentit considérablement le temps d'entraînement et augmente considérablement la consommation d'énergie.

Il existe plusieurs façons de résoudre ce problème. Premièrement, des opérations telles que les fonctions d'activation peuvent être effectuées « sur place », permettant aux données d'entrée d'être réécrites directement dans la sortie. De cette façon, la mémoire existante peut être réutilisée. Deuxièmement, la possibilité de réutilisation la mémoire peut être obtenue en analysant la dépendance des données entre les opérations sur le réseau et l'allocation de la même mémoire aux opérations qui ne l'utilisent pas à ce moment-là.

La deuxième approche est particulièrement efficace lorsque l'ensemble du réseau neuronal peut être analysé au moment de la compilation pour créer une mémoire allouée fixe, puisque la surcharge de gestion de la mémoire est réduite à presque zéro. Il s'est avéré que la combinaison de ces méthodes peut réduire de deux à trois fois l'utilisation de la mémoire d'un réseau neuronal.
Une troisième approche significative a été récemment découverte par l’équipe Baidu Deep Speech. Ils ont appliqué diverses techniques d'économie de mémoire pour réduire de 16 fois la consommation de mémoire des fonctions d'activation, leur permettant ainsi de former des réseaux comportant 100 couches. Auparavant, avec la même quantité de mémoire, ils pouvaient former des réseaux à neuf couches.

La combinaison de ressources de mémoire et de traitement dans un seul appareil présente un potentiel significatif pour améliorer les performances et l'efficacité des réseaux de neurones convolutifs, ainsi que d'autres formes d'apprentissage automatique. Des compromis peuvent être faits entre la mémoire et les ressources de calcul pour atteindre un équilibre entre les fonctionnalités et les performances du système.

Les réseaux de neurones et les modèles de connaissances dans d’autres méthodes d’apprentissage automatique peuvent être considérés comme des graphiques mathématiques. Il y a une énorme quantité de parallélisme concentrée dans ces graphiques. Un processeur parallèle conçu pour exploiter le parallélisme dans les graphiques ne repose pas sur le mini-batch et peut réduire considérablement la quantité de stockage local requise.

Les résultats des recherches actuelles ont montré que toutes ces méthodes peuvent améliorer considérablement les performances des réseaux de neurones. Les GPU et CPU modernes ont une mémoire intégrée très limitée, seulement quelques mégaoctets au total. Les nouvelles architectures de processeur spécialement conçues pour l'apprentissage automatique équilibrent la mémoire et le calcul sur puce, offrant des améliorations significatives en termes de performances et d'efficacité par rapport aux technologies actuelles. processeurs centraux et accélérateurs graphiques.

L'apprentissage profond change le paradigme du travail avec des textes, mais il suscite le scepticisme parmi les linguistes informatiques et les data scientists. Les réseaux de neurones sont un outil d’apprentissage automatique puissant mais trivial.

03.05.2017 Dmitri Ilvovsky, Ekaterina Chernyak

Les réseaux de neurones permettent de trouver des connexions et des modèles cachés dans les textes, mais ces connexions ne peuvent pas être présentées explicitement. Les réseaux de neurones, bien que puissants, constituent un outil assez trivial, suscitant le scepticisme des entreprises développant des solutions industrielles dans le domaine de l'analyse de données, ainsi que des principaux linguistes informatiques.

La fascination générale pour les technologies des réseaux neuronaux et l'apprentissage profond n'a pas contourné la linguistique informatique - le traitement automatique de textes en langage naturel. Lors des récentes conférences de l'Association for Computational Linguistics ACL, le principal forum scientifique dans ce domaine, la grande majorité des présentations étaient consacrées à l'utilisation des réseaux de neurones pour résoudre problèmes connus, et pour en explorer de nouveaux qui n'ont pas pu être résolus à l'aide d'outils d'apprentissage automatique standard. Attention accrue L'intérêt des linguistes pour les réseaux de neurones est dû à plusieurs raisons. L'utilisation des réseaux de neurones améliore considérablement la qualité des solutions pour certains tâches standards la classification des textes et des séquences, deuxièmement, réduit l'intensité du travail lorsque l'on travaille directement avec des textes, et troisièmement, vous permet de résoudre de nouveaux problèmes (par exemple, créer des chatbots). Dans le même temps, les réseaux de neurones ne peuvent pas être considérés comme un mécanisme totalement indépendant pour résoudre des problèmes linguistiques.

Premier travail sur apprentissage profond(deep learning) remontent au milieu du 20e siècle. Au début des années 1940, Warren McCulloch et Walter Pitts ont proposé un modèle formel du cerveau humain - un réseau neuronal artificiel, et un peu plus tard, Frank Rosenblatt a généralisé leurs travaux et a créé un modèle de réseau neuronal sur ordinateur. Les premiers travaux sur la formation des réseaux de neurones à l'aide de l'algorithme rétropropagation les erreurs remontent aux années 1960 (l'algorithme calcule l'erreur de prédiction et la minimise grâce à des techniques d'optimisation stochastique). Cependant, il s'est avéré que, malgré la beauté et l'élégance de l'idée de simuler le cerveau, la formation des réseaux de neurones « traditionnels » prend beaucoup de temps, et les résultats de classification sur de petits ensembles de données sont comparables aux résultats obtenus par des méthodes plus simples. , comme les machines à vecteurs de support (SVM). En conséquence, les réseaux de neurones ont été oubliés pendant 40 ans, mais ils sont aujourd'hui redevenus demandés lorsqu'on travaille avec gros volumes données, images et textes non structurés.

D'un point de vue formel, un réseau de neurones est un graphe orienté d'une architecture donnée dont les sommets ou nœuds sont appelés neurones. Le premier niveau du graphique contient des nœuds d'entrée, le dernier niveau contient des nœuds de sortie dont le nombre dépend de la tâche. Par exemple, pour classer en deux classes, un ou deux neurones peuvent être placés au niveau de la couche de sortie du réseau ; pour une classification en k classes, k neurones peuvent être placés. Tous les autres niveaux du graphique du réseau neuronal sont généralement appelés couches cachées. Tous les neurones situés à un niveau sont reliés par des arêtes à tous les neurones du niveau suivant, chaque arête a un poids. Chaque neurone se voit attribuer une fonction d'activation qui modélise le fonctionnement des neurones biologiques : ils sont « silencieux » lorsque le signal d'entrée est faible, et lorsque sa valeur dépasse un certain seuil, ils se déclenchent et transmettent la valeur d'entrée plus loin dans le réseau. La tâche de formation d'un réseau de neurones à l'aide d'exemples (c'est-à-dire en utilisant des paires « objet - bonne réponse ») est de trouver les poids des arêtes, de la meilleure façon possible prédire les bonnes réponses. Il est clair que c'est l'architecture - la topologie de la structure du graphe du réseau neuronal - qui est son paramètre le plus important. Bien qu’il n’existe pas encore de définition formelle des « réseaux profonds », il est généralement admis que tous les réseaux de neurones constitués de grand nombre ou ayant des calques « non standards » (par exemple, contenant uniquement des liens sélectionnés ou utilisant la récursion avec d'autres calques).

L'analyse d'images est l'un des exemples d'applications les plus réussies des réseaux de neurones jusqu'à présent, mais les technologies des réseaux de neurones ont radicalement changé le travail avec les données textuelles. Auparavant, chaque élément du texte (lettre, mot ou phrase) devait être décrit à l'aide de nombreuses fonctionnalités de nature différente(morphologique, syntaxique, sémantique, etc.), alors désormais, dans de nombreuses tâches, le besoin de descriptions complexes disparaît. Les théoriciens et les praticiens des technologies de réseaux neuronaux parlent souvent d'« apprentissage des représentations » : dans un texte brut, décomposé uniquement en mots et en phrases, un réseau neuronal est capable de trouver des dépendances et des modèles et de composer indépendamment un espace de fonctionnalités. Malheureusement, dans un tel espace, une personne ne comprendra rien - lors de la formation, le réseau neuronal attribue à chaque élément du texte un vecteur dense composé de certains nombres représentant les relations « profondes » découvertes. L'accent lorsque l'on travaille avec du texte passe de la construction d'un sous-ensemble de fonctionnalités et de la recherche de bases de connaissances externes à la sélection de sources de données et au balisage des textes pour la formation ultérieure d'un réseau neuronal, ce qui nécessite beaucoup plus de données que méthodes standards. C’est précisément en raison de la nécessité d’utiliser de grandes quantités de données et de leur faible interprétabilité et imprévisibilité que les réseaux de neurones ne sont pas demandés dans les applications réelles à l’échelle industrielle, contrairement à d’autres algorithmes d’apprentissage bien établis tels que les forêts aléatoires et les machines à vecteurs de support. Néanmoins, les réseaux de neurones sont utilisés dans un certain nombre de tâches de traitement automatique de texte (Fig. 1).

L'une des applications les plus populaires des réseaux de neurones est la construction de vecteurs de mots liés au domaine de la sémantique distributionnelle : on pense que le sens d'un mot peut être compris par le sens de son contexte, par les mots qui l'entourent. En effet, si nous ne connaissons pas certains mots du texte sur langue connue, alors dans la plupart des cas, vous pouvez deviner sa valeur. Les vecteurs de mots servent de modèle mathématique de la signification d'un mot : des lignes dans une grande matrice « mot-contexte », construite à partir d'un corpus de textes assez large. Les mots voisins, les mots inclus dans la même construction syntaxique ou sémantique avec le mot donné, etc. peuvent servir de « contextes » pour un mot particulier. Les fréquences peuvent être enregistrées dans les cellules d'une telle matrice (combien de fois le mot a été rencontré). dans ce contexte), mais ils utilisent le plus souvent le coefficient d'information mutuelle positive par paire (Positive Pointwise Mutual Information, PPMI), qui montre à quel point l'apparition d'un mot était non aléatoire dans un contexte particulier. De telles matrices peuvent être utilisées avec succès pour regrouper des mots ou pour rechercher des mots dont le sens est proche du mot recherché.

En 2013, Tomas Mikolov a publié un article dans lequel il proposait d'utiliser des réseaux de neurones pour entraîner des vecteurs de mots, mais pour une dimension plus petite : un réseau de neurones de l'architecture la plus simple était entraîné à l'aide de tuples (mot, contextes), et en sortie chaque mot était assigné un vecteur de 300 éléments. Il s'est avéré que de tels vecteurs traduisent mieux la proximité sémantique des mots. Par exemple, sur eux vous pouvez définir les opérations arithmétiques d'addition et de soustraction de sens et obtenir les équations suivantes : « Paris - France + Russie = Moscou » ; « roi – homme + femme = reine. » Ou trouver mot supplémentaire dans la rangée « pomme, poire, cerise, chaton ». Le travail présentait deux architectures, skip-gram et CBOW (Continuous Bag of Words), sous le nom général word2vec. Comme le montre plus tard , word2vec n'est rien de plus qu'une factorisation d'une matrice de contexte de mot avec des poids PPMI. Il est désormais habituel de classer word2vec dans la sémantique distributive plutôt que dans l'apprentissage profond, mais l'impulsion initiale pour la création de ce modèle était l'utilisation d'un réseau de neurones. De plus, il s’est avéré que les vecteurs word2vec constituent une représentation pratique de la signification d’un mot, qui peut être alimentée en entrée par des réseaux neuronaux profonds utilisés pour la classification de textes.

La tâche de classification de texte est l'une des plus urgentes pour les spécialistes du marketing, en particulier lorsqu'il s'agit d'analyser les opinions ou les attitudes des consommateurs à l'égard d'un produit ou d'un service. Les chercheurs s'efforcent donc constamment d'améliorer la qualité de leur solution. Cependant, l'analyse d'opinion est une tâche de classification de phrases plutôt que de textes : dans un avis positif, l'utilisateur peut écrire une ou deux phrases négatives, et il est également important de pouvoir les identifier et les analyser. Une difficulté bien connue dans la classification des phrases réside dans la longueur variable de l'entrée - puisque les phrases dans les textes peuvent être de longueur arbitraire, il n'est pas clair comment les soumettre à l'entrée d'un réseau neuronal. Une approche est empruntée au domaine de l'analyse d'images et implique l'utilisation de réseaux de neurones convolutifs (CNN) (Fig. 2).

L'entrée du réseau de neurones convolutifs est une phrase dans laquelle chaque mot est déjà représenté par un vecteur (vecteur de vecteurs). En règle générale, les modèles word2vec pré-entraînés sont utilisés pour représenter les mots sous forme de vecteurs. Un réseau de neurones convolutifs se compose de deux couches : une couche de convolution « profonde » et une couche cachée régulière. La couche de convolution, quant à elle, est constituée de filtres et d'une couche de « sous-échantillonnage ». Un filtre est un neurone dont l'entrée est formée à l'aide de fenêtres qui se déplacent dans le texte et sélectionnent séquentiellement un certain nombre de mots (par exemple, une fenêtre de longueur « trois » sélectionnera les trois premiers mots, les mots du deuxième au quatrième, du troisième au cinquième, etc.) . A la sortie du filtre, un vecteur est formé qui regroupe tous les vecteurs de mots qu'il contient. Ensuite, un seul vecteur correspondant à l'ensemble de la proposition est généré au niveau de la couche de sous-échantillonnage, qui est calculé comme le maximum par composant de tous les vecteurs de filtre de sortie. Les réseaux de neurones convolutifs sont faciles à former et à mettre en œuvre. Pour les entraîner, un algorithme de rétropropagation standard est utilisé, et du fait que les poids des filtres sont uniformément répartis (le poids du i-ème mot de la fenêtre est le même pour n'importe quel filtre), le nombre de paramètres pour un réseau neuronal convolutif est petit. Du point de vue de la linguistique informatique, les réseaux de neurones convolutifs sont outil puissant pour la classification, qui ne repose cependant sur aucune intuition linguistique, ce qui complique considérablement l’analyse des erreurs d’algorithme.

La classification des séquences est une tâche dans laquelle chaque mot doit se voir attribuer une étiquette : analyse morphologique (à chaque mot se voit attribuer une partie du discours), extraction d'entités nommées (déterminer si chaque mot fait partie du nom d'une personne, d'un nom géographique, etc.) etc. Lors de la classification des séquences, des méthodes sont utilisées qui prennent en compte le contexte du mot : si le mot précédent fait partie du nom d'une personne, alors le mot actuel peut également faire partie du nom, mais il est peu probable qu'il fasse partie du nom de l'organisation. Les réseaux de neurones récurrents, qui élargissent l'idée des modèles de langage proposés à la fin du siècle dernier, contribuent à mettre en pratique cette exigence. Le modèle de langage classique prédit la probabilité que le mot i apparaisse après le mot i-1. Les modèles linguistiques peuvent également être utilisés pour prédire le mot suivant : quel mot avec le plus probable se reverra-t-on après ça ?

Pour former des modèles de langage, de grands corpus sont nécessaires - plus le corpus de formation est grand, plus le modèle « connaît » de paires de mots. L'utilisation de réseaux de neurones pour développer des modèles de langage réduit la quantité de données stockées. Imaginons une architecture de réseau simple dans laquelle les mots i-2 et i-1 sont entrés, et en sortie le réseau neuronal prédit le mot i. En fonction du nombre de couches cachées et du nombre de neurones qui s'y trouvent, le réseau entraîné peut être stocké sous la forme d'un certain nombre de matrices denses de dimension relativement petite. Autrement dit, au lieu d'un corpus d'entraînement et de toutes les paires de mots, il ne peut stocker que quelques matrices et une liste mots uniques. Cependant, un tel modèle de langage neuronal ne permet pas d’établir de longues connexions entre les mots. Ce problème est résolu par les réseaux de neurones récurrents (Fig. 3), dans lesquels l'état interne de la couche cachée est non seulement mis à jour après l'arrivée d'un nouveau mot à l'entrée, mais est également transmis à l'étape suivante. Ainsi, la couche cachée du réseau récurrent accepte deux types d'entrées : l'état de la couche cachée à l'étape précédente et le nouveau mot. Si un réseau neuronal récurrent traite une phrase, alors les états cachés permettent de mémoriser et de transmettre de longues connexions dans des phrases. Il a été vérifié expérimentalement à plusieurs reprises que les réseaux neuronaux récurrents mémorisent le sexe du sujet dans une phrase et sélectionnent les pronoms corrects (elle - elle, il - son) lors de la génération d'une phrase, mais montrent explicitement comment exactement ce type d'informations est stocké dans un réseau neuronal ou comment il est utilisé, n'a toujours pas réussi.

Les réseaux de neurones récurrents sont également utilisés pour la classification de textes. Dans ce cas, les sorties des étapes intermédiaires ne sont pas utilisées et la dernière sortie du réseau neuronal renvoie la classe prédite. Aujourd'hui, les réseaux récurrents bidirectionnels (transmettant l'état caché non seulement « vers la droite » mais aussi « vers la gauche »), comportant plusieurs dizaines de neurones dans la couche cachée, sont devenus un outil standard pour résoudre les problèmes de classification de textes et de séquences, comme ainsi que la génération de texte, et ont essentiellement remplacé d'autres algorithmes.

Le développement des réseaux de neurones récurrents est devenu des architectures de type Seq2seq, constituées de deux réseaux récurrents connectés, dont l'un est chargé de représenter et d'analyser l'entrée (par exemple, une question ou une phrase dans une langue), et le second de générer le résultat (une réponse ou une phrase dans une autre langue) . Les réseaux Seq2seq sous-tendent systèmes modernes« questions-réponses », chatbots et systèmes de traduction automatique.

En plus des réseaux de neurones convolutifs, des auto-encodeurs sont utilisés pour l'analyse de texte, qui sont utilisés, par exemple, pour créer des effets sur des images dans Photoshop ou Instagram et ont trouvé une application en linguistique dans le problème de la réduction de dimensionnalité (recherche de la projection d'un vecteur représentant du texte sur un espace de dimension inférieure). La projection sur un espace bidimensionnel permet de représenter le texte comme un point sur un plan et permet de représenter visuellement un ensemble de textes comme un ensemble de points, c'est-à-dire qu'elle sert de moyen analyse préliminaire avant de regrouper ou de classer des textes. Contrairement à la tâche de classification, la tâche de réduction de dimensionnalité n'a pas de critères de qualité clairs, mais les images obtenues lors de l'utilisation d'auto-encodeurs semblent assez « convaincantes ». AVEC point mathématique Un auto-encodeur est un réseau neuronal non supervisé qui apprend la fonction linéaire f(x) = x et se compose de deux parties : un encodeur et un décodeur. Un encodeur est un réseau comportant plusieurs couches cachées avec un nombre décroissant de neurones. Le décodeur est un réseau similaire avec un nombre croissant de neurones. Ils sont reliés par une couche cachée, qui a autant de neurones qu'il devrait y avoir de dimensions dans un nouvel espace de dimensionnalité inférieure, et c'est cette couche qui est responsable de la réduction de la dimensionnalité. Comme les réseaux de neurones convolutifs, un auto-encodeur n’a aucune interprétation linguistique, il peut donc être considéré comme un outil d’ingénierie plutôt qu’analytique.

Malgré des résultats impressionnants, un réseau de neurones ne peut pas être considéré comme un outil indépendant pour l'analyse de texte (recherche de modèles dans le langage), et encore moins pour la compréhension du texte. Oui, les réseaux de neurones permettent de trouver des connexions cachées entre les mots et de découvrir des modèles dans les textes, mais jusqu'à ce que ces connexions soient présentées sous une forme interprétable, les réseaux de neurones resteront des outils d'apprentissage automatique assez triviaux. De plus, dans l'industrie solutions analytiques l'apprentissage profond n'est pas encore demandé, car il nécessite des coûts déraisonnables pour la préparation des données et l'imprévisibilité des résultats. Même dans la communauté des chercheurs, les tentatives visant à faire des réseaux de neurones un outil universel sont critiquées. En 2015, Chris Manning, chef du groupe de linguistique informatique à Stanford et président de l'ACL, a clairement souligné l'applicabilité des réseaux de neurones. Il y a inclus les tâches de classification de texte, de classification de séquences et de réduction de dimensionnalité. Cependant, grâce à la commercialisation et à la vulgarisation de l’apprentissage profond, l’attention portée à la linguistique informatique elle-même et à ses nouvelles applications s’est accrue.

Littérature

  1. Tomas Mikolov et. al. Estimation efficace des représentations de mots dans l'espace vectoriel, arxiv.org. URL : http://arxiv.org/pdf/1301.3781.pdf
  2. Lévy Omer, Yoav Goldberg, Ido Dagan. Améliorer la similarité distributionnelle grâce aux leçons tirées de l'intégration de mots. Transactions de l'Association pour la linguistique computationnelle 3. - 2015. - P. 211-225. URL : https://www.transacl.org/ojs/index.php/tacl/article/view/570/124 (date d'accès : 18/05/2017).
  3. Pavel Velikhov. Apprentissage automatique pour la compréhension du langage naturel // Open Systems.DBMS. - 2016. - N° 1. - P.18-21. URL : (date d'accès : 18/05/2017).
  4. Christophe Manning. Linguistique computationnelle et apprentissage profond. Linguistique computationnelle. - 2016. URL : http://www.mitpressjournals.org/doi/full/10.1162/COLI_a_00239#.WQH8MBhh2qA (date d'accès : 18/05/2017).

Dmitri Ilvovsky ([email protégé]) - employé du Laboratoire International systèmes intelligents Et analyse structurelle, Ekaterina Tcherniak ([email protégé]) - professeur du centre formation continue, Faculté d'informatique, École supérieure d'économie de l'Université nationale de recherche (Moscou). Les travaux ont été réalisés dans le cadre du Programme recherche fondamentaleÉcole supérieure d'économie de l'Université nationale de recherche.





Avez-vous aimé l'article? Partagez avec vos amis !