Je suis sûr que beaucoup de gens répondront avec des liens vers "laissez-moi google ça pour vous", alors je tiens à dire que j'ai essayé de comprendre cela, alors pardonnez mon manque de compréhension ici, mais je ne peux pas comprendre comment le La mise en œuvre pratique d'un réseau de neurones fonctionne réellement.
Je comprends la couche d'entrée et la façon de normaliser les données, mais aussi l'unité de biais, mais en ce qui concerne la couche cachée, le calcul réel de cette couche et la manière dont il est mappé sur la sortie sont un peu flous. J'ai vu des diagrammes avec des points d'interrogation dans la couche masquée, des fonctions booléennes comme AND / OR / XOR, des fonctions d'activation et des nœuds d'entrée mappés sur toutes les unités masquées et les nœuds d'entrée mappés sur quelques unités masquées uniquement, etc. J'ai juste quelques questions sur l'aspect pratique. Bien entendu, une explication simple du processus de réseau de neurones dans son ensemble, comme vous l'expliqueriez à un enfant, serait géniale.
Quels calculs sont effectués dans la couche cachée?
Comment ces calculs sont-ils mappés sur la couche en sortie?
Comment fonctionne la couche de sortie? Dénormaliser les données de la couche cachée?
Pourquoi certaines couches de la couche d'entrée sont-elles connectées à la couche masquée et d'autres pas?
Réponses:
Version en trois phrases:
Chaque calque peut appliquer la fonction de votre choix au calque précédent (généralement une transformation linéaire suivie d'une non-linéarité réductrice).
Le travail des couches masquées consiste à transformer les entrées en un élément pouvant être utilisé par la couche en sortie.
La couche de sortie transforme les activations de la couche cachée à l’échelle souhaitée par votre sortie.
Comme si tu avais 5 ans:
Si vous voulez qu'un ordinateur vous dise s'il y a un bus dans une image, l'ordinateur aura peut-être plus de facilité s'il dispose des bons outils.
Donc, votre détecteur de bus peut être constitué d'un détecteur de roue (pour vous aider à dire que c'est un véhicule) et d'un détecteur de boîte (car le bus a la forme d'une grande boîte) et d'un détecteur de taille (pour vous dire que c'est trop grand pour être une voiture ). Ce sont les trois éléments de votre couche cachée: ils ne font pas partie de l'image brute, ce sont des outils que vous avez conçus pour vous aider à identifier les bus.
Si ces trois détecteurs s’allument (ou peut-être s’ils sont particulièrement actifs), il est fort probable que vous ayez un bus devant vous.
Les réseaux de neurones sont utiles car il existe de bons outils (comme la rétropropagation) pour construire et assembler de nombreux détecteurs.
Comme si tu étais un adulte
Un réseau de neurones à feed-forward applique une série de fonctions aux données. Les fonctions exactes dépendent du réseau de neurones que vous utilisez: le plus souvent, ces fonctions calculent chacune une transformation linéaire du calque précédent, suivie d'une non-linéarité réduite. Parfois, les fonctions font autre chose (comme le calcul de fonctions logiques dans vos exemples, ou la moyenne sur des pixels adjacents dans une image). Ainsi, les rôles des différentes couches pourraient dépendre des fonctions calculées, mais je vais essayer d'être très général.
Appelons le vecteur d'entrée , les activations de couche masquée et l'activation de sortie . Vous avez une fonction qui mappe de à et une autre fonction qui mappe de à . h y f x h g h yX h y f x h g h y
Donc, l'activation de la couche cachée est et la sortie du réseau est .g ( f ( x ) )f(x) g(f(x))
Pourquoi avoir deux fonctions ( et ) au lieu d’une seule?gf g
Si le niveau de complexité par fonction est limité, alors peut calculer des choses que et ne peuvent pas faire individuellement. f gg(f(x)) f g
Un exemple avec des fonctions logiques:
Par exemple, si nous autorisons uniquement et à être de simples opérateurs logiques tels que "AND", "OR" et "NAND", vous ne pouvez pas calculer d'autres fonctions telles que "XOR" avec un seul d'entre eux. D'autre part, nous pourrions calculer "XOR" si nous voulions superposer ces fonctions les unes sur les autres:gf g
Fonctions de la première couche:
Fonction de deuxième couche:
La sortie du réseau n'est que le résultat de cette seconde fonction. La première couche transforme les entrées en quelque chose que la seconde couche peut utiliser pour que tout le réseau puisse exécuter XOR.
Un exemple avec des images:
La diapositive 61 de cette présentation - également disponible ici en tant qu’image unique - montre (un moyen de visualiser) ce que les différentes couches cachées d’un réseau neuronal particulier recherchent.
La première couche recherche des arêtes courtes dans l'image: elles sont très faciles à trouver à partir de données de pixels brutes, mais elles ne sont pas très utiles en elles-mêmes pour vous indiquer si vous regardez un visage, un bus ou un éléphant. .
La couche suivante compose les bords: si les bords de la couche cachée inférieure s’emboîtent d’une certaine manière, l’un des détecteurs d’œil situé au milieu de la colonne la plus à gauche peut s’allumer. Il serait difficile de créer un seul calque qui permette de trouver quelque chose d'aussi spécifique à partir des pixels bruts: les détecteurs oculaires sont beaucoup plus faciles à construire à partir de détecteurs de contour que de pixels bruts.
La couche suivante compose les détecteurs oculaires et les détecteurs nasaux en visages. En d'autres termes, ils s'allumeront lorsque les détecteurs oculaires et les détecteurs nasaux de la couche précédente s'allumeront avec les bons motifs. Celles-ci sont très efficaces pour rechercher des types de visages particuliers: si un ou plusieurs d'entre eux sont allumés, votre couche de sortie doit alors signaler la présence d'un visage.
Ceci est utile car les détecteurs de visage sont faciles à construire à partir de détecteurs oculaires et de nez, mais vraiment difficiles à construire à partir d'intensités de pixels.
Ainsi, chaque couche vous éloigne de plus en plus des pixels bruts et se rapproche de votre objectif ultime (détection de visage ou de bus, par exemple).
Réponses à d'autres questions
"Pourquoi certaines couches de la couche d'entrée sont-elles connectées à la couche masquée et d'autres pas?"
Les noeuds déconnectés du réseau sont appelés noeuds "en biais". Il y a une très belle explication ici . La réponse courte est qu'ils sont comme des termes d'interception dans la régression.
"D'où proviennent les images" détecteur d'œil "de l'exemple d'image?"
Je n'ai pas vérifié deux fois les images spécifiques auxquelles j'ai lié, mais en général, ces visualisations montrent l'ensemble des pixels du calque d'entrée qui maximisent l'activité du neurone correspondant. Donc, si nous considérons le neurone comme un détecteur d’œil, il s’agit de l’image que le neurone considère comme très semblable à l’œil. Les gens trouvent généralement ces ensembles de pixels avec une procédure d'optimisation (alpinisme).
Dans cet article de Google utilisant l'un des plus grands réseaux de neurones au monde, ils montrent un neurone "détecteur de visage" et un neurone "détecteur de chat" de cette manière, ainsi qu'un deuxième moyen: ils montrent également les images réelles qui activent la neurone le plus fortement (figure 3, figure 16). La deuxième approche est intéressante car elle montre à quel point le réseau est flexible et non linéaire - ces "détecteurs" de haut niveau sont sensibles à toutes ces images, même s’ils ne se ressemblent pas particulièrement au niveau des pixels.
Faites-moi savoir si quelque chose n'est pas clair ou si vous avez d'autres questions.
la source
f(x) = max(x, 0)
(l'unité linéaire rectifiée) fonctionne souvent mieux, même si elle ne possède pas beaucoup de ces propriétés.Je vais essayer d'ajouter à la description opérationnelle intuitive ...
Un bon moyen intuitif de penser à un réseau de neurones est de penser à ce qu'un modèle de régression linéaire tente de faire. Une régression linéaire prend certaines entrées et produit un modèle linéaire qui prend chaque valeur d'entrée multipliée par certains coefficients de pondération optimaux du modèle et tente de mapper la somme de ces résultats sur une réponse en sortie qui correspond étroitement à la sortie réelle. Les coefficients sont déterminés en recherchant les valeurs qui minimiseront une mesure d'erreur entre la valeur de sortie souhaitée et la valeur apprise par le modèle. Une autre façon de le dire est que le modèle linéaire essaiera de créer des multiplicateurs de coefficients pour chaque entrée et de les additionner tous pour essayer de déterminer la relation entre les valeurs d'entrée (multiples) et (généralement simples). Ce même modèle peut presque être considéré comme la pierre angulaire d’un réseau de neurones;
Mais le perceptron à unité unique a encore une pièce qui traitera la somme des données pondérées de manière non linéaire. Il utilise généralement une fonction de compression (sigmoïde ou tanh) pour accomplir cela. Donc, vous avez l'unité de base de la couche cachée, qui est un bloc qui va additionner un ensemble d'entrées pondérées. Il passe ensuite la réponse sommée à une fonction non linéaire pour créer une réponse de noeud de sortie (couche cachée). L'unité de biais est, comme dans la régression linéaire, un décalage constant qui est ajouté à chaque noeud à traiter. En raison du bloc de traitement non linéaire, vous n'êtes plus limité aux réponses uniquement linéaires (comme dans le modèle de régression linéaire).
Bien, mais lorsque plusieurs unités de perceptron uniques travaillent ensemble, chacune peut avoir différents multiplicateurs de pondération d’entrée et différentes réponses (même si ALL traite le même ensemble d’entrées avec le même bloc non linéaire décrit précédemment). Ce qui différencie les réponses, c’est que chacune a des coefficients de pondération différents qui sont appris par le réseau de neurones par le biais de la formation (certaines formes incluent la descente de gradient). Le résultat de tous les perceptrons est ensuite traité à nouveau et transmis à une couche de sortie, tout comme les blocs individuels ont été traités. La question est alors de savoir comment les poids corrects sont déterminés pour tous les blocs?
Une méthode courante pour apprendre les poids corrects consiste à commencer par des poids aléatoires et à mesurer la réponse d'erreur entre la sortie réelle réelle et la sortie du modèle apprise. En règle générale, l’erreur est renvoyée à travers le réseau et l’algorithme de retour augmente ou diminue individuellement ces poids de manière proportionnelle à l’erreur. Le réseau effectuera plusieurs itérations en passant en avant, en mesurant la réponse en sortie, puis en mettant à jour (en ajustant en arrière les pondérations) et en corrigeant les pondérations jusqu'à ce qu'un niveau d'erreur satisfaisant soit atteint. À ce stade, vous disposez d'un modèle de régression qui peut être plus flexible qu'un modèle de régression linéaire. Il s'agit de ce que l'on appelle communément un approximateur universel.
L'une des manières qui m'a vraiment aidé à comprendre le fonctionnement réel d'un réseau de neurones consiste à étudier le code de son implémentation et à le construire. Vous trouverez une des meilleures explications de base sur le code dans le chapitre sur les réseaux de neurones de (le guide disponible gratuitement) "Guide du scientifique et de l'ingénieur pour le DSP", ch. 26. Il est principalement écrit dans un langage très basique (je pense que c’était fortran) qui vous aide vraiment à voir ce qui se passe.
la source
Je vais décrire ma vision de cette opération en deux étapes: l’étape de saisie-masquage et l’étape de masquage-sortie. Je vais d'abord faire l'étape cachée-sortie parce que cela me semble moins intéressant.
Caché à la sortie
La sortie de la couche cachée peut être différente, mais pour le moment, supposons qu’elles proviennent de fonctions d’activation sigmoïdale . Donc, ce sont des valeurs comprises entre 0 et 1, et pour de nombreuses entrées, elles peuvent simplement être des 0 et des 1.
J'aime penser que la transformation entre les sorties de ces neurones cachés et la couche de sortie n'est qu'une traduction (au sens linguistique, pas géométrique). Cela est certainement vrai si la transformation est inversible et sinon, quelque chose a été perdu dans la traduction. Mais vous ne voyez que les sorties des neurones cachés sous un angle différent.
Entrée cachée
Supposons que vous avez 3 neurones d'entrée (juste pour que je puisse facilement écrire quelques équations ici) et des neurones cachés. Chaque neurone caché reçoit en entrée une somme pondérée d’entrées, alors par exemple peut-être
Cela signifie que la valeur de
hidden_1
est très sensible à la valeur deinput_1
, pas du tout sensibleinput_2
et seulement légèrement sensible àinput_3
.Vous pouvez donc dire qu'il
hidden_1
s'agit de capturer un aspect particulier de l'entrée, que vous pourriez appeler l'input_1
aspect " est important".La sortie de
hidden_1
est généralement formée en passant l’entrée par une fonction, disons que vous utilisez une fonction sigmoïde . Cette fonction prend des valeurs comprises entre 0 et 1; alors considérez-le comme un interrupteur qui dit queinput_1
c'est important ou non.C'est ce que fait la couche cachée! Il extrait des aspects ou des caractéristiques de l'espace d'entrée.
Maintenant, les poids peuvent être négatifs aussi! Ce qui signifie que vous pouvez obtenir des aspects tels que "
input_1
est important MAIS AUSSIinput_2
enlève cette importance":ou
input_1
etinput_3
ont une importance "partagée":Plus de géométrie
Si vous connaissez une algèbre linéaire, vous pouvez penser géométriquement en termes de projection dans certaines directions. Dans l'exemple ci-dessus, j'ai projeté dans la
input_1
direction.Regardons à
hidden_1
nouveau, d'en haut. Une fois que la valeur atinput_1
est assez grande, la sortie de la fonction d'activation sigmoïde restera à 1, elle ne deviendra pas plus grande . En d'autres termes, de plus en plusinput_1
ne changera rien à la sortie. De même, si elle se déplace dans la direction opposée (c'est-à-dire négative), la sortie ne sera pas affectée après un point.OK bien. Mais supposons que nous ne voulons pas de sensibilité dans le sens de l'infini dans un certain sens et que nous souhaitons qu'elle ne soit activée que pour une certaine plage sur une ligne. Signification pour les valeurs très négatives, il n'y a pas d'effet, et pour les valeurs très positives, il n'y a pas d'effet, mais pour les valeurs comprises entre, disons, 5 et 16, vous voulez que le réveil soit activé. C'est ici que vous utiliseriez une fonction de base radiale pour votre fonction d'activation.
Sommaire
La couche masquée extrait les caractéristiques de l'espace d'entrée et la couche de sortie les traduit dans le contexte souhaité. Il y a peut-être beaucoup plus que cela, avec des réseaux multicouches et autres, mais c'est ce que j'ai compris jusqu'à présent.
EDIT: Cette page avec ses merveilleux graphiques interactifs fait un meilleur travail que ma longue et lourde réponse ci-dessus ne pourrait jamais faire: http://neuralnetworksanddeeplearning.com/chap4.html
la source
Prenons le cas de la classification. Ce que la couche en sortie tente de faire, c'est d'estimer la probabilité conditionnelle que votre échantillon appartienne à une classe donnée, c'est-à-dire quelle est la probabilité que cet échantillon appartienne à une classe donnée. En termes géométriques, la combinaison de couches de manière non linéaire via les fonctions de seuil permet aux réseaux de neurones de résoudre des problèmes non convexes (reconnaissance de la parole, reconnaissance d'objet, etc.), qui sont les plus intéressants. En d'autres termes, les unités de sortie sont capables de générer des fonctions de décision non convexes telles que celles décrites ici .
On peut voir les unités dans les couches cachées comme des entités complexes apprenant à partir de données permettant à la couche en sortie de mieux distinguer une classe d'une autre, afin de générer des limites de décision plus précises. Par exemple, dans le cas de la reconnaissance faciale, les unités des premières couches apprennent les caractéristiques des contours (détecter les contours à des orientations et des positions données) et les couches supérieures apprennent à les combiner pour devenir des détecteurs des traits du visage tels que le nez, la bouche ou les yeux. Les poids de chaque unité masquée représentent ces entités et son résultat (en supposant qu'il s'agisse d'un sigmoïde) représente la probabilité que cette entité soit présente dans votre échantillon.
En général, la signification des sorties des couches de sortie et cachées dépend du problème que vous essayez de résoudre (régression, classification) et de la fonction de perte que vous utilisez (entropie croisée, erreurs du moindre carré, ...)
la source