web-dev-qa-db-fra.com

Les réseaux de neurones peuvent-ils approximer n'importe quelle fonction avec suffisamment de neurones cachés?

Je comprends que les réseaux de neurones avec un nombre quelconque de couches cachées peuvent approcher des fonctions non linéaires, mais peuvent-ils approximer:

f(x) = x^2

Je ne peux pas penser à comment ça pourrait. Cela semble être une limitation très évidente des réseaux de neurones qui peut potentiellement limiter ce qu'il peut faire. Par exemple, en raison de cette limitation, les réseaux de neurones ne peuvent probablement pas correctement estimer de nombreuses fonctions utilisées dans les statistiques comme la moyenne mobile exponentielle, ou même la variance.

En parlant de moyenne mobile, les réseaux de neurones récurrents peuvent-ils se rapprocher correctement de cela? Je comprends comment un réseau de neurones à action directe ou même un seul neurone linéaire peut produire une moyenne mobile en utilisant la technique de la fenêtre coulissante, mais comment les réseaux de neurones récurrents le feraient-ils sans X quantité de couches cachées (X étant la taille moyenne mobile)?

Supposons également que nous ne connaissions pas la fonction d'origine f, qui se trouve obtenir la moyenne des 500 dernières entrées, puis afficher un 1 s'il est supérieur à 3 et 0 s'il ne l'est pas. . Mais pendant une seconde, faites comme si nous ne le savions pas, c'est une boîte noire.

Comment un réseau de neurones récurrent se rapprocherait-il de cela? Nous aurions d'abord besoin de savoir combien de pas de temps il devrait avoir, ce que nous n'avons pas. Peut-être qu'un réseau LSTM pourrait, mais même alors, que se passe-t-il si ce n'est pas une simple moyenne mobile, c'est une moyenne mobile exponentielle? Je ne pense pas que même LSTM puisse le faire.

Pire encore, que se passe-t-il si f (x, x1) que nous essayons d'apprendre est simplement

f(x,x1) = x * x1

Cela semble très simple et direct. Un réseau de neurones peut-il l'apprendre? Je ne vois pas comment.

Suis-je en train de manquer quelque chose d'énorme ici ou les algorithmes d'apprentissage automatique sont-ils extrêmement limités? Existe-t-il d'autres techniques d'apprentissage en plus des réseaux de neurones qui peuvent réellement faire tout cela?

45
Essam Al-Mansouri

Le point clé à comprendre est compact :

Les réseaux de neurones (comme toute autre structure d'approximation comme les polynômes, les splines ou les fonctions de base radiale) peuvent approximer n'importe quelle fonction continue uniquement dans un ensemble compact .

En d'autres termes, la théorie déclare que, étant donné:

  1. Une fonction continue f (x) ,
  2. Une plage finie pour l'entrée x , [a, b] , et
  3. Une précision d'approximation souhaitée ε> 0 ,

alors il existe un réseau neuronal qui se rapproche f (x) avec une erreur d'approximation inférieure à ε , partout dans [a, b] .

Concernant votre exemple de f (x) = x2, oui, vous pouvez l'approcher avec un réseau de neurones dans une plage finie: [- 1,1] , [0, 1000] , etc. Pour visualiser cela, imaginez que vous approximez f (x) dans [- 1,1] avec un Step Function . Pouvez-vous le faire sur papier? Notez que si vous réduisez suffisamment les marches, vous pouvez obtenir la précision souhaitée. La façon dont les réseaux de neurones se rapprochent f (x) n'est pas très différente de cela.

Mais encore une fois, il n'y a pas de réseau neuronal (ou toute autre structure d'approximation) avec un nombre fini de paramètres pouvant se rapprocher f (x) = x2 pour tous x dans [- ∞, + ∞] .

45
Panagiotis Panagi

La question est très légitime et, malheureusement, de nombreuses réponses montrent à quel point les praticiens semblent connaître la théorie des réseaux de neurones. Le seul théorème rigoureux qui existe sur la capacité des réseaux de neurones à approcher différents types de fonctions est le théorème de l'approximation universelle.

L'UAT indique que toute fonction continue sur un domaine compact peut être approximée par un réseau de neurones avec une seule couche cachée à condition que les fonctions d'activation utilisées soient BOUNDED, continues et monotoniquement croissant. Maintenant, une somme finie de fonctions bornées est bornée par définition.

Un polynôme n'est pas borné, donc le mieux que nous puissions faire est de fournir une approximation du réseau neuronal de ce polynôme sur un sous-ensemble compact de R ^ n. En dehors de ce sous-ensemble compact, l'approximation échouera misérablement car le polynôme se développera sans limite. En d'autres termes, le réseau neuronal fonctionnera bien sur l'ensemble d'entraînement mais ne généralisera pas!

La question n'est ni hors sujet ni ne représente l'opinion du PO.

27
Tarek Nassar

Je ne sais pas pourquoi il y a une telle réaction viscérale, je pense que c'est une question légitime qui est difficile à trouver en la recherchant sur Google, même si je pense qu'elle est largement appréciée et répétée à haute voix. Je pense que dans ce cas, vous recherchez les citations qui montrent qu'un réseau neuronal peut approximer n'importe quelle fonction. Ce document récent l'explique bien, à mon avis. Ils citent également le document original de Barron de 1993 qui a donné un résultat moins général. La conclusion: un réseau neuronal à deux couches peut représenter n'importe quel polynôme à degré limité, dans certaines conditions (apparemment non restrictives).

Juste au cas où le lien ne fonctionne pas, il est appelé "Learning Polynomials with Neural Networks" par Andoni et al., 2014.

21
Martha White

Je comprends que les réseaux de neurones avec un nombre quelconque de couches cachées peuvent approcher des fonctions non linéaires, mais peuvent-ils approximer:

f(x) = x^2

La seule façon dont je peux comprendre cette question, c'est que vous parlez d'extrapolation. Donc par exemple donné des échantillons de formation dans la gamme -1 < x < +1 un réseau de neurones peut-il apprendre les bonnes valeurs pour x > 100? C'est ça que tu veux dire?

Si vous aviez une connaissance préalable, que les fonctions que vous essayez d'approximer sont probablement des polynômes d'ordre inférieur (ou tout autre ensemble de fonctions), alors vous pourriez sûrement construire un réseau de neurones qui peut représenter ces fonctions, et extrapoler x^2 partout.

Si vous n'avez pas de connaissances préalables, les choses sont un peu plus difficiles: il existe une infinité de fonctions fluides qui correspondent à x^2 dans le périmètre -1..+1 parfaitement, et il n'y a aucune bonne raison pour que nous nous attendions à x^2 pour donner de meilleures prévisions que toute autre fonction. En d'autres termes: si nous n'avions aucune connaissance préalable de la fonction que nous essayons d'apprendre, pourquoi voudrions-nous apprendre x -> x^2? Dans le domaine des ensembles d'entraînement artificiels, x^2 pourrait être une fonction probable, mais dans le monde réel, ce n'est probablement pas le cas.

Pour donner un exemple: disons que la température du lundi (t = 0) est de 0 °, mardi de 1 °, mercredi de 4 °. Nous n'avons aucune raison de croire que les températures se comportent comme des polynômes d'ordre inférieur, nous ne voudrions donc pas inférer de ces données que la température lundi prochain sera probablement être autour de 49 °.

Supposons également que nous ne connaissions pas la fonction d'origine f, qui obtient la moyenne des 500 dernières entrées, puis émet un 1 s'il est supérieur à 3 et 0 s'il ne l'est pas. Mais pendant une seconde, faites comme si nous ne le savions pas, c'est une boîte noire.

Comment un réseau de neurones récurrent se rapprocherait-il de cela?

Je pense que c'est deux questions: Premièrement, un réseau de neurones peut-il représenter cette fonction? C'est à dire. existe-t-il un ensemble de poids qui donnerait exactement ce comportement? Cela dépend évidemment de l'architecture du réseau, mais je pense que nous pouvons proposer des architectures qui peuvent représenter (ou du moins se rapprocher étroitement) de ce type de fonction.

Question deux: Peut-il apprendre cette fonction, avec suffisamment d'échantillons de formation? Eh bien, si votre algorithme d'apprentissage ne se bloque pas dans un minimum local, bien sûr: si vous avez suffisamment d'échantillons d'entraînement, tout ensemble de poids qui ne correspond pas à votre fonction donne une erreur d'apprentissage supérieure à 0, tandis qu'un ensemble de poids qui adapter la fonction que vous essayez d'apprendre a une erreur de formation = 0. Donc, si vous trouvez un optimum global, le réseau doit correspondre à la fonction.

11
Niki

Un réseau peut apprendre x|->x * x s'il a un neurone qui calcule x * x. Ou plus généralement, un nœud qui calcule x**p et apprend p. Ceux-ci ne sont pas couramment utilisés, mais l'affirmation selon laquelle "aucun réseau de neurones ne peut apprendre ..." est trop forte.

Un réseau avec ReLU et une couche de sortie linéaire peut apprendre x|->2*x, même sur une plage illimitée de valeurs x. L'erreur sera illimitée, mais l'erreur proportionnelle sera limitée. Toute fonction apprise par un tel réseau est linéaire par morceaux, et en particulier asymptotiquement linéaire.

Cependant, il y a un risque avec les ReLU: une fois qu'une ReLU est désactivée pour tous les exemples de formation, elle cesse d'apprendre. Avec un grand domaine, il s'allumera pour certains exemples de test possibles et donnera un résultat erroné. Les ReLU ne sont donc un bon choix que si les cas de test sont susceptibles d'être dans la coque convexe de l'ensemble d'entraînement. Ceci est plus facile à garantir si la dimensionnalité est faible. Une solution consiste à préférer LeakyReLU.

Un autre problème: de combien de neurones avez-vous besoin pour obtenir l'approximation souhaitée? Chaque ReLU ou LeakyReLU implémente un seul changement de gradient. Le nombre nécessaire dépend donc de la valeur absolue maximale du deuxième différentiel de la fonction objectif, divisée par l'erreur maximale à tolérer.

1
chrishmorris