Estás leyendo la publicación: Código de unidad lineal de error gaussiano (Python, TF, Torch) – Hacia la IA
Publicado originalmente en Hacia la IA, la empresa líder mundial en noticias y medios de IA y tecnología. Si está creando un producto o servicio relacionado con la IA, lo invitamos a considerar convertirse en patrocinador de la IA. En Hacia la IA, ayudamos a escalar las empresas emergentes de IA y tecnología. Permítanos ayudarlo a dar rienda suelta a su tecnología a las masas.
GELU: código de unidad lineal de error gaussiano (Python, TF, Torch)
Tutorial de código para GELU, función de activación de Unidad lineal de error gaussiano. Incluye código desnudo de Python, Tensorflow y Pytorch.
Función de activación de GELU
La Unidad Lineal de Error Gaussiano, GELU, es la función de activación más utilizada en modelos de última generación como BERT, GPT, Vision Transformers, etc.
Si desea comprender la intuición y las matemáticas detrás de GELU, le sugiero que consulte mi artículo anterior que cubre el documento de GELU (GELU, ¿el sucesor de ReLU? Unidad lineal de error gaussiano explicada). La motivación detrás de GELU es unir los regularizadores estocásticos, como la deserción, con no linealidades, es decir, funciones de activación. Los enormes modelos de transformadores como BERT y GPT hicieron que la función de activación de GELU fuera muy popular.
¿Es GELU, el sucesor de ReLU?
Fórmula matemática GELU
El valor de salida de la función de activación de la unidad lineal de error gaussiano no es determinista, sino que depende estocásticamente del valor de entrada.
La activación de GELU se puede aproximar mediante las dos fórmulas siguientes. La primera aproximación es más precisa, mientras que la segunda menos precisa pero más rápida. Usamos la primera fórmula para escribir una implementación de Python.
GELU en Python
Para obtener la fórmula exacta, necesitamos calcular la función de error gaussiano (erf). Esta es la implementación que requiere más tiempo pero también la más precisa. Para una implementación más rápida, usamos la aproximación basada en tanh() porque es más precisa. El siguiente código de Python cubre ambos.
GELU en Tensorflow-Keras
Tensorflow ofrece la función de activación en su módulo tf.keras.activations y puedes importarlo como
desde tensorflow.keras.activations import gelu
La función tiene un parámetro aproximado booleano. Si elige Verdadero, obtendrá la implementación de python aproximada anterior. De lo contrario, obtiene la implementación precisa pero más lenta que realmente calcula el Función de error de Gauss (erf) de x elemento-sabio.
A continuación se puede ver un ejemplo de construcción de una red neuronal Keras con la función de activación GELU. Tenga en cuenta que puede imponer gelu como la activación de una capa usando el alias ‘gelu’ o pasando el módulo gelu importado directamente. El procedimiento de ajuste es entonces similar al de cualquier otra red Keras.
entrada_forma = (28, 28, 1)
num_clases = 10
gelu_act = gelu(aproximado = Falso)
modelo = keras.secuencial(
[
keras.Input(shape=input_shape),
layers.Conv2D(32, kernel_size=(3, 3), activation=”gelu”),
layers.MaxPooling2D(pool_size=(2, 2)),
layers.Conv2D(64, kernel_size=(3, 3), activation=gelu),
layers.MaxPooling2D(pool_size=(2, 2)),
layers.Flatten(),
layers.Dropout(0.5),
layers.Dense(num_classes, activation=”softmax”),
]
) model.summary() # Compilar la red GELU
model.compile(pérdida=”categorical_crossentropy”, optimizador=”adam”, metrics=[“accuracy”]) #Encajar la red GELU
model.fit(x_tren, y_tren, tamaño_lote=tamaño_lote, épocas=épocas, división_validación=0.1)
GELU en Antorcha
Al igual que Tensorflow, PyTorch ofrece GELU con la forma aproximada y precisa. Puede acceder a la función importando el módulo de antorcha y configurando el parámetro aproximado en Verdadero si desea una implementación más rápida o dejar el valor predeterminado Ninguno para la forma precisa que calcula la función de error gaussiano. Dentro de adelante puede usar la función gelu y establecer el parámetro aproximado en Verdadero o no.
importar torch.nn como nn
importar torch.nn.funcional como F
importar torch.optim como optim
importar torchvision class Net(nn.Module):
def __init__(uno mismo):
super(Neto, propio).__init__()
self.conv1 = nn.Conv2d(1, 10, kernel_size=5)
self.conv2 = nn.Conv2d(10, 20, kernel_size=5)
self.conv2_drop = nn.Dropout2d()
self.fc1 = nn.Lineal(320, 50)
self.fc2 = nn.Linear(50, 10) def adelante(self, x):
fuera = self.conv1(x)
salida = F.max_pool2d(salida, 2)
out = F.gelu(out) # Usando la fórmula GELU exacta con erf
fuera = self.conv2(x)
salida = F.max_pool2d(salida, 2)
fuera = self.conv2_drop(fuera)
out = F.gelu(out, aproximado=Verdadero) # Usando aproximación
fuera = F.abandono(fuera)
fuera = self.fc2(x)
regresar
Conclusiones
La función de activación de GELU ha visto un gran aumento en su uso durante los últimos años. La llegada de grandes modelos de transformadores como BERT, GPT y otros Vision Transformers (ViT) generó la necesidad de una regularización más fuerte. GELU ofrece regularización oculta en la función de activación, por lo que se usa ampliamente en modelos como BERT y GPT.
Codificar GELU es muy fácil y los principales marcos lo admiten de forma predeterminada en sus módulos de funciones de activación.
REFERENCIAS
[1] Unidades lineales de error gaussiano (GELU)
[2] GELU, ¿el sucesor de ReLU? Explicación de la unidad lineal del error gaussiano
[4] tf.keras.activaciones.gelu
[5] antorcha.nn.funcional.gelu
Mis enlaces: Medio |LinkedIn | GitHub
GELU: código de unidad lineal de error gaussiano (Python, TF, Torch) se publicó originalmente en Towards AI en Medium, donde las personas continúan la conversación resaltando y respondiendo a esta historia.
Publicado a través de Hacia la IA