Clase 28.07¶
- Parametro es lo que no podemos modificar, se guarda en en el aprendizaje y se actualiza mientras mas aprende
- Hiperparametro si lo podemos modificar , es una variable que toma por sentada una parte de su entrenamiento y la usa para entrenar.
Hiperparametros de nuestra red¶
- Ctantidad de NeuronaS
- Cantidad de capas
- Learning rate es Es un hiperparámetro que controla cuánto se ajustan los pesos de la red en cada iteración.
- Funcion activacion
- Batchsize
- epocas
Nosotros lo que queremos hacer es tenemos un objetivo , es hacer que la red aprenda, y que encuentre el proceso de nuestra data. El problema son los recursos entonces tenemos un batch que tiene un subjconjunto del set original, y cada vez que te pase n observaciones actuliza los datos. Osea que por cada chunck calculo la perdida antes de hacer backpropagation. Si yo le pongo batchsize de 1 , se va a memorizar los datos y entonces va a overfittear
Las epocas es darle varias vueltas a todo el conjunto de datos, 1 vuelta de todo el conjunto de dato se llama epoca. entrenar solo 2-3 épocas en un problema complejo es muy malo lo ideal es hacerlo mas grande
Entrenamienton y Prueba y Validacion¶
La validacion y el test la diferencia es una diferencia metodologica. El train ajusta los hiperparametros. Durante nuestra experimentacion de ver las metricas y hacer nuevas iteraciones del modelo son sobre la validacion.
La idea del test es que nunca lo haya visto, osea que sean nuevos. Para eso sirve el validation, para que la correccion sea sobre este ultimo
Formas de Elegir Hiperparametros¶
Grid Search¶
$n = (0.1,0.001, 0.0001)$ $f(z) = (sig, tanh , relu)$
Y de estas se combinan para formar un tuneo del parametro
El problema es que pesa mucho, crece exponencialmente, cada una de las combinaciones es un nuevo modelo. Es bien exacto ya que prueba todas las posibles combinaciones
Random Search¶
Probamos de manera aleatoria, y de esas elige n combinaciones, pero el problema es que solamente funciona si el muestreo es suficietemente grande.
El problema es que se queda en minimos locales, no explora para encontrar mas combinaciones que mejoren el modelo.
Bayessian Optimization¶
Bayes me dice que
$$P(A|B) = \frac{P(B|A) * P(A)}{P(B)}$$
Voy a variar un poco esa configuracion, si mejoro dice que en esa direccion me voy a mover. La idea es que en lugar que me voy a elegir combinaciones posibles.
Si converges en varios distintos quiere decir que por ahi va tu verdadero minimo.
Regularización¶
La idea es penalizar los pesos para que el modelo no se vuelva demasiado complejo (evitar overfitting).
La función de pérdida queda así (ejemplo con Ridge):
$$ MSE = \frac{1}{n} \sum_{i=1}^{n}(y_i - \hat{y_i})^2 + \lambda \sum_j w_j^2 $$
- Primer término: error cuadrático medio (MSE).
- Segundo término: penalización de los pesos (regularización).
- $\lambda$: hiperparámetro que controla cuánto penalizamos.
Tipos¶
Ridge (L2): penaliza la suma de los cuadrados de los pesos.
$$ \lambda \sum_j w_j^2 $$
Lasso (L1): penaliza la suma de los valores absolutos de los pesos.
$$ \lambda \sum_j |w_j| $$
🔹 Con esto, el modelo reduce la magnitud de los pesos y evita que alguno tenga demasiada influencia. 🔹 Lasso incluso puede volver algunos pesos exactamente cero → selecciona variables.
RIDGE no puede llevar a valores a 0 en cambio a LASSO si los lleva y mata neurona el hijo de perra
import numpy as np
import matplotlib.pyplot as plt
# Simulamos épocas
epochs = np.arange(1, 51)
# Simulamos pérdida (loss)
loss_train = np.exp(-epochs/10) + 0.05*np.random.rand(len(epochs))
loss_val = np.exp(-epochs/10) + 0.1*np.random.rand(len(epochs))
# Forzamos overfitting: validación empieza a subir en época 25
loss_val[25:] += (np.arange(len(epochs)-25)) * 0.05
# Simulamos accuracy
acc_train = 1 - loss_train + 0.05*np.random.rand(len(epochs))
acc_val = 1 - loss_val + 0.05*np.random.rand(len(epochs))
# Graficamos
plt.figure(figsize=(12,5))
# Loss
plt.subplot(1,2,1)
plt.plot(epochs, loss_train, label='Loss Entrenamiento')
plt.plot(epochs, loss_val, label='Loss Validación', linestyle='--')
plt.axvline(25, color='r', linestyle=':', label='Inicio overfitting')
plt.xlabel('Épocas')
plt.ylabel('Loss')
plt.title('Función de Pérdida')
plt.legend()
# Accuracy
plt.subplot(1,2,2)
plt.plot(epochs, acc_train, label='Accuracy Entrenamiento')
plt.plot(epochs, acc_val, label='Accuracy Validación', linestyle='--')
plt.axvline(25, color='r', linestyle=':', label='Inicio overfitting')
plt.xlabel('Épocas')
plt.ylabel('Accuracy')
plt.title('Accuracy')
plt.legend()
plt.tight_layout()
plt.show()
En el earling stoping lo que hacemos es hacer el corte en la epoca donde la perdida es minima
Dropout¶
Es donde la neurona la matamos, en donde lo hacemos para no depender de una neurona en especifico, y asi evitar el overfitting. Este es un hiperparametro que le podemos definir con probabildiad
CLASE 04.08¶
Optimizadores¶
Claro, aquí tienes una explicación clara y bien estructurada sobre el Gradiente Descendente Simple, su funcionamiento, problemas, y por qué se usan optimizadores más avanzados hoy en día, incluyendo una mención al problema del gradiente desvanecido (vanishing gradient):
📉 Gradiente Descendente Simple¶
¿Qué es?¶
El gradiente descendente es un algoritmo de optimización que busca minimizar una función de pérdida (por ejemplo, el error de predicción) ajustando los parámetros del modelo (como los pesos en una red neuronal).
¿Cómo funciona?¶
En cada paso:
$$ \theta_{t+1} = \theta_t - \eta \cdot \nabla_\theta J(\theta) $$
Donde:
- $\theta$: parámetros del modelo (pesos).
- $\eta$: tasa de aprendizaje (learning rate).
- $\nabla_\theta J(\theta)$: gradiente de la función de pérdida.
El modelo ajusta sus parámetros en la dirección contraria al gradiente, buscando el mínimo.
¿Dónde converge?¶
- Si la tasa de aprendizaje es adecuada, el algoritmo puede converger hacia un mínimo local o global.
- En funciones convexas, converge al mínimo global.
- En redes neuronales (no convexas), puede quedarse en mínimos locales o sillas (saddle points).
🧱 Problemas del Gradiente Descendente Simple¶
Sensibilidad a la tasa de aprendizaje:
- Si es muy grande → puede divergir (explota).
- Si es muy pequeña → converge muy lento o se estanca.
Oscilaciones o estancamiento:
- Puede oscilar en valles estrechos o quedarse "atrapado".
No se adapta al paisaje del error:
- Misma tasa de aprendizaje para todos los parámetros → ineficiente.
Problemas en redes profundas:
- Aquí entra el problema clave: el gradiente desvanecido.
🌫️ Vanishing Gradient Problem (Problema del Gradiente Desvanecido)¶
- En redes profundas, al retropropagar el error (backpropagation), los gradientes pueden volverse muy pequeños en las capas iniciales.
- Esto hace que los pesos de las primeras capas no se actualicen adecuadamente, y por tanto, la red no aprenda bien.
- Ocurre especialmente con funciones de activación como sigmoid o tanh.
¡Claro, Mathew! Aquí tienes una descripción sencilla y clara de cada optimizador, con su propósito y características principales:
⚙️ Optimizadores más usados en Deep Learning¶
1. SGD (Stochastic Gradient Descent)¶
Descripción: Es el optimizador más básico. Actualiza los pesos del modelo usando el gradiente del error calculado en un mini-lote (batch) de datos. Ventaja: Simple y rápido en problemas pequeños. Desventaja: Puede ser lento para converger y quedarse atrapado en mínimos locales.
2. SGD con Momentum¶
Descripción: Mejora a SGD añadiendo una “inercia” al movimiento de los pesos. Así, si el gradiente sigue apuntando en la misma dirección, el optimizador va ganando velocidad. Ventaja: Acelera la convergencia y reduce oscilaciones. Desventaja: Todavía necesita ajustar bien el learning rate.
3. Adagrad¶
Descripción: Adapta automáticamente la tasa de aprendizaje para cada parámetro según cuántas veces se actualizó. Parámetros que se actualizan mucho, reducen su paso. Ventaja: Bueno para datos escasos (por ejemplo, NLP). Desventaja: El learning rate puede volverse tan pequeño que el modelo deja de aprender.
4. RMSProp¶
Descripción: Corrige el problema de Adagrad usando una media móvil de los gradientes pasados. Mantiene una tasa de aprendizaje razonable a lo largo del tiempo. Ventaja: Muy útil en redes recurrentes (RNNs). Desventaja: Puede requerir ajuste fino de hiperparámetros.
5. Adam (Adaptive Moment Estimation)¶
Descripción:
Es uno de los optimizadores más usados. Combina la idea de momentum (velocidad) con la adaptación del learning rate (como RMSProp).
Ventaja: Rápido, estable y funciona bien en la mayoría de los casos.
Desventaja: Puede no generalizar tan bien si no se ajusta el learning rate
.
6. AdamW¶
Descripción: Es una mejora de Adam que maneja mejor la regularización (weight decay), especialmente útil en modelos grandes como Transformers. Ventaja: Mejor generalización y resultados más estables. Desventaja: Requiere más memoria que SGD.
7. Nadam (Nesterov-accelerated Adam)¶
Descripción: Es una versión de Adam que añade la aceleración de Nesterov, anticipando el próximo paso. Ventaja: Puede acelerar el aprendizaje en algunos problemas. Desventaja: No siempre mejora respecto a Adam.
CLASE 18082025¶
Redes Convulusionales.¶
La red anterior lo que piensa es que cada pixel es independiente, pero el humano no interperta asi , sigue los patrones de señas, coloroes, formas que al unirlas conforman la imagen de la idea.
Lo que hacen las CNN es reducir a una imagen mas sencilla de entender lo que ve.
Para lo que estas hechas es para tener datos de local y espacial. Que tienen un contexto y que sus variables tienen dirferentes valores en otros datos.
Las redes captan una matriz y a a esa patriz le dan sentido en forma de patrones.
Nuestra reed es la misma red que venimos trabajando anteriormente, la red proprocesa los datos de manera releavante, le pode un MLP comun y calcula por filtros.
En el pipeline, de las capas de convulucion haecen que pierda informacion. Pero vamos a mantener la informacion mas importnate.
Pooling¶
Tiene un kernel que tiene una cantidad asignada en la matriz. A los numeros del kernel se le aplica una operacion , ya sea maxpoling que es calcular el maximo. La finalidad de las capas de pooling es reducir la info Lo que decidimos es si tener una capa de max o average. Estos son hiperparametros, cuidado ya que pueden hacer que pierdas informacion Esto sirve si queres reducir la cantidad de pxeles a analizar en una capa
En las redes reales , tenemos mas info , porque tenemos un canal rojo, azul y verde Y debemos de encontrar variaciones entre todos los canales.
Capa de Dropout¶
El problema es que al aplicar los filtros genero mas imagenes de la original. Lo que hace el dropout evita el sobreajuste tirando aleatoriamente n % que tu eligas
Convertir la matriz¶
Convertimos la matriz a un vector
Red Neuronal¶
Luego aplicamos una red neuronal tipica. Softmax lo que hac es ponderar el numero entre las multiples variables que den 1 explicitamente para saber si va a ser un tipo de clasificacion o no .
Si se hace esto 1 de las variables sera la respuesta ya que softmax obliga a que se tome la mas alta
Una cosa interesante es que las CNN tienen menos parametros que una red normal.
Resumen¶
Redes convolucionales (CNN):
Buscan patrones cada vez más básicos. Por ejemplo de una cara humana, la descompone en ojos, cara, boca, etc y cada parte de la cara la descompone en otras partes etc.
Naturaleza local especial: tienen un contexto y alreadedor hay información de otras variables que me dan contexto de ese valor.
Convolución: operación de matriz. Tenemos un kernel (una matriz) hacemos una combinación lineal con los valores de otra matriz para resumirlo todo en un solo valor.
Nos pueden ayudar a encontrar los bordes de un objeto, los bordes indican cuando las cosas son y dejan de ser.
La red calcula los valores ideales de los kernel.
Pooling: información que resume la información de una región reduciendo su tamaño lo que ayuda a reducir la complejidad del modelo y lo hace más robusto a pequeñas variaciones o traslaciones en los datos.
Aplicamos n filtros(es un hiperparámetro) este encuentra patrones, luego aplica pooling y volvemos a aplicar convolución con los filtros, cada vez podemnos ir encontrando patrones más complejos.
Softmax: pondera todos los valores y elige el más alto.
ReSUMEN 2 Clase 1908¶
Si preguntan porque tanto resumen es que me quede dormido en la clase. xd¶
mlp parte mas sencillas de redes neuronales
ahora veremos redes convolucionales cnn
recordando la clase pasada teniamos 10 clases con 284 variables de entrada,
784 variables? porque porque cada pixel es independiente de los demas
nosotros entendemos imagenes por trazos por contexto donde variables se representan, como local espacial, cada pixel y esta sentado tiene sentido que los de alrededor tenga sentido para encontrar patrones interesantes
problema de independencia, ejemplo altura de personas las variabels son dependientes para hacer inferencia final peroen imagenes se represetan diferentes una de otra
esta información si tengo "a" pero escrita en diferente tipografia, nosotros no entendemos por pixel esta dibujado entonces es una "a" porque lo hacemos por trazaos.
incluso si son por las partes debemos reconocer si es un ojo por la forma por textura por la posicion y como sabemos que es un ojo y si hay nariz labios, etc y dentro de un circulo entonces es una cara y si tiene otras caracteristicas entonces es una mujer, debemos extender esto hasta arriba para entender una raiz
las redes neuronales buscan patrones cada vez más basicos como figuras texturas, etc esto lleva a un contexto mucho más grande y complejo para poder solucionarlo
para entender algo en el mundo sabemos que es algo cuando hay ausencia, es decir sabemos que hay una montaña porque hay cielo, es decir limites que defines cosas de otras para convertir en otra cosa.
laboratorio redes convolucionales, sencilla la idea:
esta redes es para naturaleza local espacial es que tienen un contexto y al rededor al mismo tiempo dan contexto de mi propio valor, es diferente a series de tiempo
existen capas de convoluciones y pooling, ess decir es la red que hace es mlp procesar la informacion con patrones relevantes conectando mlp comun para terminar un trabajo:
tenemos un kernel o nucleo y me da una ponderacion de que tan importante es mi alrededor y esto dice que se da una ponderacion por ejemplo *5 y en la esquina de 0 arriba +1 abajo -1 etc y sumo todas las casillas al rededor y ese filtro es colocarlo en una esquina y esos los resumo en un solo valor, un solo pixel y mover hasta abajo 1 pixel para hacer otro proceso.
tengo
100 97 96 103 101 102 404 102 100 y la matriz:
0 -1 0 -1 5 -100 -1 01
y al hacer la combinacion lineal de 9 casillas en un solo numero:
505-97-103-102-102=101 son kernels pequeños
tenemos por ejemplo:
negro:0 - blanco:255
pensando en el escenario:
255 255 255 255 0 0 0 0 255
las convolucion nos ayuda a encontrar bordes o ecnontrar cuando algo esta dejando de ser como el trazo en los 4 bloques de arriba o el bloque solo de la esquina abajo pero entonces si aplico:
y aese filtro se le aplica:
-1 0 1 -1 0 1 -1 0 1
cuando las columnas de los lados son diferentes se hace 0
pero sse hará en el valor original y hace que 2 columnas sean distintos y es como un limite es decir una linea vertcial si los 2 son distintos y dibujo el patrón negro encontre una linea vertical
0 al rededir y 1 al medio que hace este patron? esto no hace nada porque ahora otro por ejemplo todos unos:
esto suma todos los 9 pixeles en una sola posición, que pasa si estoy en una seccion clara? se exponencia lo blanco si estoy en la oscura no pasa nada son bajos los tonos, entonces lo que hace es aumentar el brillo o contraste,
ahora si el valor de todos los 9 pixeles seran 1/9 esto es un promedio y esto lleva a una version mas central de los colores haciendo un blur se verá borroso, estos son los pesos de la red, le pasamos a la red cuantos filtros y la red determinará que patron le servirá esto para determinar que filtros usar.
un filtro:
1 1 1 0 0 0 -1 -1 -1
que hará? invertirá los pixeles y lo que hará es omitir las lineas verticales, dejará las horizontales, porque? y las diagonales? estas tienen una componente horizontal
ya que encuentra otros patrones y no se borra del todo,
porque mientras mas filtros mas complejo?
ventajas de la red neuronal:
sabiendo overfittiear:
meansky dijo que redes de una sola capa solo puede escalar patrones lineales y con muchas capas encontramos no lineal +volviendo a convoluciones tenemos una capa con ciertos pixeles en el medio y esto nos tira a un solo numero y en las egunda capa:
porque las capas se ponen sobre otra, entonces las primeras encuentran puntos, patrones, la otra capa algo de 27*27 y asi original, es decir encuentra cosas exponencialmente con trazos cada vez más grandes
los filtros buscan la red y ver que ayudan para encontrar patrones importantes
entonces:
creamos una red pero en lugar de tener 10 neuronas se tienen 10 filtros 3310 = 90 parametros entonces esto calcula los 10 parametros para ajustar
al ajustar el filtro en la esquina y se calcula el centro , los valores de la esquina superior y izquierda se pierden porque los pixeles se ueren, normalmente a las imagenes se le colocan un paggind y el filtro es 5x5, los pixeles siguen disminuyendo, perdemos información:
es malo porque ademas tenemos un limite para que mantener la informacion más importante en lugar de recibir 728 variables puedo recibir info igual imporatne de 4*4 = 16 variables de entrada
cantidad de filtros es un hiperparametro
pooling operacion que resume la información de una región reduciendo su tamaño, lo que ayuda a disminuir complejidad del modelo, y hace mas robusto pequeñas varaiaciones o traslaciones en los datos obteiene le promedio o maximo, esto es para reducir cantidad de información pero maxAverage pooling o averagePoolling, es hiperparametros para decidir que me importa es decor una funcion de max o average es como una funcion de activacion y saber que tipo de pooling
esto debemos de tomarlo en cuenta porque el pooling se hace que disminuya información y de tal forma hacerlo para no hacerlo para quedarnos sin información sobre capa
ojo en las imagenes blanco y negro, es mas simple pero tenemos más canales en la realidad por rgb y tonalidad, entonces debemos encontrar variaciones en todos los canales ojo cuando parar? con max pooling si se redujo 4 veces la info? si aun se entiende entonces no fue relevantes
la ultima capa es una capa parecido a droppout
tenemos imagen blanco y negro -> 10 filtros ahora 10 imagenes luego pooling, luego le saco 20 filtros y luego pooling iugual pero mas pequeñas, es decir 20 imagenes mas pequeñas de la original, genero demasiada informacion de una sola imagen, el dropout bota el 25% de la info para no evitar sobreajuste sobre cada observacion y termina siendo el 25% de todos los datos, por ultimo hacemos flatten es matriz a vector, y sacamos una capa de 10 de 10 simbolos que tenian
otra cosa:
tengo 10 variables de salida:
si tenemos una sigmoide y un 1 parecido a 7 que van a activar de manera diferente las clases de 0 - 9:
0.1 0.9 0.2 0.15 0.4 0.1 0.15 0.8 0.05 0.3
suma 1? no debe de sumar 1? no bueno el solve de pytorch lo que hace es que hace que todo sume 1 cual valor tendrá valor mas alto? el del 1 entonces es 1 pero tambien se puede clasificar como 7 en logistica se coloca el treshold con 0.5 por ejemplo entonces estaria dos entradas una para 1 y otra para 7 pero con solve math tenemos una ponderacion de esto. hace como una normalizacion agarrando el maximo
lab 3 comparar red de ese lab con una cnn una cnn con mlp:
recordando parametros? capa 1 eran pixeles 784 y las egunda capa, supongamos 784 neuronas y tenemos 128 neuronas las fully conection newtorks conectaran entradas con neuronas entonces cuantos pesos tengo? 784 * 128 es decir para mlp tiene un montón de parametros, la idea con cnn es que con una fraccion de parametros tener el mismo rendimiento, es decir una fraccion por ejemplo 255 parametros
ahora graficar matriz confusion multi algo? entonces el clasificador era perfecto? con esto se ve, por ejemplo esperar errores en 7-1 0-8, etc porque son numeros que se parecen entre ellos, entonces hay que graficar esta matriz de confusion , hay que concentrarse en los erroes, y decir porque? es decir intentar con intuicion porque se confunde.
Clase 25082025¶
Redes Neuronales recuerrentes¶
Se usan en datos equenciales como fotogramas, palabras o lenguaje y sobre todo en series de tiempo. Son la base para que se usen los transformadores y LLMs.
La deficiencia de los MLPs es que cada punto y observaciones es independiente una de la otra. Pero cuando hay dependencias en un tiempo.
RNN¶
Fit forward netwoarl networks. Son el tipo de redes que la data entra , va en una direccion y sale. En cambio las RNN no cuentan como ese tipo , porque es de que los outputs de la neurona se vuelven los inputs de la misma.
El feedback loop, es como vamos a tratar el outuput como el input.
Clase 0109¶
REPASO¶
Viene
- Una de calculo
- Un caso
- Preguntas Cerradas
- Preguntas Abiertas
Muchas de las preguntas son laboratorios
Tema 1 Perceptron¶
El perceptron es un modelo de mln el problema es que resuelve problemas muy lineales.
Por eso se propuso el modelo multicapa. Lo interesante lo de las redes neuronales es lo que estamos haciendo es conectando un pereceptron uno detras de otro. Todas las neuronas de una capa estan conectadas con las de la siguiente capa.
El mecanismo de la red funciona de 2 formas, iniciamos de manera aleatoria y luego hacemos un paso de informacion o funcion de perdida para ver que tan bien o mal estan nuestros parametros.
Mi y diagnistico y mi y deben de ser parecidos.
Quremos simular el XOR con los pesos y bayases, el problema es que tenemos un mundo real generando procesos, y queremos con redes o con perceptrones simular el proceso natural. Queremos encontrar un modelo que me genere los mismos resultados que un proceso natural. Por eso vemos con nuestra funcion de perdida que tan lejos se acercan los valores y corregir los valores aleatorios.
Por simplicidad usamos simobide como funcion de activacion. Que lo que hace es aplicar no linealidad. Quiere decir que se va a encender o no se va a encender. Si aplicamos simboide como en este ejemplo
Por eso mismo podemos reescribir los valores de z3 con valores de a2 , w5 y w6 y b3 ya que los outputs de la anterior es los inputs de la siguiente
Pero para saber si esta bueno o malo usamos la funcion siguiente
Mi rango de numeros va entre 0 y 1. Lo que quiero medir es que los que esten cerca del 0 o cerca del 1 esten muy cerca de ellos osea como que los ponga a la apar. Por eso se usan logaritimica. Esto lo que hace es penalizar o apoyar a los extremos sobre los puntos medios.
Por eso se usa el BinaryCross Enthropy.
Lo que se usa en logaritmo es para saber que tan cerca es para las respuestas que yo hago.
SI la aplicamos nos daria algo asi
No hay tanto error, la funcion de perdida que utilicemos nos va a cambiar. Aqui no cambiara tanto los parametros en la siguiente vuelta, esto depende del dominio mucho.
Su funcion de actualizacion es desenso gradiente, este nos dice que el peso actual es el peso actual es el learning rate o el valor del parametro.
El gradiente de una funcion es una direccion de maximo cambio.
EL gradiente es la direccion en donde hay un cambio a un cero absoluto osea una solucion. La funcion de perdida la pdoemos pensar como un plano de n dimensiones y me calcula cuanta perdida tenemos en esos parametros. El gradiente es cuando estamos en una posicion y es el punto con mayor inclinacion, por eso sirve para encontrar ceros , porque lo que nos ayuda es llevarnos al mayor cambio que siempre convergen en soluciones. Por eso se miden con mejoras en esto.
Es vector el gradiente en cuanto cambio debo hacer en cada parametro para estar apuntando al punto de mayor inclinacion hacia el minimo.
El gradiente es la direccion, pero si damos todo el paso del gradiente, si lo tomas todo puede llegar a suceder que llegues a un punto que no es maximo o minimo. Ojo aqui en estos problemas tratamos de minimizar no maximizar.
Yo otengo que tratar de hacer s meter mi error en terminos de otras variables porque son mi input el output de la anterior.
Entonces resolvamos el gradiente para w5 el nuevo valor que va a tener.
Reuerda que la derivada de la funcion simboide es
Si es negativa, esto quiere decir es para que alcance un maimo en mi funcion debo disminuir mi valor.
Ahora ya calculamos el w_5 correcto
Optimizadores¶
El descenso gradiente tiene un problema es que no es tan suave el camino, y si decide que le siguiente esta en otra direccion mete ruido a su aprendizaje. Quiere decir
El descenso gradiente es lo que hace es algo asi.
Por eso hay mucha volatilidad en cambios de sistema.
El primer concepto es momentum, el momentum lo qrimero que metemos es un tema de recursividad,
Mira la ecuacion
Lo que me dice es que en el paso anterior voy a tomarlo en cuenta, es algo parecido a inercia. La idea es que mientras mas cambios le pongo a la misma direccion mas me va a costar el ruido al modelo basco. Por eso mira el cambio que hizo anteriormente.
El siguiente concepto es ADAGRAD,
Si yo introduczco un vector abajo, lo que yo estoy haciendo es convirtiendo el learning rate el vector. Por eso voy a tener un vector que me diga que para ese vector el learning rate es ese. Por eso mientras mas peque;o el denomiador mas peque;os son mism pasos para mantener estabilidad
Ahorita introdujimos tener un vector de learning rates para parametros.
Adam junta el momentum y especializacion de llearning rate. Osea un tipo de promedio exponencial
El primer termino que ves ahi
Mientras mas lejos vaya yo , menos me importara el de atras, osea tendre gradientes historicos. El 0.9 es el hiperparametro para que no decrezca tanto.
RNN¶
Las arquitecturas son informaciones que no podemos asumir independecia de variables. Hay tipos de datos que nos da informacion el contexto como los trazos de los numeros. El hecho de que este pixel este de un color en especifico aumenta la probabilida dque algunos de al rededor este coloreado. El hecho de informacion en contexto no se usa independencia
Las CNN tomaban en cuenta los datos informacion local espacial, como describir una matriz.
Las secuenciales es que el orden de los datos nos da informacion, osea que
El orden me dio informacion , osea que si contiene informacion respecto al proceso que intento simular. Osea que asumo independencia.
En mlps no pongo el orden o secuencia de los datos , es por eso que se propone algo asi.
Las fit forward netwalr networks. Tiene la caracteristicas de las RNN que no son asi porque tiene un looop
Nos deja con el feedback loop regresar la informacion d esalida como entrada.
Para evitar que se quede enloopado , le asignamos una ventana, osea una observacion del pesado o n observaciones del pasado y es un hiperparametro .
Ves que los pesos de las obervaciones anteriores influyen en las siguientes.
El problema es que el w4 crece de manera exponencial . Osea en algun momento w4 crece demasiado.
Osea
Vanishing gradiente problem¶
Osea que se vuelven demasiado peque;os y la red olvida dependencias lejanas debido a los pesos. La ultima observacion la observacin de 10 periodos para atras osea que la red perdio dependencias a largo plazo, osea solo puede tener problemas a corto plazo.
Exploding gradiente problem.¶
El otuput de combiaciones lineal es de w1 y w4 podria tender al mayor . Los pesos crecen de manera deshorbitada, la red comienza a cambiar valores de manera muy drasticamente.
Sucede cuando le doy mucha ventana a mi red recurrente.
Se deshestabilizan y dejan de aprender.
Fin de repaso
Clase 29092025¶
Aqui esta la resolucion del 8
LSTM¶
Los datos que hace son datos secuenciales. El lenguaje tambien lo puede analizar. Como funciona la RNN son la base por los problemas del gradiente construimos las lstm y luego transformadores y luego LLMS.
La idea principal es problema del gradiente.
El problema del gradiente que desparezca y explotara es la capacidad de memoria de la red.
Esto se traduce que no pueden calcular informacion a largo plazo. No puedo calcular el grado de importancia crecio exponencialmente o exploto. La red neurona l pierda e la importancia.
Queremos crear arquitectura que le meta memoria.
Lo que haremos es meterle complejidad a las compuertas. Osea le meto un poco mas de complejidad la compleja de enmedio ponderando como nuevas experiencias alteran nuestra experiencia base.
EL estado de la celda es nuestramemoria a largo plazo, pasa la informacion de un evento al siguiente
Tenemos 3 partes de calculos que utilizan el estado de la celda.
El forget gate. Divide el impacto de las iteraciones cuanto tengo que olvidar segun la informacion que estoy viendo. Lo que estamos haciendo es cambiando comportamiendo segun eventos recientes.
La funcion del forget gate le dice que % mantener y desechar. Osea con un 0.8 conservar el 80%.
La segunda partes es el input gate es crear un nuevo candidato para una nueva memoria. Lo unico que hacemos es cambiar la memoria. Osea como afecta la memoria a largo plazo.
El output gate. Es ver utilizar memoria a largo , corto plazo y memoria actual para tomar una desicion. Y se vuelve de corto plazo y output de la memoria.
Si se dan cuenta lo que estoy haciendo es agregarle las condiciones. Estoy ponderando mi memoria en cada paso. Entonces mitigo el crecimiendo exponencial.No hay ningun parametro si creo ventanas infinitas se crea un problema del gradiente que desvanece o explota.
Un LSTM funciona en miles de observaciones en el futuro , crece el futuro que podemos predecir
PROS VS CONTRAA¶
- Pors manejan efectivo de dependencias largas en secuencias
- Reduce el probleam de desvanecimiento.
Lo que hacen estos modelos es predecir cuanto la gente va a querer la cantidad de energia en el dia y ordenar un cronograma.
Ayuda a mantener la red saludable. En las horas no pico calcuraremos la cantidad en la siguiente hora. Calculamos cada hora que va a suceder. En horas pico calculamos cada 15 minutos.
Un modelo que encuentra patrones temporales nos ayuda a hacer este tipo de analisis.
Entonces como los asistentes de voz reciben instrucciones precisas y cortas usan los LSTM.
Se pierde en tareas mucho mas complejas a diferencia que un LLMs. Es por el motivo que salieron los transformadores.
CLASE 06102025¶
Deep learning y Sistemas Inteligentes¶
Vimos un tipo de red que resolvia lo de las recurrentes, asi que metimos algo que era la memoria para extenderlo.
El tipo de datos que analizan las LSTM , son datos sequenciales el estudio esta en lenguaje. Tokenizar es partir en partes , cuando tokenizamos agarramos una oracion y aisgnamos un numero a una palabra en especifico. Separamos en parte y agarramos algo y le indicamos jerarquia
Las computadoras entiendnen los numeros por su numeracion ordinal.Lo que queremos es encontrar un sistema con valores que guardan relacion en el lenguaje. Y a eso le decimos embedding , representamos en manera de vectores la informacion de las palabras.
Una One Hot Embedding, por ejemplo una variable categoria la parseamos en un modelo y que teenmos n variables . Este problema al asignarle a cada plaabra una etiqueta de un numero, en el contexto que hablamos no tiene un ordne por eso el One hot encodding que crea una columna por variable en donde el valor 1 representa la relacion que se analiza , y al tener la otra columna lo mismo y las demas aumenta su dimensionalidad ademas que esto se mira va en datsaset desbalanceados
En el one hot embedding usamos un vector con un numero en la posicion que la representa. Es mas interpretable para los humanos , pero el problema es la dimensionalidad.
El problema es que no guardamos relaciones semanticas, este tipo de encoding no nos dice que estamos haciendo.
Por eso el orden , sintaxis y gramatica se ignora epicamente y no le dio importancia
El primer metodo se llama
TF - IDF¶
Tf es temper frequency el primer calculo que hago es que tanto aparece un termino en un documento . Y el segundo es el que tantao aparece la frequencia inversa en todos los docs que yo tenga. Osea que las palabras mas importantes apareceran con gran presencia pero no en todas.
TF y idf nos da una importancia relativa de la palabra segun el contexto, por eso se toma como si fuese muy importante debido a su relevancia.
Seguimos sin entender la semantica del idioma, aunque existan 2 palabras importantes no podemos guardar la informacion que hay entre ellas. Esto es util si queremos usar cosas como valles. Lo que queremos hacer es necesitmaos encontrar una estructura y una forma de relacionar terminos.
El valor que yo encuentre de las palabras deberia poderlo intercambiar entre oraciones. Por ejemplo corinto y rojo tienen un valor similiar. Por eso debemos de ponerle numeros.
Word2vec¶
La idea es que palabras parecidas con el mismo valor semantica tengan vectores similiares. Lo que hace word2vec es poner los vectores como semejantes, por eso debemos de saber las dimensiones que se suman para generar el vector de la palabra.
Queremos expresar el lenguaje en un espacio latente. Si esta bien hecho las palabras similares quedan a la apar
Voy a calcular mi espacio latente en n dimensiones. Bajamos el orden de magnitud. Necesitamos una cantidad grande de datos para encontrar valores a asignar.
skip-grom empareja palabras con ciertas palabras que tienen cierta probabilidad. Osea ejemplo "Mi carro es [aqui ira un adjetivo]" , son palabra que aparecen juntas como "como estas". Lo que estoy haciendo es crear mis parents de x y y. Y como son palabras que vienen juntas lo que hago es encontrar palabras que se relacionan entre ellas.
Podemos ver que tenemos 2 vectores de 2 palabras similares lo que hacemos es encodear y decodear de un lado y el otro para poder en un solo vertice unir los resultados de ambos siendo en como se representa de mejor manera el valor .
Esto no sabemos que si esta bien o mal es solo una representacion.
Cuando las repreesentaciones vectoriales entre conceptos es bien parecido entre los mismos idiomas, osea que los idiomas son todas la misma mrd ninguno original todos bodrio.
En realidad es la manera en como el humano de una caja de conceptos o un espacio vectorial los obtiene y luego lo representamos de difernete manera osea nuestras palabras.
Lo bueno de esto es que vamos a tener una capa en el lab que hace esto mismo que reduce la dimensionalidad. La idea es que sea una fraccion osea que actue con menos.
Transformadores¶
Es el origen de los llms. En 2017 se crearon arquitecturas que se ejecuta en paralello.
Lo qe hizo google es que el valor de una celda se puede ejecutar en simultaneao a diferencia de sequencial . Por eso no podemos mantener relaciones a mucho tiempo.
Este deja mantener las relaciones a largo plazo. A momento de entrenar en paralello . El de transformeres es una parte d ela arqiutectura , por eso el embedding logra guardar los calculos de una vez
La arquitectura tiene un encoder y un decoder, el encoder lo lleva a un espacio latente y un decoder lo saca de ahi.
El concepto de un lstm indtroducimos el concepto en memoria , a la red lo volvere mas reciliente a los cambios.
Osea podemos hacer un vinculo de palabra sque no estan a la apar de una de otra. Sino que podemos tener eventos que suceden eventos antes de eventos importantes. Por ello se conserva mas el contexto. ESE VINCULO SE LLAMA "ATENCION".
Lo que calculamos es una relevancia para todas las palabras contra todas las palabras de la misma oracion. Y vemos que como estan relacionadas con otras de la misma oracion.
Lo que hacemos es calcular relevancia sobre si misma y contra los demas tokens.
3 factores
- querys . Describen el valor d eimportancia de mi palabra contra otra palabra
- keys Valor dela palabra
- values Es la combinacion de las 2 y guardamos el valor d ela relacion d epalabra.s
El problema es que el lenguaje es mas complejo que importancia entre palabras. Lo queremos hacer es encontrar relaciones entre todas las palabras. queremos guardar todas las relaciones n osolo la mas importante
Miltiheaded attention¶
Metemos varios transformadores. Y encuentran diferentes relaciones .
Funcionamiento¶
Lo que quiero hacer es meter en un espacio mis palabras . Este espacio va a ser mi idioma origen y mi idioma estino va a ser el ecoder que va a jalar del espacio y va a darles otro valor pero tiene que entender las relaciones.
Clase 13102025¶
LLMS¶
Un LLM es una tarea de clasificacion y el modelo o red neuronal lo que hace es asignarle una probabilidad a cada palabra.
Dependiendo del lenguaje tiene varias dclases. L estoy dando a cada palabra una probabilidad de entre 1/ miles de palabras las clases son las palabras.
Tenemos de encontrar una manera concentrar la distribucion a un numero mas peque;o de palabras. Como es que funciona el mecanismo como en el que estamos rpesnentaodo .
CHATGPT
Agarra un prompt saca una secuencia de sus respuetas.
Saca la primera palabra, la siguiente palabra y la siguiente en donde lo que hace es dado la palabra anterior predicha .
El llm aprende a hablar 1 palabr a la vez. Lo que hace es ver cual es el siguiente token mas palabra y asi.
El prompt que devuelve gpt es estocastico porque si 2 personas ingresan el mismo prompt no genera la misma respeuesta.
GPT escrapearon paginas de internet, libros , articulos etc. Para poder entrenarla.
Ahora el problema es que busca informacion enunciativa no interrogativa entonces si le preguntamos no sabra buscar, por eso . Necesitamos arreglar el dataset para que la comunicacion fuera segun la utilizacion
/ GPT Generative Pretrain Transformer
El pretrain que es ?
El modelo paso 3 etapas, la primera es con el transformardor le pasaron wikipedia, articulos etc. Y el modelo aprendio 2 cosas, a ser nazi y la estructura del idioma, pero no entendia la comunicacion enunciativa solo declarativa
Introduction by tunning fue lo que hicieron despues. Generar un dataset de preguntas respuestas, preguntas respuestas. Lo finetunnearon para que el modelo entendiera las preguntas y aprendiera las respuestas.
Aprendizaje de refuerzo, que era sacar un chat gpt basico. Y calificaban la respuestas para ver si estaba bien o mal. Y luego el modelo volvia a comentar dadndo el eedback al humano.