La Red de Conocimientos Pedagógicos - Conocimientos históricos - Conceptos básicos de la inteligencia artificial: ¿Por qué los ingenieros de algoritmos necesitan saber álgebra lineal?

Conceptos básicos de la inteligencia artificial: ¿Por qué los ingenieros de algoritmos necesitan saber álgebra lineal?

¿Qué es el álgebra lineal?

En matemáticas universitarias, el álgebra lineal es el curso más abstracto. La amplitud del pensamiento desde las matemáticas elementales hasta el álgebra lineal es mucho mayor que el cálculo y la estadística de probabilidad. Muchas personas están atrapadas en la etapa de saber lo que está sucediendo y no saber por qué. Unos años más tarde, descubrieron que el álgebra lineal se utiliza en todas partes, pero no pueden comprenderla ni dominarla bien. Es cierto que la mayoría de la gente puede comprender fácilmente los conceptos de las matemáticas elementales. Las funciones, ecuaciones y secuencias son muy naturales, pero una vez que ingresas al mundo del álgebra lineal, te sientes como si estuvieras en otro mundo extraño, perdido en todo tipo de símbolos y operaciones extraños.

Cuando entré en contacto por primera vez con el álgebra lineal, simplemente pensé que era un tema volador, y me vino a la mente una pregunta:

¿Cuál sería tu reacción si vieras esta pregunta? ? "No hace falta decir que las matemáticas son, por supuesto, una ley objetiva de la naturaleza". No me sorprende en absoluto. Yo mismo solía pensar lo mismo. A partir de las matemáticas elementales y la física elemental en las escuelas secundarias, pocas personas dudan de si una materia matemática es una ley natural. Nunca tuve dudas cuando estudiaba cálculo, probabilidad y estadística. Sólo el álgebra lineal me hace dudar, porque sus símbolos y reglas de operación son demasiado abstractos y extraños y no se ajustan a la experiencia de la vida. Así que realmente quiero agradecer al álgebra lineal por despertar mi pensamiento sobre la naturaleza de una disciplina matemática. De hecho, no sólo los estudiantes, sino también muchos profesores de matemáticas no saben qué es el álgebra lineal y para qué se utiliza, no sólo en China sino también en el extranjero. Meng Yan de China escribió "Understanding Matrix" y el profesor Sheldon Axler del extranjero escribió "Cómo aprender álgebra lineal", pero ninguno de ellos explicó fundamentalmente los entresijos del álgebra lineal. Por mi parte, no aprendí álgebra lineal cuando estaba en la universidad, pero luego la entendí desde una perspectiva de programación. Mucha gente dice que ser bueno en matemáticas ayuda a la programación, pero yo soy todo lo contrario. Comprender los procedimientos me ayuda a comprender las matemáticas.

Los lectores objetivo de este artículo son programadores, así que te llevaré a una aventura profunda como programador en el mundo del álgebra lineal. Dado que somos programadores, antes de ingresar al campo del álgebra lineal, también podríamos examinar primero el mundo de la programación. Piense en esta pregunta:

¿Por qué hacer una pregunta tan estúpida? Debido a que la respuesta es obvia, todos deben comprender mejor los lenguajes de programación que usan todos los días que el álgebra lineal abstracta. Obviamente, los lenguajes de programación, aunque contienen lógica interna, están esencialmente diseñados artificialmente. Todos los lenguajes de programación son similares en que establecen un conjunto de modelos y definen un conjunto de sintaxis, cada conjunto de sintaxis está asignado a una semántica específica. Los programadores y los implementadores del lenguaje cumplen con el contrato del lenguaje: los programadores se aseguran de que el código se ajuste a la gramática del lenguaje, y el compilador/intérprete se asegura de que los resultados de la ejecución del código se ajusten a la semántica correspondiente a la gramática. Por ejemplo, C++ estipula que el objeto A debe construirse en el montón usando la nueva sintaxis A(). Si escribe C ++ de esta manera, debe garantizar el efecto de ejecución correspondiente, asignar memoria en el montón y llamar al constructor de A. De lo contrario, el compilador violará el contrato del lenguaje.

Desde una perspectiva de aplicación, ¿se puede considerar el álgebra lineal como un lenguaje de programación? La respuesta es sí, podemos probarlo utilizando el contrato de idioma como estándar. Digamos que tienes una imagen y quieres rotarla 60 grados y estirarla dos veces a lo largo del eje X. El álgebra lineal te dice: "¡Está bien! Construyes una matriz de acuerdo con mi sintaxis y luego multiplicas tus imágenes de acuerdo con las reglas de multiplicación de matrices. Te garantizo que el resultado será el que deseas". DSL como SQL. Hagamos algunas analogías:

Entonces, desde una perspectiva de aplicación, el álgebra lineal es un lenguaje de dominio específico (DSL) diseñado artificialmente que construye un conjunto de modelos y completa la sintaxis y la semántica a través de un sistema simbólico de mapeo. De hecho, la sintaxis y la semántica de los vectores, las matrices y las reglas de operación están diseñadas artificialmente, lo que es lo mismo que varios conceptos en un lenguaje. Es una creación, pero el requisito previo es que se cumpla el contrato lingüístico.

¿Por qué existe el álgebra lineal?

Algunas personas pueden ser reacias a pensar en el álgebra lineal como un DSL. Te doy una matriz y giras mi gráfico 60 grados y lo estiras dos veces a lo largo del eje X. Siempre me siento inseguro. ¡Ni siquiera sé cómo lo haces abajo! De hecho, es como algunos programadores que no son prácticos con los lenguajes de alto nivel y piensan que la capa inferior es la esencia del programa. Siempre quieren saber cómo se siente al compilar esta oración en un ensamblador.

¿Cuánta memoria se asigna para esta operación? Alguien puede obtener una página web ingresando directamente un comando wget en el Shell, pero le llevará decenas de minutos escribir un montón de código en lenguaje C para que sea práctico. De hecho, los llamados abajo y arriba son solo un dicho habitual, no es que uno sea más esencial que el otro. La compilación e interpretación de programas son esencialmente mapeos semánticos entre diferentes modelos. Normalmente, los lenguajes de alto nivel se asignan a lenguajes de bajo nivel, pero la dirección se puede invertir por completo. Fabricbellard escribió una máquina virtual en JavaScript y ejecutar Linux en la máquina virtual de JavaScript es asignar el modelo de la máquina al modelo de JavaScript.

El establecimiento de nuevos modelos debe basarse en los modelos existentes, pero esto es un medio más que un fin del modelado. El propósito de cualquier modelo nuevo es facilitar el análisis y la resolución de un determinado tipo de problema. Cuando se establece el álgebra lineal, sus conceptos y reglas de operación se basan en el conocimiento de las matemáticas elementales. Sin embargo, una vez que se establece este modelo abstracto, debemos estar acostumbrados a utilizar directamente modelos abstractos de alto nivel para analizar y resolver problemas. Cuando se trata de álgebra lineal, es más fácil analizar y resolver problemas que las matemáticas elementales. Sintamos sus beneficios a través de un ejemplo:

La fórmula más famosa para calcular el área de un triángulo en matemáticas elementales es área = 1/2 * base * altura. Cuando un triángulo tiene un lado exactamente en el eje de coordenadas, podemos calcular fácilmente su área. Pero, ¿qué pasa si rotamos los ejes del mismo triángulo de modo que sus lados no estén sobre los ejes? ¿Podemos obtener también su base y altura? La respuesta es ciertamente sí, pero obviamente es compleja y necesita ser discutida en muchos contextos.

Por el contrario, si utilizamos los conocimientos de álgebra lineal para resolver este problema, será muy fácil. En álgebra lineal, el producto cruz de dos vectores A y B es un vector con dirección perpendicular a A y B, y su tamaño es igual al área del paralelogramo compuesto por A y B:

Podemos tratar los lados del triángulo como un vector, por lo que el área del triángulo es igual a la longitud del vector producto vectorial de los dos vectores laterales dividido por dos:

Nota: length representa la longitud del vector de dirección y cross_product representa el producto cruzado de los dos vectores.

¡El álgebra lineal puede resolver un problema tan pequeño en matemáticas elementales en un instante! Algunas personas pueden decir que es fácil hacerlo directamente basándose en el producto cruzado, pero ¿no es el producto cruzado en sí bastante complicado? ¿Por qué no lo intentas? Sí, la función de un modelo es ocultar cierta complejidad en el modelo, facilitando a los usuarios del modelo la resolución de problemas. Alguien cuestionó una vez que C++ era demasiado complejo. Bjarne Strausstrup, el padre de C++, respondió:

En un entorno específico, la complejidad del problema está determinada por su naturaleza. C++ introduce cierta complejidad en el lenguaje y la biblioteca estándar para simplificar las aplicaciones. Por supuesto, C++ no simplifica las cosas en todos los casos, pero en principio, la complejidad de C++ tiene sentido. Además de C++, Java, SQL, CSS y otros lenguajes y marcos son mejores. ¡Imagínese lo complicado que sería almacenar y administrar datos usted mismo sin utilizar una base de datos! De esta manera, no nos resulta difícil entender por qué el álgebra lineal define una operación tan extraña como un producto cruzado. Esto es lo mismo que C++ incorpora muchos algoritmos y contenedores de uso común en STL. Del mismo modo, puedes incluso definir tus propias operaciones deseadas en álgebra lineal para reutilizarlas. Por lo tanto, las matemáticas no son rígidas en absoluto. Son tan animadas como un programa. Si comprendes su contexto, puedes controlarlas libremente. Dicho esto, por cierto, responderemos a una pregunta muy común:

De hecho, el álgebra lineal es lo mismo que la reutilización de programas. Las operaciones de producto escalar, producto cruzado y matriz se definen porque se usan ampliamente. y tiene una gran importancia. El valor de reutilización se puede utilizar como base para analizar y resolver problemas. Por ejemplo, muchas preguntas involucran la proyección de un vector sobre otro vector o el ángulo entre dos vectores, por lo que consideraremos definir el funcionamiento del producto escalar:

El concepto de producto escalar pertenece al espacio del diseño y la creatividad. . Una vez determinado el diseño, la fórmula específica no se puede utilizar arbitrariamente. Debe ser lógica para garantizar la exactitud de su correlación con el modelo matemático elemental. Es como un lenguaje de alto nivel que puede definir muchos conceptos, como funciones de alto nivel, cierres, etc. , pero debe garantizar que los efectos producidos cuando se asignan a la implementación subyacente se ajusten a sus especificaciones definidas.

¿Qué tiene de bueno el álgebra lineal?

Como se mencionó anteriormente, el álgebra lineal es un modelo abstracto de alto nivel. Podemos aprender su sintaxis y semántica aprendiendo un lenguaje de programación, pero esta comprensión no es solo para el álgebra lineal. puede tener preguntas.

Esto nos lleva al núcleo del álgebra lineal: el modelo vectorial. El sistema de coordenadas que aprendemos en matemáticas elementales pertenece al modelo analítico propuesto por Descartes. Este modelo es útil, pero también tiene importantes deficiencias. El sistema de coordenadas es un sistema de referencia virtual artificial, pero los problemas que queremos resolver, como encontrar áreas, dibujar rotación y estiramiento, no tienen nada que ver con el sistema de coordenadas. Establecer un sistema de coordenadas virtuales a menudo no ayuda a resolver el problema, como en el ejemplo del área del triángulo de ahora.

El modelo vectorial supera las deficiencias del modelo analítico. Si el modelo analítico representa una visión del mundo "absoluta", entonces el modelo vectorial representa una visión del mundo "relativa". Sugiero pensar en el modelo vectorial y el modelo analítico como dos modelos opuestos.

Los conceptos de vectores y escalares están definidos en el modelo vectorial. Los vectores tienen magnitud y dirección y satisfacen la ley de combinación lineal. Un escalar es una cantidad que solo tiene magnitud pero no dirección (Nota: otra definición más profunda de escalar es una cantidad que es invariante bajo transformación de rotación). Una ventaja del modelo vectorial es que es independiente de los sistemas de coordenadas, es decir, de la relatividad. Al definir las reglas de operación de suma vectorial, abandona las restricciones del sistema de coordenadas desde el principio. No importa cómo gires el eje de coordenadas, puedo adaptarme a él. Operaciones como combinaciones lineales de vectores, productos internos, productos cruzados y transformaciones lineales son independientes del sistema de coordenadas. Tenga en cuenta que la llamada independencia del sistema de coordenadas no significa que no exista un sistema de coordenadas, sino que sí lo hay. Los vértices del ejemplo del triángulo de ahora están representados por coordenadas, pero los diferentes sistemas de coordenadas no afectarán la resolución del problema. Para usar una analogía, Java afirma ser independiente de la plataforma. Esto no significa que Java sea un castillo en el aire, sino que el hecho de que la capa subyacente sea Linux o Windows a menudo no tiene ningún impacto en usted cuando programa en Java.

¿Cuáles son los beneficios del modelo vectorial? Además del problema del área del triángulo de ahora como ejemplo, permítanme darles otro ejemplo de geometría:

Si desea resolver este problema desde la perspectiva de la geometría analítica, es casi demasiado complicado comenzar. a menos que el plano sea exactamente A través del caso especial del eje de coordenadas, pero si lo piensas desde el modelo vectorial, es muy simple: según la ecuación del plano, el vector normal del plano es v = (a, b, c), partamos de cualquier punto del plano (x, y, z) hasta (x0, y0, z0). Luego use el producto escalar dot_product(w, v) para calcular el vector de proyección p de w a v, cuyo tamaño es la distancia vertical desde (x0, y0, z0) al plano a*x+b*y+c*z. +d = 0. Aquí se utilizan los conceptos básicos de los modelos vectoriales: vectores normales, vectores de proyección y productos escalares. Todo el proceso de resolución de problemas es simple y vívido.

Les dejo un ejercicio similar (los amigos que estén familiarizados con el aprendizaje automático pueden encontrar que esta es la aplicación del álgebra lineal en la clasificación lineal):

Dejando vectores, invitemos al álgebra lineal Otro protagonista de: The Matrix.

El álgebra lineal define la multiplicación de matrices y vectores, matrices y matrices. Las reglas operativas son complicadas y no está claro qué hacer. Muchos principiantes no lo entienden bien. Se puede decir que las matrices son un obstáculo para aprender bien el álgebra lineal. Cuando nos enfrentamos a asuntos complejos, a menudo es necesario evitar empantanarnos en los detalles y captar primero el panorama general. De hecho, desde la perspectiva del programa, no importa cuán extraña sea la forma, no es más que una sintaxis que debe corresponder a la semántica, por lo que la clave para comprender la matriz es comprender su semántica. Una matriz tiene más de una semántica. Tiene semánticas diferentes en diferentes entornos y puede tener diferentes interpretaciones en el mismo entorno. Los más comunes son: 1) Representa una transformación lineal; 2) Representa un conjunto de vectores columna o vectores fila 3) Representa un conjunto de submatrices;

La matriz en su conjunto corresponde a la semántica de transformación lineal: matriz A multiplicada por un vector V para obtener W. La matriz A representa una transformación lineal de V a W. Por ejemplo, si desea rotar el vector v0 60 grados en sentido antihorario para obtener V'. Sólo necesitas multiplicar v0 por la matriz de rotación.

Además de la transformación de rotación, la transformación de estiramiento también es una transformación común. Por ejemplo, podemos estirar el vector a lo largo del eje X dos veces a través de una matriz de estiramiento (intente dar usted mismo la forma de la matriz de estiramiento). Más importante aún, la multiplicación de matrices tiene una buena propiedad: satisface la tasa combinatoria, lo que significa que se pueden superponer transformaciones lineales.

Por ejemplo, podemos multiplicar la matriz m de "girar 60 grados en sentido antihorario" y la matriz n de "estirar 2 veces a lo largo del eje X" para obtener una nueva representación de "rotar 60 grados en sentido antihorario, estirar 2 veces a lo largo del eje X". eje" La matriz T. ¿No se parece mucho a apilar múltiples comandos a través de tuberías en nuestro shell?

Lo anterior se centra en la independencia del sistema de coordenadas del modelo vectorial. Además, otra ventaja del modelo vectorial es que puede describir relaciones lineales. Veamos un ejemplo familiar de la secuencia de Fibonacci:

Primero construimos dos vectores, v1=(f(n+1), f(n)) y v2=(f(n +2), f(norte+1)). Según las propiedades de la secuencia de Fibonacci, podemos pasar de v1 a v2.

Y obtenga además:

De esta manera, el problema de recursividad lineal se transforma en un problema clásico de matriz de potencia n-ésima, que se puede resolver en un tiempo O (log n) complejidad. Además de las secuencias recursivas lineales, el conocido problema de ecuaciones lineales de n elementos en matemáticas elementales también se puede convertir en multiplicación de matrices y vectores para resolverlo más fácilmente. El propósito de este ejemplo es ilustrar que todos los sistemas que satisfacen relaciones lineales son donde entra en juego el modelo vectorial y, a menudo, podemos convertirlos en álgebra lineal para obtener soluciones concisas y eficientes.

Resumen

Este artículo presenta un punto: desde el punto de vista de la aplicación, el álgebra lineal puede considerarse como un lenguaje de programación de dominio específico. El álgebra lineal establece un modelo vectorial basado en matemáticas elementales y define un conjunto de contratos de lenguaje que se ajustan a la sintaxis y semántica del lenguaje de programación. El modelo vectorial es independiente del sistema de coordenadas y es lineal. Es el núcleo de toda el álgebra lineal y el mejor modelo para resolver problemas de espacio lineal. Los conceptos, propiedades, relaciones y transformaciones de los vectores son la clave para dominar y aplicar el álgebra lineal.