Vous avez peut-être entendu dire que les réseaux de neurones sont des " approximateurs de fonctions universelles ". En substance, le théorème de Cybenko dit que pour toute fonction mappant des réels aux réels, vous pouvez l'approcher avec un réseau neuronal avec des fonctions d'activation sigmoïdes. En fait, il s'avère que les réseaux de neurones vous permettent de calculer n'importe quelle fonction calculable par une machine de Turing (c'est-à-dire tout ce que vous pouvez écrire un algorithme à calculer). Malheureusement, ces preuves indiquent seulement que pour une configuration finie de neurones et de poids, vous pouvez approximer n'importe quelle fonction.
La théorie est toute belle et dandy, mais votre question semble être plus sur la façon de coder réellement le calcul d'une fonction en un ensemble de neurones et de poids. Pour illustrer, considérons un exemple simple - l'exclusif ou. Le XOR prend deux entrées, passe ces entrées. Lorsqu'une et une seule des entrées sont activées, le nœud de sortie est activé. Lorsque les deux entrées ou aucune d'entre elles ne sont activées, le nœud de sortie n'est pas activé.
Notez que les trois nœuds cachés font des choses différentes. Les nœuds les plus à gauche et à droite passent simplement par les activations de respect des nœuds d'entrée. Le neurone central prend les deux entrées et les annule d'une manière ou d'une autre si elles sont toutes les deux activées. Cette combinaison et recombinaison intelligentes d'entrées est essentiellement la façon dont le travail dans un réseau neuronal est effectué.
Évidemment, pour les fonctions plus complexes, la combinaison et la recombinaison doivent être effectuées de manière plus intelligente et compliquée, mais c'est essentiellement ce qui se passe à un niveau bas. Ce qui est fou, c'est que c'est vraiment tout ce dont vous avez besoin pour calculer n'importe quelle fonction calculable! Là encore, les machines de turing se révèlent également être d'une simplicité trompeuse ...
Le problème est que nous n'avons pas vraiment de moyen de générer comme par magie le réseau neuronal qui calcule une fonction arbitraire. Les preuves nous disent seulement qu'il existe un réseau qui pourrait le faire. Lorsque nous formons nos réseaux de neurones, nous essayons simplement de trouver un réseau assez proche.
Dans le contexte de la reconnaissance d'image, vous pourriez imaginer des modèles d'encodage dans le réseau. Par exemple, pour reconnaître le nombre «1», vous pourriez imaginer des nœuds cachés qui s'attendent à ce qu'une colonne de pixels soit principalement ou entièrement activée, avec des pixels voisins éteints. Ce nœud caché pourrait être assez bon pour reconnaître une ligne droite dans cette colonne particulière. Rassemblez assez de ceux-ci et très bientôt vous avez un tas de nœuds qui le font à suffisamment d'endroits de votre image que si j'en montre un au réseau, suffisamment de nœuds cachés en ligne droite seront activés, indiquant un '1'. Le problème devient bien sûr de généraliser le réseau pour qu'il puisse reconnaître un ensemble varié d'entrées.
J'espère que cela vous aidera à comprendre plus ou moins les concepts de la façon dont un réseau de neurones peut effectuer des calculs. Cependant, vous avez atteint un point assez important sur les réseaux de neurones: en général, il est difficile au mieux de comprendre pourquoi le réseau crache une sortie particulière, surtout quand vous considérez que pour quelque chose comme la reconnaissance d'image, les réseaux sont généralement suffisamment grand pour que les humains aient du mal à comprendre chacune des pièces mobiles de la machine. Pour compliquer davantage le problème, en général, la plupart des réseaux de neurones n'ont en fait pas un seul nœud caché pour chaque petite fonctionnalité que le réseau pourrait découvrir sur les données. Au lieu de cela, la détection de quelque chose comme une ligne droite pour classer le nombre «1» aurait lieu de manière non centralisée sur de nombreux nœuds cachés. Autres algorithmes,
Si vous recherchez plus de lecture, je vous recommande fortement de lire ce tutoriel sur ai junkie. Il vous guide à travers les bases du fonctionnement d'un réseau de neurones et donne même un exemple de code simple permettant aux réseaux de neurones de conduire un réservoir vers un objectif. Le tutoriel ne couvre cependant pas la rétropropagation, qui est de loin le moyen le plus courant de former des réseaux de neurones, et utilise plutôt un algorithme génétique simple. Une fois qu'il commence à parler de génétique, je suppose que vous pouvez arrêter de lire ...