Pourquoi une fonction d'activation non linéaire doit-elle être utilisée dans un réseau de neurones à rétropropagation?

139

J'ai lu certaines choses sur les réseaux neuronaux et je comprends le principe général d'un réseau neuronal monocouche. Je comprends le besoin de couches supplémentaires, mais pourquoi les fonctions d'activation non linéaires sont-elles utilisées?

Cette question est suivie de celle-ci: à quoi sert un dérivé de la fonction d'activation en rétropropagation?

corazza
la source
meilleure réponse de tous ici en intelligence artificielle
eusoubrasileiro

Réponses:

167

Le but de la fonction d'activation est d'introduire la non-linéarité dans le réseau

à son tour, cela vous permet de modéliser une variable de réponse (aka variable cible, étiquette de classe ou score) qui varie de manière non linéaire avec ses variables explicatives

non linéaire signifie que la sortie ne peut pas être reproduite à partir d'une combinaison linéaire des entrées (ce qui n'est pas la même chose que la sortie qui donne une ligne droite - le mot pour cela est affine ).

une autre façon de penser: sans fonction d'activation non linéaire dans le réseau, un NN, quel que soit le nombre de couches dont il dispose, se comporterait comme un perceptron monocouche, car la somme de ces couches ne vous donnerait qu'une autre fonction linéaire (voir la définition juste au-dessus).

>>> in_vec = NP.random.rand(10)
>>> in_vec
  array([ 0.94,  0.61,  0.65,  0.  ,  0.77,  0.99,  0.35,  0.81,  0.46,  0.59])

>>> # common activation function, hyperbolic tangent
>>> out_vec = NP.tanh(in_vec)
>>> out_vec
 array([ 0.74,  0.54,  0.57,  0.  ,  0.65,  0.76,  0.34,  0.67,  0.43,  0.53])

Une fonction d'activation courante utilisée dans backprop ( tangente hyperbolique ) évaluée de -2 à 2:

entrez la description de l'image ici

doug
la source
15
Pourquoi voudrions-nous éliminer la linéarité?
corazza
17
Si les données que nous souhaitons modéliser ne sont pas linéaires, nous devons en tenir compte dans notre modèle.
doug
38
Réponse en une phrase: << peu importe le nombre de couches se comportent comme un seul perceptron (car les fonctions linéaires ajoutées ensemble vous donnent juste une fonction linéaire). >> . Agréable!
Autonome
12
C'est un peu trompeur - comme eski l'a mentionné, les fonctions d'activation linéaires rectifiées sont extrêmement efficaces, et si notre objectif est simplement de modéliser / approximer des fonctions, éliminer la non-linéarité à toutes les étapes n'est pas nécessairement la bonne réponse. Avec suffisamment de pièces linéaires, vous pouvez approximer presque toutes les fonctions non linéaires avec un degré de précision élevé. J'ai trouvé cela une bonne explication de pourquoi les unités linéaires rectifiées fonctionnent: stats.stackexchange.com/questions/141960/…
tegan
11
@tegan Les fonctions d'activation linéaires rectifiées ne sont pas linéaires. Je ne sais pas ce que votre commentaire a à voir avec la réponse.
endolith
49

Une fonction d'activation linéaire peut cependant être utilisée à des occasions très limitées. En fait, pour mieux comprendre les fonctions d'activation, il est important de regarder les moindres carrés ordinaires ou simplement la régression linéaire. Une régression linéaire vise à trouver les poids optimaux qui se traduisent par un effet vertical minimal entre les variables explicatives et cibles, lorsqu'ils sont combinés avec l'entrée. En bref, si la sortie attendue reflète la régression linéaire comme indiqué ci-dessous, les fonctions d'activation linéaire peuvent être utilisées: (Figure du haut). Mais comme dans la deuxième figure ci-dessous, la fonction linéaire ne produira pas les résultats souhaités: (Figure du milieu). Cependant, une fonction non linéaire comme indiqué ci-dessous produirait les résultats souhaités:

entrez la description de l'image ici

Les fonctions d'activation ne peuvent pas être linéaires car les réseaux de neurones avec une fonction d'activation linéaire ne sont efficaces que sur une seule couche, quelle que soit la complexité de leur architecture. L'entrée dans les réseaux est généralement une transformation linéaire (entrée * poids), mais le monde réel et les problèmes ne sont pas linéaires. Pour rendre les données entrantes non linéaires, nous utilisons un mappage non linéaire appelé fonction d'activation. Une fonction d'activation est une fonction de prise de décision qui détermine la présence d'une caractéristique neuronale particulière. Il est mappé entre 0 et 1, où zéro signifie l'absence de la fonction, tandis que l'un signifie sa présence. Malheureusement, les petits changements survenant dans les poids ne peuvent pas être reflétés dans les valeurs d'activation car il ne peut prendre que 0 ou 1. Par conséquent, les fonctions non linéaires doivent être continues et différenciables entre cette plage. Un réseau de neurones doit être capable de prendre n'importe quelle entrée de -infinity à + infini, mais il devrait être capable de la mapper à une sortie qui se situe entre {0,1} ou entre {-1,1} dans certains cas - donc le besoin d'une fonction d'activation. La non-linéarité est nécessaire dans les fonctions d'activation parce que son but dans un réseau neuronal est de produire une frontière de décision non linéaire via des combinaisons non linéaires du poids et des entrées.

chibole
la source
1
+ Un, alors on peut déduire que la fonction non linéaire est utilisée pour établir une frontière parfaite?
SIslam
1
Oui, exactement. En constante de produire juste 0 ou 1, il peut produire 0,4 ou 0,78, ce qui le rend continu sur la plage de la limite.
chibole
3
Un réseau de neurones doit être capable de prendre n'importe quelle entrée de -infinity à + infini, mais il devrait être capable de la mapper à une sortie qui se situe entre {0,1} ou entre {-1,1} ... cela me rappelle cette limitation de ReLU est qu'il ne doit être utilisé que dans les couches cachées d'un modèle de réseau neuronal.
Cloud Cho
21

Si nous n'autorisons que les fonctions d'activation linéaires dans un réseau de neurones, la sortie sera juste une transformation linéaire de l'entrée, ce qui n'est pas suffisant pour former un approximateur de fonction universel . Un tel réseau peut simplement être représenté comme une multiplication matricielle, et vous ne seriez pas en mesure d'obtenir des comportements très intéressants à partir d'un tel réseau.

Il en va de même pour le cas où tous les neurones ont des fonctions d'activation affines (c'est-à-dire une fonction d'activation sur la forme f(x) = a*x + c, où aet csont des constantes, qui est une généralisation des fonctions d'activation linéaires), ce qui entraînera simplement une transformation affine d'entrée en sortie , ce qui n'est pas non plus très excitant.

Un réseau de neurones peut très bien contenir des neurones avec des fonctions d'activation linéaires, comme dans la couche de sortie, mais ceux-ci nécessitent la compagnie de neurones avec une fonction d'activation non linéaire dans d'autres parties du réseau.

Remarque: une exception intéressante est les gradients synthétiques de DeepMind , pour lesquels ils utilisent un petit réseau de neurones pour prédire le gradient dans la passe de rétropropagation étant donné les valeurs d'activation, et ils trouvent qu'ils peuvent s'en tirer en utilisant un réseau de neurones sans couches cachées et avec uniquement des activations linéaires.

Bonjour au revoir
la source
1
Les fonctions d'ordre supérieur peuvent être approximées avec des fonctions d'activation linéaires utilisant plusieurs couches cachées. Le théorème d'approximation universelle est spécifique aux MLP avec une seule couche cachée.
eski
En fait, je pense que vous avez raison dans votre déclaration sur les fonctions d'activation affine entraînant une transformation affine, mais le fait que la transformation soit apprise par rétropropagation (ou tout autre moyen) ne la rend pas totalement inutile en ce qui concerne la question initiale.
eski
4
@eski Non, vous ne pouvez pas approximer des fonctions d'ordre supérieur avec uniquement des fonctions d'activation linéaires, vous ne pouvez modéliser que des fonctions et des transformations linéaires (ou affines, si vous avez un nœud constant supplémentaire dans chaque couche sauf la dernière), quel que soit le nombre de couches que vous avoir.
HelloGoodbye le
Est-il correct de dire que le but principal de la fonction d'activation est de permettre au réseau neuronal de produire une frontière de décision non linéaire?
stackoverflowuser2010
@ stackoverflowuser2010 Ce serait une façon de voir les choses. Mais il y a plus qu'une fonction d'activation. L'article de Wikipédia sur les fonctions d'activation répertorie plusieurs fonctions d'activation, toutes (sauf une) non linéaires, et compare les différentes qualités qu'une fonction d'activation peut avoir.
HelloGoodbye
9

Un réseau de neurones à réaction avec activation linéaire et un nombre quelconque de couches cachées équivaut à un simple réseau de neurones neuronaux linéaire sans couche cachée. Par exemple, considérons le réseau de neurones dans la figure avec deux couches cachées et aucune activation entrez la description de l'image ici

y = h2 * W3 + b3 
  = (h1 * W2 + b2) * W3 + b3
  = h1 * W2 * W3 + b2 * W3 + b3 
  = (x * W1 + b1) * W2 * W3 + b2 * W3 + b3 
  = x * W1 * W2 * W3 + b1 * W2 * W3 + b2 * W3 + b3 
  = x * W' + b'

Nous pouvons faire la dernière étape car la combinaison de plusieurs transformations linéaires peut être remplacée par une transformation et la combinaison de plusieurs termes de biais est juste un biais unique. Le résultat est le même même si nous ajoutons une activation linéaire.

Nous pourrions donc remplacer ce réseau de neurones par un réseau de neurones à une seule couche, qui peut être étendu aux ncouches. Cela indique que l'ajout de couches n'augmente pas du tout la puissance d'approximation d'un réseau neuronal linéaire. Nous avons besoin de fonctions d'activation non linéaires pour approcher les fonctions non linéaires et la plupart des problèmes du monde réel sont très complexes et non linéaires. En fait, lorsque la fonction d'activation est non linéaire, alors un réseau neuronal à deux couches avec un nombre suffisamment grand d'unités cachées peut s'avérer être un approximateur de fonction universel.

xashru
la source
5

<< Le présent article utilise le théorème de Stone-Weierstrass et le cosinus squasher de Gallant and White pour établir que les architectures de réseau standard multicouche à anticipation utilisant des fonctions d'écrasement abritrary peuvent approximer pratiquement n'importe quelle fonction d'intérêt à n'importe quel degré de précision souhaité, à condition que de nombreux éléments cachés suffisent. des unités sont disponibles. " ( Hornik et al., 1989, Neural Networks )

Une fonction d'écrasement est par exemple une fonction d'activation non linéaire qui correspond à [0,1] comme la fonction d'activation sigmoïde.

alfa
la source
3

Il y a des moments où un réseau purement linéaire peut donner des résultats utiles. Disons que nous avons un réseau de trois couches avec des formes (3,2,3). En limitant la couche intermédiaire à seulement deux dimensions, nous obtenons un résultat qui est le "plan de meilleur ajustement" dans l'espace tridimensionnel d'origine.

Mais il existe des moyens plus simples de trouver des transformations linéaires de cette forme, telles que NMF, PCA, etc. Cependant, c'est un cas où un réseau multicouche ne se comporte PAS de la même manière qu'un perceptron monocouche.

Markemus
la source
2

Pour comprendre la logique des fonctions d'activation non linéaires, vous devez d'abord comprendre pourquoi les fonctions d'activation sont utilisées. En général, les problèmes du monde réel nécessitent des solutions non linéaires qui ne sont pas triviales. Nous avons donc besoin de certaines fonctions pour générer la non-linéarité. Fondamentalement, ce qu'une fonction d'activation fait est de générer cette non-linéarité tout en mappant les valeurs d'entrée dans une plage souhaitée.

Cependant, les fonctions d'activation linéaire peuvent être utilisées dans un ensemble très limité de cas où vous n'avez pas besoin de couches cachées telles que la régression linéaire. Habituellement, il est inutile de générer un réseau de neurones pour ce genre de problèmes car indépendamment du nombre de couches cachées, ce réseau générera une combinaison linéaire d'entrées qui peut être réalisée en une seule étape. En d'autres termes, il se comporte comme une seule couche.

Il existe également quelques propriétés plus souhaitables pour les fonctions d'activation telles que la différentiabilité continue . Puisque nous utilisons la rétropropagation, la fonction que nous générons doit être différentiable à tout moment. Je vous conseille vivement de consulter la page wikipedia pour les fonctions d'activation d' ici pour avoir une meilleure compréhension du sujet.

Alican Şafak Özdek
la source
2

Plusieurs bonnes réponses sont ici. Il sera bon de signaler le livre "Pattern Recognition and Machine Learning" de Christopher M. Bishop. C'est un livre auquel il convient de se référer pour avoir un aperçu plus approfondi de plusieurs concepts liés au ML. Extrait de la page 229 (section 5.1):

Si les fonctions d'activation de toutes les unités cachées d'un réseau sont considérées comme linéaires, alors pour un tel réseau, nous pouvons toujours trouver un réseau équivalent sans unités cachées. Cela découle du fait que la composition des transformations linéaires successives est elle-même une transformation linéaire. Cependant, si le nombre d'unités cachées est inférieur au nombre d'unités d'entrée ou de sortie, alors les transformations que le réseau peut générer ne sont pas les transformations linéaires les plus générales possibles des entrées aux sorties car les informations sont perdues dans la réduction de dimensionnalité au niveau du unités cachées. Dans la section 12.4.2, nous montrons que les réseaux d'unités linéaires donnent lieu à une analyse en composantes principales. En général, cependant, il y a peu d'intérêt pour les réseaux multicouches d'unités linéaires.

haripkannan
la source
1

Comme je me souviens, les fonctions sigmoïdes sont utilisées parce que leur dérivée qui correspond à l'algorithme BP est facile à calculer, quelque chose de simple comme f (x) (1-f (x)). Je ne me souviens pas exactement du calcul. En fait, n'importe quelle fonction avec des dérivés peut être utilisée.

Anton
la source
7
La fonction veut toujours augmenter de manière monotone, si je me souviens bien. Donc, pas de fonction.
Novak
1

Un NN en couches de plusieurs neurones peut être utilisé pour apprendre des problèmes linéairement inséparables. Par exemple, la fonction XOR peut être obtenue avec deux couches avec une fonction d'activation par étapes.

David
la source
0

Permettez-moi de vous l'expliquer le plus simplement possible:

Les réseaux de neurones sont utilisés dans la reconnaissance de formes, n'est-ce pas? Et la recherche de modèles est une technique très non linéaire.

Supposons que, pour des raisons d'argument, nous utilisons une fonction d'activation linéaire y = wX + b pour chaque neurone et définissons quelque chose comme si y> 0 -> classe 1 sinon classe 0.

Maintenant, nous pouvons calculer notre perte en utilisant la perte d'erreur carrée et la propager en arrière pour que le modèle apprenne bien, n'est-ce pas?

FAUX.

  • Pour le dernier calque masqué, la valeur mise à jour sera w {l} = w {l} - (alpha) * X.

  • Pour l'avant-dernier calque caché, la valeur mise à jour sera w {l-1} = w {l-1} - (alpha) * w {l} * X.

  • Pour le ième dernier calque caché, la valeur mise à jour sera w {i} = w {i} - (alpha) * w {l} ... * w {i + 1} * X.

Il en résulte que nous multiplions toutes les matrices de poids ensemble, d'où les possibilités: A) w {i} change à peine en raison du gradient de fuite B) w {i} change de façon spectaculaire et inexacte en raison de l'explosion du gradient C) w {i} change bien assez pour nous donner un bon score d'ajustement

Dans le cas où C se produit, cela signifie que notre problème de classification / prédiction était très probablement un simple régresseur linéaire / logistique basé sur un régresseur et n'a jamais nécessité un réseau de neurones en premier lieu!

Quelle que soit la robustesse ou l'hyper réglage de votre NN, si vous utilisez une fonction d'activation linéaire, vous ne pourrez jamais vous attaquer aux problèmes de reconnaissance de formes non linéaires nécessitant

Kaustubh J
la source
-3

Ce n'est pas du tout une exigence. En fait, la fonction d'activation linéaire rectifiée est très utile dans les grands réseaux de neurones. Le calcul du gradient est beaucoup plus rapide et induit une parcimonie en définissant une borne minimale à 0.

Voir ce qui suit pour plus de détails: https://www.academia.edu/7826776/Mathematical_Intuition_for_Performance_of_Rectified_Linear_Unit_in_Deep_Neural_Networks


Éditer:

Il y a eu une discussion sur la question de savoir si la fonction d'activation linéaire rectifiée peut être appelée une fonction linéaire.

Oui, c'est techniquement une fonction non linéaire car elle n'est pas linéaire au point x = 0, cependant, il est toujours correct de dire qu'elle est linéaire en tous les autres points, donc je ne pense pas que ce soit utile de pinailler ici,

J'aurais pu choisir la fonction d'identité et ce serait toujours vrai, mais j'ai choisi ReLU comme exemple en raison de sa popularité récente.

eski
la source
8
La fonction d'activation linéaire rectifiée est également non linéaire (malgré son nom). C'est juste linéaire pour les valeurs positives
Plankalkül
4
Vous avez techniquement raison, ce n'est pas linéaire sur tout le domaine, en particulier à x = 0 (c'est linéaire pour x <0 en fait, puisque f (x) = 0 est une fonction linéaire). Ce n'est pas non plus différentiable, donc la fonction de gradient n'est pas entièrement calculable non plus, mais en pratique, ces aspects techniques sont faciles à surmonter.
eski
4
Il n'est pas seulement techniquement correct, il a également raison dans la pratique (ou quelque chose comme ça). C'est la non-linéarité des ReLU qui les rend utiles. S'ils avaient été linéaires, ils auraient eu une fonction d'activation sur le formulaire f(x) = a*x(car c'est le seul type de fonction d'activation linéaire qui existe), ce qui est inutile en tant que fonction d'activation (sauf si vous la combinez avec des fonctions d'activation non linéaires ).
HelloGoodbye
10
L'unité linéaire rectifiée (ReLU) n'est pas linéaire, et ce n'est pas seulement un "détail mineur" que les gens pinçent, c'est une raison importante pour laquelle il est utile de commencer. Un réseau neuronal avec la matrice d'identité ou une unité linéaire régulière utilisée comme fonction d'activation ne serait pas capable de modéliser des fonctions non linéaires. Ce n'est pas parce qu'il est linéaire au-dessus de 0 que c'est pratiquement une fonction linéaire. Un ReLU qui fuit est également "linéaire" en dessous de 0 mais ce n'est toujours pas une fonction linéaire et ne peut certainement pas être simplement remplacé par la fonction d'identité. La non-linéarité est très certainement une exigence.
Essam Al-Mansouri
3
C'est en fait un concept appelé fonction linéaire par morceaux.
eski