Curso de Matemáticas para IA · Lección 38 de 180
Álgebra lineal en una red neuronal pequeña
Sigue cada forma, sesgo, activación y cambio de rango en una red de dos capas mediante un ejemplo con NumPy y un explorador interactivo.
Una red neuronal puede parecer una sucesión de operaciones con matrices, pero cada paso cambia el significado de los números. Seguir una red pequeña desde la entrada hasta la salida permite ver el proceso completo: las dimensiones de las matrices determinan qué transformaciones pueden conectarse, los sesgos trasladan esas transformaciones, el rango limita las direcciones independientes y una función de activación cambia lo que puede expresar la composición.
Al terminar, podrás seguir cada dimensión, calcular a mano o con NumPy una red de dos capas y explicar en qué punto afectan al resultado el sesgo, el rango y la activación.
Esta lección reúne tres herramientas de lecciones anteriores: resolver sistemas lineales sin invertir explícitamente la matriz, usar el núcleo y la imagen para describir direcciones perdidas y alcanzables, y usar un sesgo para trasladar una transformación afín. El capítulo 2 de Mathematics for Machine Learning aporta el álgebra lineal necesaria para esta síntesis. La red, los números, el código, la visualización y los ejercicios que siguen son originales.
Sigue las dimensiones de dos capas afines
Aquí, «red de dos capas» significa dos transformaciones afines aprendidas, con una activación oculta entre ambas. Mantendremos la salida como dos puntuaciones; no aplicaremos ninguna conversión a probabilidades ni una decisión de clase. Sea un vector columna de entrada. Cada transformación afín combina una matriz con un vector de sesgo:
La dimensión compartida entre dos transformaciones consecutivas debe coincidir: tiene dos columnas para las dos características de entrada y dos filas para sus salidas ocultas. A continuación, recibe esos dos valores ocultos y devuelve dos puntuaciones. El sesgo se suma una vez a cada coordenada oculta y , una vez a cada salida. Una matriz con dimensiones incompatibles no puede realizar la transformación indicada; esta es la misma comprobación de dimensiones que hace el producto matricial de NumPy.
- Entrada · 2 características
- Transformación afín · 2 valores ocultos
- Activación oculta
- Transformación afín · 2 puntuaciones
- Salida · 2 puntuaciones
z = W₁x + b₁
h = σ(z)
y = W₂h + b₂
- Preactivación z
- (, )
- Salida oculta h
- (, )
- Puntuaciones y
- (, )
- Unidades ocultas activas
- Rango del jacobiano local
Una preactivación es exactamente cero, donde ReLU tiene un vértice. El jacobiano no está definido en ese punto; examina cualquiera de las regiones vecinas para ver su rango local.
La entrada inicial es 1, 1; la salida oculta es 0, 0.5; las puntuaciones son 1.5, −0.5.
Los valores iniciales de la figura usan estos parámetros fijos, elegidos manualmente:
El ejemplo es lo bastante pequeño como para seguirlo entrada por entrada. Sus valores se han elegido para mostrar cómo ReLU desactiva una unidad oculta; no son parámetros entrenados ni representan un modelo típico.
Calcula una predicción y conserva cada resultado intermedio
Tomemos . La primera matriz combina las dos coordenadas de entrada de distintas maneras. Al sumar el sesgo, se traslada cada resultado:
El operador @ de NumPy realiza la multiplicación de matrices. Las operaciones + b siguientes usan el broadcasting elemento a elemento de NumPy para sumar un sesgo de longitud dos a un resultado de longitud dos. Esta pequeña implementación imprime los vectores intermedios reales:
import numpy as np
W1 = np.array([[1.0, -1.0], [1.0, 1.0]]) # (2, 2)
b1 = np.array([-0.5, -1.5]) # (2,)
W2 = np.array([[1.0, 2.0], [-1.0, 1.0]]) # (2, 2)
b2 = np.array([0.5, -1.0]) # (2,)
x = np.array([1.0, 1.0]) # (2,)
z = W1 @ x + b1 # (2,) = (2, 2) @ (2,) + (2,)
h = np.maximum(z, 0.0) # (2,), elementwise ReLU
y = W2 @ h + b2 # (2,) = (2, 2) @ (2,) + (2,)
print('z:', z) # [-0.5 0.5]
print('h:', h) # [0. 0.5]
print('y:', y) # [ 1.5 -0.5]
La misma lógica de dimensiones se aplica a un lote. Si se almacenan ejemplos en filas, el arreglo tiene dimensión ; se multiplica por la derecha por para producir valores ocultos con dimensión y, después, por para obtener puntuaciones también con dimensión . La capa Linear de PyTorch sigue esa convención por filas: su peso tiene dimensión y calcula . Por tanto, Linear(2, 2) almacena un peso de dimensión y un sesgo de longitud dos. ReLU de PyTorch se aplica elemento a elemento y conserva la dimensión de entrada, como en el paso anterior (documentación de Linear, de ReLU y de NumPy matmul).
Sin activación, dos capas siguen siendo una transformación afín
El sesgo de una capa afín es una traslación. Si el paso oculto es la identidad, se pueden componer las dos capas mediante sustitución:
Así, apilar más transformaciones afines sin una activación no lineal no convierte la regla global de entrada a salida en una regla no lineal: las matrices se multiplican para formar una sola matriz y los sesgos se combinan en un único desplazamiento. Con los valores elegidos, y . Por tanto, la versión con identidad transforma en .
El rango de una matriz cuenta sus direcciones de salida independientes. En este ejemplo con identidad, tanto como tienen rango dos, y su producto también tiene rango dos. Si la anchura oculta de una red es , el rango de la parte lineal de una composición afín no puede superar , ya que pasa por solo coordenadas. Si alguna de las matrices tiene un rango menor, el rango de la composición podría ser aún más bajo. Estos son límites superiores: una capa estrecha puede ser un cuello de botella, pero la anchura por sí sola no garantiza un rango concreto.
ReLU hace que la transformación sea afín a trozos
ReLU cambia una coordenada oculta a cero cuando su preactivación es negativa. En cualquier región donde los signos de todas las preactivaciones se mantengan, el conjunto de unidades activas también es fijo. Sea una matriz diagonal con un por cada unidad ReLU activa y un por cada unidad inactiva. Dentro de esa región, la parte lineal local de la red de dos capas es
Para la entrada del ejemplo, , así que . Entonces,
Cerca de esta entrada, las dos puntuaciones de salida cambian según la misma combinación de entrada, ; la dirección de diferencia no tiene efecto mientras la primera unidad siga inactiva. La matriz describe los cambios locales dentro de esta región de activación, no una matriz global única para toda la red. En el límite de ReLU, cuando una preactivación es cero, la función tiene un vértice y el jacobiano de una sola región no describe ambos lados.
La anchura oculta y los pesos también limitan lo que puede expresar la red. En este ejemplo concreto, las dos rectas donde la preactivación es cero dividen el plano de entrada en regiones con distintos patrones de unidades activas; cada región tiene una regla afín y, al cruzar una recta, esa regla puede cambiar. En general, incluir una activación no lineal permite funciones no lineales, pero no hace que cualquier elección de pesos sea expresiva. Una unidad oculta podría permanecer desactivada para las entradas de interés, o las matrices podrían colapsar direcciones. Las dimensiones de las matrices, sus rangos, los desplazamientos de los sesgos y el patrón de activación contribuyen al comportamiento.
Por eso, los valores de salida por sí solos son una señal limitada al depurar. Sigue las dimensiones para detectar conexiones incompatibles, compara con para ver qué características quedaron bloqueadas e inspecciona los rangos de las capas o el jacobiano local para identificar direcciones perdidas. Cuando un paso de ajuste separado te pida resolver , la lección 025 explica por qué un método numérico evita los riesgos de formar . La propagación hacia delante de una red usa productos de matrices; no necesita invertir los pesos aprendidos.
Una vez claras las transformaciones y sus direcciones, la siguiente pregunta es cuánto mide un vector. La lección 039 presenta las normas para medir la magnitud de los vectores, comparar escalas de embeddings y describir penalizaciones de parámetros.
Comprueba lo que has entendido
Question 1
Para la red de esta lección, indica las dimensiones de x, W₁, b₁, z, h, W₂, b₂ e y. ¿Por qué puede W₂ recibir h?
Show the step-by-step solution
tiene dimensión , tiene y tiene ; tanto como tienen dimensión . La segunda matriz, , tiene dimensión y su sesgo tiene dimensión , lo que produce un de dimensión . La dimensión interna de es dos, que coincide con las dos entradas de ; por eso la matriz transforma el vector oculto en dos puntuaciones de salida.
Question 2
Con x = (1, 1)ᵀ, calcula z, h e y con las matrices y ReLU de esta lección. Muestra los pasos del sesgo y la activación.
Show the step-by-step solution
Primero, ; al sumar se obtiene . Al aplicar ReLU coordenada a coordenada, resulta . Después, ; al sumar se obtiene .
Question 3
¿Por qué al quitar la activación oculta queda una transformación afín? Calcula la matriz y el sesgo combinados para este ejemplo.
Show the step-by-step solution
Sustituye la primera regla afín en la segunda: . Aquí, . Además, ; al sumar , el sesgo combinado es . El resultado es una sola transformación afín porque sigue teniendo la forma .
Question 4
Para x = (1, 1)ᵀ, ¿qué salida produce la versión con el paso oculto de identidad? ¿Cómo se compara con el resultado de ReLU?
Show the step-by-step solution
Con el paso de identidad, usa la transformación combinada de la solución anterior: . Con ReLU, la salida es porque la primera preactivación oculta es negativa y se convierte en cero, mientras que la segunda permanece en . La diferencia se debe a esa activación coordenada a coordenada.
Question 5
Una red transforma 5 entradas mediante una capa oculta de anchura 3 y produce 4 salidas, sin activación. ¿Cuál es el rango máximo posible de su parte lineal? ¿Y si la primera matriz de pesos tiene rango 2 y la segunda rango 3?
Show the step-by-step solution
La matriz compuesta se factoriza a través de tres coordenadas ocultas, por lo que su rango es como máximo tres. Tampoco puede superar las cinco dimensiones de entrada ni las cuatro de salida. Si la primera matriz tiene rango dos y la segunda rango tres, el rango del producto como máximo es el menor de esos límites: dos. Son límites superiores; el producto real podría tener un rango aún menor si las direcciones no están alineadas.
Question 6
En la entrada del ejemplo, la primera unidad ReLU está desactivada y la segunda, activa. Calcula el rango del jacobiano local y explica su significado.
Show the step-by-step solution
La máscara de activación es . Al multiplicar, se obtiene . La segunda columna es igual a la primera, así que solo hay una columna independiente y el rango es uno. Dentro de esta región de activación, los pequeños cambios de entrada en una dirección no modifican la salida; ambas puntuaciones dependen de la misma combinación de entrada. Es una afirmación local, porque al cambiar ReLU también cambia la matriz .
Question 7
¿Qué cambia cuando una preactivación ReLU es exactamente cero? ¿Se puede usar el jacobiano de cualquiera de las regiones vecinas como derivada única en ese punto?
Show the step-by-step solution
ReLU tiene una esquina en cero: su pendiente es cero justo a la izquierda y uno justo a la derecha. Si una preactivación es exactamente cero, la función no es diferenciable en esa coordenada, así que no existe un jacobiano ordinario único que describa ambos lados. La salida de la red sigue estando definida; lo que falla es una aproximación lineal local única a través del límite.
Question 8
Un lote contiene 8 ejemplos con 4 características cada uno. ¿Qué dimensiones tienen la entrada y la salida de PyTorch Linear(4, 3), y qué dimensión tiene el peso?
Show the step-by-step solution
La entrada del lote tiene dimensión : ocho filas y cuatro características de entrada. PyTorch almacena el peso de la capa con dimensión , por lo que tiene ; el sesgo tiene dimensión . La capa devuelve : conserva la dimensión del lote y sustituye la última dimensión de características por tres salidas.