Récemment, Swish et Mish sont connus comme la tendance de la fonction d'activation. Je n'ai pas d'article japonais expliquant Gelu, je voudrais donc résumer ma propre compréhension. Une explication de ceci mènera probablement à une compréhension de Swish. Papier: https://arxiv.org/abs/1606.08415
Gelu = x \Phi (x) = x * \frac{1}{2}[1+erf(\frac{x}{\sqrt{2}})]
Gelu est défini comme ci-dessus. Où $ \ Phi (x) $ est la fonction de distribution cumulative de la distribution normale (distribution gaussienne). $ erf () $ est une fonction d'erreur. C'est une fonction idéale, mais en général, la fonction d'erreur ne peut pas être calculée par la fonction élémentaire, donc une approximation est faite.
\begin{align}
Gelu &= 0.5x(1+tanh[\sqrt{\frac{2}{\pi}}(x+0.044715x^3)])\\
Gelu &= x\sigma (1.702x)\\
Swish &= x\sigma (\beta x)\\
\end{align}
Tracons ce Gelu et son approximation et considérons la différence avec la fonction relu. Où Gelu idéal et Gelu approximatif 1 sont à peu près égaux. D'autre part, on peut voir que Gelu approximate 2 est légèrement différent de Gelu idéal. Ici, nous pouvons voir que la fonction Swish avec $ \ beta = 1.702 $ équivaut à Gelu environ 2. Donc, si vous pouvez comprendre pourquoi Gelu a un avantage, c'est pourquoi Swish a un avantage. Dans cet article, la fonction Swish avec β = 1 est appelée SiLU.
Cependant, il convient de noter que la fonction Gelu exacte est différente de la fonction Swish, bien que la fonction Swish avec $ \ beta = 1,702 $ soit égale à approximative Gelu 2.
gelu.py
import matplotlib.pyplot as plt
import numpy as np
from scipy import special
x = np.arange(-6, 6, 0.05)
y1 = np.array([i if i>0 else 0 for i in x]) # Relu
y2 = x*0.5*(1+special.erf(np.sqrt(0.5)*x)) # Gelu ideal
y3 = x*0.5*(1+np.tanh(np.sqrt(2/np.pi)*(x+0.044715*x*x*x))) # Gelu approximate 1
y4 = x/(1+np.exp(-1.702*x)) # Gelu approximate 2
plt.plot(x, y1, label="Relu")
plt.plot(x, y2, label="Gelu ideal")
plt.plot(x, y3, label="Gelu approximate 1")
plt.plot(x, y4, label="Gelu approximate 2")
plt.legend()
plt.show()
plt.plot(x, y2-y1, label="Gelu ideal - Relu")
plt.plot(x, y3-y1, label="Gelu approximate 1 - Relu")
plt.plot(x, y4-y1, label="Gelu approximate 2 - Relu")
plt.legend()
plt.show()
Regardons à nouveau le graphique Gelu-Relu. A ce moment, Gelu-Relu devient un graphe avec deux vallées. Et le gradient devient 0 près de $ x = ± 1 $. Gelu est une abréviation pour GAUSSIAN ERROR LINEAR UNITS. En déduisant de ce qui précède, il semble que cette fonction d'activation ait une composante de gradient qui rapproche l'entrée de la fonction de 1 ou -1. (Le terme qui favorise la soi-disant régularisation est inclus dans la fonction d'activation)
activity_regularizer(Régularisation de la sortie de la couche intermédiaire)L1,Je voudrais envisager une comparaison avec la régularisation L2. Le composant de fonction de perte à ajouter dans ce cas est
La différence entre Gelu et Swish et Relu de Mish avec $ \ beta = 1 $ était la suivante. Mish est positif et négatif, et la taille et l'emplacement de la vallée sont différents. Mish est proche de $ \ beta = 1,0 $ Swish dans la région négative, mais se sent proche de Gelu approximativement 2 ($ \ beta = 1,702 $ Swish) dans la région positive. (À propos, si vous trompez la raison pour laquelle Mish est biaisé vers la région négative, plus la valeur de convergence de la valeur négative est grande, plus la proportion d'entrées qui prennent une valeur positive lorsqu'elles sont régularisées. J'ai pensé.)
gelu.py
y5 = x/(1+np.exp(-1.0*x)) # Swish (beta=1.0)
y6 = x*np.tanh(np.log(1+np.exp(x))) # Mish
plt.plot(x, y2-y1, label="Gelu ideal - Relu")
plt.plot(x, y4-y1, label="Gelu approximate 2 - Relu")
plt.plot(x, y5-y1, label="Swish (beta=1.0) - Relu")
plt.plot(x, y6-y1, label="Mish - Relu")
plt.legend()
plt.show()
Gelu a affiché le composant de variante de la fonction Relu. Je ne sais pas si c'est une bonne interprétation car je ne trouve pas d'article qui le représente comme une variation de la fonction Relu, mais dans ce cas, je comprends que Gelu a un composant de gradient qui rapproche l'entrée de 1 ou -1. Cela apparaît dans l'article Mish avec le mot auto régularisé, mais je pense que c'est le cas.
Recommended Posts