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?
Réponses:
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).
Une fonction d'activation courante utilisée dans backprop ( tangente hyperbolique ) évaluée de -2 à 2:
la source
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:
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.
la source
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ùa
etc
sont 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.
la source
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
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
n
couches. 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.la source
<< 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.
la source
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.
la source
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.
la source
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.
la source
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.
la source
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.
la source
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
la source
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.
la source
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 ).