El perceptrón y redes neuronales
(no profundas)
MT3006 - Robótica 2
El perceptrón como bloque fundamental
¿Cómo?
entradas
pesos
suma
entradas
pesos
suma
término de bias
entradas
pesos
suma
término de bias
pensemos sobre realmente qué es esto y cuáles son sus limitantes
entradas
pesos
suma
función de activación
(no linealidad)
entradas
pesos
suma
salida
hipótesis
función de activación
(no linealidad)
Funciones de activación "comunes"
Funciones de activación "comunes"
el perceptrón original empleaba el escalón unitario
el perceptrón original empleaba el escalón unitario
mapa lineal \(\equiv\) hiperplano en \(\mathbb{R}^d\)
la función de activación introduce la no linealidad que hace posible la clasificación binaria
Ejemplo
>> mt3006_clase6_perceptron.m
función de activación sigmoide
\(f=\sigma\)
Ejemplo
hiperplano separador
Ejemplo
hiperplano separador
¿Cuándo falla el perceptrón?
Ejemplo: XOR
A | B | A XOR B |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
A
B
0
1
1
Ejemplo: XOR
A | B | A XOR B |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
A
B
0
1
1
La data no es linealmente separable
Ejemplo: XOR
A | B | A XOR B |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
A
B
0
1
1
La data no es linealmente separable
¿Solución?
¿Solución?
¿Solución?
¿Solución?
dense layer
¿Solución?
Red neuronal (de una capa)
entradas
salidas
capa oculta
entradas
salidas
capa oculta
entradas
salidas
capa oculta
¿Por qué?
El teorema de aproximación universal
Establece que una red neuronal de una sola capa, también conocido como perceptrón multicapa (MLP), con una función de activación no lineal adecuada, puede aproximar cualquier función continua definida en un espacio compacto con una precisión arbitraria, siempre y cuando se le permita tener un número suficiente de neuronas en la capa oculta.
- ChatGPT 4o
Una justificación retroactiva
Una justificación retroactiva
Una justificación retroactiva
a)
b)
c)
Una justificación retroactiva
d)
e)
f)
Una justificación retroactiva
g)
h)
i)
Una justificación retroactiva
j)
Una justificación retroactiva
j)
otros posibles modelos con parámetros distintos
Una justificación retroactiva
¿Qué ocurre conforme se añaden nodos a la capa oculta?
Entrenando la red neuronal
Algunos problemas prácticos
A pesar que se tiene un fundamento teórico del porqué las redes neuronales deberían de funcionar, aún falta encontrar el cómo resolver los problemas prácticos de su implementación.
Principalmente, cómo resolver de manera práctica el problema de optimización.
Un ejemplo de impracticidad
red neuronal de una capa
dataset MNIST
28x28 pixeles = 784 + 1 features
800 nodos \(\Rightarrow\) 801 "features"
10 categorías
pérdida de error cuadrático
636010 variables de decisión
pérdida de error cuadrático
636010 variables de decisión
problema de optimización (no) convexo de escala masiva
*aunque con la ventaja que no presenta restricciones
Resolviendo estos problemas
Gradient descent
Una forma de resolver problemas de optimización no lineales sin restricciones es mediante el método del descenso del gradiente.
Gradient descent
learning rate
Una forma de resolver problemas de optimización no lineales sin restricciones es mediante el método del descenso del gradiente.
>> mt3006_clase6_gradientdescent.m
Gradient descent
Por el tipo de problema, sin embargo, la solución puede ser sólo un mínimo local.
loss landscape
Aplicando esto al caso de la red neuronal de una capa:
Aplicando esto al caso de la red neuronal de una capa:
???
demasiado complicado
Consideremos un caso más simple como ejemplo (misma función de activación con pérdida cuadrática):
Consideremos un caso más simple como ejemplo (misma función de activación con pérdida cuadrática):
Consideremos un caso más simple como ejemplo (misma función de activación con pérdida cuadrática):
Por lo tanto
Por lo tanto
Adicionalmente, ¿Qué ocurre si en lugar del set completo de entrenamiento sólo seleccionamos un ejemplo (aleatorio)? \(\Rightarrow\) Stochastic Gradient Descent (SGD)
Estas fórmulas esconden un algoritmo altamente eficiente para la actualización de parámetros
\(i-\)ésimo ejemplo (aleatorio)
Estas fórmulas esconden un algoritmo altamente eficiente para la actualización de parámetros
\(i-\)ésimo ejemplo (aleatorio)
Estas fórmulas esconden un algoritmo altamente eficiente para la actualización de parámetros
\(i-\)ésimo ejemplo (aleatorio)
forward propagation
Estas fórmulas esconden un algoritmo altamente eficiente para la actualización de parámetros
\(i-\)ésimo ejemplo (aleatorio)
forward propagation
Estas fórmulas esconden un algoritmo altamente eficiente para la actualización de parámetros
\(i-\)ésimo ejemplo (aleatorio)
forward propagation
Estas fórmulas esconden un algoritmo altamente eficiente para la actualización de parámetros
\(i-\)ésimo ejemplo (aleatorio)
forward propagation
back propagation
A pesar de haber encontrado fórmulas, esto es igualmente complicado. ¿Qué hacemos para más capas, o para arquitecturas más complejas?
Algunas consideraciones
Frameworks para deep learning
fáciles, útiles para prototipado
más populares para implementación
Referencias
import tensorflow as tf
from tf.keras import Sequential
from tf.keras.layers import Dense
# Se define el modelo
hidden_layer = Dense(M1, activation = 'sigmoid')
output_layer = Dense(2, activation = 'relu')
model = Sequential([hidden_layer, output_layer])
# O bien:
model = Sequential()
model.add(hidden_layer)
model.add(output_layer)
# Se compila y entrena el modelo
model.compile(loss = 'mean_squared_error', optimizer = 'SGD')
model.fit(trainSet, trainLabels, epochs = 100)