Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Clase 10
Profesor
Dr. Mauricio Sepúlveda
1
Temario
Redes de Neuronas
• Introducción
• Perceptrón
• Redes de N capas
• Ajuste de Parámetros
• Como programar una RNN en Python
• Laboratorio
2
Desafío de clasificación
1. Ingresa a https://teachablemachine.withgoogle.com/train/image
2. Recolecta desde internet imágenes de distintas profesiones
3. Carga las imágenes a la página agrupándolas por clases de profesiones
4. Entrena el modelo de clasificación
5. Testealo con nuevas imágenes para que veas la precisión del modelo o con tu
cámara mira como te clasifica
El desafío:
1. El profesor les
enviará a su correo
10 imágenes, deben
responder cuantas
son clasificadas
correctamente con
un 95% de
precisión.
2. Gana el mejor
modelo de
clasificación
Desafío en reconocimiento de posturas
1. Ingresa ahttps://teachablemachine.withgoogle.com/train/pose
2. Activa la cámara y registra tu cara y forma del cuerpo en una clase
3. Realiza la misma actividad con varios familiares de tu casa, fotos u figuras
4. Entrena el modelo
5. Testealo con la cámara para ver si reconoce tu postura, carga nuevas imágenes
para que veas la precisión del modelo.
El desafío:
1. Intente engañar
al reconocedor,
por ejemplo, con
fotos, etc.
2. Envíe su
experimento y
conclusiones al
profesor.
Humor en IA
5
Introducción
Machine learning o Aprendizaje supervisado
Es una técnica que permite deducir o construir una función o modelo a
partir de datos de entrenamiento.
Esta función o modelo es capaz de predecir el valor correspondiente a
cualquier objeto de entrada que sea similar a los datos de
entrenamiento.
El modelo, se construye con un proceso de entrenamiento, automático.
6
Introducción
Machine learning o Aprendizaje supervisado
Es una técnica que permite deducir o construir una función o modelo a
partir de datos de entrenamiento.
Esta función o modelo es capaz de predecir el valor correspondiente a
cualquier objeto de entrada que sea similar a los datos de
entrenamiento.
El modelo, se construye con un proceso de entrenamiento, automático.
7
Introducción
• Cuando construimos una función de regresión estamos realizando
machine Learning
• Se pueden crear infinitos modelos para los mismos datos de
entrenamiento.
8
Introducción
Redes neuronales: Son sistemas informáticos inspirados vagamente en
las redes neuronales biológicas que constituyen los cerebros de los
animales.
Una vez que la red este entrenada permite ser utilizada para predecir o
clasificar de forma similar a como está implícitamente expresado en los
datos de entrenamiento.
9
Introducción
Fundamentos biológicos
11
Perceptrón simple
Bias
12
Perceptrón simple
Diseñado principalmente para clasificar patrones linealmente
separables.
Los patrones son linealmente separables significa que existe un
límite de decisión hiperplanar multidimensional que clasifica los
patrones en dos clases.
15
Arquitectura
16
Perceptrón
Teorema de convergencia del perceptrón
Si el conjunto de entrenamiento es linealmente separable, existe un
conjunto de pesos para los cuales el entrenamiento del Perceptrón
convergerá en un tiempo infinito y los patrones de entrenamiento
serán correctamente clasificados.
En el caso bidimensional, el
teorema se traduce en
encontrar la línea definida
por w1x1 + w2x2 - b = 0, que
clasifica adecuadamente los
patrones de entrenamiento.
17
Algoritmo de entrenamiento
Algoritmo de entrenamiento de un perceptrón monocapa
1. Inicialice los pesos y el bias/sesgo a valores
aleatorios pequeños.
2. Elija un patrón de entrada-salida (x, t) de los datos
de entrenamiento.
3. Calcule la salida real de la red y = 𝜑 σ𝑛𝑖=1 𝑤𝑖 𝑥𝑖 − 𝑏
4. Ajuste los pesos y el bias/sesgo de acuerdo con la
regla de aprendizaje de Perceptrón: Δwi = η(t – o)xi,
y Δb = -η(t – o), donde η ∈ [0,1] es la tasa de
aprendizaje del Perceptrón.
5. Si se completa una iteración/época completa, pase
al siguiente paso; de lo contrario, vaya al Paso 2.
6. Si los pesos y el sesgo alcanzaron un estado estable
(Δwi ≈ 0), es decir no cambiar en la nueva epoca,
entonces detenga el aprendizaje; de lo contrario,
realice mas iteraciones a partir del Paso 2. 18
Ejemplo
Cálcule los pesos y bias de un perceptrón monocapa de 1
neurona
b?
X1 w1?
o
X2 w2?
19
Ejemplo
Deje que los pesos iniciales sean w1 = -1, w2 = 1, b = -1
Por lo tanto, el límite inicial se define por x2 = x1 – 1
b = -1
X1 w1 = -1
o
X2 w2 = 1
20
Ejemplo
Gráficamente, se puede ver de esta manera.
21
Ejemplo
Comencemos seleccionando el patrón U con su target
esperado t = -1 y apliquémoslo en el perceptrón, se tiene
que:
Luego
Δwi = η(t – o)xi
Δw1 = Δw2 = 0,5(-1 – 1)*2 = -2
Y Δb = -η(t – o) = -0,5(-1 – 1) = +1
Entonces w1 = w1 + Δw1 = -1 + -2 = -3
w2 = w2 + Δw2 = 1 + -2 = -1
b = b + Δb = -1 + -1 = 0 22
Ejemplo
El perceptrón queda como indica el dibujo siguiente:
b=0
X1 w1 = -3
o
X2 w2 = -1
23
Humor en IA
24
Funciones de activación
Funciones de activación
La función de activación, emula el procesamiento
dentro del cuerpo de la neurona, de las entradas
recibidas por sus dendritas.
Algunas funciones de activación clásicamente usadas
en redes neuronales:
• Simple continuo (la salida es igual a lo que entra)
• Escalón o umbral
• Función Lineal de a tramos
• No lineal: Sigmoidea
26
Funciones de activación
Función Lineal de a tramos
27
Funciones de activación
Función No lineal: Logística o sigmoidea
28
Modelos comunes de red
monocapas
Binary
perceptrons
Continuous perceptrons
Otro algoritmo de entrenamiento:
Método del descenso por el gradiente
30
Método del descenso por el
gradiente
31
Método del descenso por el
gradiente
32
Método del descenso por el
gradiente
33
Método del descenso por el
gradiente
34
La Regla Delta
35
Comentarios
36
Redes neuronales de Múltiples
niveles
37
Ejemplo de una red feed-forward
de 2 niveles
wji
wji
39
Que hace una red feed-forward de 2
niveles?.
41
Trabajo de Laboratorio
Red neuronal
42
Red Feedforward de 2 niveles
Una vez que la red esta entrenada, la evaluación es
fácil y muy rápida
43
Cómo se pueden entrenar una RNN de N capas
ocultas?
44
Red Feedforward de n niveles
Notación
45
Ejemplo de uso de RN feed-
forward
Como manejar con apoyo de una RN ?
46
Ejemplo de uso de RN feed-
forward
Entrada de
Entrenamiento
u = (u1 u2 … u960)
= image pixels
47
Ejemplo de uso de RN feed-
forward
Cuantos pesos W
se deben
calcular?
Cuantos datos de
entrenamiento se
requieren?
48
Ejemplo de uso
49
¿Cómo se puede entrenar una
Red Feedforward de n niveles?
Entrenamiento
50
Red Feedforward de n niveles
Entrenamiento
51
Red Feedforward de n niveles
El algoritmo de Retropropagación
52
Ejemplo de entrenamiento
53
Red Feedforward de n niveles
Se pueden usar diferentes criterios de parada en el
algoritmo de retropropagación.
54
Red Feedforward de n niveles
Sobreentrenamiento
• Se puede hacer que una ANN funcione demasiado
bien en un conjunto de entrenamiento.
• Pero pierde rendimiento ante los conjuntos de testeo
ver la imagen siguiente.
Test set
Err
Training set
Training time
55
Red Feedforward de n niveles
Sobreentrenamiento
• Se puede hacer que una ANN funcione demasiado
bien en un conjunto de entrenamiento.
• Pero pierde rendimiento ante los conjuntos de testeo
Detener el
ver la imagen siguiente.
entrenamiento en punto
donde intersectan las 2
curvas evita el
sobreentramiento
Test set
Err
Training set
Training time
56
Red Feedforward de n niveles
Sobreentrenamiento
57
Efecto del Número de nodos ocultos en
la aproximación de la función
58
Efecto del Número de nodos ocultos 5 nodos fue capaz de
interpolar bastante
60
Efecto del número de datos de entrenamiento
en la aproximación de la función Un mayor número de
datos de
entrenamiento
proporcionó mejores
resultados.
El mejor resultado se
Con tres datos de obtuvo para el caso de
entrenamiento no fue 20 patrones de
capaz de proporcionar entrenamiento. Aunque
una asimilación con la es más costoso/lento
curva original. entrenar una red con
mayor número de
datos de
entrenamiento.
61
Ajuste de Parámetros
Preprocesamiento de datos de entrada
• Ojalá normalizados entre 0 y 1.
• Sino, dejar media sea cero, o un valor muy bajo con respecto a la
varianza.
• Los datos de entrada no deben estar correlacionados.
• Las variables de entrada deben tener una varianza similar:
Dispersión de los datos con respecto a la media aritmética.
Pesos iniciales
• Los pesos iniciales deben ser valores pequeños para evitar la
“saturación” de las neuronas:
• Valores de los pesos de “entrada-capa-media” ojalá mayores que
aquellos pesos “capa-media-salida” dado que actualizan sus
valores con los errores de back-propagation
• Utilizar entrenamiento “Batch”: Pesos son actualizados una vez
que todas las observaciones son presentadas a la red neuronal.
Tasa de aprendizaje
• Se recomienda utilizar combinaciones de tasas de aprendizaje
(η) para el entrenamiento de una redes, que vayan disminuyendo
62
Limitaciones de la red de múltiples
capas
• Entre los problemas bien conocidos que pueden obstaculizar la
generalización o las capacidades de aproximación de RN está
el relacionado con el comportamiento de convergencia de los
pesos de las conexiones durante la etapa de aprendizaje.
• De hecho, el algoritmo basado en la pendiente del gradiente
utilizado para actualizar los pesos de la red puede nunca
converger a los mínimos globales.
• Se han propuesto muchos remedios para abordar este
problema, ya sea mediante el reciclaje de la red varias veces o
mediante el uso de técnicas de optimización como las basadas
en:
• Heurísticas de Búsqueda local
• Algoritmos genéticos
63
Como programar una RNN en Python
Se puede usar anaconda-Jupyter o bien..
Colaboratory
64
Como programar una RNN en Python
Regresión Básica: Predecir eficiencia de gasolina
En un problema de regresión, buscamos predecir la salida de un valor
continuo como la probabilidad de un precio.
65
Como programar una RNN en Python
Regresión Básica: Predecir eficiencia de gasolina
Datos de validación:
X1 Y1
Cilindros, desplazamiento, potencia y peso. Mpg
1, 27, 4, 2200 ??
5, 25, 2, 2100 ??
…..
import tensorflow as tf
print(tf.__version__)
67
Como programar una RNN en Python
Regresión Básica: Predecir eficiencia de gasolina
#Carga datos, los analiza y repara
url = 'http://archive.ics.uci.edu/ml/machine-learning-databases/auto-mpg/auto-mpg.data'
column_names = ['MPG', 'Cylinders', 'Displacement', 'Horsepower', 'Weight',
'Acceleration', 'Model Year', 'Origin']
train_labels = train_features.pop('MPG')
test_labels = test_features.pop('MPG')
print(train_features)
69
Como programar una RNN en Python
Regresión Básica: Predecir eficiencia de gasolina
#Define una red neuronal de 2 capas, dos de ellas son capas intermedias de 64
neuronas y una capa de salida de una neurona, con función de activación en cada
neurona RELU, menos la ultima que es sigmoide por defecto.
def build_and_compile_model(norm):
model = keras.Sequential([
norm,
layers.Dense(64, activation='relu'),
layers.Dense(64, activation='relu'),
layers.Dense(1)
])
model.compile(loss='mean_absolute_error',
optimizer=tf.keras.optimizers.Adam(0.001))
return model
dnn_model = build_and_compile_model(normalizer)
dnn_model.summary()
70
Como programar una RNN en Python
Regresión Básica: Predecir eficiencia de gasolina
#Ejecuta la red neuronal, dividiendo los datos de entrenamiento en un 80% de
entrenamiento y un 20% para validación del entrenamiento. Las iteraciones o
épocas para entrenar la red es de 100.
%%time
history = dnn_model.fit(
train_features, train_labels,
validation_split=0.2,
verbose=0, epochs=100)
plot_loss(history)
71
Como programar una RNN en Python
Regresión Básica: Predecir eficiencia de gasolina
#Presenta el error cuadrático de la red, que es la suma de los errores entre los
datos reales versus los esperados, en los datos de entrenamiento.
test_results = {}
test_results['dnn_model'] = dnn_model.evaluate(test_features, test_labels,
verbose=0)
print( test_results )
a = plt.axes(aspect='equal')
plt.scatter(test_labels, test_predictions)
plt.xlabel('True Values [MPG]')
plt.ylabel('Predictions [MPG]')
lims = [0, 50]
plt.xlim(lims)
plt.ylim(lims)
_ = plt.plot(lims, lims)
# load dataset
(x_train, y_train), (x_test, y_test) = boston_housing.load_data()
print(x_train.shape)
print(x_test.shape)
print(y_train.shape)
print(y_test.shape)
#OTRA FORMA DE CARGAR LOS DATOS
# load dataset
dataframe = pd.read_csv(r"https://raw.githubusercontent.com/maurosepulveda1/investigacion/master/housing.csv",
delim_whitespace=True, header=None)
dataset = dataframe.values
# split into input (X) and output (Y) variables
X = dataset[:,0:13]
Y = dataset[:,13]
73
Regresión múltiple con Redes
Neuronales Feedforward
Continuación del ejemplo 2.
# Entrena la red
history = model.fit(x_train, y_train, epochs=100, batch_size=32,
validation_data=(x_test,y_test), verbose=2)
74
Regresión múltiple con Redes
Neuronales Feedforward
Continuación del ejemplo 2.
76