Je souhaite améliorer ma compréhension des réseaux de neurones et de leurs avantages par rapport à d'autres algorithmes d'apprentissage automatique. Ma compréhension est comme ci-dessous et ma question est:
Pouvez-vous corriger et compléter ma compréhension s'il vous plaît? :)
Ma compréhension:
(1) Réseaux de neurones artificiels = fonction qui prédit les valeurs de sortie à partir des valeurs d'entrée. Selon un théorème d'approximation universelle ( https://en.wikipedia.org/wiki/Universal_approximation_theorem ), vous pouvez généralement avoir une fonction de prédiction possible (bien qu'elle devrait bien se comporter), avec suffisamment de neurones.
(2) Il en va de même pour la régression linéaire, en prenant les polynômes des valeurs d'entrée comme valeurs d'entrée supplémentaires, car vous pouvez bien approximer (comparer l'expansion de Taylor) chaque fonction bien par les polynômes.
(3) Cela signifie que (dans un sens, en ce qui concerne les meilleurs résultats possibles), ces 2 méthodes sont équivalentes.
(4) Par conséquent, leur principale différence réside dans la méthode qui se prête à une meilleure implémentation informatique. En d'autres termes, avec quelle méthode pouvez-vous trouver, sur la base d'exemples d'apprentissage, de bonnes valeurs plus rapides pour les paramètres qui définissent finalement la fonction de prédiction.
J'accueille toutes les pensées, commentaires et recommandations sur d'autres liens ou livres pour améliorer ma réflexion.
Réponses:
Voici l'affaire:
Techniquement, vous avez écrit de vraies phrases (les deux modèles peuvent approximer n'importe quelle fonction `` pas trop folle '' avec suffisamment de paramètres), mais ces phrases ne vous mènent nulle part!
Pourquoi donc? Eh bien, regardez de plus près la théorie de l'approximation universelle, ou toute autre preuve formelle qu'un réseau de neurones peut calculer n'importe quel f (x) s'il y a ASSEZ de neurones.
Toutes ces preuves que j'ai vues n'utilisent qu'une seule couche cachée.
Jetez un coup d'œil ici http://neuralnetworksanddeeplearning.com/chap5.html pour une certaine intuition. Il existe des travaux montrant que, dans un sens, le nombre de neurones nécessaires croît exponentiellement si vous n'utilisez qu'une seule couche.
Donc, alors qu'en théorie vous avez raison, en pratique, vous n'avez pas une quantité infinie de mémoire, donc vous ne voulez pas vraiment former un réseau de 2 ^ 1000 neurones, n'est-ce pas? Même si vous disposiez d'une quantité infinie de mémoire, ce filet sera certainement sur-équipé.
À mon avis, le point le plus important du ML est le point pratique! Développons un peu cela. Le vrai gros problème ici n'est pas seulement de savoir comment les polynômes augmentent / diminuent très rapidement en dehors de l'ensemble de formation. Pas du tout. À titre d'exemple rapide, le pixel de toute image se situe dans une plage très spécifique ([0,255] pour chaque couleur RVB), vous pouvez donc être assuré que tout nouvel échantillon se trouvera dans la plage de valeurs de votre ensemble d'entraînement. Non. Le gros problème est: cette comparaison n'est pas utile pour commencer (!).
Je vous suggère d'expérimenter un peu avec MNIST et d'essayer de voir les résultats réels que vous pouvez obtenir en utilisant une seule couche.
Les réseaux pratiques utilisent bien plus d'une couche cachée, parfois des dizaines (enfin, Resnet encore plus ...) de couches. Pour une raison. Cette raison n'est pas prouvée et, en général, le choix d'une architecture pour un réseau neuronal est un domaine de recherche brûlant. En d'autres termes, alors qu'il nous faut encore en savoir plus, les deux modèles que vous avez comparés (régression linéaire et NN avec une seule couche cachée), pour de nombreux jeux de données, ne sont d'aucune utilité!
Soit dit en passant, au cas où vous entreriez dans le ML, il existe un autre théorème inutile qui est en fait un «domaine de recherche» actuel - la dimension PAC (probablement approximativement correcte) / VC. Je développerai cela en bonus:
Si l'approximation universelle indique essentiellement que, étant donné une quantité infinie de neurones, nous pouvons approximer n'importe quelle fonction (merci beaucoup?), Ce que PAC dit en termes pratiques est, étant donné (pratiquement!) Une quantité infinie d'exemples étiquetés, nous pouvons nous rapprocher le plus possible de nous. veulent la meilleure hypothèse dans notre modèle. C'était absolument hilarant quand j'ai calculé la quantité réelle d'exemples nécessaires pour qu'un réseau pratique soit dans un taux d'erreur souhaité pratique avec une certaine probabilité ok :) C'était plus que le nombre d'électrons dans l'univers. PS pour booster il suppose également que les échantillons sont IID (ce n'est jamais vrai!).
la source
Il est vrai que n'importe quelle fonction peut être approximativement arbitrairement fermée à la fois par quelque chose qui compte comme un réseau neuronal et quelque chose qui compte comme un polynôme.
Tout d'abord, gardez à l'esprit que cela est vrai pour de nombreuses constructions. Vous pouvez approximer n'importe quelle fonction en combinant des sinus et des cosinus (transformées de Fourier), ou simplement en ajoutant beaucoup de "rectangles" (pas vraiment une définition précise, mais j'espère que vous obtenez le point).
Deuxièmement, tout comme la réponse de Yoni, chaque fois que vous formez un réseau ou ajustez une régression avec beaucoup de pouvoirs, le nombre de neurones ou le nombre de pouvoirs sont fixes. Ensuite, vous appliquez un algorithme, peut-être une descente de gradient ou quelque chose, et trouvez les meilleurs paramètres avec cela. Les paramètres sont les poids dans un réseau et les coefficients pour un grand polynôme. La puissance maximale que vous prenez dans un polynôme, ou le nombre de neurones utilisés, sont appelés hyperparamètres. En pratique, vous allez en essayer quelques-unes. Vous pouvez démontrer qu'un paramètre est un paramètre, bien sûr, mais ce n'est pas ainsi que cela se fait dans la pratique.
Cependant, avec l'apprentissage automatique, vous ne voulez pas vraiment une fonction qui s'intègre parfaitement à vos données. Ce ne serait pas trop difficile à réaliser en fait. Vous voulez quelque chose qui va bien, mais qui fonctionne aussi probablement pour des points que vous n'avez pas encore vus. Voir cette image par exemple, extraite de la documentation de
scikit-learn
.Une ligne est trop simple, mais la meilleure approximation n'est pas à droite, elle est au milieu, bien que la fonction de droite soit la plus adaptée. La fonction de droite ferait des prédictions assez étranges (et probablement sous-optimales) pour les nouveaux points de données, surtout s'ils tombent près des bits ondulés à gauche.
La raison ultime pour laquelle les réseaux de neurones avec un couple de paramètres fonctionnent si bien, c'est qu'ils peuvent s'adapter à quelque chose mais pas vraiment sur-adapter. Cela a également beaucoup à voir avec la façon dont ils sont formés, avec une certaine forme de descente de gradient stochastique.
la source
Comme aucune réponse n'a encore été fournie (bien que j'accepterais le commentaire de user1952009 s'il a été publié comme réponse), permettez-moi de partager ce que j'ai appris entre-temps:
(1) Il me semble que ma compréhension est généralement juste, mais le diable est dans les détails.
(2) Une chose qui a manqué dans "ma compréhension": Dans quelle mesure l'hypothèse paramétrée se généralisera-t-elle aux données en dehors de l'ensemble de formation? La nature non polynomiale des prédictions du réseau neuronal peut être meilleure que la simple régression linéaire / polynomiale (rappelez-vous comment les polynômes augmentent / diminuent très rapidement en dehors de l'ensemble d'apprentissage).
(3) Un lien qui explique en outre l'importance de pouvoir calculer rapidement les paramètres: http://www.heatonresearch.com/2017/06/01/hidden-layers.html
la source
Peut-être que ce document peut vous aider:
Régression polynomiale comme alternative aux réseaux neuronaux
Le résumé dit:
la source