ML/AIMLE·AIMachine Learning Engineering
Ruta de aprendizaje · Nivel 1 de 10

Nivel 1 · Matemáticas para IA

Las cinco ideas matemáticas que hay detrás de cualquier modelo de IA, explicadas desde cero: primero la intuición, luego un ejemplo que puedes hacer a mano y, al final, dónde aparece en la IA real.

Unas 4–6 horas · Solo necesitas saber sumar, multiplicar y qué es una función · Código de todos los ejemplos en notebooks/nivel1_matematicas.py

01Cómo usar esta lección

No hace falta ser matemático para trabajar en IA. Hace falta entender cinco ideas, porque aparecen en todos los modelos. Esta lección no busca que memorices fórmulas, sino que puedas explicar cada idea con tus palabras.

ConceptoPregunta que respondeEn un modelo de IA
Vector¿Cómo convierto algo en números?Cada dato: una fila de una tabla, una imagen, una palabra
Matriz¿Cómo transformo esos números?Cada capa de una red neuronal
DerivadaSi cambio un poco la entrada, ¿cuánto cambia la salida?Saber hacia dónde mover cada parámetro
Gradiente y descenso¿Cómo encuentro el punto más bajo?El entrenamiento: reducir el error paso a paso
Probabilidad¿Cómo expreso que no estoy seguro?Las predicciones: «gato, con un 94 %»

Cada apartado sigue el mismo orden: la idea en una frase, un ejemplo con números pequeños, dónde aparece en IA y un trozo de código para comprobarlo. Hazlos con papel y lápiz: es la forma más rápida de que se queden.

021 · Vectores

La idea en una fraseUn vector es una lista de números que describe algo.

Una vivienda de 90 m², con 3 habitaciones y a 2 km del centro, es el vector (90, 3, 2). El orden importa: cada posición significa siempre lo mismo. Con dos números, un vector se puede dibujar como una flecha.

01234501234u = (3, 1)v = (1, 2)u + v = (4, 3)
Un vector de dos números es una flecha. Sumar vectores es poner una flecha a continuación de la otra: (3, 1) + (1, 2) = (4, 3).

Tres operaciones que debes saber hacer a mano

  • Sumar: posición a posición. (3, 1) + (1, 2) = (4, 3).
  • Multiplicar por un número: todas las posiciones. 2 · (3, 1) = (6, 2). La flecha se alarga el doble.
  • Producto escalar: multiplicar posición a posición y sumarlo todo. El resultado es un solo número.
    (3,1)⋅(1,2)=3⋅1+1⋅2=5(3, 1) \cdot (1, 2) = 3 \cdot 1 + 1 \cdot 2 = 5

El producto escalar mide parecido

Puntuamos del 1 al 5 cuánto les gustan a tres personas las películas de (acción, romance): Ana (5, 1), Luis (4, 2), Marta (1, 5).

Ana⋅Luis=5⋅4+1⋅2=22Ana⋅Marta=5⋅1+1⋅5=10\begin{gathered} \text{Ana} \cdot \text{Luis} = 5\cdot4 + 1\cdot2 = 22 \\ \text{Ana} \cdot \text{Marta} = 5\cdot1 + 1\cdot5 = 10 \end{gathered}

Ana y Luis tienen gustos parecidos y su producto escalar es mayor. Cuando dos vectores «apuntan hacia el mismo lado», el producto escalar es grande; si apuntan a lados distintos, es pequeño (o negativo).

¿Dónde aparece en IA? Un recomendador compara tus gustos con los de otras personas justo así. En un LLM, cada palabra es un vector de miles de números (un embedding), y el mecanismo de atención del Transformer decide a qué palabras prestar atención calculando productos escalares.

Python
import numpy as np

u = np.array([3, 1])
v = np.array([1, 2])

u + v          # array([4, 3])
2 * u          # array([6, 2])
u @ v          # 5  → producto escalar: 3·1 + 1·2

ana, luis, marta = np.array([5, 1]), np.array([4, 2]), np.array([1, 5])
ana @ luis     # 22 → gustos parecidos
ana @ marta    # 10 → gustos distintos

032 · Matrices

La idea en una fraseUna matriz es una tabla de números que transforma un vector en otro.

Quieres comprar 2 manzanas y 3 panes: tu cesta es el vector (2, 3). Cada tienda tiene sus precios, y los ponemos en una tabla, una fila por tienda:

ManzanaPan
Tienda A0,5 €1,0 €
Tienda B0,4 €1,2 €

¿Cuánto cuesta la cesta en cada tienda? Para cada fila, un producto escalar con la cesta:

(0,510,41,2)(23)=(0,5⋅2+1⋅30,4⋅2+1,2⋅3)=(44,4)\begin{pmatrix} 0{,}5 & 1 \\ 0{,}4 & 1{,}2 \end{pmatrix} \begin{pmatrix} 2 \\ 3 \end{pmatrix} = \begin{pmatrix} 0{,}5\cdot2 + 1\cdot3 \\ 0{,}4\cdot2 + 1{,}2\cdot3 \end{pmatrix} = \begin{pmatrix} 4 \\ 4{,}4 \end{pmatrix}

Eso es multiplicar una matriz por un vector: cada fila hace un producto escalar con el vector, y cada resultado es un número de la salida.

La regla de las formas

Una matriz de m filas y n columnas se escribe (m × n). Solo se pueden multiplicar si los números de dentro coinciden, y el resultado se queda con los de fuera:

(m×n‾)⋅(n‾×p)=(m×p)(m \times \underline{n}) \cdot (\underline{n} \times p) = (m \times p)

Error típico: más de la mitad de los errores al programar redes neuronales son formas que no encajan. Antes de multiplicar, escribe las formas y comprueba que los números de dentro coinciden.

¿Dónde aparece en IA? una capa de una red neuronal es exactamente esto: una matriz de «pesos» que multiplica al vector de entrada. Aprender consiste en ajustar los números de esa matriz.

Python
precios = np.array([[0.5, 1.0],    # tienda A: manzana, pan
                    [0.4, 1.2]])   # tienda B: manzana, pan
cesta = np.array([2, 3])           # 2 manzanas, 3 panes
precios @ cesta                    # array([4. , 4.4])  → la tienda A sale más barata

043 · Derivadas

La idea en una fraseLa derivada dice cuánto cambia el resultado cuando cambias un poquito la entrada.

Piensa en el velocímetro de un coche: no te dice dónde estás, sino lo rápido que cambia tu posición en este momento. La derivada es el velocímetro de una función.

Ejemplo con f(x)=x2f(x) = x^2 en x = 3, donde f(3) = 9. Avanzamos un poquito, h, y miramos cuánto sube por cada unidad avanzada:

Paso hf(3 + h)Subida por unidad: (f(3 + h) − 9) / h
0,19,616,1
0,019,06016,01
0,0019,0060016,001

Cuanto más pequeño es el paso, más se acerca a 6. Esa es la derivada en x = 3, y es la pendiente de la recta que toca la curva en ese punto:

01234505101520 +1+6 (3, 9)
La curva es y = x². La recta roja toca la curva en x = 3 y tiene pendiente 6: si avanzas 1 hacia la derecha, sube 6. Eso es la derivada en ese punto.

No hace falta hacer esa tabla cada vez: hay reglas. La que más usarás es xn→n xn−1x^n \rightarrow n\,x^{n-1}; por ejemplo, la derivada de x2x^2 es 2x2x, y en x = 3 vale 6.

Lo que de verdad importa: el signo

  • Derivada positiva: si aumentas x, f sube. Para bajar, mueve x hacia la izquierda.
  • Derivada negativa: si aumentas x, f baja. Para bajar, mueve x hacia la derecha.
  • Derivada cero: estás en un punto llano, quizá el fondo del valle.

¿Dónde aparece en IA? f será el error del modelo y x uno de sus parámetros. La derivada le dice al modelo en qué sentido mover ese parámetro para equivocarse menos.

Python
f = lambda x: x**2
for h in (0.1, 0.01, 0.001):
    print(h, (f(3 + h) - f(3)) / h)   # 6.1 · 6.01 · 6.001 → se acerca a 6

Mira cómo cambia la pendiente a lo largo de una curva en el laboratorio de la función sigmoide.

054 · Regla de la cadena

La idea en una fraseSi una cosa depende de otra que a su vez depende de una tercera, los ritmos de cambio se multiplican.

Imagina tres engranajes. Si A gira 2 veces más rápido que B, y B gira 3 veces más rápido que C, entonces A gira 2 · 3 = 6 veces más rápido que C. Eso es la regla de la cadena.

Ejemplo: y=(2x+1)2y = (2x + 1)^2. Hay dos pasos encadenados: primero u=2x+1u = 2x + 1, después y=u2y = u^2.

  1. ¿Cuánto cambia u cuando cambia x? dudx=2\frac{du}{dx} = 2
  2. ¿Cuánto cambia y cuando cambia u? dydu=2u\frac{dy}{du} = 2u. En x = 1, u = 3, así que vale 6.
  3. Se multiplican: dydx=6⋅2=12\frac{dy}{dx} = 6 \cdot 2 = 12.

Comprobación: si x pasa de 1 a 1,001, y pasa de 9 a 9,012. Ha subido 0,012 por un avance de 0,001: unas 12 veces más. ✓

¿Dónde aparece en IA? una red neuronal es una cadena de capas. Para saber cómo afecta al error un peso de la primera capa, se multiplican los ritmos de cambio de todas las capas que hay detrás. Ese algoritmo se llama backpropagation y no es más que la regla de la cadena aplicada de la salida hacia la entrada.

Sigue los números de una red completa en el laboratorio de backpropagation paso a paso.

065 · Gradiente

La idea en una fraseEl gradiente es una flecha que apunta hacia donde la función sube más rápido.

Un modelo no tiene un parámetro, tiene miles o millones. Cuando hay varias variables, se calcula una derivada por cada una, moviendo solo esa y dejando las demás quietas (derivada parcial). Juntas forman un vector: el gradiente, que se escribe ∇f\nabla f.

Ejemplo: f(x,y)=x2+y2f(x, y) = x^2 + y^2 en el punto (1, 2).

  • Moviendo solo x, la y es una constante: ∂f∂x=2x=2\frac{\partial f}{\partial x} = 2x = 2.
  • Moviendo solo y: ∂f∂y=2y=4\frac{\partial f}{\partial y} = 2y = 4.
∇f(1,2)=(2, 4)\nabla f(1, 2) = (2,\ 4)

Imagina que estás en una montaña con niebla y solo notas la inclinación bajo tus pies. El gradiente es la flecha que apunta cuesta arriba, por el camino más empinado. Si quieres bajar, camina en sentido contrario al gradiente.

¿Dónde aparece en IA? la «montaña» es el error del modelo y cada dirección es un parámetro. El gradiente dice, para cada peso a la vez, cuánto y en qué sentido cambiarlo.

076 · Descenso de gradiente

La idea en una fraseAprender es bajar la montaña del error dando pasos pequeños en contra del gradiente.

La receta completa cabe en una línea: nuevo valor = valor actual − η × pendiente.

w←w−η dLdww \leftarrow w - \eta\, \frac{dL}{dw}

η (la letra griega «eta») es la tasa de aprendizaje: el tamaño del paso. Vamos a hacerlo a mano con la pérdida L(w)=(w−3)2L(w) = (w - 3)^2, cuyo mínimo está en w = 3. Su derivada es 2(w−3)2(w - 3). Empezamos en w = 0 con η = 0,1:

PasowPérdida L(w)PendienteSiguiente w = w − 0,1 · pendiente
009−60 + 0,6 = 0,6
10,65,76−4,80,6 + 0,48 = 1,08
21,083,69−3,841,08 + 0,384 = 1,464
31,4642,36−3,071,464 + 0,307 = 1,771
41,7711,51−2,461,771 + 0,246 = 2,017

Fíjate: la pendiente es negativa, así que restarla suma y w avanza hacia la derecha, hacia el 3. Y la pérdida baja en cada paso: 9 → 5,76 → 3,69 → 2,36 → 1,51.

0123456036912paso 0paso 1paso 2mínimo (w = 3)
Empezamos en w = 0 con η = 0,1. Cada paso baja por la curva y es más corto que el anterior, porque cerca del fondo la pendiente es menor.

El tamaño del paso importa

Tasa ηw tras 20 pasos (objetivo: 3)Qué pasa
0,010,997Pasos demasiado pequeños: avanza lentísimo
0,12,965Bien: casi ha llegado
1,1−112Pasos demasiado grandes: se pasa de largo cada vez más y se escapa

Error típico: si al entrenar un modelo el error sube o sale nan, lo primero que hay que probar es una tasa de aprendizaje más pequeña.

Python
L  = lambda w: (w - 3)**2      # pérdida: mínima en w = 3
dL = lambda w: 2 * (w - 3)      # su derivada (la pendiente)

w, eta = 0.0, 0.1
for paso in range(6):
    print(paso, round(w, 4), round(L(w), 4))
    w = w - eta * dL(w)          # ¡esta línea es todo el aprendizaje!

Experimenta con la tasa de aprendizaje y distintos terrenos en el laboratorio de descenso de gradiente.

087 · Probabilidad

La idea en una fraseUna probabilidad es un número entre 0 y 1 que dice lo seguros que estamos de algo.

0 es «imposible», 1 es «seguro» y 0,5 es «tan probable como que no». Los modelos no dicen «es un gato»: dicen «gato, 0,94».

La media

Si tiras un dado muchas veces, ¿qué valor sale de media? (1+2+3+4+5+6)/6=3,5(1+2+3+4+5+6)/6 = 3{,}5. Aunque ninguna tirada da 3,5, la media de 10.000 tiradas simuladas sale 3,504. Cuanto más datos, más se acerca la media observada a la teórica: por eso los modelos necesitan muchos ejemplos.

Pensar con frecuencias: el caso de los falsos positivos

Una enfermedad afecta a 1 de cada 100 personas. Un test la detecta en el 99 % de los enfermos, pero también da positivo en el 5 % de los sanos. Si das positivo, ¿qué probabilidad hay de que estés enfermo? En vez de fórmulas, imagina 1.000 personas:

PersonasDan positivo
Enfermas (1 %)10≈ 10 (el 99 %)
Sanas (99 %)990≈ 50 (el 5 %)
Total1.000≈ 60

De unos 60 positivos, solo 10 están enfermos: alrededor del 17 %, no el 99 %. Cuando algo es raro, hasta un buen detector da muchas falsas alarmas.

¿Dónde aparece en IA? es la razón por la que la «exactitud» engaña cuando una clase es rara (fraude, averías, enfermedades). Lo verás en detalle al estudiar métricas de clasificación.

Softmax: de puntuaciones a probabilidades

Un clasificador da puntuaciones sueltas, por ejemplo gato 2, perro 1, pájaro 0,1. Softmax las convierte en probabilidades: todas positivas y que suman 1, y la mayor puntuación se lleva la mayor probabilidad.

softmax(2, 1, 0,1)=(0,66, 0,24, 0,10)\text{softmax}(2,\ 1,\ 0{,}1) = (0{,}66,\ 0{,}24,\ 0{,}10)

¿Dónde aparece en IA? es la última capa de casi todos los clasificadores, y la que usa un LLM para elegir la siguiente palabra.

09Ejercicios

Hazlos con papel y lápiz antes de abrir la solución. Si te atascas, abre el ejercicio y lee solo la pista.

Ejercicio 1Suma los vectores (2, 5) y (1, −1), y multiplica el resultado por 3.

Pista: se opera posición a posición.

Solución

(2 + 1, 5 − 1) = (3, 4). Por 3: (9, 12).

Ejercicio 2Calcula el producto escalar de (1, 2, 3) y (4, 0, −1).

Pista: multiplica cada pareja y suma los tres resultados.

Solución

1·4 + 2·0 + 3·(−1) = 4 + 0 − 3 = 1.

Ejercicio 3Pedro puntúa (acción, romance) con (1, 4). ¿Se parece más a Ana (5, 1) o a Marta (1, 5)?
Solución

Pedro · Ana = 5 + 4 = 9. Pedro · Marta = 1 + 20 = 21. Se parece más a Marta.

Ejercicio 4Multiplica la matriz [[1, 2], [0, 1]] por el vector (3, 1).

Pista: cada fila de la matriz hace un producto escalar con el vector.

Solución

Primera fila: 1·3 + 2·1 = 5. Segunda fila: 0·3 + 1·1 = 1. Resultado: (5, 1).

Ejercicio 5¿Se puede multiplicar una matriz (2 × 3) por otra (3 × 4)? ¿Y una (2 × 3) por una (2 × 3)? Si se puede, ¿qué forma tiene el resultado?
Solución

(2 × 3)·(3 × 4): sí, los de dentro coinciden (3) y el resultado es (2 × 4). (2 × 3)·(2 × 3): no, porque 3 ≠ 2.

Ejercicio 6¿Cuál es la derivada de f(x) = x² en x = 5? Si estás en x = 5 y quieres que f baje, ¿hacia dónde mueves x?
Solución

f'(x) = 2x, así que f'(5) = 10. Es positiva: si x aumenta, f sube. Para bajar, mueve x hacia la izquierda (hacia valores menores).

Ejercicio 7Calcula el gradiente de f(x, y) = x² + 3xy en el punto (1, 2).

Pista: en 3xy, si y está quieta, 3y es un número fijo que multiplica a x.

Solución

Moviendo solo x (y es constante): 2x + 3y = 2 + 6 = 8. Moviendo solo y (x es constante): 3x = 3. Gradiente: (8, 3).

Ejercicio 8Haz dos pasos de descenso de gradiente con L(w) = (w − 3)², empezando en w = 0 y con η = 0,5. ¿Qué ha pasado?
Solución

Paso 1: pendiente 2·(0 − 3) = −6, w = 0 − 0,5·(−6) = 3. Paso 2: pendiente 2·(3 − 3) = 0, así que w se queda en 3. Con este η se llega al mínimo en un solo paso: en esta función concreta, el paso tiene justo el tamaño exacto.

10Proyecto del nivel

Programa el descenso de gradiente con dos parámetros y dibuja el camino que sigue. El «valle» es F(x,y)=(x−3)2+2(y+1)2F(x, y) = (x-3)^2 + 2(y+1)^2, con el fondo en (3, −1). Empieza en (0, 0) y para cuando la pendiente sea casi cero.

Es lo mismo que la tabla del apartado 6, pero moviendo dos números a la vez: cada uno con su propia pendiente.

01234-4-3-2-101mínimo (3, −1)inicio (0, 0)
η = 0,1 · 39 pasosη = 0,4 · 17 pasosη = 0,55 · se escapa
Vista desde arriba de un «valle» con dos parámetros: cada elipse une puntos con la misma pérdida, como las curvas de nivel de un mapa. Con η = 0,1 baja despacio pero seguro; con η = 0,4 llega antes dando zigzags; con η = 0,55 cada paso se pasa de largo más que el anterior.
Solución de referencia
import numpy as np
import matplotlib.pyplot as plt

F    = lambda x, y: (x - 3)**2 + 2 * (y + 1)**2           # el valle
grad = lambda x, y: np.array([2 * (x - 3), 4 * (y + 1)])  # sus pendientes

def descenso(eta, x=0.0, y=0.0, max_pasos=200):
    tray = [(x, y)]
    for _ in range(max_pasos):
        gx, gy = grad(x, y)
        if np.hypot(gx, gy) < 1e-3:        # casi sin pendiente: hemos llegado
            break
        x, y = x - eta * gx, y - eta * gy  # un paso cuesta abajo
        tray.append((x, y))
    return np.array(tray)

xs, ys = np.meshgrid(np.linspace(-1, 5, 200), np.linspace(-4, 2, 200))
plt.contour(xs, ys, F(xs, ys), levels=15)
for eta in (0.1, 0.4):
    t = descenso(eta)
    plt.plot(t[:, 0], t[:, 1], "o-", ms=3, label=f"η = {eta} · {len(t) - 1} pasos")
plt.legend(); plt.gca().set_aspect("equal"); plt.show()

Para ir más allá: (1) cambia el punto de inicio y comprueba que siempre llega al mismo sitio; (2) busca probando la η más grande con la que todavía llega; (3) imprime la pérdida en cada paso y comprueba que siempre baja cuando η es pequeña.

11Test de autoevaluación

  1. ¿Qué es un vector en machine learning?

  2. ¿Cuánto vale el producto escalar de (2, 3) y (4, 1)?

  3. Dos vectores con un producto escalar grande y positivo…

  4. Multiplicas una matriz (64 × 10) por otra (10 × 3). ¿Qué forma tiene el resultado?

  5. La derivada de una función en un punto es negativa. Si aumentas un poco x…

  6. Si A cambia 2 veces más rápido que B, y B 5 veces más rápido que C, ¿cuántas veces más rápido cambia A que C?

  7. ¿Hacia dónde se mueve el descenso de gradiente?

  8. Al entrenar, el error crece en cada paso hasta salir nan. ¿Qué es lo primero que pruebas?

  9. ¿Qué garantiza softmax sobre sus salidas?

  10. Un test da positivo en el 99 % de los enfermos y en el 5 % de los sanos, y la enfermedad afecta a 1 de cada 100 personas. Si das positivo, tu probabilidad de estar enfermo es…

12¿Has asimilado el nivel?

Marca cada punto solo si puedes hacerlo sin mirar la lección. Una buena prueba: explicárselo en voz alta a alguien (o a ti mismo) en menos de un minuto. El progreso se guarda solo en este navegador.

Si quieres verlo explicado de otra forma

  1. 3Blue1Brown. Essence of Linear Algebra y Essence of Calculus (series de vídeos cortos, muy visuales; tienen subtítulos en español).
  2. Khan Academy en español: álgebra lineal (vectores y matrices) y cálculo diferencial (derivadas).
  3. M. P. Deisenroth, A. A. Faisal, C. S. Ong (2020). Mathematics for Machine Learning. Cambridge University Press. Gratis en la web de los autores; para cuando quieras profundizar.

Ejecuta el código de la lección

Todos los ejemplos, los ejercicios y el proyecto, listos para ejecutar y cambiar los números:

Siguiente paso: Nivel 2 · Python para IA · Volver a la ruta