Capas ocultas en redes neuronales
Capas ocultas en redes neuronales
2
3
4
5
6
Ejemplo
El método K-means es un ejemplo de aprendizaje automático (machine learning)
que no está en la categoría de Deep Learning:
7
Deep Learning
8
¿Por qué ahora?
GPU
TPU
9
Aprendizaje supervisado
En el aprendizaje supervisado, los algoritmos trabajan con datos “etiquetados”, intentado
encontrar una función que, dadas las variables de entrada, les asigne la etiqueta de salida
adecuada. El algoritmo se entrena con un histórico de datos (dataset) y así aprende a
asignar la etiqueta de salida adecuada a un nuevo valor, es decir, predice el valor de salida.
10
Aprendizaje supervisado: clasificación y regresión
El aprendizaje supervisado se suele usar en problemas de clasificación o de regresión.
Por otra parte, el objetivo de la regresión será un valor numérico. Por ejemplo:
• Predecir por cuánto se va a vender una propiedad inmobiliaria.
• Estimar cuánto tiempo va a tardar un vehículo en llegar a su destino
• Estimar cuántos productos se van a vender.
11
Aprendizaje supervisado
Bicicleta: 0.04
Persona: 0.01
Coche: 0.83
Semáforo 0.02
Camión: 0.10
12
Aprendizaje no supervisado
El aprendizaje no supervisado tiene lugar cuando no se dispone de datos etiquetados
para el entrenamiento. Sólo conocemos los datos de entrada, pero no existen datos de
salida que correspondan a una determinada entrada. Por tanto, sólo podemos describir la
estructura de los datos, para intentar encontrar algún tipo de organización que simplifique
el análisis. Por ello, tienen un carácter exploratorio.
14
Preparación de los datos
• Es imprescindible asegurarse que la información con la que entrenamos la red sea
representativa de lo que se encontrará el sistema en producción.
• Principio básico: Garbage in, garbage out.
• Fases:
• Análisis exploratorio de los datos:
• Permite conocer la información disponible de cara a implementar las fases de
limpieza e ingeniería de datos.
• Es un proceso breve.
• Limpieza de la información (data cleaning):
• Es un proceso crítico y que consume gran parte de la duración del proyecto.
• Incluye la selección de variables o características (feature selection).
• Ingeniería de datos (feature engineering)
• Consiste en crear nuevas variables de entrada a partir de las ya existentes.
• Es la fase que más influye en el rendimiento del modelo por que permite que
los algoritmos se centren en la información clave e introducir información
experta en el tema (médica, financiera, etc.)
15
Preparación de los datos: análisis exploratorio
• Cuestiones básicas: ¿de cuántas observaciones se dispone? ¿con cuántas variables
(características) se trabajará? ¿de qué tipos de datos son las variables? ¿cuál es la
variable objetivo? ¿tienen sentido los valores de las columnas (características)? ¿están
esos valores en la escala adecuada? ¿es previsible que los valores ausentes sean un
problema?
• Visualizar gráficamente las distribuciones de las características numéricas
(histogramas). Esto permite detectar distribuciones inesperadas, valores atípicos
(outliers) que no tienen sentido, características que deberían ser binarias, errores
potenciales de medida, etc.
16
Preparación de los datos: análisis exploratorio
• Visualización gráfica de las distribuciones de las características categóricas
(histogramas). Permite detectar clases dispersas (con pocas observaciones), las cuales no
suelen tener mucha influencia en el sistema, pero en algunos casos favorece el
sobreajuste.
17
Preparación de los datos: análisis exploratorio
• Estudio de correlaciones, por medio de mapas de calor (heatmaps). Se suele buscar las
variables con mayor correlación entre ellas, así como las más correladas con el objetivo.
18
Preparación de los datos: análisis exploratorio
• Visualización de segmentaciones: permite observar la relación entre variables
categóricas y numéricas. Se usan lo gráficos de cajas (box plots):
Mediana.
Los cuartiles (Q1 a Q4) definidos por los percentiles del 25% , 50%, 75% y 100%.
Rango intercuantílico (interquartile range - IQR): entre los percentiles 25% y 75%.
Máximos y mínimos calculados con respecto al IQR.
19
Preparación de los datos: análisis exploratorio
En el ejemplo se pueden observar las medidas típicas: medianas, máximos, mínimos,
etc. Los valores máximos y mínimos (200K y 800K) sugieren que los valores están
truncados (o redondeados), lo que puede influir en la generalización del modelo.
20
Preparación de los datos: limpieza (data cleaning)
1. Eliminación de observaciones:
• Observaciones duplicadas: típicamente proviene de la fusión de distintos datasets o
web scraping.
• Información irrelevante: por ejemplo, observaciones de casas unifamiliares, cuando el
problema intenta predecir el precio de viviendas en edificios.
2. Filtrado de valores atípicos (outliers):
• Se deben eliminar los que se sepa (o sea muy sospechoso) que es una lectura errónea
o que no aporta información al sistema.
3. Arreglar errores estructurales:
• Si la información proviene de distintas fuentes, puede tener formatos distintos para los
mismos atributos.
• Por ejemplo, “23.53 €” o “23.53 Eur”; o usar nombres de países en distinto formato,
como por ejemplo “Estados Unidos” o “EEUU”; o tener una columna “cliente” con
nombre y apellidos, y otros registros, nombre y apellidos en distintas columnas.
• Eliminar caracteres que no aportan información: cambios de línea, #, &, espacios en
blanco al principio o al final, etc.
21
Preparación de los datos: limpieza (data cleaning)
4. Reducir la información:
• Eliminar columnas (atributo o característica) que no aportan información (atribute
sampling), que permite reducir complejidad. Por ejemplo, en algunos datasets
aparecen columnas que sólo contienen un valor.
• Eliminar filas (observaciones) en la que falta información, o ésta es errónea o los datos
son poco representativos para las predicciones. Se conoce como record sampling.
• Agregación: por ejemplo, puede ser interesante sustituir los datos de ventas diarias
por ventas semanales. De este modo se reduce el número de filas.
• Eliminar demasiadas filas (por valores ausentes, por ejemplo) puede introducir sesgos
o empeorar el dataset.
5. Gestión de datos ausentes:
• Eliminación.
• Asignación de valores numéricos (por ejemplo, 0) o por valores categóricos (por
ejemplo, el texto “n/a” o “no disponible”)
• Si son columnas numéricas, por promedios, medianas, valores interpolados, etc.
• En columnas categóricas, por el valor más frecuente.
• Si se asigna un valor, se puede crear otra columna (variable) que indique esta
situación. 22
Preparación de los datos: limpieza (data cleaning)
25
Datos de entrenamiento, validación y prueba
Algunos frameworks tienen funciones que generan los tres conjuntos de datos de
forma aleatoria, pero en muchos casos esto no cumple los requisititos necesarios:
• Por ejemplo cuando se trabaja con series temporales.
• También es necesario considerar si los datos que el modelo va a usar en producción
son cualitativamente distintos de los de entrenamiento.
Por ejemplo, si entrenamos un sistema de reconocimiento de emociones a partir de
una imagen del rostro. Si usamos un número reducido de personas para el
entrenamiento, en muchos casos ocurrirá que en producción se encontrará con
caras de personas desconocidas.
Por ello, se debe reservar para los conjuntos de validación y prueba imágenes de
personas que no hayan participado en el entrenamiento.
En general, es importante que los tres conjuntos compartan las mismas propiedades
estadísticas.
26
Datos de entrenamiento, validación y prueba
27
Perceptrón: Progagación hacia adelante
(forward propagation)
función de
activación no lineal
28
Perceptrón: Progagación hacia adelante con sesgo
(bias)
salida combinación lineal de entradas
pesos
entradas
29
Sesgo (bias)
El sesgo (bias) hace que se puedan representar más valores, sin que el modelo pase
forzosamente por el origen:
𝑦𝑦 = 𝑚𝑚 · 𝑥𝑥
𝑦𝑦 = 𝑚𝑚 · 𝑥𝑥 + 𝑐𝑐
30
Funciones de activación
La función de activación decide si la neurona se activa
(1) o no (0) en función de los valores de las entradas.
Las funciones de activación introducen alinealidad en
la red y esto es lo que le permite a la red aprender y
realizar tareas más complejas.
La red se comporta mejor si la función de activación
cambia de 0 a 1 sin discontinuidades.
31
Objetivo de las funciones de activación
El objetivo de las funciones de activación es
el de introducir no linealidades.
32
Funciones de activación
La función sigmoide presenta los siguientes problemas:
• El cálculo de exponenciales consume mucho tiempo.
• Se produce el problema de desvanecimiento del gradiente: hay momentos en los que
el gradiente se hará tan pequeño haciendo que los pesos apenas cambien su valor.
• No es útil en problemas de regresión.
33
Funciones de activación
La función ReLU (Rectified Linear Units), en comparación con las dos anteriores, tiene un
coste computacional muy bajo y acelera la convergencia de los algoritmos de descenso de
gradiente. Además, no presenta el problema de desvanecimiento de gradiente.
Sin embargo presenta el problema “ReLu inactiva”: al ser cero para todos los valores
negativos de entrada, cuando la neurona entra en esa zona, es probable que no vuelva a
salir de ese estado.
Esta función se suele usar solo en las capas ocultas y apenas nunca en redes recurrentes.
35
Funciones de activación
La función de activación Maxout es una generalización de las funciones ReLU y ReLU
con pérdidas. Es una función que devuelve el máximo de las entradas, diseñada para
ser utilizada junto con la técnica de regularización de abandono (dropout).
Esta función proporciona todos los beneficios de una unidad ReLU (régimen lineal de
operación, sin saturación) y no tiene su inconveniente: ReLU inactiva. Los parámetros
de esta función necesitan ser entrenados, por lo que se duplica el número de
parámetros de cada neurona y, por lo tanto, se necesita entrenar un mayor número de
parámetros.
f(x) = x · sigmoid(x)
36
Funciones de activación
La función de activación Softmax asigna probabilidades decimales a cada clase cuando la
decisión consiste en escoger una clase de entre n disponibles. El resultado es un vector de n
valores, con las probabilidades de cada clase, cuyo total deben sumar 1.
peatón → 0.001 0
vehículo → 0.04 0
señal → 0.008 0
semáforo → 0.95 1
barrera → 0.001 0
37
Funciones de activación
Criterio de elección:
• Las funciones sigmoide y tanh no se deben usar en redes con muchas capas debido al
problema de desvanecimiento del gradiente.
38
Ejemplo de perceptrón
es una línea 2D
39
Ejemplo de perceptrón
𝑧𝑧
𝑥𝑥1
Si la entrada es:
z>0
y > 0.5
40
Perceptrón simplificado y de múltiple salida
Capa densa: todas las entradas están conectadas con todas las salidas.
41
Programación de una capa densa:
class CapaDensa([Link]):
def __init__(self, dim_ent, dim_sal):
super(CapaDensa, self).__init__()
# Inicializa pesos y sesgo (bias)
self.W = self.añade_peso([dim_ent, dim_sal])
self.b = self.añade_peso([1, dim_sal])
import tensorflow as tf
layer = [Link](units=2) 42
Red neuronal de capa única
43
Red neuronal de capa única
44
Red neuronal de capa única
import tensorflow as tf
model = [Link]([
[Link](n),
[Link](2)
])
45
Red neuronal profunda
import tensorflow as tf
model = [Link]([
[Link](n1),
[Link](n2),
⋮
[Link](2) ])
46
Red neuronal profunda
47
Ejemplo de uso
x2
horas de estudio
Aprobar
Suspender
predicción real
49
Pérdida de error cuadrático/absoluto
Se usan con modelos de regresión que generan números reales continuos, como
por ejemplo estimar el precio de venta de un inmueble, o la nota de un examen:
predic. real
El problema del error cuadrático es que le da demasiado
peso a los atípicos (outliers). notas finales
(porcentaje)
El problema del error absoluto es que el gradiente es
grande incluso si el error es pequeño.
predic. real
notas finales
(porcentaje)
peatón → 0.001 0
vehículo → 0.04 0
señal → 0.008 0
semáforo → 0.95 1
barrera → 0.001 0
53
Funciones de coste
Mide la pérdida total sobre todo el conjunto de datos (dataset) a partir de las
funciones de pérdida. Por tanto existe una gran variedad de funciones de coste.
Función de coste
Función objetivo
Riesgo empírico predicción real
54
Funciones de coste
predicción real
error cuadrático
medio
real predicción
entropía cruzada
binaria
real predicción real predicción
entropía cruzada
categórica
real predicción real predicción
55
Entrenamiento de
redes neuronales
56
Optimización de pérdidas (loss optimization)
El objetivo es conseguir los pesos de la red que minimicen el coste.
𝑛𝑛
1
𝑾𝑾∗ = 𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎 � ℒ 𝑓𝑓 𝑥𝑥 𝑖𝑖 ; 𝑊𝑊 , 𝑦𝑦 𝑖𝑖
𝑊𝑊 𝑛𝑛
𝑖𝑖=1
57
Descenso de gradiente (gradient descent)
El algoritmo de minimización consiste en escoger unos pesos aleatorios, calcular
el gradiente y desplazarse en la dirección opuesta a dicho gradiente. El proceso se
repite hasta que converja.
58
Descenso de gradiente (gradient descent)
El algoritmo anterior se denomina de descenso de gradiente:
i. Calcular el gradiente:
import tensorflow as tf
pesos = [Link]([[Link]()])
while True: # bucle infinito
with [Link]() as g:
loss = compute_loss(pesos)
gradiente = [Link](loss, pesos)
pesos = pesos - lr * gradiente
59
Cálculo del gradiente: retropropagación
(backpropagation)
Backpropagation es un método de cálculo de gradientes que parte de la siguiente
pregunta: ¿cuánto afecta un pequeño cambio en un peso (w2 , por ejemplo) en la
pérdida final J(W)?
w1 w2
x z1 𝑦𝑦� J(W)
60
Optimizadores
61
Dificultad en el entrenamiento de redes neuronales
Las funciones de pérdidas son difíciles de optimizar.
62
Tasa de aprendizaje (learning rate)
Hay que determinar un valor para la tasa de aprendizaje (η) del método de optimización
por descenso de gradiente:
estimación inicial
63
Cálculo de la tasa de aprendizaje constante
La opción por defecto en la mayoría de las implementaciones de SGD es la de usar una tasa de
aprendizaje constante.
El método learning rate range permite establecer un valor adecuado para cada problema:
• Durante una repetición (epoch) se comienza a aplicar el SGD con una tasa de aprendizaje muy
pequeña (10−8, por ejemplo)
• Para cada mini-lote se multiplicará por un factor hasta que alcance un valor muy alto (1 ó 10,
por ejemplo). El factor suele ser (valor_final/valor_inicial)1/(num_ejemplos-1)
• En cada iteración se registra la pérdida que se dibujará frente a la tasa de aprendizaje.
La tasa de aprendizaje correspondiente al mínimo ya es demasiado alta, dado que estamos en la
frontera entre la mejora y el empeoramiento rápido.
La tasa a escoger será un orden de magnitud anterior.
Tasa de aprendizaje
demasiado baja: el Tasa de aprendizaje
coste disminuye demasiado alta:
muy lentamente comienza a divergir
Rango óptimo
65
Tasa de aprendizaje decreciente
Decrecimiento temporal (time-based decay):
• La tasa de aprendizaje se reduce en cada repetición (epoch) según la siguiente fórmula:
learn_rate = learn_rate_inicial / (1 + k · epoch)
donde k es el factor de decrecimiento y epoch el número de repetición.
• Una práctica común es buscar el valor ideal para una tasa constante (diapositiva
anterior) y tomar ese valor como inicial en el proceso.
Decrecimiento por pasos (step decay):
• La tasa de aprendizaje se reduce en un factor cada n repeticiones (epochs):
learn_rate = learn_rate_inicial * k(epoch/n)
donde k es el factor de decrecimiento, epoch el número de repetición.
66
Tasa de aprendizaje decreciente
67
Tasas contantes y decrecientes
70
Optimizadores
Se han desarrollado una gran cantidad de algoritmos basados en el de descenso de
gradiente para mejorar su rendimiento. La mayoría están ya implementados en
diversas bibliotecas.
• SGD → [Link]
• Adam → [Link]
• Adadelta → [Link]
• Adagrad → [Link]
• RMSProp → [Link]
• …
import tensorflow as tf
modelo = [Link]([...])
optimizador = [Link]() # escogemos un optimizador
while True: # bucle infinito
Esto supone una elevada carga computacional, ya que en la mayoría de los casos el
conjunto de datos es muy grande.
coste
gradiente
peso
inicial
paso
(incremento)
coste mínimo
derivada del coste
peso
72
Descenso de Gradiente Estocástico (SGD)
Esto supone que el tiempo necesario para el cálculo es muchísimo menor, aunque el
algoritmo irá moviéndose hacia el mínimo de forma menos coherente en cada iteración.
Una ventaja de esta "incoherencia" es que puede resultarle más sencillo escapar de un
mínimo local.
73
Descenso de Gradiente en Mini-Lotes (MB-GD)
En lugar de alimentar la red con una única muestra, se introducen N muestras en cada
iteración.
Conserva las ventajas del gradiente estocástico y consigue, además, que el entrenamiento
sea más rápido debido a la paralelización de las operaciones.
Este es el enfoque más utilizado ya que proporciona un buen balance entre aleatoriedad y
tiempo de entrenamiento.
Este algoritmo converge más rápido que el Descenso de Gradiente Estocástico pero tiene
mayor probabilidad de caer en un mínimo local.
Los tamaños más típicos de los mini-lotes son potencia de dos entre 32 y 1024. El tamaño
dependerá de la potencia de cálculo. También es hacer el tamaño proporcional al número
de clases en el conjunto de datos.
74
Descenso de Gradiente
75
Optimizadores: Métodos del Momento
Al Descenso de Gradiente Estocástico le cuesta moverse en zonas donde las pendientes
de las distintas dimensiones son muy diferentes. El método del momento
(momentum) le permite navegar en las direcciones relevantes y eliminar las
oscilaciones que producen las irrelevantes.
Para ello, cuando calcula una nueva dirección, se le suma la dirección anterior escalada
con un factor que estará entre 0 y 1 (el valor de 0.9 es bastante típico):
76
Optimizadores: Métodos del Momento y Nesterov
El problema es que cuando se está cerca del objetivo, el momento suele ser grande y
puede hacer que pierda el mínimo o se oscile alrededor.
Una variante destacable de este método es el algoritmo Gradiente Acelerado de
Nesterov (Nesterov Accelerated Gradient): para el cálculo del descenso, en un primer
momento confia en el vector de momentum y una vez descendido en su dirección se
calcula el nuevo gradiente desde ese punto.
momento Nesterov 77
Optimizadores: Algoritmo de Gradiente Adaptativo
AdaGrad (Adaptative Gradient Algorithm) es una modificación del método de Descenso de
Gradiente Estocástico que escala de forma adaptable el parámetro de tasa de aprendizaje
para garantizar que el proceso de entrenamiento no sea ni demasiado lento ni demasiado
volátil e impreciso. Es especialmente útil para redes de dimensión muy grande.
Debido a esto, es adecuado para datos dispersos (procesado de lenguaje natural o
reconocimiento de imágenes). Otra ventaja es que básicamente elimina la necesidad de
ajustar la tasa de aprendizaje.
Cada parámetro tiene su propia tasa de aprendizaje y debido a las peculiaridades del
algoritmo la tasa de aprendizaje decrece de forma monótona. Esto causa el mayor
problema: en algún momento la tasa de aprendizaje es tan pequeña que el sistema deja de
aprender.
AdaDelta es una variación de AdaGrad en la que en vez de calcular el escalado del factor de
entrenamiento de cada dimensión teniendo en cuenta el gradiente acumulado desde el
principio de la ejecución, se restringe a una ventana de tamaño fijo de los últimos n
gradientes.
78
Optimizadores: RMSProp
RMSProp (Root Mean Square Propagation) es método en el que, al igual que AdaGrad,
cada peso dispone de su propio valor de tasa de aprendizaje, produciéndose una menor
oscilación en el camino hacia el mínimo.
La mayor diferencia con AdaGrad es la forma de calcular la tasa de aprendizaje. Para cada
parámetro, se divide la tasa de aprendizaje por la media móvil de las magnitudes de los
gradientes recientes de ese parámetro.
La siguiente fórmula calcula un factor de atenuación (𝑣𝑣𝑡𝑡 ) de la tasa de aprendizaje del
peso en cuestión, como la suma ponderada (𝜌𝜌) del factor de atenuación anterior (𝑣𝑣𝑡𝑡−1 ) y
del cuadrado de la componente del gradiente de la función de coste en la dirección del
peso (𝑔𝑔𝑡𝑡 ).
𝑣𝑣𝑡𝑡 = 𝜌𝜌 · 𝑣𝑣𝑡𝑡−1 + 1 − 𝜌𝜌 · 𝑔𝑔𝑡𝑡 2
La segunda fórmula calcula el nuevo peso (𝑤𝑤𝑡𝑡+1) como la suma del anterior (𝑤𝑤𝑡𝑡 ) menos el
gradiente de la función de coste (𝛻𝛻𝑤𝑤𝑡𝑡 ), aplicándole una tasa de aprendizaje (𝜂𝜂) atenuada
por la raíz cuadrada del factor calculado en la fórmula anterior (𝑣𝑣𝑡𝑡 ):
𝜂𝜂
𝑤𝑤𝑡𝑡+1 = 𝑤𝑤𝑡𝑡 − · 𝑔𝑔
𝑣𝑣𝑡𝑡 + 𝜖𝜖 𝑡𝑡
79
Optimizadores: Adam
Adam (Adaptive momentum estimation), además de usar tasas de aprendizaje para cada
parámetro, también usa separadamente cambios en el momento de cada uno.
Es, por tanto, una combinación de RMSProp y del método del momento. Para cada peso:
Las dos primeras ecuaciones calculan la media exponencial del gradiente, así como lso
cuadrados del gradiente para cada parámetro, respectivamente.
La tasa de aprendizaje se escala por el promedio del gradiente y se divide por la raíz del
promedio cuadrático del promedio exponencial del cuadrado de los gradientes.
El hiperparámetro β1 se suele establecer cerca de 0.9 y β2 cerca de 0.99. 𝜖𝜖 vale
típicamente 10-10. 80
Optimizadores
Además de los presentados, existen otros métodos, que como hemos visto suelen ser
variantes de los métodos básicos basados en el momento y la tasa de aprendizaje.
81
Convergencia
Una situación que se puede dar es que el algoritmo circule alrededor de la solución óptima
(es decir, el conjunto de pesos con menor coste) sin nunca converger.
Un método de combatir este problema consiste en combinar los pesos conseguidos hacia
el final del proceso de entrenamiento, por medio de un promediado temporal (conocido
como promedia Polyak o de Polyak-Ruppert).
82
Guardar y cargar modelos con Keras
Guardar y cargar el modelo completo
El método [Link](ruta) guarda en un único fichero HDF5 lo siguiente:
Arquitectura.
Pesos.
Configuración del entrenamiento (pérdidas y optimizador).
Estado del entrenamiento, que permite continuarlo desde el mismo punto.
El método model.load_model(ruta) carga el modelo completo.
También compila el modelo usando la configuración de entrenamiento guardada en el
fichero (sólo si el modelo estaba compilado cuando se guardó).
83
Guardar y cargar modelos con Keras
Guardar y cargar solo la arquitectura de un modelo
Los métodos model.to_json() y model.to_yaml() representan el modelo como una cadena
de texto en formato json o yaml. Son legibles y editables. Sólo es necesario usar uno de ellos.
json_string = modelo.to_json() # convertir modelo a texto en formato JSON
yaml_string = model.to_yaml() # formato YAML (se recomienda JSON)
with open("[Link]", "w") as json_file: # guardar string en fichero en Python
json_file.write(modelo_json)
85
Datos de entrenamiento y prueba
Un modelo de aprendizaje automático tiene como objetivo realizar buenas predicciones
sobre datos nuevos nunca antes vistos. Para ello se divide el conjunto de datos en tres
subconjuntos:
• Conjunto de entrenamiento: para entrenar un modelo (∼96%).
• Conjunto de validación: para probar el modelo (∼2%).
• Conjunto de prueba: para comparar modelos (∼2%).
Un buen rendimiento en el conjunto de desarrollo y de prueba es un indicador útil de
buen rendimiento en los datos nuevos en general, suponiendo lo siguiente:
• Que sea lo suficientemente grande como para generar resultados significativos
desde el punto de vista estadístico.
• Que sea representativo de todo el conjunto de datos. En otras palabras, no se debe
elegir un conjunto de prueba con características diferentes al del conjunto de
entrenamiento.
• Nunca se deben usar los datos de prueba ni de validación para el entrenamiento
86
Sobreajuste y subajuste
Se define subajuste (underfitting) de un modelo como la incapacidad para capturar la
tendencia subyacente de los datos. Típicamente se debe a haber entrenado el sistema
con pocos datos o a haber hecho una mala selección de las características a utilizar.
También se denominan sistemas con sesgo alto (high bias).
Se define sobreajuste (overfitting) como el ajuste excesivo de un modelo a los datos de
entrenamiento, dificultando la generalización y, por tanto, la predicción ante datos
nuevos. También se denominan sistemas con varianza alta (high variance).
87
Regularización
El aumento de las características (features) y del número de capas, aumenta el riesgo de
sobreajuste, sobre todo cuando no se dispone de una gran cantidad de datos.
Por ello, la mejor forma de reducir el sobreajuste (overfitting) es conseguir más datos
para el entrenamiento. Una técnica bastante utilizada es la del aumento de datos (data
augmentation).
Cuándo esto no es posible, se puede probar a aplicar técnicas de regularización o a
reducir la capacidad de la red:
• Arquitecturas más reducidas: menos capas, menos unidades por capas, etc.
• Reducción de los pesos: técnicas que reducen los pesos o penalizan la complejidad
de la red (L1 y L2), etc.
• Añadir ruido: dropout.
88
Regularización: Aumento de los datos
(data augmentation)
La idea es aplicar diversas transformaciones sobre las entradas originales, obteniendo
muestras ligeramente diferentes pero iguales en esencia, lo que permite a la red
desenvolverse mejor en la fase de inferencia.
Esta técnica se utiliza mucho en el campo de la visión artificial porque funciona
extraordinariamente bien.
Dentro de dicho contexto, una misma imagen de entrada será procesada por la red
neuronal tantas veces como repeticiones (epochs) ejecutemos en entrenamiento,
provocando que la red acabe memorizando la imagen si entrenamos demasiado.
Lo que haremos es aplicar transformaciones de forma aleatoria cada vez que volvamos a
introducir la imagen a la red:
• Imagen especular (horizontal o vertical)
• Rotar la imagen X grados.
• Recortar, añadir relleno, redimensionar, …
• Aplicar deformaciones de perspectiva
• Ajustar brillo, contraste, saturación, …
• Introducir ruido, defectos, …
• Combinaciones de las anteriores 89
Regularización: Aumento de los datos
(data augmentation)
De esta forma se dispondrá de más
información para entrenamiento sin
necesidad de obtener muestras
adicionales, y también sin alargar los
tiempos.
Lo mejor es que si por ejemplo
nuestra red se dedica a clasificar
imágenes o detectar objetos, esta
técnica conseguirá que el modelo
sea capaz de obtener buenos
resultados para imágenes tomadas
desde distintos ángulos o bajo
distintas condiciones de luz.
Por tanto conseguiremos que la red
no sobreajuste y que generalice
mejor.
90
Regularizaciones L1 y L2
𝑛𝑛
1
𝐶𝐶𝐶𝐶𝐶𝐶𝐶𝐶𝐶𝐶 = � ℒ 𝑦𝑦 [𝑖𝑖] , 𝑦𝑦� [𝑖𝑖] + 𝑓𝑓(𝑤𝑤)
𝑛𝑛
𝑖𝑖=1
Si se penaliza la complejidad del modelo, se hace más difícil que el modelo se adapte a
cada uno de los ejemplos que le suministramos, por lo que le resulta más complicado
memorizarlos.
Las funciones más habituales con las que se mide la complejidad del sistema (f en la
fórmula anterior) son las normas L1 y L2 (norma euclídea):
91
Regularización: L2
La idea detrás de este tipo de regularización es reducir el valor de los parámetros para
que sean pequeños.
Utiliza el cuadrado de la norma euclídea para para medir la complejidad del sistema:
𝑛𝑛
1 𝜆𝜆
𝐶𝐶𝐶𝐶𝐶𝐶𝐶𝐶𝐶𝐶 𝐿𝐿𝐿 = � ℒ 𝑦𝑦 [𝑖𝑖] , 𝑦𝑦� [𝑖𝑖] + � 𝜔𝜔𝑗𝑗
𝑛𝑛 𝑛𝑛
𝑖𝑖=1 𝑗𝑗
𝜕𝜕𝜕𝜕
𝜔𝜔𝑖𝑖,𝑗𝑗 ∶= 𝜔𝜔𝑖𝑖,𝑗𝑗 − 𝜂𝜂 · + 𝜆𝜆𝜆𝜆𝑖𝑖,𝑗𝑗
𝜕𝜕𝜔𝜔𝑖𝑖,𝑗𝑗
A pesar de que ambas técnicas son muy similares, el decaimiento de pesos obtiene
mejores resultados que L2 en optimizadores con gradientes adaptativos (como por
ejemplo, Adam).
94
Regularización: Dropout
Por cada nueva entrada a la red en fase de entrenamiento, se desactivará aleatoriamente
un porcentaje de las neuronas en cada capa oculta (probabilidad de descarte previamente
definida). Dicha probabilidad puede ser igual para toda la red, o distinta en cada capa. Los
valores más utilizados para la probabilidad de dropout están entre 0.2 y 0.5.
Dado que en fase de inferencia se usan
todas las neuronas, se hace necesario
compensar esa diferencia, la opción
más eficiente es multiplicar los valores
de activación en la fase de
entrenamiento por un factor de 1/(1-p),
donde p es la probabilidad de dropout.
Este es el enfoque llamado dropout
invertido es el utilizado por la mayoría
de los frameworks de deep learning.
El principal motivo por el que este método funciona tan bien es porque la red aprende a no
depender demasiado de conexiones particulares y de esa forma tendrá en cuenta más
conexiones.
Es importante apuntar que, aunque no se tiene sentido aplicarlo si el sistema no sobreajusta,
no es infrecuente ver cómo en estos casos se aumenta la capacidad de la red hasta que
sobreajusta y luego se aplica dropout. 95
Regularización: Normalización de lotes
(batch normalization)
96
Regularización: Parada temprana (early stopping)
Error
Error de
Fin del validación
entrenamiento
Error de
entrenamiento
Epochs
97
Regularización: Parada temprana (early stopping)
También se usa esta técnica para no tener que estimar cuántas repeticiones (epochs) de
entrenamiento se deben aplicar: dejamos de entrenar la red cuando detectemos que el
error de validación aumenta de forma sostenida.
98
Normalización y estandarización de los datos
Supongamos un escenario en el cual se dispone de dos entradas a una RN, en la que los
valores de la primera están entre 0 y 1 y los de la segunda varían entre 0 y 0.01. Dado
que la tarea de la red es aprender cómo combinar ambas entradas por medio de una
serie de combinaciones lineales y activaciones no lineales, los parámetros asociados a
cada entrada también tendrán escalas distintas. En la práctica esto puede producir que
la función de coste dé más importancia a los gradientes de unos parámetros que a los de
otros.
Una buena política es tratar de mantener las entradas con valores pequeños,
típicamente en el rango de 0 a 1 (normalización) o con media cero y desviación estándar
1 (estandarización).
Normalizando o estandarizando las entradas, aceleramos el proceso de aprendizaje.
Además, es práctico que las entradas estén, aproximadamente, en un rango de -1 a 1
para eliminar problemas de precisión de los números en punto flotante, dado que los
microprocesadores pierden precisión cuando los operandos son muy grandes o muy
pequeños.
Por otra parte, si las entradas y las salidas objetivo están en una escala muy distinta, los
parámetros por defecto de la red (como por ejemplo, la tasa de aprendizaje) serán más
difíciles de calcular.
99
Escalado y normalización
Si la distribución de los valores de una entrada es normal (gausiana), debería
estandarizarse. En otro caso, debería normalizarse. Si el rango de valores ya es similar a
una distribución N(0,1), no sería necesario modificarlo.
Por ejemplo, cuando la información de entrada son imágenes, se suele escalar el valor de
cada canal RGB de los píxeles (típicamente, un entero entre 0 y 255) por un factor 1/255
de forma que la intensidad esté entre 0 y 1.
En los problemas de regresión, reducir la escala de la variable objetivo puede reducir el
tamaño de los gradientes usados para actualizar los pesos y, resultar en un proceso de
entrenamiento más estable.
La normalización de las entradas solo afecta a la primera capa oculta, para el resto se
utiliza otra técnica: normalización de lotes (batch normalization).
101
Normalización de lotes: variantes
PREACTIVACIÓN POSTACTIVACIÓN
Aplicación de la función de
Normalización de bloques
activación
Aplicación de la función de
activación Normalización de lotes
103
Normalización de lotes antes de la función de
activación
104
Normalización de lotes de la salida de una capa
La salida de cada neurona se normalizará de forma independiente, lo que quiere decir
que en cada iteración se calculará la media y la varianza de cada salida para el mini-lote
en curso.
106
Normalización de lotes antes y después de la
función de activación en Keras
Antes de la función de activación:
modelo = Sequential()
[Link](Dense(32))
[Link](BatchNormalization())
[Link](Activation('relu'))
107
Normalización de lotes: pautas
• Se puede usar en casi todo tipo de redes: MLP, CNN, RNN…
• En la práctica suele funcionar mejor cuando se aplica tras la función de activación.
• Se pueden usar tasas de aprendizaje mayores con tasas de decaimiento también
mayores.
• El aprendizaje dependerá menos de la técnica de inicialización de pesos.
• No se debe combinar con Dropout, dado que la desactivación aleatoria de unidades,
introduce ruido en los estadísticos usados para la normalización.
108
Hiperparámetros y
diseño de la red
109
Inicialización de los pesos
• En la práctica se suele inicializar el peso del sesgo (bias) de cada neurona a 0.
• Sin embargo, si los pesos se inicializan a 0, todas las neuronas tendrían el
mismo comportamiento.
110
Inicialización de los pesos
• Si se inicializan con valores muy altos o muy bajos, dependiendo de las
funciones de activación que se usen, podría provocar que el aprendizaje
fuese lento.
• Por ejemplo, en el caso de la función sigmoide, los valores extremos de la
entrada corresponden a salidas en las zonas planas, por lo que la derivada
será muy baja y, por tanto, los cambios lentos (desvanecimiento del
gradiente).
111
Inicialización de los pesos (versiones de Keras)
• La técnica de inicialización He (o Kaiming) se aplica cuando se usa ReLU o Leaky ReLU.
Los pesos son valores aleatorios con distribución gaussiana de media 0 y varianza 2/n,
donde n es el número de entradas de la capa (el peso del sesgo se inicializa a 0).
• La técnica Xavier (también llamada Glorot) se aplica con activación tanh. La versión
normal usa una distribución gaussiana de media 0 y varianza 2(nent + nsal )-1 donde nent
es el número de entradas de la capa y nsal el de salidas. Existe otra versión (Glorot
uniforme) donde la distribución es uniforme en el intervalo ± 6/(nent + nsal )
112
Diseño de la red:
Selección del optimizador y la función de pérdidas
El objetivo de la optimización es calcular eficientemente los pesos que minimicen la
función de pérdidas.
En muchos casos, la función de pérdidas mide la distancia. Se puede definir la distancia
entre dos puntos de datos de múltiples formas. Esta definición dependerá del tipo de
datos y del problema a resolver. Por ejemplo, cuando se procesa lenguaje natural (NPL), la
distancia más usada es la de Hamming (mide cuántos componentes son distintos entre
dos datos dados).
Otras medidas típicas son la distancia euclídea y la distancia Manhattan, que se define
como la suma de las distancias en cada dimensión:
Funciones de pérdida
• MSE: típica en regresión.
• Entropía cruzada categórica: para clasificación multiclase.
• Entropía cruzada binaria: para clasificación binaria.
113
Recorte y escalado de gradiente
(gradient clipping and scaling)
• Explosión del gradiente: cuando los valores de actualización de los pesos son
excesivamente grandes, existe el peligro de que estos excedan el rango (overflow) o la
precisión (underflow) del tipo de dato usado.
• Este problema se puede reducir con una tasa de aprendizaje pequeña, variables
objetivo escaladas y una función de pérdidas estándar, pero no es totalmente evitable.
• La técnica de recorte del gradiente limita los valores del gradiente antes de aplicarlos.
El recorte de gradiente ayuda a garantizar la estabilidad numérica y previene el
crecimiento excesivo de gradientes.
• Una técnica similar, aunque menos utilizada, es la de escalado del gradiente, la cual
normaliza el vector de gradiente de modo que su magnitud (norma) sea igual a un
valor determinado, como por ejemplo 1.0.
114
Ajuste de la tasa de aprendizaje
Los hiperparámetros que se pueden optimizar en SGD son la tasa de aprendizaje, el
momento, el decaimiento de pesos y el parámetro de Nesterov.
La tasa de aprendizaje controla el peso al final de cada lote, y el momento controla
cuánto dejar que la actualización anterior influya en la actualización de peso actual.
El decaimiento de pesos indica la disminución de la tasa de aprendizaje sobre cada
actualización, y el parámetro de Nesterov toma el valor "True" o "False" dependiendo de
si queremos aplicar el momento de Nesterov.
Los valores típicos de esos hiperparámetros son:
• Tasa de aprendizaje: 0.01
• Decaimiento de pesos: -10-6
• Momento: 0.9
• Nesterov: True.
115
Diseño de la red: Inicialización de hiperparámetros
Simplemente como orientación, se muestran a continuación recomendaciones y valores
típicos de los hiperparámetros de las redes:
Hiperparámetros de aprendizaje:
• Tasa de aprendizaje inicial: 0.01.
• Tamaño de los mini-lotes: 32 muestras (depende del nº de procesadores).
• Número de iteraciones de entrenamiento: fijarlo muy alto y usar early stopping.
• Momento: 0.9.
• Hiperparámetros distintos para cada capa: posible pero muy poco utilizado.
def crea_modelo(dropout=0.0):
...
return model
118
Optimización en grid de hiperparámetros
• La clase GridSearchCV de scikit-learn implementa la optimización de
hiparámetros en grid.
119
Optimización en grid de hiperparámetros
grid_params = dict(epochs=[10,20,30], init = ['normal', 'uniform'])
grid = GridSearchCV(estimator=modelo, param_grid=grid_params,
n_jobs=-1)
[Link](X, Y)
print("Mejor combinación de parámetros:", grid.best_params_)
120
Funciones de respuesta en Keras (callbacks)
• Las callbacks son clases preprogramadas que se aplicarán en determinadas etapas del
entrenamiento (fit), la evaluación (evaluate) o la predicción (predict).
• Se puede utilizar callbacks, por ejemplo, para obtener una vista de los estados internos y
las estadísticas del modelo durante el entrenamiento.
• Las callbacks de Keras ayudan a localizar errores de programación más rápidamente, a
construir mejores modelos, etc.
• Permiten visualizar como se va desenvolviendo el entrenamiento y ayudar a prevenir el
sobreajuste, implementando la finalización anticipada (early stopping) o personalizando
la tasa de aprendizaje en cada iteración.
• Se puede usar más de una callback simultáneamente.
• Se pueden escribir callbacks a medida.
• Todas las callbacks tienen acceso al valor de las pérdidas y las métricas utilizadas al final
del batch o epoch (diccionario logs).
• Además, tienen acceso a la red por medio del atributo [Link]: Este atributo
permite, por ejemplo, interrumpir el entrenamiento ([Link].stop_training=True),
cambiar hiperparámetros (por ejemplo, [Link].learning_rate), etc.
121
Funciones de respuesta en Keras (callbacks)
• Las siguientes son las callbacks predefinidas más importantes:
• CSVLogger: escribe un fichero de log en formato CSV con la información de las
repeticiones, exactitud y pérdida, para poder analizarlo posteriormente.
• ModelCheckpoint: guarda el modelo en formato hdf5 en el disco tras cada epoch.
Se puede especificar un fichero distinto para cada epoch. El fichero puede contener
las pérdidas o la exactitud (accuracy) como parte del nombre del fichero. Esto es
especialmente útil cuando las repeticiones (epochs) tardan mucho en completarse.
• EarlyStopping: hace que el entrenamiento termine cuando se detecte sobreajuste.
Se puede escoger distintas métricas para decidir el final del entrenamiento.
• ReduceLROnPlateau : permite reducir la tasa de aprendizaje cuando una métrica ha
dejado de mejorar.
• LearningRateScheduler: permite especificar la tasa de aprendizaje a utilizar en
función de la iteración (epoch).
• TensorBoard: escribe ficheros de log que se podrán visualizar posteriormente con la
herramienta de visualización TensorBoard.
• LambdaCallback: permite crear funciones de callback sencillas (si no, se pueden
crear funciones más complejas heredando de la clase [Link]). 122
Callbacks: EarlyStopping
123
Callbacks: EarlyStopping
Epoch 1/50
8000/8000 - 6s - loss: 1.5632 - accuracy: 0.5504 - val_loss: 1.1315 - val_accuracy: 0.6605
......
......
Epoch 10/50
8000/8000 - 2s - loss: 0.5283 - accuracy: 0.8213 - val_loss: 0.5539 - val_accuracy: 0.8170
Epoch 11/50
8000/8000 - 2s - loss: 0.5141 - accuracy: 0.8281 - val_loss: 0.5644 - val_accuracy: 0.7990
124
Callbacks: EarlyStopping
ARGUMENTOS:
monitor: Métrica a monitorizar. Valor por defecto: 'val_loss'.
patience: Número de epochs sin mejora antes de terminar. Valor por defecto: 0.
min_delta: Cambio mínimo (valor absoluto) de la métrica que se considera mejora.
mode: Valores posibles:
• 'min': para cuando la métrica ha dejado de decrecer.
• 'max': para cuando la métrica ha dejado de crecer.
• 'auto': la dirección la deduce de la métrica utilizada
Ejemplo:
es = EarlyStopping(
monitor='val_accuracy’,
patience=3,
min_delta=0.001,
mode='max')
125
Callbacks: CSVLogger
Escribe un fichero de log en formato CSV con la información de las repeticiones, exactitud
y pérdida, para poder analizarlo posteriormente.
126
Callbacks: CSVLogger
Fichero
generado por
el ejemplo
anterior:
129
Callbacks: ReduceLROnPlateau
130
Callbacks: LearningRateScheduler
Permite pasarle una función que devuelva la tasa de aprendizaje a utilizar en función de
la iteración (epoch).
131
Callbacks: LearningRateScheduler
LearningRateScheduler cambia la tasa de aprendizaje:
132
Callbacks: LearningRateScheduler
133
Callbacks: ModelCheckpoint
Los checkpoints permiten retomar un entrenamiento en el punto en el que se interrumpió.
Permiten guardar el estado del modelo y su entrenamiento (al igual que [Link]) o
sólo los pesos (como modelo.save_weights).
Para ello se utiliza la callback ModelCheckpoint.
Para continuar el entrenamiento de un modelo salvado por medio de un checkpoint,
simplemente hay que cargar los datos del fichero guardado por el checkpoint y volver a
llamar a fit. En este caso no se debe compilar el modelo cargado, ya entonces, el
entrenamiento comenzaría desde el principio.
Para la carga, se usan los métodos ya vistos, modelo.load_weights o load_model.
Algunos argumentos:
• filepath: Ruta en la que se guardará el fichero. Se puede indicar formato, como por
ejemplo, weights.{epoch:02d}-{val_loss:.2f}, que hará que el nombre contenga
el número de epoch y el la pérdida en evaluación.
• save_freq: tomará el valor 'epoch' o un entero. En el primer caso, se guarda el modelo
tras cada epoch. En el segundo, al final del número de batches indicados por el entero.
• save_weights_only: True, para guardar solo los pesos (modelo.save_weights(ruta))
y False para guardar todo ([Link](ruta)).
• save_best_only: si vale True, solo guarda el mejor modelo.
134
Callbacks: ModelCheckpoint
from [Link] import ModelCheckpoint
ruta="pesos-{epoch:02d}-{val_accuracy:.2f}.hdf5"
checkpoint = ModelCheckpoint(ruta, monitor='val_accuracy', verbose=1,
save_best_only=True, mode='max')
lista_cbs = [checkpoint]
[Link](X, Y, validation_Split = 0.33, epochs = 150, batch_size = 10,
callbacks = lista_cbs, verbose = 0)
135
Callbacks: LambdaCallback
Permite crear callbacks sencillas.
Se construye a partir de una serie de funciones anónimas que se llamarán en instantes de
tiempo concretos:
on_epoch_begin / on_epoch_end: Llamada al inicio/final de cada epoch.
• Argumentos posicionales: epoch (número de epoch) y logs, que contiene
los valores de pérdida (loss), exactitud, etc.
136
Callbacks: LambdaCallback
epoch_callback = LambdaCallback(
on_epoch_begin=lambda ep,logs: print(Inicio epoch {}'.format(ep+1)))
batch_perd_callback = LambdaCallback(
on_batch_end=lambda batch,logs: print('\nTras el batch nº {}, pérdida:
{:7.2f}.'.format(batch, logs['loss'])))
fin_entr_callback = LambdaCallback(
on_train_end = lambda logs: print('Entrenamiento finalizado'))
…
historial = [Link](
X_entr, y_entr, validation_split=0.20,
verbose=False, epochs=2, batch_size=2000,
callbacks=[epoch_callback, batch_perd_callback, fin_entr_callback]))
137
Callbacks: LambdaCallback
Inicio epoch 1
Tras el batch nº 0, pérdida: 0.41
Tras el batch nº 1, pérdida: 0.41
Tras el batch nº 2, pérdida: 0.42
Tras el batch nº 3, pérdida: 0.39
Inicio epoch 2
Tras el batch nº 0, pérdida: 0.40
Tras el batch nº 1, pérdida: 0.42
Tras el batch nº 2, pérdida: 0.41
Tras el batch nº 3, pérdida: 0.41
Entrenamiento finalizado
138
Matriz de confusión
La matriz de confusión, también llamada tabla de contingencia, es una herramienta que
nos muestra el desempeño de un algoritmo de clasificación, describiendo cómo se
distribuyen los valores reales y nuestras predicciones:
Suponiendo que la predicción de la red es positivo (cierto) o negativo (falso):
• Verdaderos positivos: Número de predicciones positivas que realmente lo eran.
• Verdaderos negativos: Número de predicciones negativas que realmente lo eran.
• Falsos positivos: Número de predicciones positivas cuando realmente el valor es
tendría que ser negativo. Se les denomina errores de tipo I.
• Falsos negativos: Número de predicciones negativas cuando realmente el valor es
positivo. A estos casos también se les denomina errores de tipo II.
Predicción
Negativo (0) TN FP
Valor
real
Positivo (1) FN TP
139
Matriz de confusión
Basándonos en esas cuatro categorías, se pueden calcular las siguientes métricas:
• Exactitud (accuracy): Porcentaje total de los aciertos de nuestro modelo.
• Sensibilidad (recall ): Probabilidad de clasificar correctamente los casos positivos.
• Precisión (valor de predicción positiva): Probabilidad de que una predicción positiva sea
correcta
• Especifidad (specificity): Probabilidad de clasificar correctamente los casos negativos.
• Valor de predicción negativa: Probabilidad de que una predicción negativa sea correcta.
• Tasa de falso positivo (False positive rate): probabilidad de clasificar incorrectamente un
negativo.
• Error de clasificación: Porcentaje de errores del modelo.
CURVAS
• Las curvas ROC muestran la relación entre la tasa de verdaderos positivos y la de falsos
positivos usando distintos umbrales de probabilidad.
• Las curvas de Precisión-Sensibilidad muestran la relación entre ambos parámetros para
distintos umbrales de probabilidad.
• Las curvas ROC son útiles cuando las observaciones entre ambas clases están
equilibradas, mientras que las curvas de Precisión-Sensibilidad son más útiles en
conjuntos de datos desequilibrados.
Medidas a partir de la matriz de confusión
𝑉𝑉𝑃𝑃 𝑉𝑉𝑉𝑉
𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆 (𝑅𝑅𝑅𝑅𝑅𝑅𝑅𝑅𝑅𝑅𝑅𝑅, 𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆, 𝑇𝑇𝑇𝑇𝑇𝑇𝑇𝑇 𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝 𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟 ) = =
𝑇𝑇𝑇𝑇𝑇𝑇𝑇𝑇𝑇𝑇 𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝 𝑉𝑉𝑃𝑃 + 𝐹𝐹𝐹𝐹
𝑉𝑉𝑉𝑉 𝑉𝑉𝑉𝑉
𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃 (𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃) = =
𝑇𝑇𝑇𝑇𝑇𝑇𝑇𝑇𝑇𝑇 𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐 𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝 𝑉𝑉𝑉𝑉 + 𝐹𝐹𝐹𝐹
𝑉𝑉𝑃𝑃 + 𝑉𝑉𝑁𝑁 𝑉𝑉𝑃𝑃 + 𝑉𝑉𝑁𝑁
𝐸𝐸𝐸𝐸𝐸𝐸𝐸𝐸𝐸𝐸𝐸𝐸𝐸𝐸𝐸𝐸𝐸𝐸 (𝐴𝐴𝐴𝐴𝐴𝐴𝐴𝐴𝐴𝐴𝐴𝐴𝐴𝐴𝐴𝐴) = =
𝑇𝑇𝑇𝑇𝑇𝑇𝑇𝑇𝑇𝑇 𝐹𝐹𝐹𝐹 + 𝐹𝐹𝐹𝐹 + 𝑉𝑉𝑉𝑉 + 𝑉𝑉𝑉𝑉
𝐹𝐹𝐹𝐹 + 𝐹𝐹𝐹𝐹 𝐹𝐹𝐹𝐹 + 𝐹𝐹𝐹𝐹
𝑇𝑇𝑇𝑇𝑇𝑇𝑇𝑇 𝑑𝑑𝑑𝑑 𝑒𝑒𝑒𝑒𝑒𝑒𝑒𝑒𝑒𝑒 𝐸𝐸𝐸𝐸𝐸𝐸𝐸𝐸𝐸𝐸 𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟 = =
𝑇𝑇𝑇𝑇𝑇𝑇𝑇𝑇𝑇𝑇 𝐹𝐹𝐹𝐹 + 𝐹𝐹𝐹𝐹 + 𝑉𝑉𝑉𝑉 + 𝑉𝑉𝑉𝑉
𝑉𝑉𝑉𝑉 𝑉𝑉𝑉𝑉
𝐸𝐸𝐸𝐸𝐸𝐸𝐸𝐸𝐸𝐸𝐸𝐸𝐸𝐸𝐸𝐸𝐸𝐸𝐸𝐸𝐸𝐸𝐸𝐸𝐸𝐸 (𝑆𝑆𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝) = =
𝑇𝑇𝑇𝑇𝑇𝑇𝑇𝑇𝑇𝑇 𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛 𝑉𝑉𝑉𝑉 + 𝐹𝐹𝐹𝐹
𝑉𝑉𝑉𝑉 𝑉𝑉𝑉𝑉
𝑇𝑇𝑇𝑇𝑇𝑇𝑇𝑇 𝑑𝑑𝑑𝑑 𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝 𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛 = =
𝑇𝑇𝑇𝑇𝑇𝑇𝑇𝑇𝑇𝑇 𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐 𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛 𝑉𝑉𝑉𝑉 + 𝐹𝐹𝐹𝐹
𝐹𝐹𝐹𝐹 𝐹𝐹𝐹𝐹
𝑇𝑇𝑇𝑇𝑇𝑇𝑇𝑇 𝑑𝑑𝑑𝑑 𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓 𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝 = =
𝑇𝑇𝑇𝑇𝑇𝑇𝑇𝑇𝑇𝑇 𝑑𝑑𝑑𝑑 𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛 𝑉𝑉𝑉𝑉 + 𝐹𝐹𝐹𝐹
𝑉𝑉𝑉𝑉 · 𝑉𝑉𝑉𝑉 − 𝐹𝐹𝐹𝐹 · 𝐹𝐹𝐹𝐹
𝐶𝐶𝐶𝐶𝐶𝐶𝐶𝐶. 𝑑𝑑𝑑𝑑 𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐 𝑑𝑑𝑑𝑑 𝑀𝑀𝑀𝑀𝑀𝑀𝑀𝑀𝑀𝑀𝑀𝑀𝑀𝑀𝑀 (𝑀𝑀𝑀𝑀𝑀𝑀) =
(𝑉𝑉𝑉𝑉 + 𝐹𝐹𝐹𝐹)(𝑉𝑉𝑉𝑉 + 𝐹𝐹𝐹𝐹)(𝑉𝑉𝑉𝑉 + 𝐹𝐹𝐹𝐹)(𝑉𝑉𝑉𝑉 + 𝐹𝐹𝐹𝐹)
(1 + 𝛽𝛽 2 )(𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃 · 𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆)
𝐹𝐹 − 𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠 = 𝐹𝐹𝛽𝛽 = 𝑐𝑐𝑐𝑐𝑐𝑐 𝛽𝛽 = 0.5, 1 ó 2
𝛽𝛽 2 · 𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃 + 𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆) 141
Medidas a partir de la matriz de confusión
F-1 Score
Combina precisión y sensibilidad en una sola métrica por ello es de gran utilidad cuando la
distribución de las clases es desigual. Es especialmente interesante cuando se busca
equilibrio entre precisión y sensibilidad.
2 · 𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃 · 𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆
𝐹𝐹𝐹 − 𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠 =
𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃 + 𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆
Conforme a estas métricas tenemos cuatro casos posibles para cada clase:
• Alta precisión y alta sensibilidad: el modelo maneja perfectamente esa clase
• Alta precisión y baja sensibilidad: el modelo no detecta la clase muy bien, pero cuando
lo hace es altamente fiable.
• Baja precisión y alta sensibilidad: La clase detecta bien la clase pero también incluye
muestras de otras clases.
• Baja precisión y baja sensibilidad : El modelo no logra clasificar la clase correctamente.
Cuando tenemos un dataset con desequilibrio, suele ocurrir que obtenemos un alto valor
de precisión en la clase mayoritaria y una baja sensibilidad en la clase minoritaria.
142
Medidas a partir de la matriz de confusión
Matriz de confusión
Verdaderos negativos Falsos positivos
8 2
Falsos negativos Verdaderos positivos
4 6
143
Curvas ROC
La curva ROC (Receiver Operating Characteristic o Característica Operativa del Receptor) es
una representación gráfica de la relación entre la tasa de falsos positivos (eje x) y los
verdaderos positivos o sensibilidad (recall) para distintos valores del umbral (entre 0 y 1).
La tasa de falsos positivos es la proporción entre los falsos positivos y el total de negativos
reales, es decir, el porcentaje de negativos no detectados). Se denomina también como
tasa de falsa alarma y como especificidad invertida, ya que se calcula como: tasa de falsos
positivos = 1−especificidad.
De modo intuitivo, representa la falsa alarma frente a los aciertos.
144
Matriz de confusión
Sensibilidad ↑ Sensibilidad ↓
Especificidad ↓ Especificidad ↑
145
Curvas Precisión-Sensibilidad
La curva Precisión-Sensibilidad representa la relación entre ambos valores para distintos
valores del umbral (entre 0 y 1). Es más útil que la curva ROC cuando hay desequilibrio en
la distribución de las dos clases.
Conviene destacar que no se tienen en cuenta los verdaderos negativos, porque el
objetivo es detectar la calase minoritaria (verdaderos).
146
Análisis de error
Supongamos el caso de una aplicación donde los datos de entrenamiento y los de
validación tienen distinta distribución: supongamos que disponemos de 10K imágenes
reales obtenidas de una app móvil y completamos con 200K imágenes obtenidas de
Internet. Estas últimas probablemente tendrán mucha mayor calidad que las reales.
Si los tres datasets (entrenamiento, validación y pruebas o test) contienen ambos
tipos de imagen en la misma proporción, a pesar de que los tres tendrán la misma
distribución, la validación del sistema se hará con una mayoría de imágenes que no
serán las que se encontrará el sistema en producción.
149
Proceso completo de diseño de una red neuronal
CAPAS OCULTAS Y SU NÚMERO DE UNIDADES:
• Depende mucho del problema y la arquitectura de la red. En general, entre una y cinco
capas suele ser suficiente para la mayoría de los problemas.
• Por eso puede ser interesante empezar con entre una y cinco capas y hasta 100
neuronas por capa. A continuación se incrementan ambos hasta que la red sobreajuste.
• Se puede hacer un seguimiento de la pérdida y la exactitud para ver qué capas o
neuronas ocultas llevan a la menor pérdida.
• Con frecuencia se consigue mejor rendimiento aumentando el número de capas que el
número de neuronas de cada capas.
• Para trabajar con imágenes o reconocimiento de habla, es frecuente trabajar con
modelos pre-entrenados (YOLO, ResNet, …), de modo que solo unas pocas capas
necesitan entrenamiento.
• En general, se puede trabajar con el mismo número de neuronas en todas las capas
ocultas. Con algunos datasets se usará una primera capa grande, seguida de capas más
pequeñas.
• Si la red es demasiado pequeña, no será capaz de aprender los patrones subyacentes.
Un enfoque para evitarlo es empezar con una red grande número de capas y de
neuronas y después usar dropout y parade temprana (early stopping). Es
recommendable probar distintas configuraciones.
• Otra estrategia es conseguir una red que sobreajuste y luego regularizar. 150
Proceso completo de diseño de una red neuronal
FUNCIONES DE PÉRDIDA (loss funtions)
• Regresión: Error cuadrático medio, excepto si hay muchos valores atípicos (outliers), en
cuyo caso se prefiere el error medio absoluto o la función de Huber.
• Clasificación: la entropía cruzada es válida en la mayoría de los casos.
TAMAÑO DEL MINILOTE
• Salvo casos muy excepcionales cuando se dispone de mucha potencia de cálculo,
convienen lotes grandes (decenas de miles de ejemplos para imágenes) o incluso
millones (para aprendizaje por refuerzo), aunque presenta problemas con la tasa de
aprendizaje y, por tanto, con la convergencia.
• La consecuencia es que mini-lotes con un tamaño de 32 suelen ser prácticos.
• Excepto si se dispone de una capacidad de cálculo enorme, la recomendación podría ser
empezar con lotes pequeños e ir aumentándolos poco a poco, monitorizando el
rendimiento.
NÚMERO DE REPETICIONES (epochs)
• Es recomendable empezar con un número de repeticiones muy grande y usar parada
temprana (early stopping) cuando el comportamiento empieza a empeorar. 151
Proceso completo de diseño de una red neuronal
ESCALADO DE CARACTERÍSTICAS (FEATURES) DE LOS DATOS DE ENTRADA
• Todas las características (features) deberían tener una escala similar antes de
introducirlas a la red. Esto acelera la convergencia.
TASA DE APRENDIZAJE
• Es un parámetro crítico para la red.
• Se debe empezar por un valor pequeño (10-6) e ir multiplicándolo lentamente por una
constante hasta que alcanza un valor muy alto (10, por ejemplo). Medir el rendimiento
del sistema frente a la tasa de aprendizaje, (su logaritmo, típicamente) para escoger el
mejor valor.
• Es de destacar el método de tasas de aprendizaje cíclicas de Leslie Smith: incrementarla
hasta que se disparan las pérdidas. La tasa elegida será un orden inferior a la que
minimiza las pérdidas.
MOMENTO
• En general, conviene un valor de momento cercano a uno. Un buen valor inicial para
datasets pequeños puede ser 0.9, aumentando progresivamente para tamaños mayores.
• Es útil activar el parámetro de Nesterov, ya que el momento se calculará teniendo en
cuenta el gradiente de la función de coste.
152
Proceso completo de diseño de una red neuronal
DESVANECIMIENTO Y EXPLOSIÓN DE GRADIENTES
• Funciones de activación
• Capas ocultas:
• En general, el rendimiento mejora en este orden (de peor a major): logistic →
tanh → ReLU → Leaky ReLU → ELU → SELU.
• ReLU es la más popular y por tanto la mejor opción inicial a pesar de que está
perdiendo peso progresivamente en favor de ELU y SELU.
• Es interesante recordar:
• Para combatir el sobre-ajuste: ReLU
• Para reducir la latencia en tiempo de ejecución: Leaky ReLU
• Para datasets de entrenamiento muy grandes: PReLU (parametric ReLU)
• Para tiempos de inferencia rápidos: Leaky ReLU
• Si la red no autonormaliza: ELU
• Si queremos una función de activación general robusta: SELU
• Es interesante probar con diferentes funciones de activación.
153
Proceso completo de diseño de una red neuronal
• Activación en la capa de salida:
• Regresión: En este tipo de problemas no se necesita ninguna función de activación
en la capa de salida (también llamada activación lineal). En caso de necesitar que la
salida esté entre -1 y 1 se puede usar tanh, o la función logística (f(x)=1/(1+exp(−x
)) para rangos entre 0 y 1 (que es una generalización de la sigmoide). En los casos
en los que se necesite sólo salidas positivas, se puede utilizar la activación softplus
(f(x)=ln(1+exp x)), que resulta ser la integral de la función logística.
• Clasificación: se usaría la función sigmoide para clasificación binaria (asegura salida
entre 0 y 1) y softmax para clasificación multiclase (asegura que las probabilidades
de salida suman 1).
• Inicialización de los pesos
• Una inicialización adecuada de los pesos acelera considerablemente la velocidad de
convergencia. El tipo de inicialización depende de la función de activación.
Sugerencias:
• ReLU o Leaky ReLU: inicialización He.
• SELU o ELU: inicialización LeCun.
• Softmax, función logística (sigmoide), o tanh: inicialización Xavier (Glorot).
• La mayoría de los métodos de inicialización usan distribuciones normales o uniformes.
154
Proceso completo de diseño de una red neuronal
• Normalización de lotes (BatchNorm)
• Usar BatchNorm nos permite utilizar tasas de aprendizaje mayores, lo cual acelera
la convergencia y reduce los problemas de desvanecimiento del gradiente.
• El inconveniente es que incrementa ligeramente los tiempos de entrenamiento
debido a que aumenta la carga computacional necesaria en cada capa.
• Recorte de gradiente
• Se recomienda probar diferentes valores del umbral.
• Parada temprana (Early Stopping)
DROPOUT
• Hace la red más robusta, distribuyendo el conocimiento por toda la red, de modo que no
dependa de neuronas concretas.
• La proporción de dropout suele estar alrededor de 0.5, siendo típico 0.3 para RNNs y 0.5
para CNNs.
• Cuanto mayor es una capa, mayor ratio de dropout se usa.
• Hay que evitar aumentar tanto la ratio que se entre en subajuste (underfitting).
• Se debe probar con distintos valores en la primeras capas.
• No se usa en las capas de salida. 155
Aprendizaje por transferencia (transfer learning)
Con el aprendizaje por transferencia, en lugar de comenzar el proceso de aprendizaje
desde cero, se comienza haciendo uso de modelos pre-entrenados: modelos que fueron
entrenados con un ingente conjunto de datos de referencia para resolver un problema
similar al que queremos abordar.
Debido al coste computacional del entrenamiento de tales modelos, así como en la
complejidad a la hora de elegir la arquitectura óptima, el Transfer Learning de modelos
bien conocidos y precisos se ha convertido es una práctica común, sobre todo cuando se
trabaja en análisis de imágenes.
156
Arquitecturas
En función del tipo de datos que manejen y del tipo de resultado que se busque de una red
neuronal, existen múltiples topologías de redes neuronales.
Estas arquitecturas se pueden organizar en cuatro grandes grupos:
• Redes pre-entrenadas sin supervisión (Unsupervised Pretrained Networks – UPN ). En
esta categoría destacan tres tipos de redes:
• Autoencoders
• Redes de creencia profunda (Deep Belief Networks – DBN )
• Redes generativa antagónica (Generative Adversarial Networks – GAN )
• Redes neuronales convolucionales (Convolutional Neural Networks – CNN )
• Redes neuronales recurrentes (Recurrent Neural Networks)
157
Redes neuronales convolucionales (CNN)
• Objetivo: detectar características de alto nivel en los datos por medio de convoluciones.
• Son la mejor opción para el reconocimiento de objetos en imágenes.
• También es una arquitectura eficaz para el análisis de sonido y de texto, cuando se
consideran las palabras como unidades de texto discretas.
• Tienden a ser más útiles cuando los datos de entrada tienen algún tipo de estructura.
Ejemplos de esto son las imágenes y el audio, donde aparecen patrones de forma
repetida y, valores de entrada vecinos están relacionados.
• Aplicaciones:
• Procesado de imagen,
reconocimiento y clasificación
• Reconocimiento de vídeo
• Procesado de lenguaje natural
• Reconocimiento de patrones
• Motores de recomendación
CIFAR-10 Dataset:
Conjunto de 60.000 imágenes en
color de 32x32 píxeles divididas en
10 clases (6.000 imágenes por clase)
158
Redes neuronales convolucionales (CNN)
• Convolución: es una operación donde se multiplica, posición por posición, una región de
la imagen por una matriz de valores llamado núcleo (kernel en inglés).
La convolución permite detectar bordes y esquinas en las imágenes.
• Pooling: Operación que reduce una imagen dividiéndola en áreas y sustituyendo cada
una de ellas por uno de los valores (máximo o promedio, típicamente).
159
Redes neuronales convolucionales (CNN)
• La arquitectura de una CNN es una secuencia de operaciones de convolución y pooling,
que termina en una o varias capas densamente conectadas y finalmente una activación
softmax si la red se usa para clasificación multiclase (p. ej. detectar si enla escena hay
peatones, semáforos, vehículos, etc.) o una activación binaria si es un problema de
clasificación binaria (p. ej. ¿hay algún peatón en la escena?)
• La combinación de los distintos componentes de la red genera distintas arquitecturas:
VGG, ResNet, Inception, etc.
160
Redes neuronales convolucionales (CNN)
161
Aprendizaje por transferencia en CNNs
Dado que el las primeras capas convolucionales de las CNN extraen características básica
de la imagen (rectas, círculos, … ) es típico “congelar” esas primeras capas, y re-entrenar
las últimas. Cuanto más se parezcan los datos del preentrenamiento a los nuevos datos,
más capas se podrán congelar, y por tanto, menor tiempo de entrenamiento.
162
Redes neuronales convolucionales (CNN)
ResNeXt-50
163
Redes neuronales convolucionales (CNN)
GoogleNet
164
Redes neuronales recurrentes (RNN)
• Las redes neuronales recurrentes, o Recurrent Neural Networks en inglés, tienen como
objetivo el análisis de series temporales de datos, permitiendo tratar la dimensión tiempo.
Su objetivo es reconocer patrones secuenciales y predecir el escenario más probable.
• Se usan para el procesado de sonido, lenguaje natural escrito, series de datos temporales.
• También se entrenan con los métodos de descenso de gradiente y retropropagación
• A diferencia de las redes tradicionales, en éstas, cada capa oculta conserva información
secuencial de los pasos previos, de forma que la salida de pasos anteriores se introducen
como entradas del paso actual, usando los mismos pesos y sesgos (bias) de modo
repetido.
• Las redes de propagación hacia adelante (feed-forward networks) generan una salida para
cada entrada (relación 1 a 1). En el caso de las RNNs, esta restricción no se cumple.
• Las RNNs se usan para análisis de sentimientos (sentiment analysis), subtitulado de
imágenes, reconocimiento del habla, procesado de lenguaje natural, traducción
automática, predicción de búsquedas, clasificación de video, etc.
165
Redes neuronales recurrentes (RNN)
• Las redes LSTM (Long-short Term Memory) representan una de las configuraciones más
utilizadas de redes RNN.
166
Autoencoders
• Son un tipo concreto de red neuronal prealimentada (feedforward neural network) en la
cual la salida (objetivo) es igual a la entrada: comprime la entrada en un código de menor
dimensión, de modo que se pueda reconstruir la entrada a partir de dicho código.
• De este modo, el código se convierte en una compresión (o resumen) de la entrada.
• Este codificación se conoce también como representación de espacio latente (latent-space
representation).
• Un autoencoder está compuesto por tres elementos:
• Codificador: comprime la
entrada y genera el código.
• Código: representación
comprimida de la entrada
• Descodificador: reconstruye
la entrada a partir
únicamente del código.
167
Autoencoders
• Hay cuatro hiperparámetros que hay que establecer antes de entrenar un autoencoder:
• Tamaño del código: número de nodos de la capa intermedia. Cuanto menor sea el
tamaño, mayor la compresión.
• Número de capas: puede tener cualquier profundidad.
• Número de nodos por capa: habitualmente usan capas de tamaño decreciente hasta
una capa y a partir de ahí vuelve a aumentar su tamaño.
• Función de pérdidas: típicamente se usa error medio cuadrático o entropía binaria
cruzada.
• Sus principales usos son para eliminación de ruido y outliers, y reducción de dimensiones.
168
Redes generativa antagónicas (GAN)
• El objetivo principal de las GAN es generar datos desde cero: dado un conjunto de datos
de entrenamiento, la red descubre y aprende patrones en ellos y aprende así a generar
nuevos datos.
• Para ello las GAN emplean dos redes neuronales y las enfrentan. La primera red es el
"generador" y la segunda es el "discriminador".
• Ambas redes fueron entrenadas con un mismo conjunto de datos, pero la primera (red
generadora) debe intentar crear variaciones de los datos que ya ha visto. Por ejemplo, en
el caso de los rostros de personas que no existen, debe crear variaciones de los rostros
que ya ha visto.
• La red discriminadora debe identificar si ese rostro que está viendo forma parte del
entrenamiento original o si es un rostro falso que creó la red generativa. Cuanto más
actúan, la red generativa se hace mejor creando y a la red discriminadora se le hace más
difícil detectar si el rostro es falso.
• Hasta ahora las GAN se han usado principalmente en imágenes, aunque también con
música.
169
Redes generativa antagónicas (GAN)
Rostros
generados
mediante
una GAN.
Generación
de imágenes a
partir de
descripciones
de texto.
170
Aprendizaje por refuerzo
En aprendizaje por refuerzo (Reinforcement Learning) no tenemos una “etiqueta de
salida”, por lo que no es de tipo supervisado y si bien estos algoritmos aprenden por sí
mismos, tampoco son de tipo no supervisado, en donde se intenta clasificar grupos
teniendo en cuenta alguna distancia entre muestras.
El Reinforcement Learning intentará hacer aprender a la máquina basándose en un
esquema de “premios y castigos” en un entorno en donde hay que tomar acciones y
que está afectado por múltiples variables que cambian con el tiempo.
171
Aprendizaje por refuerzo: Componentes
El Reinforcement Learning define los elementos “agente” y “entorno”:
• Agente: será el modelo que se quiere entrenar y que aprenda a tomar decisiones.
• Entorno: representa en ambiente donde interactúa y contiene las limitaciones y
reglas aplicables en cada momento.
acciones
estado
recompensas
agente entorno 172
Aprendizaje por refuerzo: Exploración
Dilema de exploración/explotación
Una vez que el agente descubre que hay acciones que dan recompensa, podría
renunciar a explorar acciones nuevas, y recurrir a las que sabe que son recompensadas.
Es necesario lograr un equilibrio entre “explorar lo desconocido y explotar los recursos”.
El agente explorará el ambiente e irá aprendiendo “cómo moverse” y cómo ganar
recompensas (y evitar las penalizaciones). Al final almacenará el conocimiento en unas
normas también llamadas “políticas“.
acciones
estado
recompensas
agente entorno
173
Deep Reinforcement Learning
recompensa (r)
174
Redes Neuronales
Convolucionales
CNN
175
Redes Neuronales Convolucionales (CNN)
• Objetivo: detectar características de alto nivel en los datos por medio de convoluciones.
• Son la mejor opción para el reconocimiento de objetos en imágenes.
• También es una arquitectura eficaz para el análisis de sonido y de texto, cuando se
consideran las palabras como unidades de texto discretas.
• Tienden a ser más útiles cuando los datos de entrada tienen algún tipo de estructura.
Ejemplos de esto son las imágenes y el audio, donde aparecen patrones de forma
repetida y, valores de entrada vecinos están relacionados.
• Aplicaciones:
• Procesado de imagen, reconocimiento y clasificación
• Reconocimiento de vídeo
• Procesado de lenguaje natural
• Reconocimiento de patrones
• Motores de recomendación
176
Objetivos de las CNN
Clasificación de una imagen:
• Predecir el tipo o clase de una imagen. Por ejemplo, reconocer un dígito.
• Entrada: imagen con un único objeto.
• Salida: una etiqueta de clase.
Localización de objetos:
• Localizar la presencia de objetos en la imagen e indicar su ubicación
• Entrada: imagen con uno o más objetos.
• Salida: uno o más cuadros delimitadores (bounding boxes) indicando la ubicación de
los objetos detectados.
Detección de objetos:
• Igual que el anterior, pero indicando la clase de cada objeto detectado.
• La salida será un conjunto de cuadros delimitadores con una etiqueta cada uno.
177
Representación de las imágenes
Los ordenadores perciben las imágenes como matrices bidimensionales de valores
numéricos.
• En el caso de imágenes en escala de gris, cada imagen sólo necesita una matriz
bidimensional con los valores de intensidad de cada pixel.
1 pixel
178
Representación de las imágenes
• Las imágenes en color se suelen representar con tres matrices, donde cada una de ellas
representa la intensidad de las componentes roja, verde y azul de cada pixel.
179
Transformaciones morfológicas
erosión dilatación
apertura cierre
(opening) (closing)
gradiente
180
Transformada de Hough
181
Detección de bordes (edge detection)
Identificación de los píxeles en los cuales hay un cambio brusco (discontinuidad) en el brillo
de la imagen.
182
Aumento del contraste (sharpening)
183
Eliminación de ruido
El ruido digital es la variación aleatoria (que no se corresponde con la realidad) del
brillo o el color en imágenes digitales debido al dispositivo de entrada.
184
Enfoque
185
Segmentación
La segmentación de imágenes es el proceso de particionar una imagen en partes o regiones.
186
Combinación de técnicas
187
Transformaciones geométricas: escalado (zoom)
188
Transformaciones geométricas: rotación
189
Transformaciones geométricas: shearing
190
Transformaciones geométricas: perspectiva
191
Convolución
• La convolución es una operación donde se multiplica, posición por posición, una región
de la imagen por una matriz de valores llamado filtro, núcleo o kernel.
• La convolución permite extraer características de las imágenes, como por ejemplo
bordes y esquinas. El resultado se conoce como mapa de características (feature map).
192
Convolución y detección de bordes
193
Relleno de la convolución
La imagen resultante de la convolución tendrá dimensiones menores que la imagen
original.
• Si por ejemplo, la imagen original tiene dimensiones n x n y el filtro f x f, la imagen
resultante será (n-f-1) x (n-f-1).
• En algunos casos se aplica un relleno con ceros alrededor de la imagen original. Si no hay
relleno, se denomina “convolución válida”
• Si el relleno consigue que la imagen resultante del filtrado tenga las mismas dimensiones
que el original la convolución se denomina “same convolution”.
194
Convolución de imágenes RGB
196
Capas convolucionales
Las primera capas de una CNN se usan para aplicar convoluciones:
• El paso (stride) indica cada cuántos píxeles se aplica el filtro. Si es mayor que uno, la
imagen de salida será de un tamaño menor a la original.
• Una primera capa de neuronas ocultas conectadas a las neuronas de la capa de entrada
realizará las operaciones convolucionales. No todas las neuronas de entrada están
conectadas con todas las neuronas de este primer nivel de neuronas ocultas.
• En general, sobre la imagen original se aplican más de un filtro, obteniendo una nueva
imagen con una profundidad (depth) igual al número de filtros aplicados.
• A cada pixel resultante se le aplica una función no lineal, que típicamente será la función
de activación ReLU: convierte en cero los valores negativos.
197
Capas convolucionales: dimensiones
198
Pooling
Esta operación reduce las dimensiones de la imagen dividiéndola en áreas y sustituyendo
cada una de ellas por un único valor, que suele ser el máximo, la suma o el promedio de los
valores del área.
Se utilizan capas de muestreo (pooling, downsampling o subsampling) para reducir las
cantidad de datos con los que se trabaja y, por tanto el tamaño de la red, conservando la
información.
199
Capas totalmente conectadas y Flatten
Tras las capas de convolución y muestreo, se utilizan un conjunto de capas totalmente
conectadas para aprender los patrones resultantes de las operaciones previas.
El proceso de entrenamiento, además de ajustar los pesos de las neuronas del MLP
final, también debe aprender el valor de los contenidos de los filtros de las fases de
convolución.
201
Redes neuronales convolucionales (CNN)
202
Redes neuronales convolucionales
203
Programación de una CNN
El proceso de construcción y entrenamiento de una CNN es parecido al de una MLP:
1. Redimensionar los datos de entrada usando el método reshape().
2. Para clasificación multiclase, aplicar la codificación one-hot usando la función
to_categorical().
3. El dataset se convierte a un array de Numpy.
4. Construir el modelo y añadir las capas necesarias:
• Capa convolucional: Conv2D()
• Capas de muestreo (pooling): MaxPooling2D(), AveragePooling2D...
• Capas de "aplanamiento": Flatten().
• Capas totalmente conectadas: Dense()
• Otras capas MLP: Dropout(), BatchNorm(), etc.
5. Compilar el modelo: compile()
6. Entrenar el modelo con fit()
7. Generar predicciones con predict().
204
Programación de una CNN
modelo = Sequential()
[Link](Conv2D(32, kernel_size=(5, 5), strides=(1, 1),
activation='relu', input_shape=dims_entrada))
[Link](MaxPooling2D(pool_size=(2, 2), strides=(2, 2)))
[Link](Conv2D(64, (5, 5), activation='relu'))
[Link](MaxPooling2D(pool_size=(2, 2)))
[Link](Flatten())
[Link](Dense(1000, activation='relu'))
[Link](Dense(num_clases, activation='softmax'))
[Link](loss=[Link].categorical_crossentropy,
optimizer=[Link](lr=0.01),
metrics=['accuracy'])
206
Image augmentation con Keras
• La clase ImageDataGenerator de Keras realiza Image augmentation de forma
sencilla.
• Proporciona muchas transformaciones diferentes: cambio de brillo, rotación,
estandarización, desplazamientos, etc.
• Esta clase trabaja en tiempo real: genera las nuevas imágenes durante el proceso
de entrenamiento.
• En cada iteración (epoch), ImageDataGenerator devuelve imágenes distintas, sin
añadirlas al dataset.
• Consume muy poca memoria, ya que carga las imágenes por lotes, en lugar de
todo el dataset a la vez.
• Creación e inicialización del ImageDataGenerator:
datagen = ImageDataGenerator(rotation_range=10,
width_shift_range=0.2,
height_shift_range=0.2,
zoom_range=0.2,
horizontal_flip=True)
207
Image augmentation con Keras
El método flow_from_directory() de ImageDataGenerator lee las imágenes directamente
del directorio y las aumenta durante el entrenamiento.
Este método necesita que las imágenes de cada clase estén en su propio directorio, y todas
ellas contenidas en la misma carpeta:
gen_entr = datagen.flow_from_directory(
directory= 'dataset/train/',
target_size=(400, 400), # redimensionar a este tamaño
color_mode="rgb", # trabajar con rgb (color), 'grayscale' (gris)…
batch_size=1, # nº imags. a extraer de cada carpeta para cada lote
class_mode="binary", # classes a predecir (tb: 'categorical')
seed=2020 # para que sea repetible
)
208
Image augmentation con Keras
El método flow_from_dataframe() de ImageDataGenerator se utiliza cuando todas las
imágenes están en el mismo directorio y el nombre y su clase están en un DataFrame de
Pandas.
Típicamente, existe un fichero CSV con la el nombre de cada imagen y la clase a la que
pertenece. Este fichero se cargaría en un DataFrame de Pandas.
gen_entr = datagen.flow_from_dataframe(
dataframe=df_train, # data frame con la info de cada imagen
directory='dataset/imagenes/', # directorio con las imágenes
x_col="image_names", # columna del dataframe con el nombre de la imag
y_col="emergency_or_not", # columna del df con la clase (str)
class_mode="binary", # binary o categorical
target_size=(200, 200),
batch_size=1,
rescale=1.0/255,
seed=1234
)
209
Image augmentation con Keras
El método flow() lee las imágenes de arrays de Numpy. Por ejemplo, cuando se carga el
dataset cifar 10 de Keras:
• Las entradas (x_entr en este ejemplo) debe tener las siguientes dimensiones:
(num_ejemplos, ancho, alto, canales)
• Las clases (y_entr en este ejemplo) debe tener las siguientes dimensiones:
(num_ejemplos, clase)
210
Aprendizaje por transferencia en CNNs
Algunas redes convolucionales
necesitan días o semanas de
entrenamiento.
Las primeras capas
convolucionales de las CNN
extraen características básicas
de la imagen (rectas, círculos,
etc. ) que son comunes a
cualquier tipo de imagen.
211
Aprendizaje por transferencia en CNNs
El aprendizaje por transferencia (transfer learning) consiste en partir de una red
preentrenada y luego aplicar una de las dos siguientes estrategias:
• Feature extraction: se mantienen la primeras capas (base convolucional) sin cambios y
se reentrenan las últimas capas (clasificador), que suelen ser capas densas (fully
connected) y que son específicas para las imágenes que se quieren identificar:
entradas entradas
base base
convolucional convolucional
preentrenada preentrenada
clasificador nuevo
preentrenado clasificador
base
base
convolucional
convolucional
preentrenada
preentrenada
clasificador nuevo
preentrenado clasificador
predicciones predicciones
213
Aprendizaje por transferencia en Keras
Keras permiten aplicar esta técnica de manera sencilla:
• Dispone de modelos preentrenados que se pueden descargar.
• Permite indicar qué capas son entrenables (trainable layers) y cuales no (frozen layers).
Entre los modelos preentrenados disponibles en Keras, tenemos: Xception, VGG16, VGG19,
ResNet50, InceptionV3, InceptionResNetV2, MobileNet, MobileNetV2, DenseNet y
NASNet.
214
Feature extraction con Keras
import pandas as pd
...
from [Link] import VGG16
from keras import models
from keras import layers
from [Link] import ImageDataGenerator
modelo = [Link]()
[Link](base)
[Link]([Link]())
[Link]([Link](256, activation='relu'))
[Link]([Link](1, activation='sigmoid’))
…
[Link](…)
historia = [Link](…)
…
215
Ajuste fino de modelo preentrenado en Keras
# crea y entrena modelo como en feature extraction y a continuación, los siguientes pasos.
[Link](…)
historia = [Link](…)
216
Redes preentrenadas en Keras
Las principales arquitecturas de redes neuronales ya están construidas y preentrenadas en
Keras: InceptionResNetV2, Xception, ResNet152V2, ResNet101V2, ResNet152, etc.
fich_imagen = '[Link]'
img = image.load_img(fich_imagen, target_size=(224, 224))
x = image.img_to_array(img)
x = np.expand_dims(x, axis=0)
x = preprocess_input(x)
predicciones = [Link](x)
# resultados en una lista de tuplas (clase, descripción, probabilidad)
218
Redes neuronales convolucionales profundas
219
Redes neuronales convolucionales profundas
ResNeXt-50
220
Redes neuronales convolucionales profundas
Xception
221
Redes neuronales convolucionales profundas
Inception-ResNet-V2
222
Redes convolucionales residuales (ResNets)
El entrenamiento de redes muy profundas puede presentar problemas de desvanecimiento
o explosión del gradiente. Las redes residuales mejoran el rendimiento de las redes muy
profundas usando el bloque residual:
224
CNNs: Xception
En el bloque básico de las redes Xception, se aplica la convolución 1x1 a la entrada y
sobre cada canal resultante se aplica una convolución o un muestreo (pooling).
En los modelos inception, las convoluciones nxn se aplicaban tanto espacialmente
(ancho y alto) como a los canales.
En este modelo, las convoluciones nxn sólo se
aplican espacialmente sobre un solo canal.
225
CNNs: Arquitectura general de Xception
226
Detección
• Los modelos anteriores eran útiles para tareas de clasificación (dígitos, por ejemplo).
• La detección consiste en identificar la presencia, la ubicación y el tipo de uno o más
objetos en una imagen.
• Problema: los objetos de interés pueden estar en diferentes ubicaciones y presentar
diferentes proporciones.
• Algoritmos:
• R-CNN: Region-Based CNN:
• Faster R-CNN
• Mask R-CNN
• YOLO: You Only Look Once
227
Segmentación de imágenes
• La segmentación de imágenes es el proceso de asignación de una etiqueta a cada
píxel de la imagen de forma que los píxeles que compartan la misma etiqueta
también tendrán ciertas características visuales similares.
• Los dos tipos de segmentación existentes son la segmentación semántica y la
segmentación de instancia:
• La semántica agrupa todos los elementos del mismo tipo en una única región.
• La de instancia genera una región para cada ocurrencia del tipo detectado.
228
Detección con R-CNN (Regions with CNN)
• Técnica compuesta por tres módulos:
1. Propuesta de regiones: genera cuadros delimitadores (bounding boxes) candidatos.
2. Extracción de características de cada región propuesta: usa CNN
3. Clasificación de características: clasifica las características como una de las clases a
detectar.
230
Detección con Fast R-CNN
• Fast R-CNN evita procesar por separado cada una de las regiones candidatas.
• A la imagen se le aplica la CNN. Sobre el mapa generado por ésta, se identifican
regiones candidatas que se deforman para convertirlas en unas dimensiones fijas
que se alimentarán a una capa completamente conectada.
• El sistema sigue siendo lento, ya que la selección de regiones de interés se realiza
usando el mismo algoritmo de búsqueda selectiva que aplican las R-CNN.
• Una capa softmax identifica la clase de la región propuesta, así como los valores de
desplazamiento de los cuadros contenedores.
• La reducción del tiempo se debe a que sólo se aplica una CNN en lugar de aplicar
una a cada región candidata.
Para cada
región de
interés (RoI)
231
Detección con Faster R-CNN
• Técnica derivada de R-CNN compuesta por tres módulos:
1. Capas convolucionales que generan un mapa de características (feature map) de
la imagen original. Este mapa va a ser sobre el que trabajen las dos redes
posteriores: la red de propuesta de regiones informa a la segunda red de dónde
debe prestar atención.
2. Propuesta de regiones: se usa una red
independiente para generar los
cuadros delimitadores (bounding
boxes) candidatos. Esta red trabaja
sobre el mapa de características
producidas por las capas
convolucionales aplicadas a la imagen
original.
3. Red Fast R-CNN que extrae las
características de las regiones
propuestas y genera los cuadros
delimitadores y las etiquetas de las
clases.
232
Red completamente convolucional (FCN)
• Las redes completamente convolucionales (Fully Convolutional Networks) o FCN son
un método muy típico de segmentación semántica.
• Usa varios bloques de capas convolucionales y de muestreo (pooling) para
reducir el tamaño de la imagen en un factor de 1/32.
• Tras esto hace una predicción de clases con este nivel de granularidad.
• Finalmente, usa capas de desconvolución y de desmuestreo para redimensionar
la imagen al tamaño original.
233
Detección con Mask R-CNN
Mask R-CNN es conceptualmente simple:
• Faster R-CNN con dos salidas para cada objeto candidato, una etiqueta de clase y un
desplazamiento de cuadro delimitador
• A esto agregamos una tercera rama que genera la máscara de objeto, que es una
máscara binaria que indica los píxeles donde el objeto está en el cuadro delimitador.
• Pero la salida de
máscara adicional es
distinta de las salidas de
clase y cuadro, lo que
requiere la extracción
de un diseño espacial
mucho más fino de los
objetos.
• Para hacer esta máscara
R-CNN utiliza la red de
convolución completa
(FCN).
234
Detección con Mask R-CNN
Faster R-CNN
FCN
235
Detección con YOLO
• YOLO (You Only Look Once) utiliza una CNN para detectar objetos haciendo una sola
pasada sobre la imagen.
• Ventaja: gran velocidad, que le permite detectar objetos en tiempo real en videos.
• Desventaja: menos precisión que la familia R-CNN.
Video 1
• Funcionamiento:
Video 2
• Primero divide la imagen en una cuadrícula de SxS.
• En cada una de las celdas predice N posibles cuadros delimitadores (bounding
boxes) y calcula el nivel de certidumbre (probabilidad) de cada una de ellas.
• De las SxSxN cuadros calculados se eliminan los de baja confianza (la mayoría)
• A los cuadros restantes se les aplica un algoritmo que elimina los posibles
objetos detectados por duplicado y dejar el más exacto.
236
Redes Neuronales
Recurrentes
RNN
237
Datos secuenciales
Frase: “Mañana va a hacer calor”
Señales médicas:
Voz:
Vídeo:
ADN:
238
Aplicaciones de las RNN
240
Modelado de secuencias
241
Estructura de las RNN
RNN
representación
RNN ℎ𝑡𝑡
estado anterior
vector de entrada en t
función parametrizada por W
vector de entrada 𝑥𝑥𝑡𝑡
243
Relación de recurrencia en las RNN
Vector de salida:
𝑦𝑦�𝑡𝑡 = 𝑊𝑊ℎ𝑦𝑦 · ℎ𝑡𝑡
tanh 244
Cálculo a través del tiempo
245
Cálculo a través del tiempo
𝑡𝑡 = 0 𝑡𝑡 = 1 𝑡𝑡 = 2 𝑡𝑡 = 𝑛𝑛
246
Cálculo a través del tiempo
247
RNNs apiladas (Stack)
248
Pérdidas a través del tiempo
𝑛𝑛
𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃 → 𝐿𝐿 = � 𝐿𝐿𝑡𝑡
𝑡𝑡=0
𝑛𝑛
𝜕𝜕𝜕𝜕 𝜕𝜕𝐿𝐿𝑡𝑡
𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃𝑃 ℎ𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎 𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎 𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛 → =�
𝜕𝜕𝑊𝑊𝑥𝑥𝑥 𝜕𝜕𝑊𝑊𝑥𝑥𝑥
𝑡𝑡=0
249
Propagación hacia atrás a través del tiempo (BPTT)
250
Propagación hacia atrás a través del tiempo (BPTT)
254
Desvanecimiento del gradiente en BPTT
Para evitar que la derivada de la función de activación haga que los gradientes se
aproximen a cero, se utiliza ReLU.
Sin embargo en RNNs se usan poco porque no limitan los valores de salida.
Tanh garantiza que las entradas están entre -1 y 1 a la vez que su segunda
derivada tarda en llegar a cero.
ReLU
255
Redes LSTM (Long Short Term Memory)
Las redes de memoria a corto/largo plazo (LSTM) son una variante de las RNN que
pueden mantener dependencias de largo plazo.
Están compuestas por celdas de memoria y puertas de control (gates) que controlan
en qué medida la información modifica el estado y se transmite al siguiente paso.
Disponen de dos vectores de estado:
● Estado oculto (hidden state) que actúa como memoria a corto plazo.
Cambios (actualizaciones) grandes.
● Estado de la celda (cell state) que actúa como memoria a largo plazo.
Cambios (actualizaciones) pequeños.
Este es el punto clave de las LSTM.
Las puertas (gates) son las que controlan el flujo de información de un estado al
siguiente.
La información puede fluir entre las memorias de corto y largo plazo.
256
Redes LSTM (Long Short Term Memory)
259
Redes LSTM: actualización del estado de la celda
El ultimo paso de esta segunda fase es la la actualización del estado de la celda
anterior Ct−1 para generar el nuevo estado, Ct . Para ello:
1. Se multiplica el estado anterior por ft para olvidar la información que
corresponda.
2. A lo anterior, se le suma 𝑖𝑖𝑡𝑡 · 𝐶𝐶̃𝑡𝑡 . Estos son los nuevos valores candidatos,
escalados por cuánto hemos decidido actualizar cada valor de estado.
En nuestro ejemplo de predicción de la siguiente palabra, en este punto es donde se
descartaría el género del sujeto anterior y se almacenaría el del nuevo sujeto.
260
Redes LSTM: cálculo de la salida
La tercera y última fase consiste en generar la salida.
Esta salida estará basada en una versión filtrada el estado de la celda. Para ello:
1. Se aplica una capa sigmoide que decide qué partes del estado de la celda se
sacará como salida.
2. A continuación, pasamos el estado de la celda por una tanh, de modo que los
valores estén entre -1 y 1 y se multiplica por la salida de la puerta sigmoide. De
esta forma, sólo se genera como salida las partes que se hayan decidido.
En nuestro ejemplo de predicción de la siguiente palabra, dado que se ha visto un
nuevo sujeto, podría decidir sacar información relevante con respecto al verbo que
viene a continuación. Por ejemplo, podría generar como salida si el sujeto es singular
o plural, de forma que se supiera cómo se debería conjugar el verbo que vendría a
continuación, en caso de que fuese así.
261
Redes LSTM: resumen
262
Redes LSTM: flujo del gradiente
263
Redes LSTM: flujo del gradiente
264
Redes LSTM: conceptos clave
Mantienen un estado de la celda independiente de la salida.
Usa puertas para el control del flujo de información:
● Olvida información irrelevante.
● Actualiza el estado de la celda de forma selectiva.
● La puerta de salida devuelve una versión filtrada del estado de la celda.
La aplicación de la propagación hacia atrás no necesita multiplicaciones de
matrices, porque el flujo de gradiente es continuo (sin interrupción)
En Keras, las redes LSTM pueden tener estado (stateful LSTM) o no (stateless
LSTM).
● Sin estado (stateless): Borran la memoria tras cada lote (batch). Se usa
cuando las predicciones de un lote son independientes del resto, como por
ejemplo, en traducción de textos.
● Con estado (stateful): Borran la memoria tras cada iteración (epoch). Se usan
cuando la información de un lote está relacionada con el resto, como por
ejemplo, en predicción de valores de cotización de acciones.
265
Redes GRU (Gated Recurrent Unit)
Son una modificación de las redes LSTM con menos parámetros.
En estas redes, la salida y la memoria van por la misma ruta, por lo que carece de la
puerta de salida.
Tan solo dispone de dos puertas:
● De actualización (update gate), similares a las puertas de olvido y entrada de
las LSTM, decide que información descartar y qué información nueva añadir.
● De borrado (reset gate), que decide cuánta información del pasado se olvida.
Usa menos memoria y es más rápida que las redes LSTM, pero tienen un
rendimiento peor cuando se trabaja con secuencias largas.
266
Secuencia a secuencia
El modelo Seq2Seq (Sequence-to-Sequence) se aplica a problemas de conversión de
secuencia a secuencia, como la traducción automática o el reconocimiento de voz.
Un modelo Seq2Seq contiene dos partes: un codificador y un descodificador, que
generalmente son dos RNN/LSTM diferentes.
La salida del codificador se utiliza como entrada del descodificador y éste último es
responsable de emitir el resultado de traducción.
267
Secuencia a secuencia: vector de contexto
El codificador codifica la secuencia de entrada (frase a traducir, por ejemplo) como
un vector llamado vector de contexto.
El descodificador toma el vector de contexto como entrada y genera la secuencia
de salida (traducción, por ejemplo).
269
Secuencia a secuencia: transformers
La arquitectura Transformer consiste básicamente, en un apilamiento de
codificadores y descodificadores, sustituyendo las capas recurrentes (RNN, LSTM,
GRU) por las denominadas capas de atención.
Estas capas de atención codifican cada palabra de una frase en función del resto de la
secuencia, permitiendo así introducir el contexto en la representación numérica del
texto, motivo por el cual a los modelos basados en Transformer se les denomina
también embeddings contextuales.
270
Secuencia a secuencia: transformers
271