Fonctions d'activation: Partie 1

Dans cette partie: Explorez les avantages et limites des fonction d'activations basiques, ainsi que leur lien avec les neurones biologiques.

Dans le domaine du deep learning, une fonction d'activation est une fonction mathématique qui est appliquée à chaque sortie de neurone, afin de produire une sortie non-linéaire. Cette sortie non-linéaire est ensuite utilisée comme entrée pour les neurones de la couche suivante du réseau.

L'objectif de la fonction d'activation, et donc de la capture des relations non-linéaires, est essentiel pour résoudre des problèmes complexes tels que la reconnaissance d'images, la compréhension du langage naturel, ou encore la prédiction de séries temporelles. Si l'on observe la comparaison graphique ci-dessous on comprend bien que les données représentées ne peuvent pas être séparées linéairement.

A: une classification linéaire et B: une classification non-linéaire

Dans cet article, nous allons explorer les différentes fonctions d'activation les plus couramment utilisées en deep learning, en les présentant du plus simple au plus complexe, et en discutant des avantages et des limites de chacune. Nous allons également examiner le lien entre les fonctions d'activation en deep learning et le potentiel d'activation des neurones biologiques, afin de mieux comprendre l'inspiration de ces fonctions en biologie.

Le potentiel d'activation des neurones biologiques est un phénomène important dans la transmission de l'information dans le cerveau. Lorsqu'un neurone reçoit suffisamment de signaux électriques, appelés potentiels post-synaptiques, la membrane du neurone devient excitable, c'est-à-dire que le potentiel de membrane atteint un seuil critique et déclenche la génération d'un potentiel d'action, qui est une impulsion électrique courte et rapide. Le potentiel d'action se propage ensuite le long de l'axone du neurone et est transmis aux neurones voisins via des synapses.

Le déplacement d'un potentiel d'action le long d'un axone (src: wikipedia)

Les fonctions d'activation en deep learning sont inspirées de la biologie, car elles cherchent à reproduire le comportement des neurones biologiques lorsqu'ils atteignent un certain niveau d'excitation. En effet, lorsqu'un neurone artificiel atteint un certain niveau d'excitation, la fonction d'activation appliquée à sa sortie permet de produire une réponse non linéaire similaire à celle des neurones biologiques.

La fonction d'activation la plus simple est l'identité, qui ne produit pas de réponse non-linéaire et se contente de transmettre la sortie du neurone sans la modifier. Les fonctions d'activation plus complexes, comme la sigmoïde, la tanh et la ReLU, ont été développées pour modéliser plus précisément le potentiel d'activation des neurones biologiques, en reproduisant des comportements tels que la saturation ou l'inhibition.

En explorant les différentes fonctions d'activation en deep learning, nous pourrons mieux comprendre comment elles reproduisent le potentiel d'activation des neurones biologiques, et comment elles peuvent être utilisées pour construire des réseaux de neurones profonds performants dans des tâches de classification,de reconnaissance et de prédiction.

Fonctions d'activation linéaires

Identité

La fonction d'activation identité est une fonction linéaire qui conserve la valeur d'entrée, ce qui en fait une fonction idéale pour les tâches de régression. Elle ne comprime pas les valeurs en un intervalle donné. La fonction d'activation identité est dérivable en tout point, ce qui facilite la propagation du gradient lors de l'entraînement du réseau de neurones.

$$ f(x) = x $$ $$ f'(x) = 1 $$

def identity(x):
    return x

def identity_d(x):
    return 1

La fonction identité et sa dérivée

Avantages :

  • Identity est simple à implémenter.
  • Elle est utile dans certaines architectures de réseau où les données en entrée doivent être préservées
  • La fonction Identity est idéale pour les tâches de régression où la sortie doit être une valeur réelle dans un intervalle donné.

Inconvénients :

  • elle ne peut pas modéliser des relations non-linéaires complexes entre les entrées et les sorties
  • Identity ne peut pas restreindre les sorties à des valeurs discrètes, ce qui limite son utilisation pour les tâches de classification

Utilisations :

La fonction d'activation identité est souvent utilisée dans les réseaux de neurones pour des tâches de régression, où la sortie attendue est une valeur continue plutôt qu'une valeur discrète ou binaire. Elle peut être moins utile pour les tâches de classification où une sortie discrète ou binaire est requise. Dans ce cas, d'autres fonctions d'activation telles que la fonction sigmoïde ou la fonction ReLU peuvent être plus appropriées.


Heaviside (Binary step)

La fonction d'activation Heaviside est une fonction qui renvoie une valeur binaire en fonction de la valeur d'entrée. Si l'entrée est supérieure ou égale à zéro, la fonction renvoie 1, sinon elle renvoie 0. Cette fonction d'activation est souvent utilisée pour les tâches de classification binaires, car elle permet de limiter les sorties à des valeurs discrètes.

$$ heaviside(x) = \begin{cases} 0 & \text{ for } x \lt 0 \\ 1 & \text{ for } x \geq 0 \end{cases} $$ $$ heaviside'(x) = \begin{cases} 0 & \text{ for } x \not = 0 \\ \nexists & \text{ for } x = 0 \end{cases} $$

def heaviside(x):
    return 0 if x < 0 else 1

def heaviside_d(x):
    return 0 if x != 0 else None

La fonction heaviside et sa dérivée

Avantages :

  • La fonction d'activation Heaviside est simple à implémenter et ne nécessite pas de calculs complexes.
  • Elle est idéale pour les tâches de classification binaires où la sortie doit être une valeur discrète ou binaire.
  • La fonction Heaviside est facilement interprétable, ce qui peut être un avantage dans certaines applications.

Inconvénients :

  • La fonction Heaviside ne peut pas modéliser des relations non-linéaires complexes entre les entrées et les sorties, ce qui peut limiter sa capacité de généralisation.
  • Elle ne peut pas être utilisée pour des tâches de régression où la sortie doit être une valeur continue dans un intervalle donné.
  • Elle n'est pas dérivable en 0. Ce qui n'est pas un problème majeur car contournable, mais peu complexifier l'apprentissage en fonction de la profondeur du réseau.

Utilisations :

La fonction d'activation Heaviside est souvent utilisée dans les réseaux de neurones pour des tâches de classification binaires, telles que la détection de spam ou la reconnaissance de caractères. Cependant, elle peut être moins utile pour les tâches de classification multi-classes ou les tâches de régression, où d'autres fonctions d'activation telles que la fonction softmax ou la fonction ReLU peuvent être plus appropriées.


Fonctions d'activations sigmoïdes basiques

Sigmoid (ou logistique)

La fonction sigmoïde est une fonction d'activation couramment utilisée dans les réseaux de neurones. Elle a la particularité de transformer tout nombre réel en une valeur entre 0 et 1, ce qui en fait une fonction idéale pour la classification binaire. La fonction sigmoïde est également dérivable en tout point, ce qui facilite la propagation du gradient lors de l'entraînement du réseau de neurones bien qu'elle reste désavantagé par "le vanishing gradient problem".

$$ \sigma (x) = \frac{1}{1+e^{-x}} $$ $$ \sigma '(x) = \sigma (x)(1- \sigma (x)) $$

import math

def sigmoid(x):
    return 1.0 / (1.0 + math.exp(-x))

def sigmoid_d(x):
    return sigmoid(x) * (1 - sigmoid(x))

La fonction sigmoid et sa dérivée

Avantages:

  • La fonction sigmoid est dérivable en tout point, Cette propriété est essentielle, car elle permet de calculer le gradient de la courbe à n'importe quel point et facilite la rétropropagation de l'erreur dans le modèle.
  • Les valeurs de sortie de la fonction sigmoid sont bornées entre 0 et 1, évitant ainsi une amplification des activations.
  • La fonction sigmoid produit des sorties nettes pour des valeurs d'entrée inférieures à -2 ou supérieures à 2, en faisant converger les sorties vers 0 ou 1.

Inconvénients

  • La fonction sigmoïde est sensible au vanishing gradient problem lorsque les valeurs de x sont très élevées ou très faibles, car la dérivée de la sigmoïde est très faible en ces points. Cela rend l'optimisation du réseau difficile et peut entraîner une lenteur ou un déni d'apprentissage.
  • Les sorties de la fonction sigmoïde ne sont pas centrées sur zéro (mais sur 0.5), ce qui signifie que tous les gradients connectés à un neurone d'une couche seront soit tous positifs, soit tous négatifs, ce qui entrave les directions possibles de mise à jour des gradients. Cela peut donc ralentir la convergence du réseau. On peut s'en persuader en faisant une étude de signe sur les équations de la backpropagation (SGD) et du gradient de la fonction de coût : avec $ w_{t} $ le poids à l'itération $t$, $\eta$ le taux d'apprentissage, $\nabla J$ le gradient de la fonction de coût total, $m$ la taille de l'échantillon d'entrainement, $L$ la fonction de coût, $\nabla_w f$ le gradient de la fonction d'activation sigmoid.

$$ w_{t+1} = w_t - \eta \cdot \nabla J(w_t) $$ $$ \nabla J = \frac{1}{m} \sum_{i=1}^{m} L(\hat{y_i} - y_i) \cdot \nabla_{w} \sigma(w,x_i) $$

  • La sigmoïde peut saturer et tuer les gradients aux deux extrémités positives et négatives (voir la dérivée), ce qui signifie que pour ces valeurs, le gradient sera de 0 ou proche de 0, ce qui entraîne simplement un manque d'apprentissage dans la rétropropagation.
  • La fonction sigmoïde peut être coûteuse en calculs en raison du terme exponentiel qu'elle contient.

Utilisations

La fonction sigmoid est couramment utilisée pour la classification binaire, où la sortie est limitée à 0 ou 1. La prédiction peut être facilement effectuée en considérant une valeur supérieure à 0,5 comme un résultat positif (1) et les autres comme un résultat négatif (0).


Tanh

La fonction d'activation Tanh, abréviation de "Tangente Hyperbolique", est une fonction mathématiquement décalée de la fonction sigmoïde. Elle est très similaire à la fonction sigmoïde, mais elle est centrée sur zéro. Cela signifie que la sortie de Tanh se situe entre -1 et 1, ce qui résout l'un des problèmes de la fonction sigmoïde.

$$ tanh(x) = \frac{2}{1 + e^{-2x}} -1 $$ $$ tanh'(x) = 1- tanh(x)^2 $$

import math

def tanh(x):
    return (2 / (1 + math.exp(-2 * x))) - 1

def tanh_d(x):
    return 1 - tanh(x)**2

La fonction tanh et sa dérivée

Avantages :

  • La fonction d'activation Tanh est similaire à la fonction sigmoïde, car elle en est une version décalée. En conséquence, elle partage certains des mêmes avantages.
  • La fonction d'activation tanh a une sortie centrée en zéro, ce qui résout l'un des problèmes mentionnés précédemment pour la fonction sigmoïde.

Inconvénients :

  • Tout comme la fonction sigmoïde, la fonction tanh présente également sensible au vanishing gradient problem, mais la dérivée est plus prononcée que celles de la sigmoïde, ce qui la rend plus forte.
  • La fonction tanh est également coûteuse en termes de calcul par rapport à d'autres fonctions d'activation ($ e^x $).
  • Les gradients peuvent également saturer pour la fonction tanh.

Utilisations :

La fonction d'activation Tanh est couramment utilisée dans les couches cachées des réseaux de neurones, car elle permet de maintenir la moyenne des couches cachées proche de zéro grâce à sa sortie centrée en zéro. Cela facilite la convergence de l'apprentissage des couches cachées et améliore ainsi les performances du réseau de neurones. À la différence de la fonction sigmoïde, la fonction Tanh a une plage de sortie entre -1 et 1, ce qui est particulièrement avantageux pour atteindre cet objectif.