Fonctions d'activation: Partie 3

Cette dernière partie aborde les alternatives optimales de ReLU pour améliorer vos ANN, Ainsi que 2 autres fonctions plus spécifiques mais tout autant performantes.

Fonctions d'activations exponentielles

ELU (Exponential Linear Unit)

La fonction d'activation Exponential Linear Unit (ELU) est une autre alternative à la fonction ReLU, qui semble montrer de meilleurs résultats en classification. Cette fonction utilise une fonction exponentielle pour les entrées négatives, ce qui permet une adaptation de la pente pour ces entrées. De plus, elle est différentiable sur l'ensemble de son domaine. De plus, il est nécessaire de régler un hyperparamètre α, qui doit être supérieur ou égal à zéro.

$$ ELU(\alpha, x) = \begin{cases} \alpha (e^x - 1) & \text{ for } x \lt 0 \\ x & \text{ for } x \geq 0 \end{cases} $$ $$ ELU'(\alpha, x) = \begin{cases} ELU(\alpha, x) + \alpha & \text{ for } x \lt 0 \\ 1 & \text{ for } x \geq 0 \end{cases} $$

import math

def elu(alpha, x):
    return alpha * (math.exp(x) - 1) if x < 0 else x

def elu_d(alpha, x):
    return elu(alpha, x) + alpha if x < 0 else 1

La fonction ELU et sa dérivée

Avantages :

  • La fonction est dérivable en zéro (et en tout point), contrairement à ReLU.
  • La fonction est lisse et présente une courbure douce au niveau de zéro, ce qui est bénéfique pour l'optimisation et la généralisation du modèle.
  • Elle produit des sorties négatives, ce qui améliore la capacité d'apprentissage du modèle et corrige la direction des paramètres du modèle.
  • ELU pousse la valeur moyenne des activations négatives vers zéro, réduisant ainsi le risque de surajustement et rapprochant le gradient naturel de l'unité du gradient naturel de la couche suivante.
  • Contrairement à Leaky ReLU et Parametric ReLU, ELU assure un état de désactivation robuste au bruit en saturant les valeurs négatives à un certain niveau.

Inconvénients :

  • Elle est coûteuse en termes de calcul en raison de l'exponentiel.
  • La fonction comporte un hyperparamètre, α.

Utilisations :

La fonction d'activation ELU doit être utilisée dans les couches cachées du réseau de neurones. En effet, elle est utile pour améliorer la capacité d'apprentissage du modèle et pour réduire le risque de surajustement.


Soft plus

La fonction d'activation SoftPlus est une autre alternative populaire à la fonction ReLU. Elle utilise une fonction exponentielle pour calculer les entrées positives, permettant ainsi une adaptation de la pente pour ces entrées. La fonction est différentiable sur l'ensemble de son domaine.

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

import math

def softPlus(x):
    return math.log(1 + math.exp(x))

def softPlus_d(x):
    return 1 / (1 + math.exp(-x))

La fonction SoftPlus et sa dérivée

Avantages :

  • La fonction est lisse et continue, ce qui est bénéfique pour l'optimisation et la généralisation du modèle.
  • Elle est facilement dérivable en tout point de l'ensemble de définition.
  • SoftPlus évite la saturation des entrées positives, ce qui peut améliorer la capacité d'apprentissage du modèle et sa performance.
  • Elle peut être considérée comme une version régularisée de la fonction d'activation ReLU.
  • Cette fonction est particulièrement utile pour les applications de classification et de régression.

Inconvénients :

  • Elle peut être coûteuse en termes de calcul en raison de l'exponentiel, en particulier pour des entrées négatives, raison pour laquelle, ReLU est préférée.
  • La fonction comporte un hyperparamètre, β.

Utilisations :

La fonction d'activation SoftPlus doit être utilisée dans les couches cachées du réseau de neurones, en particulier pour les tâches de classification et de régression. Elle peut également être utilisée pour régulariser le modèle et améliorer sa performance en évitant la saturation des entrées positives.


Swish

Il a été démontré que la fonction d'activation Swish peut obtenir une précision de classification supérieure à celle de ReLU. Swish utilise la fonction sigmoïde pour les entrées positives, ce qui lui permet d'adapter la pente de manière non linéaire pour ces entrées. La fonction est différentiable sur l'ensemble de son domaine.

$$ Swish(\beta, x) = x \cdot \sigma(\beta x) $$ $$ Swish'(\beta, x) = \beta Swish(\beta, x) + \sigma ((\beta x)(1 - \beta Swish( \beta, x)) $$

def swish(beta, x):
    return x * sigmoid(beta * x)

def swish_d(beta, x):
    return (beta * swish(beta, x)) + (sigmoid(beta * x) * (1 - (beta * swish(beta, x))))

La fonction Swish et sa dérivée

Avantages :

  • Swish présente une fonction d'activation continue et lisse, qui est bénéfique pour l'optimisation de la fonction de perte qui subit moins d'oscillations, et par conséquent bénéfique pour la généralisation du modèle.
  • La fonction est facilement dérivable en tout point de l'ensemble de définition.
  • Elle évite la saturation des entrées positives, ce qui peut améliorer la capacité d'apprentissage du modèle et sa performance. En effet, elle n'est pas bornée sur sa partie positive.
  • Swish peut être considérée comme une version régularisée de la fonction d'activation ReLU. Lorsqu'une valeur tend vers $ -\infty$, elle converge vers une constante. cela implique que swish oublie les grandes valeurs négatives qui en réalité sont des désactivations.
  • Cette fonction n'est pas Monotone, et c'est la seule que l'on ait vue jusqu'à présent. Cette caractéristique semble permettre au modèle de stocker de l'information.
  • Cette fonction est particulièrement utile pour les tâches de classification et de régression.
  • L'entrée est multipliée par une autre fonction d'activation (sigmoid) finalement déterminant ainsi quelles informations doivent passer ou non, on parle de self-gated.

Inconvénients :

  • Swish peut être plus coûteuse en termes de calcul que ReLU.
  • La fonction comporte un hyperparamètre, β, qui doit être réglé.

Utilisations :

  • La fonction d'activation Swish doit être utilisée dans les couches cachées du réseau de neurones, en particulier pour
  • les tâches de classification et de régression. Elle peut également être utilisée pour régulariser le modèle et améliorer sa performance en évitant la saturation des entrées positives.

Fonctions d'activations spéciales

SoftMax

La fonction d'activation Softmax est largement utilisée dans les réseaux de neurones pour la classification multiclasse. Elle prend en entrée un vecteur de scores non normalisés et produit en sortie une distribution de probabilité sur les différentes classes.

$$ SoftMax(x_{i}, X) = \frac{e^{x_{i}}} {\sum_{j=0}^{|X|-1} e^{x_{j}}}, \forall i \in \{ 0, ..., |X|-1 \} $$

On va s'épargner la dérivée de celle-ci.

import math

def softMax(xi, X):
    return math.exp(xi) / sum([math.exp(xj) for xj in X])

# or directly for a vector

def softMax(X):
    return [math.exp(xi) / sum([math.exp(xj) for xj in X]) for xi in X]

Avantages :

  • La fonction Softmax assure que les sorties sont normalisées, c'est-à-dire que la somme des scores de toutes les classes est égale à 1. Cela permet une interprétation directe des scores en termes de probabilités.
  • Elle est différentiable sur tout son domaine, ce qui facilite l'optimisation et l'apprentissage du modèle.
  • Softmax est particulièrement adaptée aux tâches de classification multiclasse.
  • Elle peut être utilisée en combinaison avec d'autres fonctions d'activation dans les réseaux de neurones pour des tâches plus complexes.

Inconvénients :

  • Softmax peut souffrir de saturation pour des entrées très grandes ou très petites, ce qui peut rendre la sortie imprécise. Cela peut être résolu en utilisant des techniques de stabilisation, telles que la soustraction de la constante maximale. Lorsque la fonction softmax est appliquée à un vecteur de valeurs, elle calcule une distribution de probabilité sur les différentes classes en transformant les valeurs en probabilités qui s'additionnent à 1. Cependant, si les valeurs en entrée sont grandes, cela peut causer un dépassement numérique lors du calcul de la fonction exponentielle dans la formule de softmax. Cela peut entraîner une instabilité numérique et une perte de précision dans les calculs. Pour éviter ce problème, on peut utiliser cette méthode, avec $z_i$ est l'entrée pour la i-ème classe, et $K$ est le nombre total de classes. Le terme $\max_j(z_j)$ est la constante maximale parmi les entrées pour toutes les classes et est soustrait de chaque entrée pour éviter les problèmes de stabilité numérique lors du calcul de l'exponentielle.

$$ softmax(x_i) = \frac{\exp(x_i - \max_j(x_j))} {\sum_{j=0}^{n-1} \exp(x_j - \max_k(x_k))} $$

  • Elle peut également souffrir de problèmes de surapprentissage si la régularisation n'est pas suffisamment utilisée.
  • Softmax a un coût de calcul relativement élevé pour de grandes dimensions de sortie.

Utilisations :

La fonction Softmax est largement utilisée dans les réseaux de neurones pour les tâches de classification multiclasse. Elle peut être utilisée dans la couche de sortie du réseau, après avoir calculé les scores non normalisés pour chaque classe. Il est important de noter que la fonction Softmax doit être utilisée avec une fonction de coût appropriée pour l'apprentissage supervisé.


MaxOut

La fonction d'activation Maxout est une fonction non linéaire introduite en 2013 pour les réseaux de neurones. Elle permet d'obtenir des performances supérieures à celles de fonctions d'activation traditionnelles telles que ReLU et Tanh, en utilisant des unités plus complexes.

$$ MaxOut(W, B, x) = \max_{i=0}^{|W|-1}\{w_i \cdot x + b_i \} $$ $$ MaxOut'(x) = \begin{cases} w^{*} & \text{ for } MaxOut(W, B, x)= w^{*} \cdot x + b^{*} \\ 0 & \text{ otherwise } \end{cases} $$

def maxout(W, B, x):
    return max([W[i] * x + B[i] for i in range(W)])

def maxout_d(W, B, x):
    outs = [W[i] * x + B[i] for i in range(W)]
    return W[maxouts.index(max(outs))] if len(set(outs)) > 0 else 0

Avantages :

  • Maxout permet de modéliser des fonctions non linéaires plus complexes que celles de ReLU ou Tanh.
  • Elle est différentiable sur tout son domaine, ce qui facilite l'optimisation et l'apprentissage du modèle.
  • Maxout peut être utilisée pour des tâches de classification et de régression.
  • Elle est particulièrement utile pour les réseaux de neurones profonds avec un grand nombre de couches.

Inconvénients :

  • Maxout peut être plus coûteuse en termes de calcul que d'autres fonctions d'activation telles que ReLU, en particulier pour des entrées de grande dimension.
  • Elle peut également souffrir de problèmes de surapprentissage si la régularisation n'est pas suffisamment utilisée.
  • Maxout nécessite une spécification préalable du nombre de valeurs maximales à considérer pour chaque unité, ce qui peut nécessiter un réglage.

Utilisations :

La fonction Maxout est généralement utilisée dans les couches cachées des réseaux de neurones, en particulier pour les tâches de classification et de régression. Elle peut être utilisée en combinaison avec d'autres fonctions d'activation dans les réseaux de neurones pour des tâches plus complexes. Il est important de noter que la fonction Maxout doit être utilisée avec une fonction de coût appropriée pour l'apprentissage supervisé.