J'ai récemment étudié la théorie derrière les ANN et je voulais comprendre la «magie» derrière leur capacité de classification multi-classe non linéaire. Cela m'a conduit à ce site Web qui explique bien comment géométriquement cette approximation est réalisée.
Voici comment je l'ai compris (en 3D): Les couches cachées peuvent être considérées comme des fonctions de sortie 3D (ou des fonctions de tour) qui ressemblent à ceci:
L'auteur indique que plusieurs de ces tours peuvent être utilisées pour approximer des fonctions arbitraires, par exemple:
Cela semble logique, mais la construction de l'auteur est plutôt conçue pour fournir une certaine intuition derrière le concept.
Cependant, comment exactement cela peut-il être validé étant donné un ANN arbitraire? Voici ce que je souhaite savoir / comprendre:
- AFAIK l'approximation est une approximation douce mais cette «intuition» semble fournir une approximation discrète, est-ce exact?
- Le nombre de tours semble être basé sur le nombre de couches cachées - les tours ci-dessus sont créées à la suite de deux couches cachées. Comment puis-je vérifier cela (avec un exemple en 3D) avec une seule couche cachée?
- Les tours sont créées avec des poids forcés à zéro, mais je n'ai pas vu que ce soit le cas avec certaines ANN avec lesquelles j'ai joué. Sera-ce vraiment une fonction tour? Cela peut-il être quelque chose avec 4 à côtés et se rapprochant presque d'un cercle? (L'auteur dit que c'est le cas mais laisse cela comme une auto-étude).
Je souhaite vraiment comprendre cette capacité d'approximation en 3D pour toute fonction 3D arbitraire qu'un ANN peut être approché avec une seule couche cachée - je veux voir à quoi ressemble cette approximation pour formuler une intuition pour plusieurs dimensions?
Voici ce que je pense que je pense que cela pourrait aider:
- Prenez une fonction 3D arbitraire comme .
- Générez un ensemble d'apprentissage de de disons 1000 points de données où de nombreux points sont sur la courbe quelques uns au dessus et quelques dessous. Ceux sur la courbe sont marqués comme la "classe positive" (1) et ceux pas comme la "classe négative" (0)
- Fournissez ces données à un ANN et visualisez l'approximation avec une couche cachée (avec environ 2 à 6 neurones).
Cette construction est-elle correcte? Est-ce que cela fonctionnerait? Comment dois-je procéder? Je ne suis pas encore adepte de la rétropropagation pour l'implémenter par moi-même et je recherche plus de clarté et de direction à cet égard - des exemples existants montrant que cela serait idéal.
Réponses:
Il existe deux grands articles récents sur certaines des propriétés géométriques des réseaux de neurones profonds avec des non-linéarités linéaires par morceaux (qui comprendraient l'activation ReLU):
Ils fournissent une théorie et une rigueur indispensables en matière de réseaux de neurones.
Leur analyse s'articule autour de l'idée que:
Ainsi, nous pouvons interpréter les réseaux de neurones profonds avec des activations linéaires par morceaux comme partitionnant l'espace d'entrée en un tas de régions, et sur chaque région se trouve une hypersurface linéaire.
Dans le graphique que vous avez référencé, notez que les différentes régions (x, y) ont des hypersurfaces linéaires sur elles (apparemment des plans inclinés ou des plans plats). Nous voyons donc l'hypothèse des deux articles ci-dessus en action dans vos graphiques référencés.
En outre, ils déclarent (souligné par les co-auteurs):
Fondamentalement, c'est le mécanisme qui permet aux réseaux profonds d'avoir des représentations de fonctionnalités incroyablement robustes et diverses malgré un nombre de paramètres inférieur à celui de leurs homologues peu profonds. En particulier, les réseaux de neurones profonds peuvent apprendre un nombre exponentiel de ces régions linéaires. Prenons par exemple le Théorème 8 du premier article référencé, qui déclare:
C'est encore une fois pour les réseaux de neurones profonds avec des activations linéaires par morceaux, comme les ReLU par exemple. Si vous utilisiez des activations de type sigmoïde, vous auriez des hypersurfaces d'aspect sinusoïdal plus lisses. Beaucoup de chercheurs utilisent maintenant des ReLU ou une certaine variation de ReLU (ReLU qui fuient, PReLU, ELU, RReLU, la liste continue) parce que leur structure linéaire par morceaux permet une meilleure rétropropagation de gradient par rapport aux unités sigmoïdales qui peuvent saturer (ont très plates / régions asymptotiques) et tuent efficacement les gradients.
Ce résultat d'exponentialité est crucial, sinon la linéarité par morceaux pourrait ne pas être en mesure de représenter efficacement les types de fonctions non linéaires que nous devons apprendre en matière de vision par ordinateur ou d'autres tâches d'apprentissage automatique difficiles. Cependant, nous avons ce résultat d'exponentialité et donc ces réseaux profonds peuvent (en théorie) apprendre toutes sortes de non-linéarités en les approximant avec un grand nombre de régions linéaires.
Quant à votre question sur l'hypersurface: vous pouvez absolument configurer un problème de régression où votre réseau profond essaie d'apprendre l' hypersurface . Cela revient à simplement utiliser un réseau profond pour configurer un problème de régression, de nombreux packages d'apprentissage en profondeur peuvent le faire, pas de problème.y= f(X1,X2)
Si vous voulez simplement tester votre intuition, il existe de nombreux packages d'apprentissage en profondeur disponibles ces jours-ci: Theano (Lasagne, No Learn et Keras construits par-dessus), TensorFlow, un tas d'autres, je suis sûr que je pars en dehors. Ces packages d'apprentissage en profondeur calculeront la rétropropagation pour vous. Cependant, pour un problème à plus petite échelle comme celui que vous avez mentionné, c'est vraiment une bonne idée de coder la rétropropagation vous-même, juste pour le faire une fois, et d'apprendre à le vérifier en dégradé. Mais comme je l'ai dit, si vous voulez simplement l'essayer et le visualiser, vous pouvez commencer assez rapidement avec ces packages d'apprentissage en profondeur.
Si l'on est capable de former correctement le réseau (nous utilisons suffisamment de points de données, l'initialisons correctement, la formation se passe bien, c'est son tout autre problème pour être franc), alors une façon de visualiser ce que notre réseau a appris, dans ce cas , une hypersurface, consiste à représenter graphiquement notre hypersurface sur un maillage xy ou une grille et à la visualiser.
Si l'intuition ci-dessus est correcte, alors en utilisant des réseaux profonds avec des ReLU, notre réseau profond aura appris un nombre exponentiel de régions, chaque région ayant sa propre hypersurface linéaire. Bien sûr, le fait est que parce que nous en avons exponentiellement beaucoup, les approximations linéaires peuvent devenir si fines et nous ne percevons pas la déchirure de tout cela, étant donné que nous avons utilisé un réseau suffisamment profond / large.
la source