La operación reina del álgebra lineal — y la que hace funcionar a cada capa de cada red neuronal. Le metes un vector a una matriz, sale otro vector. Y es solo... varios productos punto.
Para multiplicar una matriz por un vector: haz el producto punto de cada fila de la matriz con el vector, y junta los resultados. Cada resultado es una componente del vector de salida.
| a | b |
| c | d |
| x |
| y |
| a·x + b·y |
| c·x + d·y |
primera componente = primera fila · vector · segunda componente = segunda fila · vector
Recuerda: M = [[1, 2], [0, 1]] y a = (3, 1). Vamos a calcular M · a:
| 1 | 2 |
| 0 | 1 |
| 3 |
| 1 |
| ? |
| ? |
PRIMERA componente = (fila 1 de M) · (a) = (1, 2) · (3, 1) = 1·3 + 2·1 ← producto punto = 3 + 2 = 5 SEGUNDA componente = (fila 2 de M) · (a) = (0, 1) · (3, 1) = 0·3 + 1·1 ← producto punto = 0 + 1 = 1 Resultado: M · a = (5, 1)
El vector a = (3, 1) ha sido transformado por M en el vector (5, 1). La matriz lo "movió" — lo desplazó horizontalmente sin cambiar su altura.
Recuerda cómo describimos una capa en el curso de redes (lección 3):
Esa multiplicación x · W es, palabra por palabra, una multiplicación matriz-por-vector
(con detalles de cómo se "pone" el vector, pero la idea es idéntica). Cada elemento de z
es el producto punto de los pesos de una neurona con la entrada.
M · x. Por eso las GPUs son tan rápidas con esto: están optimizadas exactamente para
esta operación.
Modifica los 4 números de la matriz y observa adónde va a parar el vector a = (3, 1) después de aplicar M.
M · v = (fila 1 de M) · v
(fila 2 de M) · v
...
(fila m de M) · v
→ cada componente de la salida es un PRODUCTO PUNTO.