En términos prácticos, las matrices le brindan una forma de almacenar y operar sus datos numéricos de una manera estandarizada que también le permite usar bibliotecas de álgebra lineal altamente optimizadas y también le ofrece una representación concisa de sus ecuaciones (puede ver esto como un tipo de abstracción).
Estoy escribiendo en mi teléfono pero intentaré dar un ejemplo. El bloque de construcción básico en las redes neuronales es una ecuación lineal, es decir
y = w_1 * x_1
- En la regresión cuadrática, ¿por qué tengo que mantener una variable y su aumento exponencial en el mismo modelo?
- ¿Debemos usar el ajuste fino en redes neuronales profundas? La precisión de la clasificación es del 100%, pero después de un ajuste fino, se convierte en el 95.7%, ¿cómo llega esto?
- ¿Por qué el método de Newton solo es apropiado cuando el hessiano es positivo definido?
- ¿Para qué se utiliza el aprendizaje automático?
- Como estudiante que realiza un curso de algoritmos de aprendizaje automático, ¿en qué debe centrarse el objetivo principal para maximizar el conocimiento aplicable al final del semestre?
Si tiene varias variables (dimensiones de entidades de entrada) esto se convierte
y = w_1 * x_1 + .. + w_n * x_n
para n variables.
Para almacenar las características de entrada x_i y los coeficientes w_i es natural usar los vectores n-dimensionales x y w.
Luego, puede representar nuevamente su ecuación simplemente como
y = w * x
(tendrá que transponer x o w dependiendo de si usa vectores de fila o columna, pero lo omito por ahora).
Esta es también la base de un perceptrón simple, equivalente a una regresión lineal. Usted asigna a cada variable de entrada un peso que representa el efecto de esta variable en el resultado.
Ahora en redes más grandes tendrá múltiples ecuaciones como esa, una para cada nodo en la siguiente capa de la red. Entonces, si su próxima capa tiene m nodos, tendrá m ecuaciones como esa, entonces m de esos vectores de peso w.
Ahora puede volver a unir los vectores m en una matriz W y usar nuevamente
y = W * x
para terminar con un vector y sosteniendo los m resultados para sus m ecuaciones.
Finalmente, puede extender esto a múltiples vectores de entrada x, uniéndolos a una matriz X.
¿Y adivina cuál es la ecuación para eso entonces?
Y = W * X
Calcular eso produce Y, que es una matriz que contiene todas sus y para todas sus ecuaciones para todos sus vectores de entrada.
Aquí puedes ver el efecto de la abstracción. Al escribir la ecuación anterior en términos de variables escalares x y w, terminaría con mucha escritura. Entonces, en realidad, lo que sucede aquí es que los tipos de variables cambian (de escalar a vector a matriz) y el significado de la operación *, pero el procedimiento general sigue siendo el mismo.
Nuevamente, por favor, no ignore aquí que necesitará algunas transposiciones para obtener los vectores y las matrices en la forma que desea tener.
Ahora, tenemos bibliotecas eficientes para almacenar matrices y hacer esos cálculos. Si una biblioteca sabe que tiene que lidiar con una operación matricial, puede ejecutarla fácilmente en paralelo, especialmente interesante para las GPU.
Por ejemplo, una predicción con una red de alimentación de múltiples capas regular con activación de tanh se puede escribir fácilmente con la biblioteca de álgebra lineal Eigen como
for (const auto & layer: layers) {
input = input * layer.GetWeights () + layer.GetBiases ();
input = input.array (). tanh ();
}
y eso es.