In letzter Zeit sind Swish und Mish als Trend der Aktivierungsfunktion bekannt. Es gibt keinen japanischen Artikel, der Gelu erklärt, daher möchte ich mein eigenes Verständnis zusammenfassen. Eine Erklärung dafür wird wahrscheinlich zu einem Verständnis von Swish führen. Papier: https://arxiv.org/abs/1606.08415
Gelu = x \Phi (x) = x * \frac{1}{2}[1+erf(\frac{x}{\sqrt{2}})]
Gelu ist wie oben definiert. Dabei ist $ \ Phi (x) $ die kumulative Verteilungsfunktion der Normalverteilung (Gaußsche Verteilung). $ erf () $ ist eine Fehlerfunktion. Dies ist eine ideale Funktion, aber im Allgemeinen kann die Fehlerfunktion nicht durch die Elementarfunktion berechnet werden, so dass eine Annäherung vorgenommen wird.
\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}
Zeichnen wir dieses Gelu und seine Annäherung und betrachten den Unterschied zur Relu-Funktion. Wobei Gelu ideal und Gelu ungefähr 1 ungefähr gleich sind. Andererseits ist zu sehen, dass sich Gelu ungefähr 2 geringfügig vom Gelu-Ideal unterscheidet. Hier können wir sehen, dass die Swish-Funktion mit $ \ beta = 1.702 $ Gelu ungefähr 2 entspricht. Wenn Sie also herausfinden können, warum Gelu einen Vorteil hat, dann hat Swish einen Vorteil. In dieser Arbeit wird die Swish-Funktion mit β = 1 als SiLU bezeichnet.
Es ist jedoch zu beachten, dass sich die genaue Gelu-Funktion von der Swish-Funktion unterscheidet, obwohl sie der Swish-Funktion von $ \ beta = 1.702 $ und der Gelu-Funktion von ungefähr 2 entspricht.
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()
Schauen wir uns noch einmal das Gelu-Relu-Diagramm an. Zu diesem Zeitpunkt wird Gelu-Relu ein Graph mit zwei Tälern. Und der Gradient wird 0 in der Nähe von $ x = ± 1 $. Gelu ist eine Abkürzung für GAUSSIAN ERROR LINEAR UNITS. Aus dem Obigen geht hervor, dass diese Aktivierungsfunktion eine Gradientenkomponente aufweist, die die Eingabe der Funktion näher an 1 oder -1 bringt. (Der Begriff, der die sogenannte Regularisierung fördert, ist in der Aktivierungsfunktion enthalten.)
activity_regularizer(Regularisierung der Zwischenschichtausgabe)L1,Ich möchte einen Vergleich mit der L2-Regularisierung in Betracht ziehen. Die in diesem Fall hinzuzufügende Verlustfunktionskomponente ist
Der Unterschied zwischen Gelu und Swish und Mish's Relu mit $ \ beta = 1 $ war wie folgt. Misch ist positiv und negativ, und die Größe und Lage des Tals sind unterschiedlich. Mish liegt im negativen Bereich nahe bei $ \ beta = 1,0 $ Swish, fühlt sich aber im positiven Bereich nahe bei Gelu ungefähr 2 ($ \ beta = 1,702 $ Swish). (Übrigens, wenn Sie den Grund täuschen, warum Mish in Richtung des negativen Bereichs voreingenommen ist, ist der Anteil der Eingaben, die einen positiven Wert annehmen, wenn er reguliert wird, umso größer, je größer der Konvergenzwert des negativen Werts ist. Ich dachte.)
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 zeigte die Variantenkomponente aus der Relu-Funktion an. Ich weiß nicht, ob es eine gute Interpretation ist, da ich keinen Artikel finden kann, der sie als Abweichung von der Relu-Funktion darstellt, aber in diesem Fall verstehe ich, dass Gelu eine Gradientenkomponente hat, die die Eingabe näher an 1 oder -1 bringt. Dies erscheint in der Mish-Zeitung mit dem Wort "selbst reguliert", aber ich denke, das ist es.
Recommended Posts