J'essaie d'apprendre comment Neural Network fonctionne sur la reconnaissance d'image. J'ai vu quelques exemples et je suis devenu encore plus confus. Dans l'exemple de reconnaissance de lettres d'une image 20x20, les valeurs de chaque pixel deviennent la couche d'entrée. Donc 400 neurones. Puis une couche cachée de neurones et 26 neurones de sortie. Ensuite, entraînez le réseau, puis ça fonctionne, pas parfait.
Ce qui m'a dérouté dans le réseau neuronal, c'est comment il apprend ce qu'il y a dans une image. Vous n'avez pas besoin de faire de seuillage, de segmentation ou de mesure, le réseau apprend en quelque sorte à comparer les images et à les reconnaître. C'est comme de la magie pour moi maintenant. Par où commencer pour apprendre le réseau neuronal?
la source
Réponses:
Un aperçu important de la façon dont un réseau de neurones peut apprendre à classer quelque chose d'aussi complexe que des données d'image à partir d'exemples et de réponses correctes m'est venu en étudiant les travaux du professeur Kunihiko Fukushima sur la néocognitrion dans les années 1980. Au lieu de simplement montrer à son réseau un tas d'images et d'utiliser la rétropropagation pour lui permettre de comprendre les choses par lui-même, il a adopté une approche différente et a formé son réseau couche par couche, et même nœud par nœud. Il a analysé les performances et le fonctionnement de chaque nœud individuel du réseau et a intentionnellement modifié ces parties pour les faire réagir de la manière voulue.
Par exemple, il savait qu'il voulait que le réseau soit capable de reconnaître les lignes, il a donc formé des couches et des nœuds spécifiques pour reconnaître les lignes horizontales de trois pixels, les lignes verticales de 3 pixels et les variations spécifiques des lignes diagonales sous tous les angles. Ce faisant, il savait exactement sur quelles parties du réseau on pouvait compter pour tirer lorsque les schémas souhaités existaient. Ensuite, chaque couche étant fortement connectée, le néocognitron dans son ensemble pourrait identifier chacune des parties composites présentes dans l'image, peu importe où elles existaient physiquement. Ainsi, lorsqu'un segment de ligne spécifique existait quelque part dans l'image, il y aurait toujours un nœud spécifique qui se déclencherait.
En gardant cette image toujours présente, envisagez une régression linéaire qui consiste simplement à trouver une formule (ou une ligne) via la somme des erreurs au carré, qui passe le plus près dans vos données, c'est assez facile à comprendre. Pour trouver des "lignes" courbes, nous pouvons faire la même somme de calcul de produits, sauf que maintenant nous ajoutons quelques paramètres de x ^ 2 ou x ^ 3 ou même des polynômes d'ordre supérieur. Vous disposez maintenant d'un classificateur de régression logistique. Ce classificateur peut trouver des relations qui ne sont pas de nature linéaire. En fait, la régression logistique peut exprimer des relations arbitrairement complexes, mais vous devez toujours choisir manuellement le nombre correct de fonctions d'alimentation pour bien prédire les données.
Une façon de penser au réseau de neurones est de considérer la dernière couche comme un classifieur de régression logistique , puis les couches cachées peuvent être considérées comme des "sélecteurs de caractéristiques" automatiques . Cela élimine le travail de sélection manuelle du nombre correct et de la puissance des fonctions d'entrée. Ainsi, le NN devient un sélecteur automatique de caractéristiques de puissance et peut trouver n'importe quelle relation linéaire ou non linéaire ou servir de classificateur d'ensembles arbitrairement complexes ** (ceci, suppose seulement, qu'il y a suffisamment de couches et de connexions cachées pour représenter la complexité de le modèle dont il a besoin pour apprendre). En fin de compte, un NN qui fonctionne bien devrait apprendre non seulement "la relation" entre les entrées et les sorties, mais plutôt nous recherchons une abstraction ou un modèle quise généralise bien.
En règle générale, le réseau de neurones ne peut rien apprendre qu'un humain raisonnablement intelligent ne pourrait théoriquement apprendre avec suffisamment de temps à partir des mêmes données, cependant,
la source
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 ...
la source
C'est ce qui vous a dérouté
Ce qui se trouve dans une image est représenté numériquement par les valeurs en pixels de l'image. Si vous prenez un exemple de couleur dans l'image. Le pixel peut avoir trois valeurs, chacune pour les trois couleurs principales - Rouge, Vert et Bleu (
RGB
). Un pixel avec (10,50,100
) signifie qu'il a «moins» d'éléments de couleur bleue qu'un pixel avec (40,50,100
). Ainsi, dans l'image, le premier pixel représente une région avec moins de couleur bleue. Ce sont les informations que le réseau neuronal apprend, d'un endroit / d'une région de l'image à l'autre et finit par «savoir» ce qui est dans l'image. Le même principe est appliqué pour d'autres caractéristiques d'image (en plus de la couleur) qui peuvent être utilisées comme entrée pour le réseau neuronal. Voir ceci et cela pour les concepts d'image de base, puis passer à ce pour apprendre comment fonctionne le réseau neuronal.la source
Tous les problèmes d'apprentissage automatique sont les mêmes. Vous avez des données de train, apprenez un modèle qui représente ces données et avez la capacité de généraliser ces connaissances de cette façon que vous regroupez, classifiez, apprenez avec différents algorithmes.
Dans Reconnaissance d'images, vous disposez à nouveau d'un ensemble d'images que vous souhaitez découvrir.
Si vous souhaitez reconnaître plusieurs éléments, utilisez plusieurs classificateurs pour chacun.
la source
Je voudrais également mentionner très populaire pour les réseaux de neurones convolutifs de reconnaissance d'image. Voici un lien vers une explication simplifiée d'un CNN .
En bref, dans l'image CNN est d'abord divisé en fonctionnalités, comme les bords, les formes, les collections de formes. Ensuite, ces caractéristiques sont «introduites» dans un réseau neuronal multicouche «régulier» entièrement connecté (perceptron multicouche).
Plus en détail, un ensemble de filtres est appliqué pour extraire des entités sous la forme d'une carte d'entités. Un filtre est juste une matrice (aléatoire au début) qui est appliquée à l'image d'origine afin que le produit scalaire de la matrice d'image d'origine et de la matrice de filtre soit calculé et que le résultat soit résumé. Le filtre se déplace le long de l'image d'origine d'un pixel (l'étape) à la fois et la matrice de la carte d'entités est en cours de remplissage. Une carte d'entités est créée pour chaque filtre. Ensuite, la non-linéarité a été introduite avec RELU (Rectified Linear Unit) pour chaque pixel de chaque carte d'entités. La mise en commun, par l'application de max (), sum () ou average (), se fait après convolution. Enfin, les fonctionnalités extraites de cette façon ressemblent à des morceaux «agrandis» de l'image d'origine. Ces caractéristiques sont entrées dans un réseau neuronal entièrement connecté (toutes les unités sont connectées) et les probabilités pour chaque image (disons que nous avons formé notre réseau sur des images de voitures, d'arbres et de bateaux) sont calculées après chaque passage à travers le réseau. Le réseau est formé, ce qui signifie que les paramètres (poids) et les matrices de filtres sont optimisés par rétropropagation (minimisation des erreurs de classification erronée). Lorsqu'une nouvelle image est entrée dans le réseau formé, seule la rétroaction est nécessaire pour identifier l'image (à condition que le réseau soit suffisamment précis, c'est-à-dire que nous l'avons formée avec suffisamment d'exemples, etc.) ce qui signifie que les paramètres (poids) et les matrices de filtres sont optimisés par rétropropagation (minimisation des erreurs de classification erronée). Lorsqu'une nouvelle image est entrée dans le réseau formé, seule la rétroaction est nécessaire pour identifier l'image (à condition que le réseau soit suffisamment précis, c'est-à-dire que nous l'avons formée avec suffisamment d'exemples, etc.) ce qui signifie que les paramètres (poids) et les matrices de filtres sont optimisés par rétropropagation (minimisation des erreurs de classification erronée). Lorsqu'une nouvelle image est entrée dans le réseau formé, seule la rétroaction est nécessaire pour identifier l'image (à condition que le réseau soit suffisamment précis, c'est-à-dire que nous l'avons formée avec suffisamment d'exemples, etc.)
la source
Il est bon de savoir que ANN peut créer n'importe quelle fonction f (x) ou f (x, y, z, ..) ou n'importe quelle multifonction d'ailleurs. Mais il est également important de savoir que les fonctions ont des limites dans la façon dont elles peuvent classer les données ... il existe des relations plus complexes des sous-ensembles de jeux de puissance d'objets, qui sont importants dans la classification et ceux-ci ne sont pas décrits par ces fonctions de manière élégante ou naturelle, mais sont importants dans le langage et la classification des objets. ANN peut cependant le faire également.
la source