Yandex a introduit une nouvelle version de recherche basée sur les réseaux de neurones. Yandex a rendu publique une alternative aux réseaux de neurones. Ensemble de données MNIST

Considérons les réseaux de neurones impulsionnels : caractéristiques, perspectives et avantages, grâce auxquels la 2ème génération est remplacée avec succès.

Quiconque suit les progrès actuels en matière d'analyse des données a entendu parler de l'utilisation de technologies artificielles. réseaux de neurones deuxième génération. Ces réseaux sont généralement entièrement connectés, recevant et produisant des valeurs en constante évolution. Bien que les réseaux neuronaux aient fait des percées, ils ne correspondent pas biologiquement à la structure des vrais neurones ni aux mécanismes de traitement de l’information du cerveau humain.

Réseaux de neurones pulsés : principe de fonctionnement

Les réseaux neuronaux à pointes (SNN) sont plus proches de la physiologie naturelle. Les réseaux neuronaux à pointe comblent le fossé entre les neurosciences et l’apprentissage automatique en utilisant des modèles de neurones biologiquement réalistes pour traiter les informations.

Un réseau neuronal à pointe est fondamentalement différent des réseaux neuronaux de deuxième génération utilisés par les analystes de données. Un tel réseau, au lieu de changer continuellement de valeurs au fil du temps, fonctionne avec des événements discrets qui se produisent à certains moments. Le réseau reçoit une série d'impulsions en entrée et produit des impulsions en sortie.


Exemple de signaux sur trois neurones d'un réseau neuronal pulsé

Dans un neurone réel, la transmission des impulsions est déterminée par des équations différentielles correspondant aux processus biophysiques de formation de potentiel sur la membrane neuronale. Dès que le potentiel atteint une certaine valeur, le neurone réagit en transmettant une impulsion et la membrane acquiert son potentiel originel.


Potentiel de membrane neuronale pendant la transmission du signal

Différents modèles sont utilisés pour décrire le processus. Les réseaux de neurones à commutation diffèrent également des réseaux de deuxième génération en ce sens qu'ils sont moins cohérents et plus spécifiques en termes de topologie.

Réseaux de neurones Spike : distance et temps

À première vue, l’approche SNN peut sembler un pas en arrière : d’une image continue, en quelque sorte analogique, à une image binaire et pulsée. Cependant, l'avantage du SNN est que l'approche impulsionnelle permet d'opérer sur des données, en tenant compte des distances entre les neurones et de la durée de propagation du signal, c'est-à-dire dans le contexte de l'espace et du temps. Pour cette raison, les réseaux SNN sont bien mieux adaptés au traitement des données provenant de capteurs réels.

L'aspect spatial reflète le fait que les neurones sont principalement connectés à leurs voisins les plus proches et que les fragments d'entrée sont donc traités séparément.

L’aspect temporel correspond au fait que les impulsions d’entraînement s’accompagnent de délais différents, et aux informations que l’on « perd » en passant de signal continuà l'impulsion, est en fait stockée dans des informations sur le retard des impulsions les unes par rapport aux autres. Cela permet naturellement traiter les données temporaires sans complexité supplémentaire. Il a été prouvé que les neurones Spike sont des unités de calcul plus puissantes que les neurones artificiels traditionnels.

Problèmes d'utilisation pratique

Étant donné que les SNN sont, en théorie, des réseaux neuronaux plus puissants que les réseaux de deuxième génération, il est surprenant de savoir pourquoi nous ne les voyons pas largement utilisés. Problème principal utilisation pratique SNN – formation. Malgré la disponibilité de méthodes d'apprentissage biologique non supervisées (non supervisées), telles que Hebbian et STDP, elles sont encore inconnues. méthodes efficaces apprendre des SNN qui fournissent plus haute performance que les réseaux de deuxième génération.

En raison de problèmes de différenciation des impulsions, les SNN ne peuvent pas être entraînés à l'aide de descente de pente sans perdre d'informations temporelles précises sur les impulsions. Par conséquent, pour utiliser efficacement les SNN pour résoudre des problèmes du monde réel, il est nécessaire de développer des méthodes d’apprentissage supervisé appropriées. Il s’agit d’une tâche difficile : étant donné le réalisme biologique de ces réseaux, elle nécessite une compréhension précise de la manière dont le cerveau humain apprend.

Un autre problème, plus proche de la solution, réside dans le composant matériel. La simulation d'un SNN sur du matériel standard est une tâche fastidieuse, car elle nécessite une simulation. équations différentielles. Le matériel neuromorphique, tel qu'IBM TrueNorth, vise à résoudre ce problème en modélisant les neurones à l'aide de systèmes spécialisés. matériel, correspondant à la discrétion et à la rareté des réseaux de neurones biologiques.

Perspectives de développement

L’avenir de SNN reste incertain. D’une part, ils sont les successeurs naturels des réseaux de neurones modernes. D’un autre côté, les SNN sont encore loin d’être des outils pratiques pour la plupart des tâches. Existe déjà applications réelles SNN pour le traitement d'images et d'audio en temps réel, cependant, la littérature sur applications pratiques reste rare.

La plupart des publications sur les SNN sont soit théoriques, soit démontrent de mauvaises performances. tâches modernes performance. Compte tenu de l'extrême promesse de cette direction, la solution tâches spécifiées De nombreux groupes scientifiques travaillent.

Cette fois, j'ai décidé d'étudier les réseaux de neurones. J'ai pu acquérir des compétences de base en la matière au cours de l'été et de l'automne 2015. Par compétences de base, j'entends que je peux créer moi-même un réseau neuronal simple à partir de zéro. Vous pouvez trouver des exemples dans mes référentiels GitHub. Dans cet article, je vais donner quelques explications et partager des ressources qui pourraient vous être utiles dans votre étude.

Étape 1. Neurones et méthode feedforward

Alors, qu’est-ce qu’un « réseau de neurones » ? Attendons et traitons d'abord d'un neurone.

Un neurone est comme une fonction : il prend plusieurs valeurs en entrée et en renvoie une.

Le cercle ci-dessous représente un neurone artificiel. Il reçoit 5 et renvoie 1. L'entrée est la somme des trois synapses connectées au neurone (trois flèches à gauche).

Sur le côté gauche de l'image, nous voyons 2 valeurs d'entrée ( vert) et offset (surligné en marron).

Les données d'entrée peuvent être des représentations numériques de deux différentes propriétés. Par exemple, lors de la création d'un filtre anti-spam, ils pourraient signifier la présence de plus d'un mot écrit en LETTRES MAJUSCULES et la présence du mot « Viagra ».

Les valeurs d'entrée sont multipliées par leurs soi-disant « poids », 7 et 3 (surlignés en bleu).

Maintenant, nous ajoutons les valeurs résultantes avec le décalage et obtenons un nombre, dans notre cas 5 (surligné en rouge). C'est l'entrée de notre neurone artificiel.

Ensuite, le neurone effectue un calcul et produit une valeur de sortie. Nous en avons 1 parce que la valeur arrondie du sigmoïde au point 5 est 1 (nous parlerons de cette fonction plus en détail plus tard).

S'il s'agissait d'un filtre anti-spam, le fait que la sortie 1 signifierait que le texte a été marqué comme spam par le neurone.

Illustration d'un réseau de neurones de Wikipédia.

Si vous combinez ces neurones, vous obtenez un réseau neuronal à propagation directe - le processus va de l'entrée à la sortie, via des neurones connectés par des synapses, comme dans l'image de gauche.

Étape 2. Sigmoïde

Après avoir regardé les leçons de Welch Labs, c'est une bonne idée de consulter la semaine 4 du cours d'apprentissage automatique de Coursera sur les réseaux de neurones pour vous aider à comprendre leur fonctionnement. Le cours approfondit les mathématiques et est basé sur Octave, alors que je préfère Python. Pour cette raison, j'ai sauté les exercices et j'ai acquis toutes les connaissances nécessaires grâce à la vidéo.

Un sigmoïde mappe simplement votre valeur (sur l'axe horizontal) sur une plage de 0 à 1.

Ma première priorité était d’étudier le sigmoïde, car il figure dans de nombreux aspects des réseaux neuronaux. J'en savais déjà quelque chose dès la troisième semaine du cours mentionné ci-dessus, alors j'ai regardé la vidéo à partir de là.

Mais vous n’irez pas loin avec les seules vidéos. Pour une compréhension complète, j'ai décidé de le coder moi-même. J'ai donc commencé à écrire une implémentation de l'algorithme de régression logistique (qui utilise le sigmoïde).

Cela a pris une journée entière et le résultat n'a guère été satisfaisant. Mais ce n'est pas grave, car j'ai compris comment tout fonctionne. Le code est visible.

Vous n'êtes pas obligé de le faire vous-même, car cela nécessite des connaissances particulières - l'essentiel est que vous compreniez comment fonctionne le sigmoïde.

Étape 3. Méthode de rétropropagation

Comprendre comment fonctionne un réseau de neurones de l’entrée à la sortie n’est pas si difficile. Il est beaucoup plus difficile de comprendre comment un réseau neuronal apprend à partir d’ensembles de données. Le principe que j'ai utilisé s'appelle

Salut tout le monde!

Dans cet article, je parlerai d'une nouvelle façon confortable de programmer en Python.

Cela ressemble moins à de la programmation qu'à la création d'articles (rapports/démonstrations/recherches/exemples) : vous pouvez insérer un texte explicatif régulier parmi les blocs de code Python. Le résultat de l'exécution du code n'est pas seulement des chiffres et du texte (comme c'est le cas avec la console lorsque travail standard avec Python), mais aussi des graphiques, des schémas, des images...

Exemples de documents que vous pouvez créer :

Ça a l'air cool ? Voulez-vous créer les mêmes documents ? Alors cet article est fait pour vous !

Les réseaux de neurones sont créés et formés principalement en Python. Par conséquent, il est très important d’avoir une compréhension de base de la façon d’y écrire des programmes. Dans cet article, je parlerai brièvement et clairement des concepts de base de ce langage : variables, fonctions, classes et modules.

Le matériel est destiné aux personnes peu familières avec les langages de programmation.

Vous devez d’abord installer Python. Ensuite, vous devez installer un environnement pratique pour écrire des programmes en Python. Le portail est dédié à ces deux étapes.

Si tout est installé et configuré, vous pouvez commencer.

Les réseaux de neurones doivent être écrits dans un langage de programmation. Il y en a un grand nombre, mais je recommande (et utilise dans le manuel et les articles) exactement Langage Python. Pourquoi?

  1. C'est très facile à apprendre
  2. Un grand nombre de bibliothèques prêtes à l'emploi
  3. Lorsque vous regardez un programme, vous voyez immédiatement l'algorithme qu'il implémente
  4. La plupart des experts en apprentissage automatique utilisent Python et la plupart des bibliothèques sont également créées spécifiquement pour ce langage de programmation

Dans la partie précédente, nous avons appris à calculer les changements de signal lors du passage dans un réseau neuronal. Nous nous sommes familiarisés avec les matrices, leurs produits et les formules simples dérivées pour les calculs.

Dans la partie 6 de la traduction, je publie 4 sections du livre à la fois. Tous sont dédiés à l'un des plus sujets importants dans le domaine des réseaux de neurones - méthode rétropropagation erreurs. Vous apprendrez à calculer l'erreur de tous les neurones d'un réseau neuronal en vous basant uniquement sur l'erreur finale du réseau et les poids de connexion.

Le matériel est complexe, alors n'hésitez pas à poser vos questions sur le forum.

Vous pouvez transférer.

Bonne lecture !

Dans la partie 5 de la traduction, je présente 3 sections liées par leur sens.

Tout d’abord, nous calculerons personnellement les sorties d’un réseau neuronal à deux couches. Ensuite, nous nous familiariserons avec les matrices et leurs produits. En utilisant les connaissances acquises, nous dériverons des formules simples pour calculer la conversion du signal dans un réseau neuronal. Et dans dernière section Nous vérifierons les formules obtenues en pratique en calculant les sorties d'un réseau neuronal à trois couches.

Vous pouvez transférer.

Bonne lecture !

La partie 4 de la traduction est prête !

Arrêtons de tourner autour du pot et passons directement au sujet du livre : les réseaux de neurones.

Dans cette partie de la traduction, nous examinerons les réseaux de neurones biologiques et les comparerons aux ordinateurs traditionnels. Nous construirons ensuite un modèle de neurone artificiel et éventuellement passerons directement aux réseaux de neurones artificiels.

Vous pouvez transférer.

Bonne lecture !

La troisième partie de la traduction !

L'article n'est pas très long. Il ne couvre qu'une seule section du livre. Le but est de montrer que chaque méthode a ses limites. L'article discute des limites du classificateur linéaire. Les concepts sont également introduits fonctions logiques et problèmes XOR.

Vous pouvez transférer.

Bonne lecture !

Dans cet article, je parlerai d'un générateur de musique intéressant qui fonctionne sur les réseaux de neurones. Le générateur s'appelle Amper. Avec son aide, toute personne, même celle qui est loin de composer des compositions, peut créer indépendamment une mélodie unique et l'utiliser à ses propres fins.

Voici par exemple ce que le réseau de neurones a développé pour moi.

Historiquement, les réseaux de neurones artificiels, au cours de leur histoire de plus d’un demi-siècle, ont connu à la fois des périodes d’essor rapide et d’attention accrue du public, ainsi que des périodes de scepticisme et d’indifférence qui les ont suivies. DANS bons moments Il semble aux scientifiques et aux ingénieurs qu’ils ont enfin trouvé une technologie universelle capable de remplacer l’homme dans toutes les tâches cognitives. Comme des champignons après la pluie, divers nouveaux modèles de réseaux de neurones apparaissent et il y a d'intenses débats entre leurs auteurs, des mathématiciens professionnels, sur le plus ou moins grand degré de biologie des modèles qu'ils proposent. Les biologistes professionnels observent ces discussions en marge, s’interrompant périodiquement et s’exclamant : « Oui, cela n’arrive pas dans la vraie nature ! - et sans grand effet, puisque les mathématiciens des réseaux neuronaux n'écoutent les biologistes, en règle générale, que lorsque les faits des biologistes concordent avec les leurs. propres théories. Cependant, au fil du temps, un pool de tâches s’accumule progressivement pour lesquelles les réseaux de neurones fonctionnent franchement mal et l’enthousiasme des gens se refroidit.

Aujourd’hui, les réseaux de neurones reviennent au zénith de leur renommée grâce à l’invention de la méthode de pré-entraînement « non supervisé » basée sur les machines de Bolzmann restreintes (RBM), qui permet d’entraîner des réseaux de neurones profonds (c’est-à-dire avec des capacités extra-larges). , de l'ordre de dizaines de milliers, nombre de neurones) et le succès des réseaux de neurones profonds dans des problèmes pratiques de reconnaissance de la parole et de l'image. Par exemple, la reconnaissance vocale dans Android est mise en œuvre à l'aide de réseaux neuronaux profonds. On ne sait pas combien de temps cela durera et dans quelle mesure les réseaux neuronaux profonds répondront aux attentes qui leur sont placées.
Pendant ce temps, parallèlement à tous les débats, courants et tendances scientifiques, une communauté d'utilisateurs de réseaux neuronaux se démarque clairement - des ingénieurs logiciels en exercice qui s'intéressent à l'aspect appliqué des réseaux neuronaux, à leur capacité à apprendre des données collectées et à résoudre les problèmes de reconnaissance. Avec beaucoup problèmes pratiques La classification et la prédiction fonctionnent bien avec des modèles de perceptron multicouche (MLP) bien conçus et relativement petits et des réseaux de fonctions de base radiale (RBF). Ces réseaux de neurones ont été décrits à plusieurs reprises, je recommanderais les livres suivants, par ordre de sympathie personnelle pour eux : Osovsky, Bishop, Khaikin ; Il existe également de bons cours sur Coursera et des ressources similaires.

Cependant, quant à l'approche générale de l'utilisation pratique des réseaux de neurones, elle est fondamentalement différente de l'approche déterministe habituelle du développement « programmé, ça marche, ça veut dire ça marche toujours ». Les réseaux de neurones sont par nature des modèles probabilistes et leur approche devrait être complètement différente. Malheureusement, de nombreux programmeurs débutants apprentissage automatique en général et les réseaux de neurones en particulier le font erreurs système lorsqu'ils travaillent avec eux, ils sont déçus et abandonnent l'affaire. L'idée d'écrire ce traité sur Habr est née après avoir communiqué avec des utilisateurs de réseaux de neurones aussi déçus - d'excellents programmeurs expérimentés et sûrs d'eux.

Voici ma liste de règles et erreurs typiques utilisation des réseaux de neurones.

1. S'il est possible de ne pas utiliser les réseaux de neurones, ne les utilisez pas.
Les réseaux de neurones permettent de résoudre un problème s’il est impossible de proposer un algorithme en visualisant de manière répétée (ou très répétée) les données avec les yeux. Par exemple, s’il y a beaucoup de données, elles sont non linéaires, bruyantes et/ou de grande taille.

2. La complexité des réseaux de neurones doit être adaptée à la complexité de la tâche.
Moderne ordinateurs personnels(par exemple, Core i5, 8 Go de RAM) vous permettent de former des réseaux de neurones dans un délai confortable en utilisant des échantillons de dizaines de milliers d'exemples, avec des dimensions de données d'entrée allant jusqu'à des centaines. Les grands échantillons constituent un défi pour les réseaux de neurones profonds mentionnés ci-dessus, qui sont entraînés sur des GPU multiprocesseurs. Ces modèles sont très intéressants, mais dépassent le cadre de cet article Habr.

3. Les données de formation doivent être représentatives.
L'échantillon de formation doit représenter de manière complète et exhaustive le phénomène décrit et inclure divers situations possibles. C’est bien d’avoir beaucoup de données, mais cela n’aide pas toujours en soi. Il y a une blague répandue dans les cercles étroits lorsqu'un géologue s'approche d'un observateur, place un morceau de minéral devant lui et lui demande de développer un système pour reconnaître une telle substance en l'utilisant. "Puis-je avoir plus d'exemples de données ?" - demande le reconnaisseur. "Certainement!" - le géologue répond, sort une pioche et divise son morceau de minéral en plusieurs autres morceaux. Comme vous le comprenez, une telle opération ne servira à rien - non nouvelles informations un échantillon aussi augmenté ne porte pas en lui-même.

4. Mélangez la sélection.
Une fois les vecteurs de données d'entrée et de sortie collectés, si les mesures sont indépendantes les unes des autres, modifiez l'ordre des vecteurs de quelque manière que ce soit. Ceci est essentiel pour la division correcte de l'échantillon en Train/Test/Validation et toutes les méthodes de formation échantillon par échantillon.

5. Normalisez et centrez les données.
Pour les perceptrons multicouches et pour de nombreux autres modèles, les valeurs des données d'entrée doivent être comprises dans la plage [-1;1]. Avant de les transmettre au réseau neuronal, soustrayez la moyenne des données et divisez toutes les valeurs par valeur maximale.

6. Divisez l'échantillon en Train, Test et Validation.
La principale erreur des débutants est de fournir erreur minime travail d'un réseau de neurones sur un échantillon d'entraînement, en le recyclant en même temps de manière infernale, puis souhaiter la même bonne qualité sur de nouvelles données réelles. Ceci est particulièrement facile à faire s’il y a peu de données (ou si elles proviennent toutes d’une seule pièce). Le résultat peut être très décevant : le réseau de neurones s’adaptera au maximum à l’échantillon et perdra sa fonctionnalité sur les données réelles. Afin de contrôler les capacités généralisatrices de votre modèle, divisez toutes les données en trois échantillons dans un rapport de 70 : 20 : 10. Entraînez-vous sur Train, en vérifiant périodiquement la qualité du modèle sur Test. Pour l’évaluation finale impartiale – Validation.
La technique de validation croisée, lorsque Train et Test sont générés plusieurs fois de manière aléatoire à partir des mêmes données, peut être insidieuse et donner une fausse impression de bonne qualité fonctionnement du système - par exemple, si les données proviennent de différentes sources et c'est crucial. Utilisez la bonne validation !

7. Appliquez la régularisation.
La régularisation est une technique qui permet d'éviter de surentraîner un réseau de neurones lors de l'entraînement, même s'il y a peu de données. Si vous trouvez une case à cocher avec ce mot, assurez-vous de la cocher. Le signe d'un réseau neuronal surentraîné est de grandes valeurs de poids, de l'ordre de centaines et de milliers. Un tel réseau neuronal ne fonctionnera pas normalement sur de nouvelles données inédites ;

8. Il n'est pas nécessaire de recycler le réseau neuronal en ligne.
L'idée de recycler le réseau neuronal en permanence et en permanence sur les nouvelles données entrantes est correcte en soi ; dans les systèmes biologiques réels, c'est exactement ce qui se passe. Nous apprenons tous les jours et devenons rarement fous. Cependant, pour les réseaux de neurones artificiels conventionnels sur scène moderne Dans le développement technique, cette pratique est risquée : le réseau peut se recycler ou s'adapter aux dernières données reçues - et perdre ses capacités de généralisation. Pour que le système puisse être utilisé dans la pratique, le réseau neuronal doit : 1) être formé, 2) tester la qualité sur des échantillons de test et de validation, 3) sélectionner une option de réseau réussie, fixer ses poids et 4) utiliser le Réseau neuronal formé dans la pratique, les poids dans le processus ne changent pas l'utilisation.

9. Utiliser de nouveaux algorithmes d'apprentissage : Levenberg-Marquardt, BFGS, Conjugate Gradients, etc.
Je suis profondément convaincu que la mise en œuvre de l'apprentissage par rétropropagation est le devoir sacré de tous ceux qui travaillent avec les réseaux de neurones. Cette méthode est la plus simple, relativement facile à programmer et permet de bien étudier le processus d'apprentissage des réseaux de neurones. Pendant ce temps, la rétropropagation a été inventée au début des années 70 et est devenue populaire au milieu des années 80 du siècle dernier ; depuis lors, des méthodes plus avancées sont apparues qui peuvent améliorer considérablement la qualité de l'apprentissage ; Mieux vaut les utiliser.

10. Former les réseaux de neurones dans MATLAB et des environnements conviviaux similaires.
Si vous n'êtes pas un scientifique développant de nouvelles méthodes de formation des réseaux de neurones, mais un programmeur en exercice, je ne vous recommanderais pas de coder vous-même la procédure de formation des réseaux de neurones. Existe grand nombre progiciels, principalement en MATLAB et Python, qui permettent d'entraîner des réseaux de neurones, tout en contrôlant le processus d'entraînement et de test à l'aide de des moyens pratiques visualisation et débogage. Profitez du patrimoine de l'humanité ! Personnellement, j'aime l'approche « s'entraîner dans MATLAB avec une bonne bibliothèque - implémenter le modèle formé à la main », elle est assez puissante et flexible ; Une exception est le package STATISTICA, qui contient des méthodes avancées de formation des réseaux de neurones et vous permet de les générer sous la forme code de programme en C, pratique pour la mise en œuvre.

Dans le prochain article, je prévois de décrire en détail le cycle industriel complet de préparation d'un réseau de neurones, mis en œuvre sur la base des principes décrits ci-dessus, utilisé pour les tâches de reconnaissance dans le domaine commercial. produit logiciel.

Je te souhaite bonne chance !

Littérature

Hinton G., Deng L., Yu D., Dahl G., Mohamed A., Jaitly N., Senior A., ​​​​Vanhoucke V., Nguyen P., Sainath T. et Kingsbury B. Réseaux de neurones profonds pour l'acoustique Modélisation dans la reconnaissance vocale, IEEE Signal Processing Magazine, Vol. 29, non. 6, 2012, p. 82-97.
Ciresan D., Meier U., Masci J et Schmidhuber J. Réseau neuronal profond multi-colonnes pour la classification des panneaux de signalisation. Réseaux de neurones, Vol. 34, août 2012, p. 333 – 338
S. Osovski. Réseaux de neurones pour le traitement de l'information - trans. du polonais. M. : Finances et Statistiques, 2002. – 344 p.
L'évêque C.M. Reconnaissance de formes et apprentissage automatique. Springer, 2006 – 738 p.
S. Khaikin. Réseaux de neurones : cours complet. Williams, 2006.

Des questions ?

Signaler une faute de frappe

Texte qui sera envoyé à nos rédacteurs :