Je suis sûr que de nombreuses personnes répondront avec des liens « laissez-moi google pour vous », alors je tiens à dire que jai essayé de comprendre ceci, veuillez pardonner mon manque de compréhension ici, mais je ne peux pas comprendre comment la mise en œuvre pratique dun réseau de neurones fonctionne réellement.
Je comprends la couche dentrée et comment normaliser les données, je comprends aussi lunité de biais, mais en ce qui concerne la couche cachée, quel est le calcul réel dans cette couche et comment il correspond à la couche la sortie est juste un peu brumeuse. Jai vu des diagrammes avec des points dinterrogation dans la couche cachée, des fonctions booléennes comme AND / OR / XOR, des fonctions dactivation et des nœuds dentrée qui correspondent à toutes les unités cachées et les nœuds dentrée qui correspondent à seulement quelques unités cachées chacune et ainsi Jai juste quelques questions sur laspect pratique. Bien sûr, une simple explication de lensemble du processus du réseau neuronal, comme vous lexpliqueriez à 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 de sortie?
Comment fonctionne la couche de sortie? Dénormalisation des données de la couche cachée?
Pourquoi est-ce que certaines couches de la couche dentrée sont connectées à la couche cachée et dautres ne le sont pas?
Commentaires
- Les gens ici sont gentils, je nen ai jamais vu une réponse « laissez-moi google pour vous », mais de nombreuses réponses étonnamment approfondies et perspicaces à ce qui semblait au départ être des questions de base. Malheureusement, je ne peux ‘ vous aider w avec le vôtre, mais cela semble assez pertinent, donc je vote volontiers.
- Merci pour le commentaire et le vote Gael, je ‘ je suis probablement un peu blasé par la communauté SO comme nous savons tous comment ces gens peuvent obtenir 🙂 Heureux de voir plus desprit de collaboration ici plutôt que dessayer de gagner des badges et des points en éditant / fermant les questions.
- Je ne suis pas spécialiste des réseaux de neurones en particulier, même si je mimplique dans leurs applications et leurs méthodes. Ma réponse peut-être pas si utile serait que les calculs spécifiques dans le masqué dépendent de la ‘ fonction de coût ‘ que vous êtes imposant à votre sortie, cest-à-dire ce que vous essayez de réaliser. Par exemple, si vous souhaitez regrouper les éléments dentrée en ensembles groupés, vous calculerez les distances entre les éléments de la couche masquée. Cela peut passer par diverses itérations et cycles doptimisation au sein de cette couche, jusquà ce que vous rencontriez un critère derreur qui permet au processus de `quitter ‘ cette couche.
Réponse
Version en trois phrases:
-
Chaque calque peut appliquer nimporte quelle fonction de votre choix au calque précédent (généralement une transformation linéaire suivie dune non-linéarité écrasante).
-
Le travail des couches cachées est de transformer les entrées en quelque chose que la couche de sortie peut utiliser.
-
La couche de sortie transforme les activations de calques masqués à léchelle à laquelle vous souhaitez que votre sortie soit.
Comme vous « re 5:
Si vous voulez quun ordinateur vous dise sil y a « un bus dans une image, lordinateur pourrait avoir plus de facilité sil avait les bons outils.
Donc, votre détecteur de bus pourrait être constitué dun détecteur de roue (pour vous dire que cest un véhicule) et dun détecteur de boîte (puisque le bus a la forme dune grande boîte) et dun détecteur de taille (pour vous dire cest trop gros pour être une voiture). Ce sont les trois éléments de votre calque caché: ils « ne font pas partie de limage brute, ce sont des outils que vous avez conçus pour vous aider à identifier les bus.
Si ces trois détecteurs s’activent (ou peut-être s’ils «sont particulièrement actifs), il y a de fortes chances que vous ayez un bus devant vous.
Les réseaux neuronaux sont utiles l parce quil existe de bons outils (comme la rétropropagation) pour construire de nombreux détecteurs et les assembler.
Comme vous « êtes un adulte
Un réseau de neurones à réaction applique une série de fonctions aux données. Les fonctions exactes dépendront du réseau de neurones que vous utilisez: le plus souvent, ces fonctions calculent chacune une transformation linéaire de la couche précédente, suivie dune non-linéarité écrasante. Parfois, les fonctions feront autre chose (comme calculer des fonctions logiques dans vos exemples , ou calcul de la moyenne sur des pixels adjacents dans une image). Ainsi, les rôles des différents calques peuvent dépendre des fonctions calculées, mais jessaierai dêtre très général.
Appelons lentrée vector $ x $, les activations de couches cachées $ h $ et lactivation de sortie $ y $. Vous avez une fonction $ f $ qui mappe de $ x $ à $ h $ et une autre fonction $ g $ qui mappe à partir de $ h $ à $ y $.
Donc, lactivation de la couche cachée est $ f (x) $ et la sortie du réseau est $ g (f (x)) $.
Pourquoi avoir deux fonctions ($ f $ et $ g $) au lieu dune seule?
Si le niveau de complexité par fonction est limité, alors $ g (f (x)) $ peut calculer des choses que $ f $ et $ g $ ne peuvent « t faire individuellement.
Un exemple avec des fonctions logiques:
Par exemple, si nous nautorisons que $ f $ et $ g $ pour être de simples opérateurs logiques comme « AND », « OR » et « NAND », alors vous ne pouvez pas « t calculer dautres fonctions comme » XOR « avec une seule dentre elles. Dun autre côté, nous pourrions calculer « XOR » si nous voulions superposer ces fonctions les unes sur les autres:
Fonctions de première couche:
- Assurez-vous quau moins un élément est « TRUE » (en utilisant OR)
- Assurez-vous quils « ne sont pas tous » TRUE « (en utilisant NAND)
Fonction de deuxième couche:
- Assurez-vous que les deux critères de la première couche sont satisfaits (en utilisant AND)
La sortie du réseau est juste le résultat de cette seconde fonction. La première couche transforme les entrées en quelque chose que la deuxième couche peut utiliser pour que lensemble du réseau puisse effectuer XOR.
Un exemple avec des images:
Diapositive 61 de cette conférence – également disponible ici sous forme dimage unique – montre (une façon de visualiser) ce que recherchent les différentes couches cachées dun réseau neuronal particulier.
Le premier calque recherche de petits morceaux de bords dans limage: ceux-ci sont très faciles à trouver à partir des données brutes de pixels, mais ils ne sont pas très utiles en eux-mêmes pour vous dire si vous regardez un visage ou un bus ou un éléphant.
Le calque suivant compose les bords: si les bords du calque caché inférieur semboîtent dune certaine manière, alors lun des détecteurs oculaires au milieu de la colonne la plus à gauche pourrait sallumer . Il serait difficile de créer un seul calque qui soit si efficace pour trouver quelque chose daussi spécifique à partir des pixels bruts: les détecteurs oculaires sont beaucoup plus faciles à construire à partir de détecteurs de bord quà partir de pixels bruts.
Le calque suivant up compose les détecteurs oculaires et les détecteurs nasaux en visages. En dautres termes, ceux-ci sallumeront lorsque les détecteurs oculaires et les détecteurs nasaux de la couche précédente sallumeront avec les bons motifs. Celles-ci sont très efficaces pour rechercher des types particuliers de faces: si une ou plusieurs d’entre elles s’allument, votre calque de sortie doit signaler qu’un visage est présent.
Ceci est utile car Les détecteurs de visage sont faciles à construire à partir des détecteurs oculaires et nasaux, mais très difficiles à construire à partir des intensités de pixels.
Donc chaque couche vous éloigne de plus en plus des pixels bruts et vous rapproche de votre objectif ultime (par exemple, détection de visage ou détection de bus).
Réponses à assorties dautres questions
« Pourquoi certaines couches de la couche dentrée sont-elles connectées à la couche cachée et dautres non? »
Les nœuds déconnectés du réseau sont appelés nœuds « biaisés ». Il ya « une très belle explication ici . La réponse courte est quils » sont comme des termes dinterception dans la régression.
« Où est-ce que les images du « détecteur oculaire » dans lexemple dimage proviennent? «
Je nai » pas vérifié les images spécifiques auxquelles jai lié, mais en général, ces visualisations montrent lensemble des pixels dans la couche dentrée qui maximisent lactivité du neurone correspondant. Donc, si nous considérons le neurone comme un détecteur oculaire, cest limage que le neurone considère comme la plus semblable à lœil. Les gens trouvent généralement ces ensembles de pixels avec une optimisation (escalade).
Dans cet article de Google avec lun 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 façon, ainsi quune seconde façon: Ils montrent aussi les images réelles qui activent le plus fortement le neurone (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 sils ne se ressemblent pas particulièrement au niveau des pixels.
Faites-moi savoir si quelque chose nest pas clair ou si vous avez dautres questions.
Commentaires
- Alors y en a-t-il une seule définie algorithme pour chaque nœud sur une couche donnée et les poids sont ce qui rend les sorties différentes? Ou pouvez-vous programmer chaque nœud de la couche pour être différent?
- @GeorgeMcDowd cela pose le problème clé: regarder les pixels et lidentification des bus est difficile, comme vous lavez suggéré. Heureusement, il est facile de regarder les pixels et de trouver les contours – ce que ‘ essaie de faire tout le premier calque caché. Le calque suivant essaie pour faire des inférences basées sur les bords, ce qui est beaucoup plus facile que dessayer de le faire sur la base de pixels.
- SO devrait vous donner une autre récompense (que de simples points) pour le temps et les efforts que vous avez mis dans cette réponse!
- @JoshuaEnfield Je pense que la logique dans le 1980 ‘ s était une combinaison du fait dêtre similaire à la façon dont les gens pensaient que le cerveau fonctionnait, quil était différentiable partout et que les valeurs étaient limitées comme vous lavez mentionné. Depuis lors, les gens ont constaté que
f(x) = max(x, 0)
(l » unité linéaire rectifiée « ) souvent fonctionne mieux, même si elle na ‘ pas plusieurs de ces propriétés. - Lexemple de bus et la chaîne de fonctions vient de le clouer. ‘ ne comprenez pas pourquoi les manuels ne peuvent ‘ être ce descriptif.
Réponse
Jessaierai dajouter à la description opérationnelle intuitive …
Une bonne façon intuitive de penser à un réseau de neurones est de penser à propos de ce quun modèle de régression linéaire tente de faire. Une régression linéaire prendra quelques entrées et produira un modèle linéaire qui prend chaque valeur dentrée multipliée par certains coefficients de pondération optimaux du modèle et essaie de mapper la somme de ces résultats à une réponse en sortie qui correspond à la sortie réelle. Les coefficients sont déterminés en recherchant les valeurs qui minimiseront une mesure derreur 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 coefficient pour chaque entrée et additionnez-les toutes pour essayer de déterminer la relation entre lentrée (multiple) et la valeur de sortie (généralement unique) ues. Ce même modèle peut presque être considéré comme lélément de base dun réseau neuronal; un perceptron unitaire.
Mais le perceptron unitaire a un morceau de plus qui traitera la somme des données pondérées de manière non linéaire. Il utilise généralement une fonction décrasement (sigmoïde ou tanh) pour y parvenir. Vous avez donc lunité de base de la couche cachée, qui est un bloc qui additionnera un ensemble dentrées pondérées – il transmet ensuite la réponse additionnée à une fonction non linéaire pour créer une réponse de nœud de sortie (couche cachée). Lunité de biais est, comme dans la régression linéaire, un décalage constant qui est ajouté à chaque nœud à traiter. En raison du bloc de traitement non linéaire, vous nêtes plus limité aux réponses linéaires uniquement (comme dans le modèle de régression linéaire).
OK, mais lorsque plusieurs des unités de perceptron simples fonctionnent ensemble, chacune peuvent avoir différents multiplicateurs de poids dentrée et différentes réponses (même si TOUS traitent le même ensemble dentrées avec le même bloc non linéaire décrit précédemment). Ce qui rend les réponses différentes, cest que chacune a des coefficients de pondération différents qui sont appris par le réseau neuronal via 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 façon courante dapprendre les poids corrects consiste à commencer par des poids aléatoires et à mesurer la réponse derreur entre la sortie réelle réelle et la valeur apprise sortie du modèle. Lerreur sera généralement transmise à lenvers à travers le réseau et lalgorithme de rétroaction augmentera ou diminuera individuellement ces poids dune certaine proportion par rapport à lerreur. Le réseau répétera à plusieurs reprises en passant en avant, en mesurant la réponse de sortie, puis en mettant à jour (en passant les ajustements de poids en arrière) et en corrigeant les poids jusquà ce quun certain niveau derreur satisfaisant soit atteint. À ce stade, vous avez un modèle de régression qui peut être plus flexible quun modèle de régression linéaire, cest ce quon appelle communément un approximateur de fonction universelle.
Une des façons qui ma vraiment aidé à apprendre comment un réseau neuronal fonctionne vraiment est détudier le code dune implémentation de réseau neuronal et de le construire. Une des meilleures explications de base du code peut être trouvée dans le chapitre sur le réseau neuronal du (disponible gratuitement) « Le guide du scientifique et de lingénieur sur le DSP » Ch. 26. Il est principalement écrit dans un langage très basique (je pense que cétait du fortran) qui vous aide vraiment à voir ce qui se passe.
Réponse
Je vais décrire mon point de vue à ce sujet en deux étapes: létape dentrée-cachée et létape cachée-sortie. Je « ferai dabord létape du masqué vers la sortie car cela me semble moins intéressant (pour moi).
Masqué vers la sortie
La sortie de la couche cachée peut être différente, mais pour linstant supposons quelles proviennent de fonctions dactivation sigmoïdales . Ce sont donc des valeurs comprises entre 0 et 1, et pour de nombreuses entrées, elles peuvent simplement être de 0 « s et 1 » s.
Jaime penser à la transformation entre les sorties de ces neurones cachés et la couche de sortie comme une simple traduction (au sens linguistique, pas au sens géométrique). Cest certainement vrai si la transformation est inversible , et sinon, quelque chose a été perdu dans la traduction. Mais en gros, vous navez que les sorties des neurones cachés « vues sous un angle différent.
Input-to-Hidden
Disons que vous avez 3 neurones dentrée (juste pour que je puisse facilement écrivez quelques équations ici) et des neurones cachés. Chaque neurone caché reçoit en entrée une somme pondérée dentrées, donc par exemple peut-être
hidden_1 = 10 * (input_1) + 0 * (input_2) + 2 * (input_3)
Cela signifie que la valeur de hidden_1
est très sensible à la valeur de input_1
, pas du tout sensible à input_2
et peu sensible à input_3
.
Vous pourriez donc dire que hidden_1
capture un aspect particulier de lentrée, que vous pourriez appeler le « input_1
est un aspect important « .
La sortie de hidden_1
est généralement formée en passant lentrée via une fonction, donc disons que vous utilisez une fonction sigmoïde . Cette fonction prend des valeurs comprises entre 0 et 1; alors pensez-y comme un commutateur qui dit que soit input_1
est important, soit ce nest pas « t.
Cest donc ce que fait la couche cachée! Il extrait les aspects , ou caractéristiques de lespace dentrée.
Désormais, les pondérations peuvent également être négatives! Ce qui signifie que vous pouvez obtenir des aspects comme « input_1
est important MAIS AUSSI input_2
enlève cette importance »:
hidden_2 = 10 * (input_1) - 10 * (input_2 ) + 0 * (input_3)
ou input_1
et input_3
ont une importance « partagée »:
hidden_3 = 5 * (input_1) + 0 * (input_2) + 5 * (input_3)
Plus de géométrie
Si vous en connaissez algèbre linéaire, vous pouvez penser géométriquement en termes de projection dans certaines directions. Dans lexemple ci-dessus, jai projeté le long de la direction input_1
.
Regardons à nouveau hidden_1
, à partir de ci-dessus. Une fois que la valeur à input_1
est suffisamment grande, la sortie de la fonction dactivation sigmoïde restera juste à 1, elle ne deviendra pas plus grande . En dautres termes, de plus en plus de input_1
nauront aucune incidence sur la sortie. De même, sil se déplace dans la direction opposée (cest-à-dire négative), après un point, la sortie ne sera pas affectée.
Ok, très bien. Mais supposons que nous ne voulons pas de sensibilité dans la direction de linfini dans une certaine direction, et que nous voulons quelle ne soit activée que pour une certaine plage sur une ligne. Cela signifie que pour les valeurs très négatives, il ny a aucun effet , et pour les valeurs très positives, il ny a pas deffet, mais pour les valeurs comprises entre 5 et 16, par exemple, vous voulez quil se réveille. Cest là que vous utiliseriez une fonction de base radiale pour votre fonction dactivation.
Résumé
Le calque caché extrait les caractéristiques de lespace dentrée, et la couche de sortie les traduit dans le contexte souhaité. Il peut y avoir bien plus que cela, avec les réseaux multicouches et autres, mais cest ce que je comprends jusquà présent.
EDIT: Cette page avec ses magnifiques graphiques interactifs fait un meilleur travail que ma longue et lourde réponse ci-dessus ne pourrait jamais le faire : http://neuralnetworksanddeeplearning.com/chap4.html
Commentaires
- Comme lOP, je ‘ un peu confus à propos de la couche cachée dans les réseaux de neurones. Dans votre exemple, comment lalgorithme NN trouve-t-il les poids des neurones hidden_1, hidden_2 et hidden_3? Et comme hidden_1, hidden_2 et hidden_3 sont dérivés des mêmes variables dentrée, ‘ t les poids convergent vers la même solution?
Réponse
Prenons le cas de la classification. Ce que la couche de sortie essaie de faire est destimer la probabilité conditionnelle que votre échantillon appartienne à une classe donnée, cest-à-dire quelle est la probabilité pour cet échantillon dappartenir à 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 vocale, reconnaissance dobjets, etc.), qui sont les plus intéressants. En dautres termes, les unités de sortie sont capables de générer des fonctions de décision non convexes comme celles décrites ici .
On peut voir les unités dans les couches cachées comme lapprentissage de fonctionnalités complexes à partir de données qui permettent à la couche de sortie dêtre capable de mieux discerner une classe dune autre, pour 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 des caractéristiques de type bord (détectent les bords à des orientations et des positions données) et la couche supérieure apprend à les combiner pour devenir des détecteurs de caractéristiques faciales comme le nez, la bouche ou les yeux. Les poids de chaque unité cachée représentent ces caractéristiques, et sa sortie (en supposant quil sagit dun sigmoïde) représente la probabilité que cette caractéristique soit présente dans votre échantillon.
En général, la signification des sorties de sortie et les couches cachées dépendent 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 des moindres carrés, …)