Réseaux de neurones du simple au complexe. En termes simples sur le complexe : que sont les réseaux de neurones ? Classification et reconnaissance des "images"

Ce qui est drôle avec la haute technologie, c'est qu'elle a des milliers d'années ! Par exemple, le calcul différentiel a été inventé indépendamment par Newton et Leibniz il y a plus de 300 ans. Ce qui était autrefois considéré comme de la magie est maintenant bien compris. Et, bien sûr, nous savons tous que la géométrie a été inventée par Euclide il y a quelques milliers d'années. Le truc, c'est qu'il faut souvent des années avant que quelque chose ne devienne "populaire". Les réseaux de neurones en sont un excellent exemple. Nous avons tous entendu parler des réseaux de neurones et de ce qu'ils promettent, mais pour une raison quelconque, nous ne voyons pas les programmes habituels basés sur eux. La raison en est que la vraie nature des réseaux de neurones est des mathématiques extrêmement complexes, et il est nécessaire de comprendre et de prouver les théorèmes complexes qui les recouvrent, et peut-être que la connaissance de la théorie des probabilités et de l'analyse combinatoire est nécessaire, sans parler de la physiologie et de la neurologie. .

L'incitation à créer une technologie pour une personne ou des personnes est la création d'un programme Killer avec son aide. Nous savons tous maintenant comment fonctionne DOOM, c'est-à-dire à l'aide d'arbres BSP. Cependant, John Carmack ne les a pas inventés à l'époque, il les a lu dans un article écrit en 1960. Cet article décrit la théorie de la technologie BSP. John est passé à l'étape suivante en comprenant comment les arbres BSP pouvaient être utilisés et DOOM est né. Je soupçonne que les réseaux de neurones connaîtront une renaissance similaire dans les prochaines années. Les ordinateurs sont assez rapides pour les imiter, les concepteurs VLSI les créent directement dans le silicium et il existe des centaines de livres publiés sur le sujet. Et puisque les réseaux de neurones sont l'entité la plus mathématique que nous connaissions, ils ne sont liés à aucune représentation physique et nous pouvons les créer avec Logiciel ou créer de vrais modèles en silicium. L'essentiel est que l'essence d'un réseau de neurones est un modèle abstrait.

À bien des égards, les limites de l'informatique numérique ont déjà été réalisées. Bien sûr, nous les améliorerons et les rendrons encore plus rapides, plus petits et moins chers, mais les ordinateurs numériques ne pourront toujours percevoir que des informations numériques, car ils sont basés sur un modèle de calcul binaire. Les réseaux de neurones, cependant, sont basés sur différents modèles de calcul. Ils sont basés sur un modèle probabiliste distribué de haut niveau qui n'est pas nécessaire pour trouver une solution à un problème de la manière Programme d'ordinateur; il modélise un réseau de cellules capables de trouver, d'identifier ou de corréler les moyens possibles de résoudre un problème d'une manière plus "biologique", en résolvant le problème en petits morceaux et en additionnant les résultats. Cet article est un tour d'horizon de la technologie des réseaux de neurones, où ils seront décomposés le plus en détail possible sur plusieurs pages.

analogues biologiques

Les réseaux de neurones ont été inspirés par nos propres cerveaux. Littéralement - le cerveau de quelqu'un dans la tête de quelqu'un a dit un jour: "Je suis intéressé par la façon dont je travaille?", Et a ensuite créé un modèle simple de lui-même. Étrange, non ? Le modèle standard de nœud neuronal, basé sur un modèle simplifié du neurone humain, a été inventé il y a plus de cinquante ans. Jetez un oeil à la figure 1.0. Comme vous pouvez le voir, il y a trois parties principales d'un neurone, ce sont :

  • Dentrite(s) (Dendrite) .................... Responsable de la collecte des signaux entrants
  • Soma (Soma) ................................ Responsable du traitement principal et de la sommation des signaux
  • Axone (Axon) ............................... Responsable de la signalisation aux autres dendrites.

Le cerveau humain moyen contient environ 100 milliards ou 10 à la puissance 11 de neurones, et chacun d'eux a jusqu'à 10 000 connexions via les dendrites. Les signaux sont transmis à l'aide de processus électrochimiques à base de sodium, de potassium et d'ions. Les signaux sont transmis en créant la différence de potentiel causée par ces ions, mais la chimie n'est pas pertinente ici, et les signaux peuvent être considérés comme de simples impulsions électriques se déplaçant de l'axone à la dendrite. L'attachement d'une dendrite à un axone étranger s'appelle une synapse, et ce sont les principaux points de transmission des impulsions.

Alors, comment fonctionne un neurone ? Il n'y a pas de réponse simple à cette question, mais l'explication suivante suffira à nos fins. Les dendrites collectent les signaux reçus d'autres neurones, puis les somas effectuent la sommation et le calcul des signaux et des données, et enfin, en fonction du résultat du traitement, ils peuvent «dire» aux axones de transmettre le signal. Le transfert dépend en outre d'un certain nombre de facteurs, mais nous pouvons modéliser ce comportement comme une fonction de transfert qui prend l'entrée, la traite et prépare la sortie si les propriétés de la fonction de transfert sont remplies. De plus, dans les vrais neurones, la sortie des données est non linéaire, c'est-à-dire que les signaux ne sont pas numériques, mais analogiques. En effet, les neurones reçoivent et transmettent en permanence des signaux et leur modèle réel dépend de la fréquence et doit être analysé dans le domaine S (domaine fréquentiel). La fonction de transfert réelle d'un simple neurone biologique est en fait modélisée par nous.

Nous avons maintenant une idée de ce que sont les neurones et de ce que nous essayons réellement de modéliser. Faisons une digression un instant et parlons de la façon dont nous pouvons utiliser les réseaux de neurones dans les jeux vidéo.

Jeux

Les réseaux de neurones semblent être la réponse à tous nos besoins. Si nous pouvions transférer des caractères et des mots à de petits cerveaux de jeu, imaginez à quel point ce serait cool. Le modèle de réseau de neurones nous donne la structure approximative des neurones, mais ne nous donne pas un haut niveau d'intelligence et de fonctionnalité de déduction, du moins au sens classique du terme. Il faut un peu de réflexion pour trouver des moyens d'appliquer la technologie des réseaux neuronaux à l'IA du jeu, mais une fois que vous l'avez fait, vous pouvez l'utiliser en conjonction avec des algorithmes déterministes, une logique floue et des algorithmes génétiques pour créer un état d'esprit d'IA très robuste et avancé pour vos jeux. Sans aucun doute, le résultat sera meilleur que tout ce que vous pouvez obtenir avec des centaines de blocs if-else ou de scripts de script. Les réseaux de neurones peuvent être utilisés pour des choses comme :

Balayage et reconnaissance de l'environnementréseau neuronal peut recevoir des informations sous forme de vue ou d'ouïe. Ces informations peuvent ensuite être utilisées pour former une réponse ou une réponse, ou pour former le réseau. Ces réponses peuvent être affichées en temps réel et mises à jour pour améliorer les réponses.

Mémoire- un réseau neuronal peut être utilisé comme une forme de mémoire pour les personnages du jeu. Les réseaux de neurones peuvent apprendre de l'expérience et s'ajouter à l'ensemble des réponses et des réactions.

contrôle du comportement- la sortie du réseau de neurones peut être utilisée pour contrôler les actions du personnage du jeu. Les entrées peuvent être diverses variables du moteur de jeu. Ensuite, le réseau pourra contrôler le comportement du personnage du jeu.

Cartographie des réponses- les réseaux de neurones fonctionnent très bien avec les "associations", qui sont essentiellement la liaison d'un espace à un autre. Une association se présente sous deux formes : une auto-association, qui lie une entrée à elle-même, et une hétéro-association, qui lie une entrée à autre chose. La liaison de réponse utilise des réseaux de neurones comme back-end ou sortie pour créer une autre couche de contrôle indirect sur le comportement d'un objet. En règle générale, nous pourrions avoir un certain nombre de variables de contrôle, mais nous n'avons de réponses claires qu'à un certain nombre de combinaisons spécifiques sur lesquelles nous pouvons former le réseau. Cependant, en utilisant un réseau de neurones comme sortie, nous pouvons obtenir d'autres réponses qui se situent approximativement dans le même domaine que nos réponses bien définies.

Les exemples donnés peuvent sembler un peu vagues, mais ils le sont. Le fait est que les réseaux de neurones sont un outil que nous pouvons utiliser à notre guise. La clé ici est que leur utilisation facilite la tâche de création d'IA et rendra le comportement des personnages joueurs plus raisonnable.

Réseaux de neurones 101

Dans cette section, nous passerons en revue les principaux termes et concepts utilisés lors de la discussion sur les réseaux de neurones. Ce n'est pas si simple, car les réseaux de neurones sont en réalité le produit de plusieurs disciplines différentes, et chacune d'elles porte son propre vocabulaire spécifique. Hélas, le vocabulaire relatif aux réseaux de neurones est au croisement des dictionnaires de toutes ces disciplines, on ne peut donc tout simplement pas tout considérer. De plus, la théorie des réseaux neuronaux regorge de matériel redondant, ce qui signifie que de nombreuses personnes réinventent la roue. Cela a influencé la création d'un certain nombre d'architectures de réseaux neuronaux à la fois, chacune ayant son propre nom. Je vais essayer de décrire des termes généraux et des situations afin de ne pas m'enliser dans la dénomination. Eh bien, dans cet article, nous examinerons certains réseaux suffisamment différents pour porter des noms différents. Au fur et à mesure de votre lecture, ne vous inquiétez pas trop si vous ne pouvez pas saisir immédiatement tous les concepts et termes, lisez-les simplement, puis nous essaierons de les couvrir à nouveau dans le contexte de l'article. Commençons...

Maintenant que nous avons vu la version "biologique" du neurone, regardons les bases du neurone artificiel pour poser les bases de notre raisonnement. Riz. 2.0 est une norme graphique pour un "neuronode" ou neurone artificiel. Comme vous pouvez le voir, il a plusieurs entrées étiquetées X1 - Xn et B. Ces entrées ont un poids W1-Wn qui leur est associé, et un b qui leur est attaché. De plus, il y a une connexion sommaire Y et une sortie y. La sortie y dans le neurode est basée sur la fonction de transfert, ou "activation", qui est fonction de l'entrée du neurode dans le réseau. Les données entrantes proviennent des X et des B qui sont connectés aux nœuds voisins. L'idée est que B est "passé", "mémoire". Le fonctionnement de base d'un neuronode est le suivant : l'entrée de X est multipliée par son poids associé et additionnée. La sortie de la sommation est l'entrée pour activer Ya. L'activation est ensuite introduite dans la fonction d'activation fa(x) et la sortie finale est y. L'équation pour tout cela est:

votre. 1.0

n
Ya \u003d B * b + e Xi * wi
je = 1 ET

y = fa(Ya)

Les différentes formes de fa(x) seront discutées dans un instant.

Avant de continuer, nous devrions parler de l'introduction Xi, des poids Wi et de leurs aires respectives. Dans la plupart des cas, les entrées contiennent des nombres positifs et négatifs dans l'ensemble (- ¥, + entrées = I). Cependant, de nombreux réseaux de neurones utilisent des valeurs simples à deux valeurs (comme vrai/faux). La raison de l'utilisation d'un schéma aussi simple est qu'éventuellement toutes les données complexes sont converties en une représentation binaire pure. De plus, dans de nombreux cas, nous devons résoudre des problèmes informatiques tels que la reconnaissance vocale, qui conviennent parfaitement aux représentations à deux valeurs. Cependant, ce n'est pas figé. Dans les deux cas, les valeurs utilisées dans le système divalent sont principalement 0 et 1 dans le système binaire, ou -1 et 1 dans le système bipolaire. Les deux systèmes sont similaires sauf que la représentation bipolaire est mathématiquement plus pratique que la représentation binaire. Les poids Wi à chaque entrée sont généralement compris entre (-Ґ , +Ґ) et sont appelés "excitants" ou "inhibiteurs" pour les valeurs positives et négatives, respectivement. Entrée supplémentaire B, qui est toujours appelée avec 1,0 et multipliée par b, où b est son poids.

Poursuivant notre analyse, après avoir trouvé l'activation Ya pour le neurode, elle est appliquée à la fonction d'activation et le résultat peut être calculé. Il existe un certain nombre de fonctions d'activation avec différentes utilisations. Principales fonctions d'activation de Fa(x) :

Les équations pour chacun sont assez simples, mais chacun correspond à son propre modèle ou a son propre ensemble de paramètres.

La fonction pas à pas (étape) est utilisée dans un certain nombre de réseaux de neurones et de modèles pour atteindre une criticité donnée du signal d'entrée. Le facteur q a pour but de modéliser le niveau critique du signal d'entrée auquel le neurone doit répondre.

La fonction d'activation linéaire (linéaire) est utilisée lorsque nous voulons que la sortie du neurode suive le plus possible l'activation de l'entrée. Une fonction similaire peut être utilisée pour créer des systèmes linéaires tels qu'un mouvement à vitesse constante. Enfin, la fonction exponentielle est la clé des réseaux de neurones avancés, le seul moyen de créer des réseaux de neurones capables de donner des réponses non linéaires et de modéliser des processus non linéaires. La fonction d'activation exponentielle est une bifurcation dans le développement des réseaux de neurones, car en utilisant des fonctions échelonnées et linéaires, nous ne pouvons jamais créer un réseau de neurones qui donne une réponse non linéaire. Cependant, nous ne sommes pas obligés d'utiliser cette fonction particulière. Des fonctions hyperboliques, logarithmiques et transcendantales peuvent également être utilisées en fonction des propriétés de réseau souhaitées. Enfin, nous pouvons utiliser toutes ces fonctions si nous le voulons.

Comme vous pouvez le deviner, un neurone ne fera pas grand-chose, vous devez donc créer un groupe de neurones et une couche de neurodes, comme le montre la Fig. 3.0. La figure illustre un petit réseau de neurones à une seule couche. Le réseau neuronal de la fig. 3.0 contient un certain nombre de nœuds d'entrée et de sortie. Par convention, il s'agit d'un réseau de neurones à une seule couche, puisque la couche d'entrée est ignorée à moins qu'elle ne soit la seule couche du réseau. Dans ce cas, la couche d'entrée est également la couche de sortie, le réseau est donc monocouche. Riz. 4.0 montre un réseau de neurones à deux couches. Notez que la couche d'entrée n'est toujours pas prise en compte et que la couche interne est dite "cachée". La couche de sortie est appelée la sortie de la couche de réponse. Théoriquement, il n'y a pas de limite au nombre de couches dans un réseau de neurones, cependant, il peut être très difficile de décrire les relations entre les différentes couches et les méthodes de formation acceptables. Le meilleur moyen création d'un réseau neuronal multicouche - faites de chaque réseau une ou deux couches, puis connectez-les en tant que composants ou blocs fonctionnels.

Bon, parlons maintenant de "temporaire" ou du sujet du temps. Nous savons tous que notre cerveau est assez lent par rapport à un ordinateur numérique. En fait, notre cerveau produit un cycle à l'échelle de la milliseconde, alors que le temps d'un ordinateur numérique se mesure en nanosecondes et presque déjà en sous-nanosecondes. Cela signifie que le trajet du signal de neurone à neurone prend un certain temps. Ceci est également modélisé dans des neurones artificiels dans le sens où nous effectuons les calculs couche par couche et produisons les résultats de manière séquentielle. Cela aide à modéliser le décalage temporel présent dans les systèmes biologiques tels que notre cerveau.

Nous avons presque terminé la discussion préliminaire, parlons de quelques concepts de haut niveau, puis terminons avec quelques termes supplémentaires. La question que vous devriez vous poser est "à quoi servent les réseaux de neurones ?" C'est une bonne question, et il est difficile d'y répondre définitivement. Question étendue - "Que voulez-vous essayer de faire faire aux réseaux de neurones ?" Fondamentalement, ils affichent une technique qui aide à refléter un espace par rapport à un autre. Essentiellement, les neurones sont un type de mémoire. Et comme pour tout souvenir, nous pouvons appliquer quelques termes appropriés pour les décrire. les neurones ont à la fois STM (mémoire à court terme) et LTM (mémoire à long terme). STM est la capacité d'un réseau de neurones à se souvenir de quelque chose qu'il vient d'apprendre, et LTM est la capacité d'un réseau de neurones à se souvenir de quelque chose qu'il a appris il y a quelque temps à la lumière des informations qu'il vient de recevoir. Cela nous amène au concept plasticité ou, en d'autres termes, au concept de la façon dont le réseau de neurones se comportera avec des informations ou lors de l'apprentissage. Un réseau de neurones peut-il apprendre plus d'informations et continuer à "se souvenir" correctement des informations précédemment apprises ? Si tel est le cas, les réseaux de neurones deviennent instables, car ils contiendront finalement tellement d'informations que les données se croiseront et se chevaucheront sans cesse. Cela nous amène à une autre exigence - la stabilité. En fin de compte, nous voulons que le réseau de neurones ait un bon LTM, un bon STM, soit flexible et stable. Bien sûr, certains réseaux de neurones ne sont pas analogues à la mémoire, ils visent principalement la cartographie fonctionnelle, et ces concepts ne s'appliquent pas à eux, mais vous voyez l'idée de base. Maintenant que nous connaissons les concepts ci-dessus liés à la mémoire, terminons l'examen de quelques facteurs mathématiques qui aideront à évaluer et à comprendre ces propriétés.

L'une des principales applications des réseaux de neurones est la création d'un mécanisme de mémoire capable de traiter des données d'entrée incomplètes ou floues et de renvoyer un résultat. Le résultat peut être l'entrée elle-même (association) ou une réponse complètement différente de l'entrée (hétéro-association). Il est également possible de superposer l'espace à N dimensions sur le chargement de données à M dimensions et non linéaires. Cela signifie que le réseau de neurones est une sorte d'unité de mémoire hyperspatiale, car il peut connecter un élément N d'entrée à un élément M de sortie, où M peut ou non être égal à N.

Ce que font essentiellement les réseaux de neurones est de diviser l'espace à N dimensions en régions qui mappent de manière unique les données d'entrée aux données de sortie, ou classent les données d'entrée en divers cours. Ensuite, à mesure que les valeurs (vecteurs) de l'ensemble de données entrant (appelons-le S) augmentent, il s'ensuit logiquement qu'il sera plus difficile pour les réseaux de neurones de séparer les informations. Et puisque les réseaux de neurones sont remplis d'informations, les valeurs d'entrée qui doivent être "mémorisées" se chevaucheront, car l'espace d'entrée ne peut pas contenir toutes les données séparées dans un nombre infini de dimensions. Ce chevauchement signifie que certaines entrées ne sont pas aussi fortes qu'elles pourraient l'être. Bien qu'il ne s'agisse pas d'un problème dans un certain nombre de cas, c'est une préoccupation lors de la modélisation des réseaux de neurones de mémoire ; supposons, pour illustrer le concept, que nous essayons de connecter un N-ensemble de vecteurs d'entrée à un ensemble de sorties. L'ensemble de sorties n'est pas autant un problème pour le bon fonctionnement que l'ensemble de sorties S.

Si l'ensemble d'entrée S est strictement binaire, alors nous considérons des séquences de la forme 1101010 ... 10110. Disons que nos données d'entrée n'ont que 3 bits chacune, donc tout l'espace d'entrée est constitué de vecteurs :

v0 = (0,0,0), v1 = (0,0,1), v2 = (0,1,0), v3 = (0,1,1), v4 = (1,0,0), v5 = (1,0,1), v6 = (1,1,0),

Pour plus de précision, la base de cet ensemble de vecteurs est :

v = (1,0,0) * b2 + (0,1,0) * b1 + (0,0,1) * b0, où bi peut prendre les valeurs 0 ou 1.

Par exemple, si nous supposons que B2=1, B1=0 et B0=1, alors nous obtenons le vecteur suivant :

v = (1.0.0) * 1 + (0.1.0) * 0 + (0.0.1) * 1 = (1.0.0) + (0.0.0) + (0 ,0,1) = (1,0 ,1) qui est le V de notre tableau d'entrée possible

Une base est un vecteur sommé spécial décrivant un tableau de vecteurs dans l'espace. Donc V décrit tous les vecteurs de notre espace. En général, sans entrer dans de longues explications, plus les vecteurs du tableau d'entrée sont orthogonaux, mieux ils se propageront dans le réseau de neurones et mieux ils pourront être appelés. L'orthogonalité fait référence à l'indépendance des vecteurs, en d'autres termes, si deux vecteurs sont orthogonaux, alors leur produit scalaire est nul, leur projection l'un sur l'autre est nulle et ils ne peuvent pas être décrits l'un par rapport à l'autre. Il existe de nombreux vecteurs orthogonaux dans le tableau v, mais ils viennent en petits groupes, par exemple V0 est orthogonal à tous les vecteurs, nous pouvons donc toujours l'inclure. Mais si on inclut V1 dans le tableau S, alors seuls les vecteurs V2 et V4 conserveront leur orthogonalité avec lui :

v0 = (0,0,0), v1 = (0,0,1), v2= (0,1,0), v4 = (1,0,0)

Pourquoi? Parce que Vi - Vj pour tout i,j de 0...3 est égal à zéro. En d'autres termes, le produit scalaire de toutes les paires de vecteurs est 0, ils doivent donc tous être orthogonaux. Ce tableau est donc très bon comme tableau d'entrée de réseau neuronal. Cependant, le tableau :

v6 = (1,1,0), v7 = (1,1,1)

potentiellement mauvais, car les entrées v6-v7 sont non nulles, dans un système binaire c'est 1. La question suivante est peut-on mesurer cette orthogonalité ? La réponse est oui. Dans le système binaire de vecteurs, il existe une mesure appelée la distance de Hamming. Il est utilisé pour mesurer la distance à N dimensions entre les vecteurs binaires. C'est simplement le nombre de bits qui sont différents entre les deux vecteurs. Par exemple, les vecteurs :

v0 = (0,0,0), v1 = (0,0,1)

ont une distance de Hamming de 1 entre eux, et

v2 = (0,1,0), v4 = (1,0,0)

avoir une distance de Hamming de 2.

Nous pouvons utiliser la distance de Hamming comme mesure d'orthogonalité dans les systèmes vectoriels binaires. Et cela peut nous aider à déterminer si nos ensembles de données d'entrée ont des intersections. Déterminer l'orthogonalité avec des vecteurs d'entrée communs est plus difficile, mais le principe est le même. Assez parlé des concepts et de la terminologie, allons de l'avant et examinons les réseaux de neurones réels qui font quelque chose, et peut-être qu'à la fin de cet article, vous pourrez les utiliser pour améliorer l'IA de votre jeu. Nous examinerons les réseaux de neurones utilisés pour exécuter des fonctions logiques, classer les entrées et les associer aux sorties.

Logique pure

Les premiers réseaux de neurones artificiels ont été créés en 1943. McCulloch et Pitts. Ils se composaient d'un certain nombre de neuronodes et étaient principalement utilisés pour calculer des fonctions logiques simples telles que AND, OR, XOR et leurs combinaisons. Riz. 5.0. représente les neuronodes principaux de McCulloch et Pitts avec deux entrées. Si vous êtes ingénieur électricien, vous verrez immédiatement leur ressemblance avec les transistors. Dans tous les cas, les neuronodes de McCulloch-Pitts n'ont pas de connexions et la fonction d'activation simple Fmp(x) est :

fmp (x) = 1, si xq
0, si x< q

Le neuronode MP (McCulloch-Pitts) fonctionne en additionnant le produit des entrées Xi et des poids Wi et prend Ya comme résultat pour la fonction Fmp(x). Les premières recherches de McCulloch-Pitts se sont concentrées sur la construction de circuits logiques complexes avec des modèles de neurodes. De plus, l'une des règles de la modélisation des neuronodes est que la transmission du signal de neurone à neurone prend un pas de temps. Cela permet de se rapprocher du modèle des neurones naturels. Examinons quelques exemples de réseaux de neurones MP qui implémentent des fonctionnalités logiques de base. La fonction booléenne ET a la table de vérité suivante :

Nous pouvons modéliser cela avec deux réseaux de neurones MP d'entrée avec des poids w1 = 1, w2 = 2 et q = 2. Ce réseau de neurones est représenté sur la fig. 6.0a. Comme vous pouvez le voir, toutes les combinaisons d'entrée fonctionnent correctement. Par exemple, si nous essayons de définir les entrées X1=0, Y1=1, alors l'activation sera :

X1*w1 + X2*w2 = (1)*(1) + (0)*(1) = 1,0

Si nous appliquons 1.0 pour la fonction d'activation Fmp(x), alors le résultat est 0, ce qui est la bonne réponse. Comme autre exemple, si nous essayons de définir les entrées X1=1, X2=1, alors l'activation sera :

X1*w1 + X2*w2 = (1)*(1) + (1)*(1) = 2,0

Si nous entrons 2.0 dans la fonction d'activation Fmp(x), le résultat est 1.0, ce qui est correct. Dans d'autres cas, cela fonctionnera de la même manière. La fonction OU est similaire, mais la sensibilité de q passe à 1,0 au lieu de 2,0 comme c'était le cas dans ET. Vous pouvez essayer d'exécuter vous-même les données via des tables de vérité pour voir les résultats.

Le réseau XOR est un peu différent car il a en fait 2 couches puisque résultats prétraitement traité ultérieurement dans le neurone de sortie. ce bon exemple pourquoi un réseau neuronal a besoin de plus d'une couche pour résoudre certains problèmes. XOR est un problème général de réseau neuronal couramment utilisé pour tester les performances d'un réseau. Dans tous les cas, XOR est linéairement inséparable dans une couche séparée, il doit être décomposé en étapes plus petites, dont les résultats sont résumés. La table de vérité pour XOR ressemble à ceci :

XOR n'est vrai que lorsque les entrées sont différentes, ce qui est un problème car les deux entrées se réfèrent à la même sortie. XOR est linéairement inséparable, comme le montre la Fig. 7.0. Comme vous pouvez le voir, il n'y a aucun moyen de séparer directement la bonne réponse. Le fait est que nous pouvons séparer la bonne réponse avec deux lignes, et c'est exactement ce que fait la deuxième couche. La première couche prétraite les données ou résout une partie du problème, et la couche restante termine le calcul. En se référant à la fig. 6.0, nous voyons que les poids sont Wq=1, W2=-1, W3=1, W4=-1, W5=1, W6=1. Le réseau fonctionne comme suit : la couche est calculée si X1 et X2 sont opposés, les résultats dans les cas (0,1) ou (1,0) sont la nourriture de la couche deux, qui les résume et les transmet si vrai. Essentiellement, nous avons créé une fonction booléenne :

z = ((X1 ET NON X2) OU (NON X1 ET X2))

Si vous souhaitez expérimenter avec les neuronodes McCulloch-Pitts de base, la liste suivante est un stimulateur neuronode complet à deux entrées.

// SIMULATEUR DE FOSSES MCULLOCCH
// COMPREND
/////////////////////////////////////////////////////

#comprendre
#comprendre
#comprendre
#comprendre
#comprendre
#comprendre
#comprendre
#comprendre
#comprendre
#comprendre

// PRINCIPALE
/////////////////////////////////////////////////////

vide principal (vide)
{
seuil flottant, // c'est le terme thêta utilisé pour seuiller la sommation
w1, w2, // ceux-ci contiennent les poids
x1, x2, // entrées vers le neurode
y_in, // activation de l'entrée sommée
vous_out ; // sortie finale de neurode

printf ( "nMcCulloch-Pitts Single Neurode Simulator.n") ;
printf("nVeuillez entrer un seuil ?");
scanf("%f" ,& seuil) ;

printf ( "nEntrez la valeur pour le poids w1 ?") ;
scanf("%f" ,&w1) ;

printf ( "nEntrez la valeur pour le poids w2 ?") ;
scanf("%f" ,& w2) ;

printf("nnDébut de la simulation :" ) ;

// entre dans la boucle d'événement principale

tandis que (1)
{
printf ( "nnParamètres de simulation : seuil=%f, W=(%f,%f) n", seuil, w1, w2) ;

// demande les entrées de l'utilisateur
printf("nEntrez l'entrée pour X1?");
scanf("%f" ,& x1) ;

printf("nEntrez l'entrée pour X2?");
scanf("%f" ,& x2) ;

// calcule l'activation
y_in = x1* w1 + x2* w2 ;

// résultat d'entrée à la fonction d'activation (étape binaire simple)
si (y_in >= seuil)
y_out = (float) 1.0 ;
autre
y_out = (float) 0.0 ;

// affiche le résultat
printf("nNeurode La sortie est %fn" , y_out) ;

// réessayer
printf ( "Voulez-vous continuer O ou N?") ;
char ans[ 8 ] ;
scanf("%s" , répond) ;

if (toupper(ans[ 0 ] ) != "Y" )
Pause ;
) // fin tant que

printf("nnSimulation terminée.n");
) // fin principale

Ceci conclut notre discussion sur les éléments de base d'un réseau de neurones MP, passons à des réseaux de neurones plus complexes tels que ceux utilisés pour classer les vecteurs d'entrée.

Classification et reconnaissance des "images"

Enfin, nous sommes prêts à examiner de vrais réseaux de neurones qui ont trouvé une certaine utilité ! Pour passer à une discussion ultérieure sur les réseaux de neurones de Hebb et Hopfield, nous analyserons la structure générale des réseaux de neurones, ce qui illustrera un certain nombre de concepts tels que la séparabilité linéaire, les représentations bipolaires et les analogies entre les réseaux de neurones et les mémoires. Jetons d'abord un coup d'œil à la Fig. 8.0 qui représente le modèle de réseau neuronal de base que nous allons utiliser. Comme vous pouvez le voir, il s'agit d'un réseau à un nœud avec trois entrées, y compris l'offset B, et une sortie. Nous voulons voir comment utiliser ce réseau pour implémenter l'opération logique ET que nous avons si facilement implémentée dans les neuronodes de McCulloch-Pitts.

Commençons par utiliser des représentations bipolaires, donc tous les 0 sont remplacés par des -1. La table de vérité pour le ET logique lors de l'utilisation d'entrées et de sorties bipolaires est illustrée ci-dessous :

Et voici la fonction d'activation fc(x) que nous allons utiliser :


fc (x) = 1, si x je q
- 1, si x< q

Notez que la fonction est une étape vers la sortie bipolaire. Avant de continuer, permettez-moi de planter des graines dans votre cerveau : mélanger et ressentir finissent par faire la même chose, ils nous donnent un autre degré de liberté dans nos neurones qui leur permet de créer des réponses qui ne peuvent être obtenues sans cela. Vous le verrez bientôt.

Un seul neurode sur la Fig. 8.0 essaie de faire une classification pour nous. Il va nous dire si notre entrée est de cette classe ou non. Par exemple, s'il s'agit ou non d'une image d'arbre. Ou, dans notre cas (ET logique simple), est-ce +1 ou -1 classe ? C'est la base de la plupart des réseaux de neurones, c'est pourquoi j'ai parlé de séparabilité linéaire. Nous devons arriver à une séparation linéaire de l'espace qui mettra en corrélation nos entrées et nos sorties afin qu'il y ait une séparation solide de l'espace qui les sépare. Nous devons donc trouver les bonnes valeurs de poids et de biais qui le feront pour nous. Mais comment fait-on ? S'agit-il simplement d'essais et d'erreurs, ou existe-t-il une méthodologie? La réponse est qu'il existe un certain nombre de méthodes pour former un réseau de neurones. Ces méthodes fonctionnent sur divers exemples mathématiques et peuvent être prouvées, mais pour le moment nous nous contenterons de prendre des valeurs qui fonctionnent sans considérer le processus de leur obtention. Ces exercices nous amèneront à apprendre des algorithmes et des réseaux plus complexes que ceux présentés ici.

D'accord, nous essayons de trouver les poids Wi et le biais B qui donneront le résultat correct pour différentes entrées avec une fonction d'activation Fc(x). Écrivons l'activation de sommation de notre neuronode et voyons si nous pouvons créer des relations entre le poids et l'entrée qui peuvent nous aider. Étant donné les entrées X1 et X2 avec les poids W1 et W2 avec B=1 et le biais b, nous obtenons la formule suivante :

X1*w1 + X2*w2 + B*b=q

Comme B vaut toujours 1,0, la formule se simplifie en :

X1*w1 + X2*w2 + b=q

X2 = -X1*w1/w2 + (q -b)/w2 (résolution en termes de X2)

Ce que c'est? C'est une ligne ! Et si le côté gauche est supérieur ou égal à q, c'est-à-dire (X1*W1+X2*W2+b), alors le neurode répondra 1, sinon il donnera le résultat -1. Ceux. la droite est la frontière de la solution. Riz. 9.0 illustre cela. Sur le graphique, vous pouvez voir que la pente de la droite est -w1/w2 et l'interception X2 est (q-b)/w2. Maintenant, il est clair pourquoi nous pouvons nous débarrasser de q ? Cela fait partie d'une constante, et nous pouvons toujours mettre à l'échelle b pour obtenir une perte, nous supposerons donc que Q = 0, et en conséquence nous obtenons l'équation :

X2 \u003d -X1 * w1 / w2 - b / w

Nous voulons trouver les poids W1 et W2 et le biais b tels qu'ils séparent nos sorties ou les classent dans des partitions spéciales sans chevauchement. C'est la clé de la séparabilité linéaire. Riz. 9.0 montre le nombre de limites de décision qui suffiront, vous pouvez donc en prendre n'importe laquelle. Prenons les plus simples :

W1=W2=1

Avec ces valeurs, la frontière de décision devient :

X2 = -X1*w1/w2 - n/w2 -> X2 = -1*X1 + 1

La pente est -1 et intercepte X2 = 1. Si nous branchons les vecteurs d'entrée pour le ET logique dans cette équation et utilisons l'activation Fc(x), nous obtenons la sortie correcte. Par exemple, si X2+X1-1 > 0, alors la réponse du neurode sera -1. Essayons avec notre entrée ET et voyons ce qui se passe :

comme vous pouvez le voir, les réseaux de neurones avec le poids et le biais appropriés résolvent parfaitement le problème. De plus, il existe toute une famille de poids qui le feront tout aussi bien (repoussant les limites de décision dans une direction perpendiculaire à elle-même). Cependant, il y a un point important. Sans décalage ni sensibilité, seules des passes directes seront possibles, car l'interception X2 doit être 0. C'est très important, et c'est la raison principale de l'utilisation de la sensibilité ou du biais, donc cet exemple était important car il montre clairement ce fait. Donc, plus précisément - comment trouver les bonnes valeurs de poids ? Oui, nous avons maintenant des analogies géométriques, et c'est le début de la recherche d'un algorithme.

Formation Hebb

Nous sommes maintenant prêts à voir le premier algorithme d'apprentissage et son application dans un réseau de neurones. L'un des algorithmes d'apprentissage les plus simples a été inventé par Donald Hebb et est basé sur l'utilisation de vecteurs d'entrée pour modifier le poids afin que le poids crée la meilleure séparation linéaire possible des entrées et des sorties. Hélas, l'algorithme fonctionne très bien. En effet, pour les entrées orthogonales, cela fonctionne bien, mais pour les entrées non orthogonales, l'algorithme s'effondre. Même si l'algorithme n'aboutit pas à des pondérations correctes pour toutes les entrées, il est au cœur de la plupart des algorithmes d'apprentissage, nous allons donc commencer par lui.

Avant de voir l'algorithme, rappelez-vous qu'il ne concerne qu'un seul neurode, un réseau de neurones à une seule couche. Vous pouvez, bien sûr, mettre plusieurs neurodes dans une couche, mais ils fonctionneront tous en parallèle et pourront être entraînés en parallèle. Au lieu d'utiliser un seul vecteur de poids, les multi-neuronodes utilisent une matrice de poids. Quoi qu'il en soit, l'algorithme est simple, il ressemble à ceci :

  • L'entrée est sous forme bipolaire I=(-1,1,0,... -1,1) et contient k éléments.
  • Il y a N vecteurs d'entrée, et nous nous référerons à leur ensemble en tant qu'élément J, par ex. Ij.
  • Les sorties seront appelées Yj, et il y a K sorties, chacune pour une entrée Ij.
  • Les poids W1-Wk sont contenus dans un vecteur W=(w1, w2,...wk)

Étape 1. Initialisez tous nos poids à 0 et laissez-les être contenus dans un vecteur W de N entrées. Initialisez également l'offset b à 0.

Etape 2. De j=1 à n, faites :

b = b + yj (Où y est le résultat souhaité

w = w + Ij * yj (Rappelez-vous qu'il s'agit d'une opération vectorielle)

Un algorithme n'est rien de plus qu'un "accumulateur" en quelque sorte. Le déplacement des limites de décision est basé sur les changements d'entrée et de sortie. Le seul problème est que dans certains cas, la frontière ne se déplacera pas assez vite (ou pas du tout) et "l'apprentissage" n'aura pas lieu.

Alors, comment utilisons-nous l'apprentissage de Hebb ? La réponse à cette question est la même que pour le précédent réseau de neurones, sauf que nous avons maintenant une méthode algorithmique pour entraîner le réseau, et ce réseau s'appelle le réseau Hebbian. À titre d'exemple, prenons notre fonction booléenne valide et voyons si l'algorithme peut trouver les valeurs de poids et de biais appropriées pour celle-ci. La somme ci-dessous équivaut à exécuter l'algorithme :

w = + + + = [(-1, -1)*(-1)] + [(-1, 1)*(-1)] + [(1, -1)*(-1)] + [ (1, 1)*(1)] = (2,2)

b = y1 + y2 + y3 + y4 = (-1) + (-1) + (-1) + (1) = -2

Ainsi W1=2, W2=2 et b=2. Ce sont simplement des versions mises à l'échelle des valeurs W1=1, W2=2, B=-1 que nous avons obtenues dans la section précédente. Avec cet algorithme simple, nous pouvons former un réseau de neurones (à partir d'un seul neurode) pour répondre à un tableau d'entrées ou les classer comme vrai/faux, ou 1/-1. Et maintenant, si nous avions un tableau de tels neuronodes, nous pourrions créer un réseau qui non seulement définit les entrées comme oui / non, mais associe également les entrées à certains modèles. C'est l'un des fondements de la prochaine structure de réseaux de neurones, les réseaux de Hopfield.

Algorithmes de Hopfield

John Hopfield est un physicien qui aime jouer avec les réseaux de neurones (ce qui est bon pour nous). Il a proposé un modèle de réseau neuronal simple (au moins comparativement) mais efficace appelé le réseau Hopfield. Il est utilisé pour associer, si vous entrez un vecteur x, alors vous obtiendrez x en sortie (j'espère). Le réseau Hopfield est illustré à la figure 10.0. Il s'agit d'un réseau monocouche avec un certain nombre de neuronodes égal au nombre d'entrées Xi. Le réseau est entièrement connecté, ce qui signifie que chaque neurode est connecté à tous les autres neurode, et les entrées sont également les sorties. Cela peut vous sembler étrange, car apparaît Retour d'information. La rétroaction est l'une des principales caractéristiques réseau Hopfield, et c'est l'une des bases de base pour obtenir le bon résultat.

Le réseau de Hopfield est une mémoire auto-associative itérative. Cela peut prendre de un à plusieurs cycles pour obtenir le bon résultat. Permettez-moi de clarifier : un réseau Hopfield reçoit une entrée, puis la restitue, et la sortie résultante peut ou non être l'entrée souhaitée. Cette boucle de rétroaction peut passer plusieurs fois avant que le vecteur d'entrée ne soit renvoyé. Ainsi, la séquence fonctionnelle du réseau de Hopfield : d'abord déterminer le poids de nos entrées que l'on veut associer, puis donner le vecteur d'entrée et voir ce que donne la fonction d'activation. Si le résultat est le même que notre entrée d'origine, alors tout a fonctionné, sinon, nous prenons le vecteur résultant et le transmettons au réseau. Voyons maintenant la matrice de poids et l'algorithme d'apprentissage utilisés dans les réseaux de Hopfield.

L'algorithme d'apprentissage du réseau de Hopfield est basé sur la règle de Hebb et additionne simplement le résultat. Cependant, comme les réseaux de Hopfield ont plusieurs neurones d'entrée, le poids n'est plus un tableau de poids, mais un tableau de tableaux contenus de manière compacte dans une seule matrice. Ainsi, la matrice de poids W pour le réseau de Hopfield est créée sur la base de cette équation :

  • Les vecteurs d'entrée sont sous forme bipolaire I = (-1,1,... -1,1) et contiennent k éléments.
  • Il y a N vecteurs d'entrée, et nous nous référerons à leur ensemble comme un j-élément de I, c'est-à-dire Ij.
  • Les sorties seront appelées Yj, et il y a k sorties, chacune pour sa propre entrée Ij.
  • La matrice de poids W est carrée et de dimension kxk puisque nous avons k entrées.

k
W (kxk) = e Iit x Ii
je = 1

Remarque : chaque produit extérieur aura des dimensions K x K puisque nous multiplions un vecteur colonne et un vecteur ligne.

Et, Wii = 0 pour tout i

La fonction d'activation fh(x) est illustrée ci-dessous :

fh (x) = 1, si x je 0
0, si x< 0

fh (x) est une fonction en escalier avec un résultat binaire. Cela signifie que chaque entrée doit être binaire, mais avons-nous déjà dit que les entrées sont bipolaires ? Eh bien, oui, ça l'est, et ça ne l'est pas. Lorsque la matrice de poids est générée, nous convertissons tous les vecteurs d'entrée au format bipolaire, mais pour les opérations normales, nous utilisons la version binaire de l'entrée et de la sortie, comme le réseau de Hopfield est également binaire. Cette conversion est facultative, mais rend la discussion sur le réseau un peu plus facile. Quoi qu'il en soit, regardons un exemple. Disons que nous voulons créer 4 nœuds de réseau Hopfield et nous voulons qu'ils appellent ces vecteurs :

I1=(0,0,1,0), I2=(1,0,0,0), I3=(0,1,0,1) Remarque : ils sont orthogonaux

En convertissant en valeurs bipolaires, nous obtenons :

I1* = (-1, -1.1, -1) , I2* = (1, -1, -1, -1) , I3* = (-1.1, -1.1)

Nous devons maintenant calculer W1,W2,W3 où Wi est le produit de la transposition de chaque entrée avec elle-même.

W1= [ I1* t x I1* ] = (— 1 , - 1 , 1 , - 1 ) t x (— 1 , — 1 , 1 , — 1 ) =
1 1 — 1 1
1 1 — 1 1
— 1 — 1 1 — 1
1 1 - 1 1 W2 = [ I2* t x I2* ] = (1 , - 1 , - 1 , - 1 ) t x (1 , - 1 , - 1 , - 1 ) =
1 — 1 — 1 — 1
— 1 1 1 1
— 1 1 1 1
— 1 1 1 1

W3 = [ I3* t x I3* ] = (- 1 , 1 , - 1 , 1 ) t x (- 1 , 1 , - 1 , 1 ) =
1 — 1 1 — 1
— 1 1 — 1 1
1 — 1 1 — 1
— 1 1 — 1 1

La mise à zéro de la diagonale principale nous donne la matrice de poids finale :

W=
0 — 1 — 1 — 1
— 1 0 — 1 3
— 1 — 1 0 — 1
— 1 3 — 1 0

Wow, maintenant allons danser. Entrons dans nos vecteurs d'origine et regardons les résultats. Pour ce faire, multipliez simplement les entrées par la matrice et traitez chaque sortie avec la fonction Fh(x). Voici les résultats:

, — 1 ) et fh((0 , — 1 , — 1 , — 1 ) ) = (1 , 0 , 0 , 0 )

I3 x W = (— 2 , 3 , - 2 , 3 ) et fh((— 2 , 3 , — 2 , 3 ) ) = (0 , 1 , 0 , 1 )

Les entrées étaient parfaitement "mémorisées", comme il se doit, car ils sont orthogonaux. Comme dernier exemple, supposons que notre entrée (ouïe, vue, etc.) soit un peu "bruyante" et contienne une erreur. Prenons I3=(0,1,0,1) et ajoutons du bruit, c'est-à-dire Bruit I3 = (0,1,1,1). Voyons maintenant ce qui se passe si nous introduisons ce vecteur "bruyant" dans le réseau de Hopfield :

Bruit I3 x W = (-3, 2, -2, 2) et Fh ((-3.2, -2, 2)) = (0.1,0.1)

Étonnamment, le vecteur d'origine est "mémorisé". C'est bien. De cette façon, nous avons la possibilité de créer une "mémoire" remplie de motifs binaires qui ressemblent à des arbres (chêne, saule pleureur, épicéa, etc.), et si nous entrons dans un autre arbre, tel qu'un saule, qui a été pas dans le réseau, notre réseau produira (espérons-le) des informations sur ce à quoi il "pense" que le saule ressemble. C'est l'un des points forts des mémoires associatives : nous n'avons pas besoin de former le réseau pour chaque entrée possible, nous avons juste besoin de former le réseau pour les "associations". Les entrées "fermées" sont alors généralement enregistrées en tant qu'entrée apprise à l'origine. C'est la base de la reconnaissance d'image et de voix. Ne me demandez pas où j'ai trouvé l'analogie de "l'arbre". Dans tous les cas, à la fin de notre article, j'ai inclus un simulateur de réseau Hopfield auto-associatif qui permet de créer des réseaux jusqu'à 16 neuronodes.

Mort cérébrale...

C'est tout ce que nous allons examiner aujourd'hui. J'espérais accéder aux réseaux de préceptrons, mais bon. J'espère que vous comprenez au moins un peu ce que sont les réseaux de neurones et comment créer des programmes fonctionnels pour les modéliser. Nous avons couvert les termes et concepts de base, certains des fondements mathématiques et certains des modèles de réseau les plus courants. Cependant, il y a beaucoup plus de choses à apprendre sur les réseaux de neurones. Il s'agit des perceptrons, de la mémoire associative floue ou FAM, de la mémoire associative bidirectionnelle ou BAM, des cartes de Kohonen, de l'algorithme de rétropropagation du réseau, de la théorie du réseau de résonance adaptative, et bien plus encore. Ça y est, mon réseau de neurones m'appelle pour jouer !

Un exemple de programme de réseau neuronal avec code source en C++.

À propos des réseaux de neurones, c'est bien et en détail écrit ici. Essayons de comprendre comment programmer des réseaux de neurones, et Comment ça fonctionne. L'une des tâches résolues par les réseaux de neurones est la tâche de classification. Le programme démontre le fonctionnement d'un réseau de neurones qui classe la couleur.

L'ordinateur a adopté un modèle de représentation des couleurs RVB à trois composants, un octet est alloué à chacun des composants. la pleine couleur est représentée par 24 bits, ce qui donne 16 millions de nuances. Une personne peut attribuer n'importe laquelle de ces nuances à l'une des couleurs nommées. Donc la tâche est :

Étant donné InColor - Couleur RVB (24 bits)

classer la couleur, c'est-à-dire attribuez-le à l'une des couleurs données par l'ensemble M=( Noir, Rouge, Vert, Jaune, Bleu, Violet, Cyan, Blanc ).

OutColor - couleur de l'ensemble M

Solution numéro 1. (numérique)

Créer un tableau de 16777216 éléments

Solution numéro 2. (analogique)

écrire une fonction comme

int8 GetColor (couleur DWORD)
{
double Rouge = (double(((Couleur>>16)&0xFF)))/255*100;
double Vert = (double(((Couleur>>8)&0xFF)))/255*100;
double Bleu = (double((Couleur&0xFF)))/255*100;
double Niveau = Rouge ;
if(Vert > Niveau)
Niveau=Vert ;
if(Bleu > Niveau)
niveau=bleu ;
Niveau = Niveau * 0,7 ;
int8 OutColor = 0 ;
si(Rouge > Niveau)
OutColor |= 1;
if(Vert > Niveau)
OutColor |= 2;
if(Bleu > Niveau)
OutColor |= 4;
retourner OutColor ;
}

Cela fonctionnera si le problème peut être décrit par des équations simples, mais si la fonction est si complexe qu'elle peut être décrite. ne s'y prête pas, ici les réseaux de neurones viennent à la rescousse.

Solution numéro 3. (réseau de neurones)

Le réseau neuronal le plus simple. Perceptron monocouche.

Tout ce qui est neuronal est enfermé dans la classe CNeuroNet

Chaque neurone a 3 entrées, où les intensités des composantes de couleur sont alimentées. (R,G,B) dans la plage (0 - 1). Il y a 8 neurones au total, selon le nombre de couleurs dans l'ensemble de sortie. À la suite du fonctionnement du réseau, un signal est généré à la sortie de chaque neurone dans la plage (0 - 1), ce qui signifie la probabilité que cette couleur soit à l'entrée. Nous choisissons le maximum et obtenons la réponse.

Les neurones ont une fonction d'activation sigmoïde ActiveSigm(). La fonction ActiveSigmPro(), dérivée de la fonction d'activation sigmoïde, est utilisée pour former un réseau de neurones en utilisant la méthode de rétropropagation.

La première ligne affiche les intensités de couleur. ci-dessous un tableau des coefficients de pondération (4 pcs.). Dans la dernière colonne, la valeur à la sortie des neurones. Changez la couleur, sélectionnez la bonne réponse dans la liste, utilisez le bouton Apprendre appeler la fonction d'apprentissage. Auto-apprentissage appelle la procédure d'apprentissage automatique, 1000 fois, une couleur aléatoire est déterminée par la formule de la solution numéro 2, et la fonction d'apprentissage est appelée.

télécharger le code source et le programme de réseau neuronal

Programmation de réseaux de neurones artificiels - J'écris en C++ dans un paradigme orienté objet

Pour des neuroarchitectures (structures), des méthodes et des tâches simples, n'importe quel langage (même Basic) peut être utilisé, mais pour des projets complexes, les langages de programmation orientés objet (comme le C++) s'avèrent être les plus adaptés. J'utilise C++, si nécessaire (dans les endroits les plus chronophages du programme) en réécrivant des fonctions individuelles (nécessitant des calculs plus rapides) en assembleur inline.

Nous montrerons les avantages d'une approche orientée objet pour programmer les réseaux de neurones. Un réseau neuronal peut avoir de nombreuses variantes de neurones et/ou de couches (voir une note sur les possibilités modernes d'assembler un réseau neuronal convolutif à partir de un grand nombre différents types de couches et de neurones). Certaines fonctionnalités communes des neurones ou des couches peuvent être déplacées vers une classe ancêtre abstraite, générant (héritant) de celle-ci des classes pour certains types de neurones/couches (ces classes descendantes décriront-implémenteront des fonctionnalités et un comportement qui sont déjà uniques pour un type particulier de neurone ou couche). Ainsi, l'élimination de la duplication multiple d'éléments communs (identiques) dans le texte du programme et la possibilité d'écrire un code de contrôle de programme plus flexible et indépendant de types spécifiques de neurones/couches en utilisant les principes du polymorphisme sont assurées.

À titre d'exemple, considérons la nomenclature des classes pour décrire les couches d'un réseau de neurones dans l'un des programmes que j'ai développés. Il existe 3 hiérarchies principales - une pour les classes de descripteurs de structure de couche (une chaîne d'héritage de trois classes), la seconde pour les fonctions non linéaires des neurones (la classe de base et dix descendants de celle-ci), la troisième pour les couches eux-mêmes (une chaîne de 5 classes de base-intermédiaire et 12 classes réelles qui sont issues de cette chaîne à ses différents niveaux).

Les réseaux de neurones

dans le texte du programme, 31 classes sont utilisées (implémentées) pour décrire le comportement des couches réseau, mais seulement 12 d'entre elles implémentent des couches réelles, et les classes restantes :

  • ou abstrait, définissant le comportement général, permettant à l'avenir de créer plus simplement de nouvelles descendantes (nouveaux types de couches) et d'augmenter le degré d'invariance de la logique de contrôle (implémentant le fonctionnement du réseau de neurones) aux différentes couches qui la composent le réseau;
  • ou, au contraire, ils sont subordonnés et font partie de la couche en tant que « composant » (une instance de l'objet-descripteur de la structure et des caractéristiques de la couche, et une instance de l'objet qui met en œuvre la fonction non linéaire des neurones ).

Le fonctionnement du réseau neuronal créé est programmé par des appels aux méthodes et propriétés des classes abstraites, quelle que soit la classe enfant particulière qui implémente telle ou telle couche du réseau neuronal.

Ceux. la logique de contrôle est ici séparée du contenu spécifique et n'est liée qu'à des bases générales et invariantes. A propos de classes spécifiques, seul le code du "constructeur" du réseau de neurones doit être connu - ne fonctionnant qu'au moment de la création nouveau réseau en fonction des paramètres spécifiés dans l'interface ou lors du chargement d'un réseau précédemment enregistré à partir d'un fichier. L'ajout de nouveaux types de couches de neurones au programme n'entraînera pas une refonte des algorithmes (logique) de fonctionnement et d'entraînement du réseau, mais ne nécessitera qu'un petit ajout au code des mécanismes de création (ou de lecture d'un fichier) un réseau neuronal.

Il n'y a pas d'abstractions (classes) pour les neurones individuels - uniquement pour les couches. Si vous avez besoin de mettre un seul neurone sur une couche (à savoir, sur la sortie), alors juste un compteur du nombre de neurones égal à un est passé à une instance de la classe de la couche neuronale souhaitée lors de sa création.

Ainsi, la conception et la programmation orientées objet offrent plus de flexibilité pour la mise en œuvre du principe de « diviser pour régner » par rapport à la programmation structurée, grâce à :

  • suppression des fragments de code communs dans les classes ancêtres (principe d'héritage),
  • assurer la nécessaire dissimulation des informations (principe d'encapsulation),
  • construction-obtention d'un universel, indépendant des implémentations spécifiques de classes, logique de contrôle externe (le principe du polymorphisme).
  • réalisation multiplateforme grâce à la suppression des parties dépendantes du matériel ou de la plate-forme dans les classes descendantes (dont le nombre peut changer pour chaque implémentation logicielle et matérielle spécifique, tandis que le nombre de classes ancêtres de base et toute la logique de haut niveau seront les mêmes et inchangé).

Pour les tâches actuelles de développement d'outils de neuromodélisation flexibles et puissants, tout cela est très utile.

Voir également le post sur les projets de langages spéciaux pour décrire les ANN.

les réseaux de neurones,
méthodes d'analyse des données :
de la recherche au développement et à la mise en œuvre

domicile
Prestations de service
Les réseaux de neurones
idées de base
capacités
Avantages
Domaines d'utilisation
comment utiliser

Précision des solutions
NS et IA
Programmes
Des articles
Blog
A propos de l'auteur / contacts

Affiner l'univers est une combinaison unique de nombreuses propriétés de l'Univers telles que lui seul peut assurer l'existence de l'Univers observable. Même des écarts minimes dans la composition ou les valeurs de ces propriétés sont incompatibles avec l'existence de l'Univers.

Habituellement, le concept de réglage fin de l'Univers est considéré dans une formulation faible: les valeurs de quelques constantes mondiales seulement sont prises en compte, et la conclusion n'est tirée que sur l'impossibilité de l'existence de l'humanité avec ses déviations. Une approche aussi limitée stimule les tentatives teintées de religion pour expliquer ce phénomène, par exemple, principe anthropique déclarant l'opportunité donnée par Dieu de l'Univers, contenue dans l'existence de l'homme.

Le réglage fin de l'Univers est la plus impressionnante des perceptions de la cosmologie moderne : aucune autre ne peut lui être comparée en termes de force et de force de persuasion des preuves de la Grande Impasse, que l'Univers est arrangé catégoriquement différemment de la façon dont la science moderne l'imagine, et l'explore dans le cadre de cette vision. Pas quelques constantes, mais en général un ensemble inimaginable de faits divers, si l'un d'eux avait même une légère différence par rapport à l'observé, cela rendrait l'existence de la vie et de l'univers impossible. Les valeurs des propriétés des particules élémentaires (masses, charges, demi-vies...), les propriétés des interactions fondamentales, les propriétés des substances (oui, au moins l'eau) - tout cela et bien plus encore est soigneusement choisi juste pour que l'Univers existe. N'importe lequel de ces millions de faits, s'il était différent, la conduirait à la non-existence. Ou, du moins (dans une formulation faible) - à l'impossibilité d'y vivre.

Réseau neuronal artificiel

La prise de conscience de cela détruit complètement "l'image scientifique du monde" habituelle de l'ère de la Grande Impasse. Mais, comme déjà dit, il y a là une perception : les gens refusent d'en être conscients.

Explication du réglage fin dans ITV

ITV établit que l'univers se compose uniquement d'informations. L'observateur observe l'observé, reçoit des informations - et c'est tout ce qui compose l'Univers. L'information, n'étant qu'une description de quelque chose, pourrait être tout ce qui est possible si elle survenait d'elle-même. Cependant, l'information en elle-même n'est rien et ne peut rien décrire ; pour cela, certaines conditions sont toujours nécessaires, et elles limitent le contenu de l'information.

Ainsi, l'Univers est une collection de choix conditionnés d'informations observables spécifiques à partir d'un large éventail d'informations qui sont, en principe, possibles. L'existence de l'univers est le critère ultime de tous ces choix : ils sont tels dans la mesure où l'univers existe, s'ils étaient différents, l'univers n'existerait pas.

C'est le réglage fin de l'Univers: les valeurs des constantes du monde et, en général, toutes les propriétés de l'Univers ont été déterminées par le fait de l'existence de l'Univers, personne ne les a spécialement sélectionnées, elles ne sont pas dérivées de une seule constante, il n'y a aucun moyen d'établir leur autre composition et d'autres valeurs.

Nous analysons le réseau de neurones. C#

Dans cet article, je propose de démonter l'action des réseaux de neurones et de lancer l'une des variantes les plus simples d'un apprentissage par réseau de neurones avec l'aide d'un enseignant.

Il faut dire quelques mots sur le dispositif de ce très « grand » et « terrible » réseau de neurones. Pendant longtemps, les gens ont fait des allers-retours et ont réfléchi à la question : (quel est le sens de la vie ?)
Comment reconnaître les motifs ?

Il y avait beaucoup de réponses. Il existe diverses heuristiques, des comparaisons de modèles et bien plus encore. Une réponse était un réseau de neurones. [Au fait, un réseau de neurones ne peut pas seulement reconnaître des images]

Alors. La structure du réseau de neurones. Imaginez cette image : une araignée a tissé une toile et la toile a attrapé une mouche. L'endroit où la mouche a touché est le neurone qui était « le plus près possible » de la cible. Un réseau de neurones est constitué de neurones qui « décrivent »
chances d'un événement. La description de la "probabilité" d'un événement (de chaque neurone) peut être stockée (par exemple) dans un fichier séparé.

Passons maintenant au sujet principal de la conversation de ce soir.

Comment fonctionne un réseau de neurones.

Comment est-il appris et reconnu ?

Un exemple de la structure d'un réseau de neurones est clairement visible sur cette image :

L'entrée reçoit un ensemble de signaux d'entrée X. qui sont multipliés par l'ensemble des poids W (Xi * Wi). Dans le neurone, la somme des produits est calculée et un certain nombre est envoyé à la sortie.
Après avoir compté les valeurs de tous les neurones, la recherche de la plus grande valeur est effectuée. ce valeur la plus élevée et est considéré comme la bonne réponse à la question. Le programme produit une image qui est décrite par le neurone trouvé.
En mode apprentissage, l'utilisateur a la possibilité de corriger le résultat (en fonction de son expérience) puis le programme recalculera les poids des neurones.
La formule de recalcul est approximativement la suivante : W[i] = W[i] + Vitesse*Delta*X[i] - ici
W[i] — poids du i-ème élément,
Vitesse - vitesse d'apprentissage,
Delta - signe (-1 ou 1),
X[i] — valeur du i-ième signal d'entrée (dans de nombreux cas 0 ou 1)

Pourquoi le delta est-il utilisé ?

Considérons un tel cas.

L'entrée du programme est une image avec le numéro 6.

Quel langage de programmation utiliser pour écrire des réseaux de neurones ?

Le réseau de neurones a reconnu le chiffre 8. L'utilisateur corrige le chiffre par 6. Que se passe-t-il ensuite dans le programme ?

Le programme recalcule les données pour deux neurones décrivant le nombre 6 et le nombre 8, et pour le neurone décrivant le nombre 6 delta sera égal à 1, et pour 8 = -1

Comment est réglé le paramètre de vitesse ?

Ce paramètre, plus les sujets sont petits, plus le réseau sera formé longtemps et avec précision (qualité supérieure), et plus le réseau sera formé rapidement et "superficiellement".

Le paramètre Vitesse peut être défini à la fois manuellement, par l'utilisateur et pendant l'exécution du programme (par exemple, const)

Comme vous pouvez le voir, les poids des caractères doivent également être définis. Comment sont-ils définis en premier lieu ? en fait, tout est aussi simple ici. Ils sont déterminés de manière totalement aléatoire, cela évite le « biais » du réseau de neurones. Habituellement, l'intervalle de valeurs aléatoires est petit -0,4…0,4 ou -0,3..0.2, etc.

Passons maintenant à la partie la plus intéressante. Comment le coder !

Créons deux classes - la classe Neuron et la classe Network (Neuron et Net, respectivement)

Décrivons les principales tâches de la classe Neuron :

— Réaction au signal d'entrée

- sommation

- Ajustement

(comment ajouter en plus la lecture à partir d'un fichier, la création Valeurs initiales, conservation. Laissons cela à la "conscience" des lecteurs)

Variables à l'intérieur de la classe Neuron:symbol
- Identifiant "identification" - LastY

- Image décrite - symbolesymbole

Intelligence artificielle, réseaux de neurones, apprentissage automatique - que signifient vraiment tous ces concepts désormais populaires ? Pour la plupart des non-initiés, dont je suis moi-même, ils ont toujours semblé quelque chose de fantastique, mais en fait leur essence se trouve à la surface. j'ai eu l'idée d'écrire langage clair sur les réseaux de neurones artificiels. Apprenez par vous-même et dites aux autres ce qu'est cette technologie, comment elle fonctionne, considérez son histoire et ses perspectives. Dans cet article, j'ai essayé de ne pas entrer dans la jungle, mais de parler simplement et populairement de ce domaine prometteur dans le monde de la haute technologie.

Un peu d'histoire

Pour la première fois, le concept de réseaux de neurones artificiels (ANN) est apparu en essayant de modéliser les processus du cerveau. La première avancée majeure dans ce domaine peut être considérée comme la création du modèle de réseau neuronal McCulloch-Pitts en 1943. Les scientifiques ont d'abord développé un modèle de neurone artificiel. Ils ont également proposé la construction d'un réseau de ces éléments pour effectuer des opérations logiques. Mais surtout, les scientifiques ont prouvé qu'un tel réseau est capable d'apprendre.

La prochaine étape importante a été le développement par Donald Hebb du premier algorithme de calcul ANN en 1949, qui est devenu fondamental pour les prochaines décennies. En 1958, Frank Rosenblatt a développé le parceptron, un système qui imite les processus cérébraux. À une certaine époque, la technologie n'avait pas d'analogues et est toujours fondamentale dans les réseaux de neurones. En 1986, presque simultanément, indépendamment les uns des autres, des scientifiques américains et soviétiques ont considérablement amélioré la méthode fondamentale d'enseignement d'un perceptron multicouche. En 2007, les réseaux de neurones ont connu une renaissance. L'informaticien britannique Geoffrey Hinton a été le pionnier de l'algorithme d'apprentissage en profondeur pour les réseaux de neurones multicouches, qui est maintenant, par exemple, utilisé pour faire fonctionner des véhicules sans pilote.

En bref sur les principaux

Au sens général du terme, les réseaux de neurones sont modèles mathématiques travaillant sur le principe des réseaux de cellules nerveuses d'un organisme animal. Les ANN peuvent être implémentés dans des solutions programmables et matérielles. Pour faciliter la perception, un neurone peut être représenté comme une sorte de cellule qui a de nombreuses entrées et une sortie. Le nombre de signaux entrants formés en un signal sortant est déterminé par l'algorithme de calcul. Des valeurs efficaces sont transmises à chaque entrée de neurone, qui sont ensuite distribuées le long des connexions interneuronales (synopsis). Les synapses ont un paramètre - le poids, en raison duquel les informations d'entrée changent lors du passage d'un neurone à un autre. Le moyen le plus simple de comprendre le fonctionnement des réseaux de neurones est d'utiliser le mélange de couleurs comme exemple. Les neurones bleu, vert et rouge ont des poids différents. L'information de ce neurone, dont le poids sera dominant dans le prochain neurone.

Le réseau de neurones lui-même est un système de plusieurs de ces neurones (processeurs). Individuellement, ces processeurs sont assez simples (beaucoup plus simples que les ordinateur personnel), mais lorsqu'ils sont connectés à un grand système, les neurones sont capables d'effectuer des tâches très complexes.

Selon le domaine d'application, le réseau de neurones peut être interprété de différentes manières, par exemple en termes de apprentissage automatique ANN est une méthode de reconnaissance de formes. D'un point de vue mathématique, il s'agit d'un problème multi-paramètres. Du point de vue de la cybernétique - un modèle de contrôle adaptatif de la robotique. Pour l'intelligence artificielle, ANN est un composant fondamental pour la modélisation de l'intelligence naturelle à l'aide d'algorithmes de calcul.

Le principal avantage des réseaux de neurones par rapport aux algorithmes informatiques conventionnels est leur capacité à être formés. Au sens général du terme, l'apprentissage consiste à trouver les bons coefficients de communication entre neurones, ainsi qu'à généraliser des données et à identifier des relations complexes entre signaux d'entrée et de sortie. En fait, un apprentissage réussi du réseau de neurones signifie que le système sera en mesure d'identifier le résultat correct sur la base de données qui ne figurent pas dans l'ensemble d'apprentissage.

Poste d'aujourd'hui

Et peu importe à quel point cette technologie serait prometteuse, jusqu'à présent, les RNA sont encore très loin des capacités du cerveau et de la pensée humaines. Néanmoins, les réseaux de neurones sont déjà utilisés dans de nombreux domaines de l'activité humaine. Jusqu'à présent, ils ne sont pas capables de prendre des décisions très intelligentes, mais ils sont capables de remplacer une personne là où elle était auparavant nécessaire. Parmi les nombreux domaines d'application des RNA figurent : la création de systèmes d'auto-apprentissage des processus de production, les véhicules sans pilote, les systèmes de reconnaissance d'images, les systèmes de sécurité intelligents, la robotique, les systèmes de surveillance de la qualité, les interfaces d'interaction vocale, les systèmes d'analyse, et bien plus encore. Une telle diffusion des réseaux de neurones est due, entre autres, à l'émergence de différentes manières accélérant l'apprentissage ANN.

À ce jour, le marché des réseaux de neurones est énorme - il représente des milliards et des milliards de dollars. Comme le montre la pratique, la plupart des technologies de réseaux neuronaux dans le monde diffèrent peu les unes des autres. Cependant, l'utilisation des réseaux de neurones est un exercice très coûteux, que dans la plupart des cas seules les grandes entreprises peuvent se permettre. Pour le développement, la formation et le test des réseaux de neurones, une grande puissance de calcul est nécessaire, il est évident que les grands acteurs du marché informatique en ont assez. Parmi les principales entreprises à la tête des développements dans ce domaine figurent la division Google DeepMind, la division Microsoft Research, IBM, Facebook et Baidu.

Bien sûr, tout cela est bien : les réseaux de neurones se développent, le marché se développe, mais jusqu'à présent la tâche principale n'a pas été résolue. L'humanité n'a pas réussi à créer une technologie dont les capacités sont même proches du cerveau humain. Examinons les principales différences entre le cerveau humain et les réseaux de neurones artificiels.

Pourquoi les réseaux de neurones sont-ils encore loin du cerveau humain ?

La différence la plus importante qui change radicalement le principe et l'efficacité du système est la transmission différente des signaux dans les réseaux de neurones artificiels et dans le réseau biologique de neurones. Le fait est que dans l'ANN, les neurones transmettent des valeurs qui sont des valeurs réelles, c'est-à-dire des nombres. Dans le cerveau humain, les impulsions sont transmises avec une amplitude fixe, et ces impulsions sont quasi instantanées. De là découle un certain nombre d'avantages du réseau humain de neurones.

Premièrement, les lignes de communication dans le cerveau sont beaucoup plus efficaces et économiques que celles des RNA. Deuxièmement, le circuit d'impulsions assure la simplicité de mise en œuvre de la technologie : il suffit d'utiliser des circuits analogiques au lieu de mécanismes de calcul complexes. En fin de compte, les réseaux d'impulsion sont protégés des interférences sonores. Les nombres réels sont affectés par le bruit, ce qui augmente le risque d'erreur.

Résultat

Bien sûr, au cours de la dernière décennie, il y a eu un véritable boom dans le développement des réseaux de neurones. Cela est principalement dû au fait que le processus d'apprentissage ANN est devenu beaucoup plus rapide et plus facile. En outre, les réseaux de neurones dits «pré-formés» ont commencé à être activement développés, ce qui peut accélérer considérablement le processus de mise en œuvre de la technologie. Et s'il est trop tôt pour dire si les réseaux de neurones seront un jour capables de reproduire pleinement les capacités du cerveau humain, la probabilité qu'au cours de la prochaine décennie les RNA puissent remplacer une personne dans un quart des professions existantes devient de plus en plus comme la vérité.

Pour ceux qui veulent en savoir plus

  • La grande guerre des neurones : ce que Google prépare vraiment
  • Comment les ordinateurs cognitifs peuvent changer notre avenir

Qu'est-ce qu'on fait? Nous allons essayer de créer un réseau de neurones simple et très petit, que nous Explique et apprendre distinguer quoi que ce soit. En même temps, nous n'irons pas dans l'histoire et la jungle mathématique (de telles informations sont très faciles à trouver) - à la place, nous essaierons de vous expliquer la tâche (pas le fait que nous réussirons) à vous et à nous-mêmes avec des dessins et du code .
De nombreux termes utilisés dans les réseaux de neurones sont liés à la biologie, alors commençons par le début :

Le cerveau est une chose complexe, mais il peut aussi être divisé en plusieurs parties et opérations principales :

L'agent causal peut être interne(par exemple, une image ou une idée) :

Voyons maintenant la base et simplifiée les pièces cerveau:

Le cerveau est comme un réseau câblé.

Neurone- la principale unité de calcul du cerveau, elle reçoit et traite les signaux chimiques des autres neurones, et, selon un certain nombre de facteurs, soit ne fait rien, soit génère une impulsion électrique, ou Potentiel d'Action, qui envoie alors des signaux aux neurones voisins neurones à travers les synapses en relation neurones :

Rêves, souvenirs, mouvements autorégulés, réflexes, et en général tout ce que vous pensez ou faites, tout se passe grâce à ce processus : des millions, voire des milliards de neurones travaillent sur différents niveaux et créer des connexions qui créent divers sous-systèmes parallèles et représentent un réseau neuronal biologique. rapporter.

Bien sûr, ce ne sont que des simplifications et des généralisations, mais grâce à elles, nous pouvons décrire un simple
réseau neuronal:

Et décrivez-le formalisé à l'aide d'un graphe :

Quelques explications s'imposent ici. Les cercles sont des neurones, et les lignes sont des connexions entre eux, et pour ne pas compliquer à ce stade, interconnexions représentent un flux direct d'informations de gauche à droite. Le premier neurone est actuellement actif et est surligné en gris. Nous lui avons également attribué un numéro (1 si ça marche, 0 si ça ne marche pas). Les nombres entre les neurones montrent le poids Connexions.

Les graphiques ci-dessus montrent le temps du réseau, pour un affichage plus précis, vous devez le diviser en intervalles de temps :

Pour créer votre propre réseau de neurones, vous devez comprendre comment les poids affectent les neurones et comment les neurones apprennent. A titre d'exemple, prenons un lapin (lapin test) et mettons-le dans les conditions d'une expérience classique.

Lorsqu'un flux d'air sûr est dirigé vers eux, les lapins, comme les humains, clignent des yeux :

Ce modèle de comportement peut être dessiné avec des graphiques :

Comme dans le schéma précédent, ces graphiques ne montrent que le moment où le lapin sent une respiration, et nous avons donc encoder bouffée comme valeur booléenne. De plus, nous calculons si le deuxième neurone se déclenche en fonction de la valeur du poids. S'il est égal à 1, alors le neurone sensoriel se déclenche, on cligne des yeux ; si le poids est inférieur à 1, on ne clignote pas : le deuxième neurone limite— 1.

Introduisons un autre élément - sûr signal sonore:

Nous pouvons modéliser l'intérêt du lapin comme ceci :

La principale différence est que maintenant le poids est zéro, donc nous n'avons pas eu de lapin clignotant, enfin, pas encore, du moins. Nous allons maintenant apprendre au lapin à cligner des yeux sur commande, en mélangeant
irritants (bip et souffle):

Il est important que ces événements se produisent à des moments différents ère, dans les graphiques, cela ressemblera à ceci :

Le son lui-même ne fait rien, mais le flux d'air fait toujours clignoter le lapin, et nous le montrons à travers les poids multipliés par les stimuli (en rouge). Éducation un comportement complexe peut être simplifié comme un changement progressif de poids entre les neurones connectés au fil du temps.

Pour dresser un lapin, répétez les étapes :

Pour les trois premières tentatives, les diagrammes ressembleront à ceci :

Notez que le poids du stimulus sonore augmente après chaque répétition (surligné en rouge), cette valeur est maintenant arbitraire - nous avons choisi 0,30, mais le nombre peut être n'importe quoi, même négatif. Après la troisième répétition, vous ne remarquerez pas de changement dans le comportement du lapin, mais après la quatrième répétition, quelque chose d'étonnant se produira - le comportement changera.

Nous avons supprimé l'exposition à l'air, mais le lapin continue de clignoter lorsqu'il entend le bip ! Notre dernier schéma peut expliquer ce comportement :

Nous avons entraîné le lapin à réagir au son en clignant des yeux.

Dans une expérience réelle de ce genre, plus de 60 répétitions peuvent être nécessaires pour obtenir un résultat.

Maintenant, nous allons quitter le monde biologique du cerveau et des lapins et essayer d'adapter tout ce qui
appris à créer un réseau neuronal artificiel. Tout d'abord, essayons de faire une tâche simple.

Disons que nous avons une machine à quatre boutons qui distribue de la nourriture lorsque le bon est enfoncé.
boutons (enfin, ou énergie si vous êtes un robot). La tâche consiste à découvrir quel bouton donne une récompense :

Nous pouvons décrire (schématiquement) ce qu'un bouton fait lorsqu'il est pressé comme ceci :

Il vaut mieux résoudre un tel problème dans son ensemble, alors regardons tous les résultats possibles, y compris le bon :

Cliquez sur le 3ème bouton pour obtenir votre dîner.

Afin de reproduire un réseau de neurones dans le code, nous devons d'abord créer un modèle ou un graphique sur lequel le réseau peut être mappé. Voici un graphique approprié pour la tâche, en plus, il affiche bien son homologue biologique :

Ce réseau de neurones reçoit simplement une entrée - dans ce cas, ce sera la perception du bouton sur lequel vous avez appuyé. Ensuite, le réseau remplace les informations d'entrée par des poids et tire une conclusion basée sur l'ajout de la couche. Cela semble un peu déroutant, mais voyons comment le bouton est représenté dans notre modèle :

Notez que tous les poids sont 0, donc le réseau de neurones, comme un bébé, est complètement vide mais entièrement interconnecté.

Ainsi, nous faisons correspondre un événement externe avec la couche d'entrée du réseau de neurones et calculons la valeur à sa sortie. Cela peut ou non coïncider avec la réalité, mais nous allons l'ignorer pour l'instant et commencer à décrire la tâche d'une manière compréhensible pour l'ordinateur. Commençons par entrer les poids (nous utiliserons JavaScript) :

Entrées Var = ; var poids = ; // Par commodité, ces vecteurs peuvent être appelés

L'étape suivante consiste à créer une fonction qui collecte les valeurs d'entrée et les poids et calcule la valeur de sortie :

Fonction évalueNeuralNetwork(inputVector, weightVector)( var result = 0; inputVector.forEach(function(inputValue, weightIndex) ( layerValue = inputValue*weightVector; result += layerValue; )); return (result.toFixed(2)); ) / / Cela peut sembler complexe, mais tout ce qu'il fait est de faire correspondre les paires poids/entrée et d'ajouter le résultat

Comme prévu, si nous exécutons ce code, nous obtiendrons le même résultat que dans notre modèle ou graphique…

EvaluateNeuralNetwork (entrées, poids); // 0,00

Exemple en direct : Neural Net 001. La prochaine étape dans l'amélioration de notre réseau de neurones sera un moyen de vérifier que sa propre sortie ou les valeurs résultantes sont comparables à la situation réelle, encodons d'abord cette réalité particulière dans une variable :

Pour détecter les incohérences (et leur nombre), nous ajouterons une fonction d'erreur :

Erreur = Réalité - Sortie du réseau neuronal

Avec lui, nous pouvons évaluer les performances de notre réseau de neurones :

Mais plus important encore, qu'en est-il des situations où la réalité donne un résultat positif ?

Nous savons maintenant que notre modèle de réseau de neurones ne fonctionne pas (et nous savons comment), super ! Et c'est très bien car nous pouvons maintenant utiliser la fonction d'erreur pour contrôler notre entraînement. Mais tout cela prend du sens si nous redéfinissons la fonction d'erreur comme suit :

erreur= Sortie désirée- Sortie de réseau neuronal

Une divergence subtile mais importante, indiquant silencieusement que nous allons
utiliser les résultats passés pour comparer avec les actions futures
(et pour l'apprentissage, comme nous le verrons plus tard). Cela existe aussi dans la vraie vie, complet
motifs répétitifs, cela peut donc devenir une stratégie évolutive (enfin, dans
la plupart des cas).

var entrée = ; var poids = ; vardesiredResult = 1;

Et une nouvelle fonction :

Fonction évalueNeuralNetError(desired,actual) ( return (desired - actual); ) // Après avoir évalué à la fois le réseau et l'erreur, nous obtiendrions : // "Sortie du réseau neuronal : 0,00 Erreur : 1"

Exemple en direct : Neural Net 002. Résumons. Nous sommes partis d'une tâche, en avons fait un modèle simple sous la forme d'un réseau de neurones biologiques, et avons obtenu un moyen de mesurer ses performances par rapport à la réalité ou au résultat souhaité. Nous devons maintenant trouver un moyen de corriger l'écart - un processus qui, tant pour les ordinateurs que pour les humains, peut être considéré comme un apprentissage.

Comment entraîner un réseau de neurones ?

La base de la formation des réseaux de neurones biologiques et artificiels est la répétition.
et algorithmes d'apprentissage, nous allons donc travailler avec eux séparément. Commençons avec
algorithmes d'apprentissage.

Dans la nature, les algorithmes d'apprentissage sont compris comme des changements physiques ou chimiques
caractéristiques des neurones après les expériences :

L'illustration dramatique de la façon dont deux neurones changent au fil du temps dans le code et notre modèle "d'algorithme d'apprentissage" signifie que nous allons simplement changer les choses au fil du temps pour nous faciliter la vie. Ajoutons donc une variable pour indiquer à quel point la vie est plus facile :

Taux d'apprentissage Var = 0,20 ; // Plus la valeur est grande, plus le processus d'apprentissage sera rapide :)

Et qu'est-ce que cela va changer ?

Cela changera les poids (comme un lapin !), en particulier le poids de la sortie que nous voulons obtenir :

Comment coder un tel algorithme est à votre choix, pour plus de simplicité j'ajoute le facteur d'apprentissage au poids, le voici sous forme de fonction :

Function learn(inputVector, weightVector) ( weightVector.forEach(function(weight, index, weights) ( if (inputVector > 0) ( weights = weight + learningRate; ) )); )

Lorsqu'elle est utilisée, cette fonction d'entraînement ajoutera simplement notre taux d'apprentissage au vecteur de poids neurone actif, avant et après le cercle d'entraînement (ou répétition), les résultats seront les suivants :

// Vecteur de poids d'origine : // Sortie du réseau de neurones : 0,00 Erreur : 1 learn(input, weights); // Nouveau vecteur de poids : // Sortie du réseau neuronal : 0,20 Erreur : 0,8 // Si ce n'est pas évident, la sortie du réseau neuronal est proche de 1 (produisant du poulet) - ce que nous voulions, nous pouvons donc conclure que nous vont dans la bonne direction

Exemple en direct : Neural Net 003. Bon, maintenant que nous allons dans la bonne direction, la dernière pièce de ce puzzle sera la mise en œuvre répétitions.

Ce n'est pas si difficile, dans la nature, nous faisons simplement la même chose encore et encore, mais dans le code, nous spécifions simplement le nombre de répétitions :

Essais Var = 6 ;

Et l'introduction de la fonction du nombre de répétitions dans notre réseau de neurones d'entraînement ressemblera à ceci :

Fonction train(essais) ( pour (i = 0; i< trials; i++) { neuralNetResult = evaluateNeuralNetwork(input, weights); learn(input, weights); } }

Et voici notre rapport final :

Sortie du réseau neuronal : 0,00 Erreur : 1,00 Vecteur de pondération : Sortie du réseau neuronal : 0,20 Erreur : 0,80 Vecteur de pondération : Sortie du réseau neuronal : 0,40 Erreur : 0,60 Vecteur de pondération : Sortie du réseau neuronal : 0,60 Erreur : 0,40 Vecteur de pondération : Sortie du réseau neuronal : 0,80 Erreur : 0,20 Vecteur de poids : Sortie du réseau de neurones : 1,00 Erreur : 0,00 Vecteur de poids : // Dîner au poulet !

Exemple en direct : Neural Net 004. Nous avons maintenant un vecteur de poids qui ne produira qu'un seul résultat (poulet pour le dîner) si le vecteur d'entrée correspond à la réalité (en appuyant sur le troisième bouton). Alors, quelle est la chose cool que nous venons de faire ?

Dans ce cas particulier, notre réseau de neurones (après entraînement) peut reconnaître l'entrée et dire ce qui conduira au résultat souhaité (nous aurons encore besoin de programmer des situations spécifiques) :

De plus, c'est un modèle évolutif, un jouet et un outil pour notre apprentissage avec vous. Nous avons pu apprendre quelque chose de nouveau sur l'apprentissage automatique, les réseaux de neurones et l'intelligence artificielle. Attention aux utilisateurs :

  • Le mécanisme de stockage des poids appris n'est pas fourni, donc ce réseau de neurones oubliera tout ce qu'il sait. Lors de la mise à jour ou de la réexécution du code, vous avez besoin d'au moins six répétitions réussies pour que le réseau s'entraîne complètement, si vous pensez qu'une personne ou une machine appuiera sur les boutons dans un ordre aléatoire ... Cela prendra un certain temps.
  • Les réseaux biologiques pour apprendre des choses importantes ont un taux d'apprentissage de 1, donc une seule répétition réussie sera nécessaire.
  • Il existe un algorithme d'apprentissage qui ressemble beaucoup aux neurones biologiques, il porte un nom accrocheur : règle de widroff-hoff, ou formation widroff-hoff.
  • Les seuils neuronaux (1 dans notre exemple) et les effets de réentraînement (avec un grand nombre de répétitions le résultat sera supérieur à 1) ne sont pas pris en compte, mais ils sont de nature très importante et sont responsables de blocs importants et complexes de réponses comportementales . Il en va de même pour les poids négatifs.

Notes et bibliographie pour aller plus loin

J'ai essayé d'éviter les mathématiques et les termes stricts, mais au cas où vous vous poseriez la question, nous avons construit un perceptron, qui est défini comme un algorithme d'apprentissage supervisé (apprentissage supervisé) de classificateurs doubles - des trucs lourds. La structure biologique du cerveau n'est pas un sujet facile, en partie à cause d'imprécisions, en partie à cause de sa complexité. Mieux vaut commencer par les neurosciences (Purves) et les neurosciences cognitives (Gazzaniga). J'ai modifié et adapté l'exemple du lapin de Gateway to Memory (Gluck), qui est aussi un excellent guide pour le monde des graphes. Une autre ressource impressionnante, An Introduction to Neural Networks (Gurney), est idéale pour tous vos besoins en IA.
Et maintenant en Python ! Merci à Ilya Andshmidt d'avoir fourni la version Python :

Entrées = poids = desire_result = 1 learning_rate = 0,2 essais = 6 def évalue_neural_network(input_array, weight_array): result = 0 for i in range(len(input_array)): layer_value = input_array[i] * weight_array[i] result += layer_value print("evaluate_neural_network: " + str(result)) print("weights: " + str(weights)) return result def evaluation_error(souhaité, réel): erreur = désiré - réel print("evaluate_error: " + str(error) ) renvoie l'erreur def learn(input_array, weight_array): print("learning...") for i in range(len(input_array)): if input_array[i] > 0: weight_array[i] += learning_rate def train(trials ): pour i dans la plage (essais): neural_net_result = évalue_neural_network (entrées, poids) apprendre (entrées, poids) s'entraîner (essais)

Et maintenant sur GO ! Crédit à Kieran Maher pour cette version.

Package main import ("fmt" "math") func main() ( fmt.Println("Création d'entrées et de poids ...") inputs:= float64(0.00, 0.00, 1.00, 0.00) weights:= float64(0.00, 0.00, 0.00, 0.00) désiré := 1.00 learningRate := 0.20 essais := 6 train(trials, inputs, weights, desire, learningRate) ) func train(trials int, inputs float64, weights float64, desire float64, learningRate float64) ( pour je:= 1;je< trials; i++ { weights = learn(inputs, weights, learningRate) output:= evaluate(inputs, weights) errorResult:= evaluateError(desired, output) fmt.Print("Output: ") fmt.Print(math.Round(output*100) / 100) fmt.Print(" Error: ") fmt.Print(math.Round(errorResult*100) / 100) fmt.Print(" ") } } func learn(inputVector float64, weightVector float64, learningRate float64) float64 { for index, inputValue:= range inputVector { if inputValue >0.00 ( weightVector = weightVector + learningRate ) ) return weightVector ) func evaluation(inputVector float64, weightVector float64) float64 ( result:= 0.00 for index, inputValue:= range inputVector ( layerValue:= inputValue * weightVector result = result + layerValue ) return result ) func evaluationError(float64 souhaité, float64 réel) float64 (retour souhaité - réel)

Récemment, il y a eu pas mal de solutions utilisant les réseaux de neurones : applications, services, programmes utilisent ce genre de réseaux pour accélérer la résolution de divers problèmes. Mais qu'est-ce qu'un réseau de neurones ? Les éditeurs d'AIN.UA ont décidé de découvrir ce qu'est cette technologie populaire, d'où elle vient et comment elle fonctionne.

Il est difficile d'appeler les réseaux de neurones une nouvelle tendance technologique. La première recherche de pensée scientifique dans ce domaine remonte au milieu du XXe siècle, lorsque les grands esprits de l'époque ont décidé qu'il serait bien de construire un ordinateur basé sur les réalisations naturelles de mère nature. Notamment en copiant certains principes du cerveau humain.

La création d'un analogue technique de notre bio-ordinateur naturel n'a pas été facile, traversant des périodes d'intérêt accru et de déclin. Cela s'explique par le fait que le niveau de progrès technique des années 1950, quand tout a commencé, n'a pas suivi l'envolée de la pensée scientifique : la conception des premiers réseaux de neurones ne leur a pas permis d'atteindre leur plein potentiel.

Et comment ça marche

Le cerveau humain moyen est composé d'environ 86 milliards de neurones connectés en système unique pour la réception, le traitement et la transmission ultérieure des données. Dans ce réseau, chaque neurone agit comme quelque chose comme un microprocesseur auquel les dendrites sont attirées - des processus pour recevoir des impulsions. Il existe également une sortie sous la forme d'un axone, qui transmet les impulsions reçues à d'autres neurones.

Un réseau neuronal créé artificiellement (ANN) imite le processus de traitement de l'information d'un analogue biologique et est un ensemble de miniprocesseurs divisés en trois groupes :

  • Les points d'entrée (capteurs) sont des neurones par lesquels les informations à traiter entrent dans le RNA.
  • Les points de sortie (réactifs) sont des neurones à travers lesquels l'ANN produit le résultat final.
  • Neurones cachés (associatifs) - un réseau de travail de neurones situés entre les points d'entrée et de sortie.

Le travail principal sur le traitement de l'information se déroule au niveau des neurones cachés (associatifs). Leur réseau est ordonné en plusieurs couches, et plus il y en a, plus le traitement des données précis est capable de produire des ANN.

Schéma d'un perceptron - le réseau neuronal monocouche le plus simple

Ne peut pas être programmé

Une caractéristique des réseaux de neurones est le fait qu'ils ne sont pas programmés, mais entraînés. Sur cette base, les ANN sont divisés en trois catégories - ANN pouvant être entraînés, auto-apprenants et ANN de type mixte.

Un réseau de neurones formé, comme un enfant qui découvre le monde, nécessite constamment une attention particulière et des commentaires de son créateur. En travaillant avec lui, le chercheur fournit à l'ANN un tableau de données, après quoi il lui propose de résoudre un problème avec une réponse prédéterminée. Les deux solutions - initialement correctes et proposées par le réseau de neurones - sont comparées. Si la différence entre eux dépasse le facteur d'erreur autorisé, le chercheur ajuste le réseau de neurones, après quoi le processus d'apprentissage reprend.

Les RNA auto-apprenants apprennent le monde sans tuteurs, en utilisant un algorithme donné pour leur apprentissage. Après avoir reçu la tâche, le réseau de neurones lui-même cherche la réponse, corrige les erreurs commises et, si nécessaire, « revient » le long de la chaîne de neurones associatifs jusqu'à la dernière étape correcte afin de recommencer.

La vidéo ci-dessous est le résultat d'une session d'auto-apprentissage de 24 heures de l'INS dans Super Mario, où il a été donné l'objectif d'atteindre le score maximum qui est attribué en se déplaçant dans le niveau. Plus elle parvenait à aller loin, plus le score final était élevé. En entrées, le chercheur a utilisé des éléments de la carte et des adversaires, et en sorties, des actions disponibles pour le joueur.

Mais ce même ANN légèrement adapté est maîtrisé au volant d'un autre jeu - Mario Kart.

Vous pouvez vous essayer vous-même dans le rôle d'un testeur d'un réseau de neurones en utilisant un simple qui simule le mouvement des voitures avec un pilote automatique. Les voitures se déplacent sous le contrôle de deux réseaux de neurones et obéissent aux règles de base - continuez d'avancer et évitez les collisions.

Votre tâche est de créer des obstacles pour eux et de voir comment le pilote automatique y fait face avec succès, ainsi que de vous préparer mentalement à l'apparition de drones similaires d'Uber et d'entreprises concurrentes dans les rues de votre ville.

Au cœur de tout se trouvent des algorithmes créés par la nature

En parlant de réseaux de neurones et de leur formation, on ne peut manquer de mentionner un phénomène aussi naturel que l'algorithme des fourmis, que vous pouvez littéralement voir dans la cour de votre propre maison.

Lorsqu'elles se déplacent à la recherche de nourriture depuis le nid et à l'arrière, les fourmis recherchent constamment le chemin le plus ergonomique et, en cas d'interférence, adaptent leur itinéraire à la situation modifiée. Pendant le mouvement, la fourmi laisse derrière elle une traînée d'une phéromone spéciale. Les chasseurs de nourriture suivants suivent l'itinéraire laissé par le pionnier, le saturant également d'une « balise » biologique.

Supposons que les fourmis aient un obstacle sur leur chemin vers la nourriture qui peut être contourné par le côté droit ou gauche. Sur le côté gauche, la distance à la source de nourriture est plus courte. Malgré le fait que lors des premières itérations les fourmis passeront des deux côtés de la barrière, la saturation de la phéromone gauche se fera plus rapidement du fait de la courte distance.

Qu'est-ce que ça veut dire? Dans les itérations ultérieures, la voie de gauche, la plus ergonomique, sera la seule utilisée lors des déplacements des fourmis butineuses. De même, le processus d'apprentissage dans un réseau de neurones artificiels se produit.

Pourquoi ANN n'est toujours pas IA

Peu importe à quel point un réseau de neurones est "intelligent", il ne reste pas une intelligence artificielle, mais un outil pour les tâches de classification des données. Bien sûr, nous pouvons être étonnés de voir comment le moteur de recherche reconnaît une certaine combinaison de mots, puis, sur cette base, sélectionne des images avec les chats dont nous avons besoin, mais ce n'est pas le résultat de l'activité mentale d'un neuro-ordinateur, mais juste un synergie de plusieurs classificateurs.

Le réseau de neurones du cerveau humain, malgré la croyance obstinée de chaque génération plus âgée dans la dégradation de la plus jeune, reste beaucoup plus complexe que la structure formelle du RNA, et aussi, en raison du grand nombre et de la variabilité des connexions, est capable de résoudre des problèmes de manière non standard, en dehors des schémas définis par les règles et les formules.

En termes simples, Alexandre le Grand pourrait couper le nœud gordien même maintenant. Un réseau de neurones ne l'est pas.

AIN.UA a précédemment rendu compte d'un artiste allemand qui a développé une impression de vêtements conçue pour protéger les gens de la reconnaissance faciale via des réseaux de neurones.

Si vous voulez recevoir des nouvelles sur Facebook, cliquez sur "j'aime"

Un réseau de neurones artificiels est un ensemble de neurones qui interagissent les uns avec les autres. Ils sont capables de recevoir, de traiter et de créer des données. C'est aussi difficile à imaginer que le travail du cerveau humain. Le réseau neuronal de notre cerveau fonctionne pour que vous puissiez maintenant lire ceci : nos neurones reconnaissent les lettres et les mettent en mots.

Un réseau de neurones artificiels est comme un cerveau. Il a été programmé à l'origine pour simplifier certains processus de calcul complexes. Aujourd'hui, les réseaux de neurones ont beaucoup plus de possibilités. Certains d'entre eux sont sur votre smartphone. Une autre partie a déjà enregistré dans sa base de données que vous avez ouvert cet article. Comment tout cela se produit et pourquoi, lisez la suite.

Comment tout a commencé

Les gens voulaient vraiment comprendre d'où vient l'esprit d'une personne et comment fonctionne le cerveau. Au milieu du siècle dernier, le neuropsychologue canadien Donald Hebb l'a compris. Hebb a étudié l'interaction des neurones les uns avec les autres, a étudié le principe selon lequel ils sont combinés en groupes (scientifiquement - ensembles) et a proposé le premier algorithme scientifique pour la formation de réseaux de neurones.

Quelques années plus tard, un groupe de scientifiques américains a modélisé un réseau neuronal artificiel capable de distinguer les formes carrées des autres formes.

Comment fonctionne un réseau de neurones ?

Les chercheurs ont découvert qu'un réseau de neurones est un ensemble de couches de neurones, dont chacun est chargé de reconnaître un critère spécifique : forme, couleur, taille, texture, son, volume, etc. Année après année, à la suite de millions de expériences et des tonnes de calculs pour le réseau le plus simple de plus en plus de couches de neurones ont été ajoutées. Ils travaillent à tour de rôle. Par exemple, le premier détermine si un carré est ou non un carré, le second comprend si le carré est rouge ou non, le troisième calcule la taille du carré, et ainsi de suite. Ni les carrés, ni les chiffres rouges et de taille inappropriée ne tombent dans de nouveaux groupes de neurones et sont examinés par eux.

Que sont les réseaux de neurones et à quoi servent-ils ?

Les scientifiques ont développé des réseaux de neurones pour apprendre à distinguer les images complexes, les vidéos, les textes et la parole. Il existe aujourd'hui de nombreux types de réseaux de neurones. Ils sont classés en fonction de l'architecture - ensembles de paramètres de données et du poids de ces paramètres, une certaine priorité. Voici quelques-uns d'entre eux.

Réseaux de neurones convolutifs

Les neurones sont divisés en groupes, chaque groupe calcule la caractéristique qui lui est donnée. En 1993, le scientifique français Jan LeCun a montré au monde LeNet 1, le premier réseau neuronal convolutif capable de reconnaître rapidement et avec précision des nombres écrits à la main sur du papier. Voir par vous-même:

Aujourd'hui, les réseaux de neurones convolutifs sont principalement utilisés à des fins multimédias : ils fonctionnent avec des graphiques, de l'audio et de la vidéo.

Réseaux de neurones récurrents

Les neurones se souviennent constamment des informations et construisent d'autres actions basées sur ces données. En 1997, des scientifiques allemands ont modifié les réseaux récurrents les plus simples en réseaux à longue mémoire à court terme. Sur leur base, des réseaux avec des neurones récurrents contrôlés ont ensuite été développés.

Aujourd'hui, avec l'aide de tels réseaux, des textes sont écrits et traduits, des robots sont programmés pour mener des dialogues significatifs avec une personne, des codes pour les pages et les programmes sont créés.

L'utilisation de ce type de réseaux de neurones est la capacité d'analyser et de générer des données, de compiler des bases de données et même de faire des prédictions.

En 2015, SwiftKey a lancé le premier clavier au monde alimenté par un réseau neuronal récurrent avec des neurones contrôlés. Ensuite, le système a donné des indices dans le processus de saisie en fonction des derniers mots saisis. L'année dernière, les développeurs ont formé le réseau de neurones pour apprendre le contexte du texte tapé, et les conseils sont devenus significatifs et utiles :

Réseaux de neurones combinés (convolutif + récurrent)

Ces réseaux de neurones sont capables de comprendre ce qu'il y a dans l'image et de le décrire. Et vice versa : dessinez des images selon la description. L'exemple le plus clair a été démontré par Kyle Macdonald, qui a pris un réseau de neurones pour une promenade autour d'Amsterdam. Le réseau a instantanément déterminé ce qui se trouvait devant lui. Et presque toujours exactement :

Les réseaux de neurones sont constamment en auto-apprentissage.

Grâce à ce processus :

1. Skype a introduit la possibilité de traduction simultanée pour 10 langues. Parmi lesquels, pour un moment, il y a le russe et le japonais - l'un des plus difficiles au monde. Bien sûr, la qualité de la traduction doit être sérieusement améliorée, mais le fait même que vous puissiez communiquer avec des collègues japonais en russe et être sûr d'être compris est inspirant.

2. Yandex a créé deux algorithmes de recherche basés sur des réseaux de neurones : Palekh et Korolev. Le premier a permis de trouver les sites les plus pertinents pour les requêtes peu fréquentes. "Palekh" a étudié les titres des pages et comparé leur sens avec le sens des requêtes. Sur la base de Palekh, Korolev est apparu. Cet algorithme évalue non seulement le titre, mais également l'intégralité du contenu textuel de la page. La recherche devient plus précise et les propriétaires de sites commencent à aborder le contenu des pages de manière plus intelligente.

3. Des collègues de spécialistes SEO de Yandex ont créé un réseau neuronal musical : il compose de la poésie et écrit de la musique. Le neurogroupe s'appelle symboliquement Neurona, et ils ont déjà leur premier album :

4. Google Inbox utilise des réseaux de neurones pour répondre à un message. Le développement technologique bat son plein, et aujourd'hui le réseau étudie déjà la correspondance et génère options possibles réponse. Vous ne pouvez pas perdre de temps à taper et ne pas avoir peur d'oublier un accord important.

5. YouTube utilise des réseaux de neurones pour classer les vidéos, et selon deux principes à la fois : un réseau de neurones étudie les vidéos et les réactions du public à celles-ci, l'autre effectue des recherches sur les utilisateurs et leurs préférences. C'est pourquoi les recommandations YouTube sont toujours sur le sujet.

6. Facebook travaille activement sur DeepText AI - un programme de communication qui comprend le jargon et nettoie les chats du vocabulaire obscène.

7. Des applications comme Prisma et Fabby, construites sur des réseaux de neurones, créent des images et des vidéos :

Colorize redonne de la couleur aux photos en noir et blanc (surprise grand-mère !).

MakeUp Plus sélectionne le rouge à lèvres parfait pour les filles parmi un vrai panel de vraies marques : Bobbi Brown, Clinique, Lancôme et YSL sont déjà en activité.

Apple et Microsoft mettent constamment à jour leurs neurones Siri et Contana.

Réseau neuronal artificiel

Pour l'instant, ils ne font que suivre nos ordres, mais dans un futur proche ils vont commencer à prendre l'initiative : donner des recommandations et anticiper nos envies.

Et quoi d'autre nous attend dans le futur ?

Les réseaux de neurones auto-apprenants peuvent remplacer les personnes : ils commenceront par les rédacteurs et les relecteurs. Déjà, les robots créent des textes avec du sens et sans erreurs. Et ils le font beaucoup plus vite que les gens. Ils se poursuivront avec les employés des centres d'appels, le support technique, les modérateurs et les administrateurs des publics dans les réseaux sociaux. Les réseaux de neurones savent déjà comment apprendre le script et le jouer avec votre voix. Qu'en est-il dans les autres domaines ?

Secteur agricole

Le réseau de neurones sera mis en œuvre dans un équipement spécial. Les moissonneuses-batteuses piloteront automatiquement, scanneront les plantes et étudieront le sol, transmettant les données au réseau neuronal. Elle décidera - d'arroser, de fertiliser ou de pulvériser des parasites. Au lieu d'une quinzaine d'ouvriers, il faudra tout au plus deux spécialistes : un superviseur et un technicien.

La médecine

Microsoft travaille maintenant activement à la création d'un remède contre le cancer. Les scientifiques sont engagés dans la bioprogrammation - ils essaient de numériser le processus d'émergence et de développement des tumeurs. Lorsque tout fonctionnera, les programmeurs pourront trouver un moyen de bloquer un tel processus, par analogie, un médicament sera créé.

Commercialisation

Le marketing est hautement personnalisé. Déjà, les réseaux de neurones peuvent déterminer en quelques secondes quel utilisateur, quel contenu et à quel prix diffuser. À l'avenir, la participation du spécialiste du marketing au processus sera réduite au minimum : les réseaux de neurones prédiront les requêtes basées sur les données de comportement des utilisateurs, analyseront le marché et émettront les offres les plus appropriées au moment où une personne pensera à acheter.

Commerce électronique

Le commerce électronique sera mis en œuvre partout. Vous n'avez plus besoin d'aller sur la boutique en ligne en utilisant le lien : vous pouvez tout acheter là où vous le voyez en un clic.

Par exemple, vous lisez cet article quelques années plus tard. Vous aimez vraiment le rouge à lèvres sur l'écran de l'application MakeUp Plus (voir ci-dessus). Vous cliquez dessus et vous accédez directement au panier. Ou regardez une vidéo sur Dernier modèle Hololens (lunettes de réalité mixte) et passez une commande directement depuis YouTube.

Dans presque tous les domaines, les spécialistes ayant des connaissances ou au moins une compréhension de la structure des réseaux de neurones, de l'apprentissage automatique et des systèmes d'intelligence artificielle seront valorisés. Nous coexisterons avec des robots. Et plus nous en saurons sur eux, plus nous vivrons sereinement.

PS Zinaida Falls est un réseau de neurones Yandex qui écrit de la poésie. Évaluez le travail que la machine a écrit, après avoir appris sur Mayakovsky (orthographe et ponctuation préservées):

« ce»

c'est
juste
quelque chose
dans le futur
et pouvoir
cette personne
y a-t-il tout ou pas
c'est du sang tout autour
accord
grossir
gloire à
terrain
avec une fissure dans le bec

Impressionnant, non ?

Les réseaux de neurones pour les nuls

Aujourd'hui, à chaque coin de rue, ici et là, ils crient sur les avantages des réseaux de neurones. Mais ce que c'est, seuls quelques-uns le comprennent vraiment. Si vous vous tournez vers Wikipédia pour des explications, votre tête vous tournera du haut des citadelles de termes scientifiques et de définitions qui y sont construites. Si vous êtes loin du génie génétique et que le langage sec et déroutant des manuels universitaires ne provoque que de la confusion et aucune idée, alors essayons de comprendre ensemble le problème des réseaux de neurones.

Si le cerveau humain est constitué de neurones, nous admettrons conditionnellement qu'un neurone électronique est une sorte de boîte imaginaire qui a de nombreuses entrées et une sortie.

L'algorithme interne du neurone détermine la procédure de traitement et d'analyse des informations reçues et de leur conversion en un seul pool de connaissances utiles. Selon le bon fonctionnement des entrées et des sorties, l'ensemble du système réfléchit rapidement ou, à l'inverse, peut ralentir.

Important

Lors de l'écriture du code principal, vous devez expliquer vos actions littéralement sur les doigts. Si nous travaillons, par exemple, avec des images, alors à la première étape, la valeur pour nous sera sa taille et sa classe. Si la première caractéristique nous indique le nombre d'entrées, la seconde aidera le réseau neuronal lui-même à traiter l'information.

Réseaux de neurones : qu'est-ce que c'est et comment ça marche

Idéalement, après avoir chargé les données primaires et comparé la topologie de classe, le réseau de neurones pourra alors classer nouvelle information. Disons que nous décidons de télécharger une image de 3x5 pixels. L'arithmétique simple nous dira qu'il y aura 3*5=15 entrées. Et la classification elle-même déterminera le nombre total de sorties, c'est-à-dire neurones. Autre exemple : un réseau de neurones doit reconnaître la lettre « C ». Le seuil spécifié est une correspondance complète à la lettre, cela nécessitera un neurone avec le nombre d'entrées égal à la taille de l'image.

Comme dans toute formation, l'élève doit être puni pour la mauvaise réponse, mais nous ne donnerons rien pour la bonne. Si le programme perçoit la bonne réponse comme Faux, alors nous augmentons le poids d'entrée sur chaque synapse. Si, au contraire, avec un résultat incorrect, le programme considère le résultat positif ou vrai, alors nous soustrayons le poids de chaque entrée au neurone. Il est plus logique de commencer à apprendre en apprenant à connaître le symbole dont nous avons besoin. Le premier résultat sera incorrect, cependant, en corrigeant légèrement le code, le programme fonctionnera correctement lors de travaux ultérieurs. L'exemple donné d'un algorithme pour construire un code pour un réseau de neurones est appelé un parsetron.

les réseaux de neurones

Les réseaux de neurones pour les nuls

Aujourd'hui, à chaque coin de rue, ici et là, ils crient sur les avantages des réseaux de neurones. Mais ce que c'est, seuls quelques-uns le comprennent vraiment.

Écrire votre propre réseau de neurones : un guide étape par étape

Si vous vous tournez vers Wikipédia pour des explications, votre tête vous tournera du haut des citadelles de termes scientifiques et de définitions qui y sont construites. Si vous êtes loin du génie génétique et que le langage sec et déroutant des manuels universitaires ne provoque que de la confusion et aucune idée, alors essayons de comprendre ensemble le problème des réseaux de neurones.

Pour comprendre le problème, vous devez trouver la cause profonde, qui se trouve complètement à la surface. En se souvenant de Sarah Connor, on comprend avec un frisson que les pionniers du développement informatique Warren McCulloch et Walter Pitts ont poursuivi l'objectif égoïste de créer la première Intelligence Artificielle.

Les réseaux de neurones sont un prototype électronique d'un système d'auto-apprentissage. Comme un enfant, un réseau de neurones absorbe des informations, les mâche, acquiert de l'expérience et apprend. Dans le processus d'apprentissage, un tel réseau se développe, grandit et peut tirer ses propres conclusions et prendre des décisions par lui-même.

Si le cerveau humain est constitué de neurones, nous admettrons conditionnellement qu'un neurone électronique est une sorte de boîte imaginaire qui a de nombreuses entrées et une sortie. L'algorithme interne du neurone détermine la procédure de traitement et d'analyse des informations reçues et de leur conversion en un seul pool de connaissances utiles. Selon le bon fonctionnement des entrées et des sorties, l'ensemble du système réfléchit rapidement ou, à l'inverse, peut ralentir.

Important: En règle générale, les informations analogiques sont utilisées dans les réseaux de neurones.

Nous répétons qu'il peut y avoir de nombreux flux d'informations d'entrée (en termes scientifiques, cette connexion de l'information initiale et de notre «neurone» s'appelle des synapses), et tous sont de nature différente et ont une signification inégale. Par exemple, une personne perçoit le monde qui l'entoure à travers les organes de la vue, du toucher et de l'odorat. Il est logique que la vue soit plus importante que l'odorat. En fonction des différentes situations de la vie, nous utilisons certains organes sensoriels : dans l'obscurité totale, le toucher et l'ouïe sont mis en avant. Les synapses dans les réseaux de neurones par la même analogie dans différentes situations auront une signification différente, qui est généralement indiquée par le poids de la connexion. Lors de l'écriture du code, un seuil minimum de transmission d'informations est défini. Si le poids de la connexion est supérieur à la valeur spécifiée, alors le résultat de la vérification par le neurone est positif (et égal à un dans le système binaire), s'il est inférieur, alors il est négatif. Il est logique que plus la barre est haute, plus le travail du réseau de neurones sera précis, mais plus cela prendra du temps.

Pour qu'un réseau de neurones fonctionne correctement, vous devez passer du temps à le former - c'est la principale différence avec les algorithmes programmables simples. Comme un petit enfant, un réseau de neurones a besoin d'une base d'informations initiale, mais si le code initial est écrit correctement, le réseau de neurones lui-même pourra non seulement faire le bon choix à partir des informations disponibles, mais également construire des hypothèses indépendantes.

Lors de l'écriture du code principal, vous devez expliquer vos actions littéralement sur les doigts. Si nous travaillons, par exemple, avec des images, alors à la première étape, la valeur pour nous sera sa taille et sa classe. Si la première caractéristique nous indique le nombre d'entrées, la seconde aidera le réseau neuronal lui-même à traiter l'information. Idéalement, après avoir chargé les données primaires et comparé la topologie des classes, le réseau de neurones pourra alors classer lui-même les nouvelles informations. Disons que nous décidons de télécharger une image de 3x5 pixels. L'arithmétique simple nous dira qu'il y aura 3*5=15 entrées. Et la classification elle-même déterminera le nombre total de sorties, c'est-à-dire neurones. Autre exemple : un réseau de neurones doit reconnaître la lettre « C ». Le seuil spécifié est une correspondance complète à la lettre, cela nécessitera un neurone avec le nombre d'entrées égal à la taille de l'image.

Disons que la taille sera la même 3x5 pixels. En alimentant le programme diverses images de lettres ou de chiffres, nous lui apprendrons à déterminer l'image du personnage dont nous avons besoin.

Comme dans toute formation, l'élève doit être puni pour la mauvaise réponse, mais nous ne donnerons rien pour la bonne. Si le programme perçoit la bonne réponse comme Faux, alors nous augmentons le poids d'entrée sur chaque synapse. Si, au contraire, avec un résultat incorrect, le programme considère le résultat positif ou vrai, alors nous soustrayons le poids de chaque entrée au neurone. Il est plus logique de commencer à apprendre en apprenant à connaître le symbole dont nous avons besoin. Le premier résultat sera incorrect, cependant, en corrigeant légèrement le code, le programme fonctionnera correctement lors de travaux ultérieurs.

L'exemple donné d'un algorithme pour construire un code pour un réseau de neurones est appelé un parsetron.

Il existe également des options plus complexes pour le fonctionnement des réseaux de neurones avec le retour de données incorrectes, leur analyse et les conclusions logiques du réseau lui-même. Par exemple, un prédicteur en ligne de l'avenir est un réseau de neurones assez programmé. De tels programmes sont capables d'apprendre à la fois avec et sans enseignant, et sont appelés résonance adaptative. Leur essence réside dans le fait que les neurones ont déjà leurs propres idées sur l'attente du type d'informations qu'ils souhaitent recevoir et sous quelle forme. Entre l'attente et la réalité, il y a un seuil mince de la soi-disant vigilance des neurones, qui aide le réseau à classer correctement les informations entrantes et à ne pas manquer un seul pixel. La particularité du réseau de neurones AR est qu'il apprend tout seul dès le début, détermine indépendamment le seuil de vigilance neuronale. Ce qui, à son tour, joue un rôle dans la classification des informations : plus le réseau est vigilant, plus il est méticuleux.

Nous avons reçu les connaissances de base sur ce que sont les réseaux de neurones. Essayons maintenant de résumer les informations reçues. Alors, les réseaux de neurones est un prototype électronique de la pensée humaine. Ils sont constitués de neurones électroniques et de synapses - des flux d'informations à l'entrée et à la sortie du neurone. Les réseaux de neurones sont programmés selon le principe de l'apprentissage avec un enseignant (un programmeur qui télécharge des informations primaires) ou indépendamment (sur la base d'hypothèses et d'attentes à partir des informations reçues, qui sont déterminées par le même programmeur). À l'aide d'un réseau de neurones, vous pouvez créer n'importe quel système : d'une simple détection de modèles sur des images de pixels au psychodiagnostic et à l'analyse économique.

les réseaux de neurones,
méthodes d'analyse des données :
de la recherche au développement et à la mise en œuvre

domicile
Prestations de service
Les réseaux de neurones
idées de base
capacités
Avantages

Comment utiliser
programmation
précision de la solution
NS et IA
Programmes
Des articles
Blog
A propos de l'auteur / contacts