Redes Neurais em IA e Deep Learning - página 31

 

Lección 21. Ajuste de un algoritmo TSP



Lección 21. Ajuste de un algoritmo TSP

Este video de YouTube se enfoca en el problema del viajante de comercio (TSP), un problema difícil de NP que existe desde hace muchos años. El orador pasa por varios algoritmos y enfoques para optimizar el espacio de búsqueda y podar la búsqueda para hacer que el algoritmo TSP sea más rápido, como implementar un mejor algoritmo de árbol de expansión mínimo, permitir la optimización del compilador y modificar el cálculo de distancia para usar un algoritmo de búsqueda de tabla. La necesidad de limitar el espacio de búsqueda y pensar de manera creativa para optimizar los programas en cuanto a velocidad y rendimiento se enfatiza a lo largo del video, lo que brinda información valiosa para resolver TSP y otros problemas relacionados.

En este video, el orador analiza varias técnicas para optimizar el algoritmo TSP, como el almacenamiento en caché, la evaluación diferida y el almacenamiento de datos en una tabla hash, enfatizando la importancia de los datos empíricos sobre la intuición. También comparte su experiencia en la resolución del problema TSP y la importancia de la ingeniería de desempeño en su profesión. El orador brinda información sobre el proceso de optimización de código, incluido el desarrollo incremental y la generación recursiva, y alienta a la audiencia a usar estas técnicas, ya que son fáciles de implementar. Por último, el ponente expresa su agradecimiento por dedicarse a la ingeniería de rendimiento y desarrollar algoritmos que mejoran varios servicios de Google, así como por las amistades que ha hecho a lo largo de su carrera.

  • 00:00:00 En esta sección, John Bentley presenta el problema del viajante de comercio (TSP), que es un problema NP-difícil que ha existido durante muchos años. Describe su experiencia con el problema y cómo se enganchó hace más de 40 años. Luego analiza una solución recursiva para enumerar todos los subconjuntos de un conjunto y explica el proceso de contar los números enteros en un conjunto. Señala que este método no generaliza muy bien, pero proporciona principios que ayudarán a desarrollar algoritmos cada vez más rápidos para TSP.

  • 00:05:00 En esta sección, el ponente explica cómo generar recursivamente todos los conjuntos de tamaño M. El enfoque es comenzar con un conjunto de tamaño n-1 y enumerar todos los conjuntos de tamaño M con la adición de un cero al final. El número de conjuntos con un cero al final se calcula elevando 2 a la potencia de M menos uno. El esquema recursivo se ilustra con un ejemplo en el que cada subconjunto se cuenta hacia atrás desde cero y se suma con un uno al final. El código de este algoritmo es simple y se puede implementar en la mayoría de los lenguajes de programación. El orador alienta a la audiencia a hacer preguntas y hablar, diciendo que su creatividad puede haber sido eliminada a golpes por el sistema educativo. El resto del video cubre el problema del viajante de comercio y cómo desarrollar un algoritmo eficiente para resolverlo.

  • 00:10:00 En esta sección, el disertante habla sobre el Problema del viajante de comercio (TSP) y su importancia como un problema prototípico en informática que fue uno de los primeros problemas en demostrarse como NP-difícil. El orador comparte una anécdota personal sobre cómo se interesó en el problema cuando su colega discutió sus dificultades para resolver un TSP de 16 puntos en su tesis doctoral. Luego, el orador analiza cómo escribió un programa para resolver el mismo problema 20 años después, que se convirtió en un tema popular en una clase de algoritmos en la Universidad de Lehigh, lo que llevó a más exploraciones de cómo ha cambiado la ingeniería de rendimiento en 40 años.

  • 00:15:00 En esta sección, el orador explica un algoritmo recursivo en un programa C simple para generar todas las permutaciones factoriales de n ciudades para encontrar el mejor recorrido. El factor de ramificación del árbol será 9 en cada nodo, dando como resultado un árbol grande para n=10 con 10 combinaciones factoriales posibles. El programa comprueba la suma de las distancias entre ciudades para cada permutación y guarda la suma mínima encontrada hasta el momento. El programa funciona correctamente, pero su velocidad para n=10 no está clara.

  • 00:20:00 En esta sección, el orador analiza el tiempo que lleva ejecutar las permutaciones y sugiere varias formas de hacer que el programa sea más rápido. Explica lo rápido que se tarda en ejecutar cuatro permutaciones en una computadora portátil rápida y cómo el tiempo aumenta drásticamente a medida que las permutaciones aumentan. También considera formas de acelerar el programa, como elegir un inicio e ignorar todos los demás o usar la paralelización. Adicionalmente, menciona la posibilidad de optimizar el programa con compiladores, particularmente con GCC y -o3. Finalmente, analiza las ventajas de tener máquinas más rápidas y un tiempo de CPU más rápido.

  • 00:25:00 En esta sección, el orador analiza cuánto más rápido puede volverse el algoritmo TSP a través de varias optimizaciones. Por ejemplo, simplemente habilitar las optimizaciones del compilador puede generar un aumento del rendimiento de hasta un factor de 25. Además, dado que el hardware ha mejorado a lo largo de los años, la optimización del kernel puede generar una velocidad de reloj más rápida, rutas de datos más amplias y canalizaciones más profundas, lo que resulta en una aceleración de un factor de 150. Además, modificar el cálculo de la distancia para usar un algoritmo de búsqueda de tabla puede conducir a un factor de aceleración de 2,5 a 3. En general, aunque la antigua intuición sobre el rendimiento ya no sea cierta, tenga cuidado el modelado puede determinar los efectos de varias optimizaciones en el algoritmo TSP.

  • 00:30:00 En esta sección, el orador explica diferentes formas de optimizar un algoritmo inductivo para calcular la misma suma varias veces para evitar calcular las mismas piezas repetidamente. El orador también muestra los tiempos de ejecución de los cuatro algoritmos y explica cómo ir más rápido, como usar una mejor máquina y utilizar cada factor de en para crear el tamaño del problema en uno en la misma cantidad de tiempo. También explican cómo resolver un problema de viajante de comercio y muestran que el recorrido óptimo se ve diferente en los distintos lados del problema. El orador concluye alentando a resolver el problema a pesar de su largo tiempo de ejecución.

  • 00:35:00 En esta sección, el orador analiza la magnitud del factorial 52 y explica cómo es más rápido que cualquier función exponencial. Explica que es aproximadamente 2 elevado a 225 o 10 elevado a 67, que es un número enorme. Para ponerlo en términos cotidianos, da el ejemplo de contar 52 nanosegundos factoriales y dar un paso adelante cada millón de años, finalmente dando la vuelta al ecuador y tomando una gota de agua del Océano Pacífico. Luego enfatiza la necesidad de limitar el espacio de búsqueda y podar la búsqueda para resolver estos problemas de manera eficiente.

  • 00:40:00 En esta sección, el orador presenta un problema que su hija le dio para resolver. El problema es encontrar todas las permutaciones de los 9 enteros del 1 al 9 de modo que cada subcadena inicial de longitud m sea divisible por M, de modo que todo sea divisible por 9. El orador sugiere que piense antes de escribir un programa para resolver el problema. . Luego analiza un programa en el lenguaje de programación AWK que usa cadenas y procedimientos recursivos para generar todas las permutaciones posibles. ¡Ejecutar este programa tomaría alrededor de 49! complejidad del tiempo.

  • 00:45:00 En esta sección, el orador analiza cómo optimizar el espacio de búsqueda al buscar una cadena específica usando un programa. Lo demuestra a través de un ejemplo de encontrar una cadena con propiedades específicas, como ser divisible por ciertos números y contener ciertos números en posiciones específicas. Al definir las propiedades que deben estar presentes en la cadena ganadora, el espacio de búsqueda puede reducirse significativamente de un tercio de millón a medio millar de opciones posibles. Esto resalta la importancia de podar la búsqueda para acelerar el proceso. El orador enfatiza la necesidad de pensar en cómo optimizar los programas para la velocidad y el rendimiento.

  • 00:50:00 En esta sección, el orador analiza formas de reducir la búsqueda para que el algoritmo TSP sea más rápido. Una forma de podar la búsqueda es no seguir haciendo lo que no funciona, es decir, si la suma resulta ser mayor que la suma mínima al agregarle más, entonces detener la búsqueda. Este método puede hacer que el algoritmo sea más rápido en la misma máquina al tomar menos tiempo. Sin embargo, el orador también presenta otras ideas para podar la búsqueda y obtener un límite inferior, como calcular una ruta TSP o un árbol de expansión mínimo, que son más potentes pero también más costosos.

  • 00:55:00 En esta sección, el orador analiza cómo mejorar el límite inferior de TSP mediante la implementación de un mejor algoritmo de árbol de expansión mínimo, ya que aquí es donde se gasta la mayor parte del tiempo de cálculo. Utiliza el paralelismo con una representación de máscara de bits del subconjunto de ciudades para calcular el MST de forma rápida y eficiente. Aunque computar el MST toma n tiempo al cuadrado, este método es un poderoso mecanismo de poda que conduce a una mayor velocidad del programa. Después de varias pruebas y de superar desafíos, el programa pasa de tomar 17 segundos a 0 segundos, lo que permite procesar conjuntos de datos más grandes con facilidad.

  • 01:00:00 En esta sección, el orador describe su experimento para optimizar el algoritmo TSP mediante la implementación de una evaluación perezosa, el almacenamiento de datos en una tabla hash y el uso de un mejor recorrido inicial con una búsqueda más inteligente. Analiza los beneficios del almacenamiento en caché y cómo optimizar el rendimiento del algoritmo experimentando y probando diferentes enfoques. El orador enfatiza que la ingeniería de rendimiento debe basarse en datos empíricos y que la intuición a menudo es incorrecta. También menciona escalar el monte Monadnock y la diferencia entre algoritmos predecibles e impredecibles.

  • 01:05:00 En esta sección del video, el orador explica cómo hacer que el algoritmo TSP busque de manera más inteligente al guiarlo más rápidamente a la ciudad de inicio inicial, en lugar de simplemente usar un recorrido aleatorio. Mediante el uso de una ordenación por inserción simple y visitando primero las 30 ciudades más cercanas, el espacio de búsqueda se puede reducir, lo que marca una gran diferencia. El disertante comparte que en 1997 estaban felices de obtener 230, pero en 20 años más, usando solo la ley de Moore, podrían obtener un factor de 1,000. Sin embargo, al combinar la ley de Moore y la tecnología del compilador con todos los algoritmos, pudieron llegar a 52. El orador enfatiza que todo lo que compartieron se podría lograr con 160 líneas de código, y todas estas cosas están dentro del alcance. de práctica de alguien que ha completado esta clase.

  • 01:10:00 En esta sección, el orador analiza varias técnicas para la optimización del código, como el almacenamiento en caché, el cálculo previo y el almacenamiento de resultados para evitar trabajo innecesario. También enfatiza la importancia del desarrollo de software incremental y el poder de la generación recursiva. El orador menciona que algunas de las técnicas que analiza están cubiertas en un libro antiguo que escribió sobre el ajuste de código, pero algunas de las ideas aún se aplican en la actualidad. También menciona que usó muchas herramientas detrás de escena, como generadores de perfiles y modelos de costos, para realizar experimentos y estimar costos. Por último, anima a la audiencia a explorar y utilizar estas técnicas, ya que son fáciles de implementar en la práctica.

  • 01:15:00 En esta sección, el orador analiza varios temas, desde la poda alfa-beta hasta el problema de las colisiones de hashing. El orador también comparte su experiencia de resolver el problema del viajante de comercio con su colega a principios de la década de 1990. Pudieron resolver el problema de las 48 capitales de los estados y quedaron extasiados. El orador también enfatiza la importancia de la ingeniería de rendimiento en su profesión y menciona su participación en varios sistemas computacionales, incluido el gerrymandering automatizado y la codificación de llamadas telefónicas. En general, la sección proporciona información sobre la vasta experiencia del orador en programación de computadoras y sus perspectivas sobre diversas técnicas y problemas.

  • 01:20:00 En esta sección, el ponente expresa su agradecimiento por seguir la ingeniería de rendimiento como forma de vida. Menciona que le ha permitido desarrollar algoritmos que mejoran varios servicios de Google, lo que ha sido inmensamente satisfactorio para él. El orador también expresa su gratitud por las amistades que ha hecho a lo largo de su carrera y espera que la ingeniería de rendimiento pueda ser tan buena para los demás como lo ha sido para él.
 

Lección 22. Optimización de grafos



Lección 22. Optimización de grafos

El video analiza el concepto de un gráfico, varias formas de representarlo y técnicas de optimización para mejorar la eficiencia de los algoritmos de gráficos. El orador explora las aplicaciones de los gráficos en el modelado de relaciones y en la búsqueda del camino más corto o la forma más económica de llegar a un destino, junto con formas óptimas de almacenar gráficos en la memoria para agregar, eliminar o escanear bordes. El video también cubre la optimización del rendimiento de la memoria caché en las búsquedas de gráficos mediante el uso de vectores de bits, junto con la implementación del algoritmo de búsqueda paralela en amplitud con sumas de prefijos para filtrar los valores negativos. Finalmente, el ponente habla de sus experimentos sobre un grafo aleatorio con diez millones de vértices y cien millones de aristas, destacando la importancia del determinismo en el código para garantizar la fiabilidad y la coherencia.

El video también analiza varias técnicas de optimización de gráficos, incluida la implementación del operador min derecho, el código BFS paralelo determinista, la técnica de optimización de dirección y la compresión de gráficos. La técnica de optimización de dirección implica un enfoque ascendente para explorar los bordes entrantes cuando la frontera es grande y se ha aplicado a otros algoritmos de gráficos, mientras que la compresión de gráficos tiene como objetivo reducir el uso de memoria al codificar las diferencias entre bordes consecutivos y reducir la cantidad de bits utilizados. para almacenar estos valores. Además, el video enfatiza la importancia de probar las optimizaciones en diferentes tipos de gráficos para determinar dónde funcionan bien y dónde no.

  • 00:00:00 En esta sección, el instructor introduce el concepto de gráfico y explica varias formas de representarlo y usarlo para modelar relaciones entre objetos. Los ejemplos incluyen redes sociales, redes de proteínas y la red mundial. Los vértices y los bordes se pueden ponderar y dirigir, y pueden tener metadatos y tipos. El instructor también presenta aplicaciones de gráficos para encontrar el camino más corto de una ciudad a otra o la forma más económica de llegar a un destino. Finalmente, la conferencia cubre técnicas de optimización de gráficos como la compresión y el reordenamiento para mejorar la eficiencia de los algoritmos de gráficos.

  • 00:05:00 En esta sección, el ponente destaca varias aplicaciones de optimización de gráficos, incluidas consultas de redes sociales como encontrar amigos comunes o productos de interés, agrupamiento para detección de comunidades o detección de sitios web fraudulentos, conectómica para estudiar la estructura del cerebro, y segmentación de imágenes en visión artificial. El ponente también explica dos formas de representar un gráfico en la memoria: la matriz de adyacencia, que requiere espacio de orden N al cuadrado, y la representación de lista de aristas, que requiere espacio de orden M.

  • 00:10:00 En esta sección del video, se discutieron las diferentes formas de representar un gráfico, incluido el formato de lista de adyacencia y el formato de fila dispersa comprimida. El formato de lista de adyacencia implica una matriz de punteros, donde cada puntero apunta a una lista vinculada que almacena los bordes de ese vértice. Esto tiene un requisito de espacio de O (n + m), pero puede tener problemas de rendimiento debido al acceso aleatorio a la memoria. Por otro lado, el formato de fila dispersa comprimida tiene un uso de espacio de O(n + m) y permite el cálculo eficiente del grado de un vértice. Además, los valores o pesos en los bordes se pueden almacenar en una matriz adicional.

  • 00:15:00 En esta sección, el video analiza las compensaciones en diferentes representaciones gráficas, incluido el costo de almacenamiento, escanear el gráfico, agregar un borde, eliminar un borde y encontrar todos los vecinos de un vértice en particular. La matriz de adyacencia tiene un costo de almacenamiento de O(n^2), mientras que agregar y eliminar bordes es O(1). Para la lista de aristas, el costo es O(m) por escanear el gráfico y O(1) por agregar una arista. Eliminar un borde es O(m). Se requiere el grado de V para agregar o eliminar un borde en la lista de JCU, con un costo de almacenamiento de O(m+n). En el peor de los casos, agregar un borde en el formato de fila dispersa comprimida puede costar hasta O(m+n). Encontrar todos los vecinos de un vértice particular es O(n) para la matriz de adyacencia, O(m) para la lista de aristas y O(grado de V) para la lista de adyacencia.

  • 00:20:00 En esta sección, el orador analiza varias formas de representar gráficos, incluida la matriz de adyacencia, la lista de bordes, la lista JCL y el formato de fila dispersa comprimida (CSR). Él explica que CSR es mejor para tratar con gráficos dispersos en algoritmos estáticos donde no hay necesidad de actualizar el gráfico. Esto se debe a que todos los vecinos de un vértice se almacenan de forma contigua en la memoria, lo que facilita la exploración. También señala que los gráficos del mundo real tienden a ser escasos y tienen una distribución de grados de ley de potencia, lo que significa que la mayoría de los vértices tienen un grado bajo y algunos tienen un grado muy alto.

  • 00:25:00 En esta sección, el instructor analiza la optimización de gráficos y la implementación del algoritmo de búsqueda en amplitud. Con una distribución de grados sesgada en los gráficos, ejecutar un algoritmo paralelizado en los vértices puede generar problemas de desequilibrio de carga debido a la cantidad variable de bordes que tienen. El algoritmo de búsqueda en amplitud se usa para visitar los vértices en orden de distancia desde el vértice de origen, y la salida puede incluir informar los vértices visitados en el orden en que fueron visitados, la distancia de cada vértice al vértice de origen y generar un árbol de búsqueda primero en amplitud donde cada vértice del árbol tiene un padre en el nivel anterior de búsqueda primero en amplitud. El algoritmo BFS en serie inicializa las distancias hasta el infinito, crea una estructura de datos de cola, establece la distancia de la ruta en cero y la coloca en la cola. El algoritmo sigue iterando hasta que no quedan más vértices en la cola. El trabajo necesario para este algoritmo se analiza en términos de N y M.

  • 00:30:00 En esta sección, el orador analiza la implementación de un algoritmo BFS en serie utilizando el formato de fila dispersa comprimido. El algoritmo implica inicializar dos arreglos, padre y Q, colocar un vértice de origen en la cola e iterar a través de los vecinos del vértice actual. Sin embargo, la parte más costosa del código es acceder al padre del vecino, lo que constituye un acceso aleatorio a la memoria. Esto da como resultado una falla de caché casi siempre y puede conducir a un rendimiento más lento. A la matriz de direcciones se accede principalmente de forma secuencial, solo requiere un acceso aleatorio a la matriz de bordes por vértice, lo que la hace más compatible con la memoria caché. Se determina que el trabajo general del algoritmo es de orden M + N.

  • 00:35:00 En esta sección, el orador analiza el análisis y la optimización del rendimiento de la memoria caché en la optimización de gráficos. El análisis disecciona cómo ocurren las fallas de caché durante la inicialización secuencial de una matriz, eliminando los vértices del frente de una cola, calculando los grados y accediendo a las matrices de desplazamiento y borde. La optimización implica el uso de un vector de bits para almacenar si ya se ha explorado un vértice, que es una variable de un bit para reducir las fallas de caché al acceder a una matriz con información principal. Esta optimización reduce las fallas de caché al acceder a matrices de bordes y vértices desde em hasta n.

  • 00:40:00 En esta sección, el orador explica cómo optimizar las búsquedas de gráficos usando vectores de bits para reducir la cantidad de errores de caché. La optimización del vector de bits implica inicializar un vector de bits llamado "visitado" de tamaño aproximadamente n sobre 32 y establecer sus bits en 0 excepto el vértice de origen. El código utiliza la manipulación de vectores de bits para verificar los vecinos visitados y establecer los bits al explorar un vecino. El orador también presenta una implementación paralela de un algoritmo de búsqueda primero en amplitud que opera en las fronteras y genera un puntero principal para cada vértice explorado. La implementación paralela debe tener en cuenta las carreras potenciales cuando varios vértices en la frontera intentan visitar al mismo vecino, y es necesario equilibrar la carga para garantizar que cada procesador tenga aproximadamente la misma cantidad de trabajo.

  • 00:45:00 En esta sección, el instructor demuestra cómo realizar una búsqueda paralela en anchura en un gráfico, comenzando por inicializar todas las entradas principales para que sean negativas. Luego, el instructor establece que el vértice de origen sea el índice 0 de la frontera y, mientras que el tamaño de la frontera es mayor que cero, itera sobre todos los vértices de la frontera en paralelo usando una celda for loop. Configuran la entrada "i-ésima" de la matriz de grados para que sea el grado del vértice en la frontera, realizando una suma de prefijos en esta matriz. Luego, el instructor vuelve a recorrer la frontera y verifica los vecinos de cada vértice para ver si se ha explorado, realizando una comparación e intercambio para intercambiar el vértice con el valor original de uno negativo en el padre del vecino si aún no se ha explorado. .

  • 00:50:00 En esta sección, el video analiza un algoritmo paralelo Breadth-First Search (BFS), que opera en una suma de prefijos para filtrar valores negativos en una matriz mientras mantiene los no negativos, que se utilizan para generar compensaciones únicas para una matriz de salida a través de la suma de prefijos. El video también analiza el trabajo y el lapso del algoritmo, afirmando que el número de iteraciones está limitado por el diámetro del gráfico, el trabajo por vértice es n y que el trabajo general del algoritmo es theta de n más M, haciendo coincidir el trabajo del algoritmo serial.

  • 00:55:00 En esta sección, el orador habla sobre sus experimentos en un gráfico aleatorio con diez millones de vértices y cien millones de aristas y cómo probaron su algoritmo en una máquina de cuarenta núcleos con hiperprocesamiento bidireccional. También explican cómo funciona Hyper-Threading y la importancia de determinar si hay no determinismo en el código. Demuestran cómo se puede corregir el no determinismo mediante la implementación de procesos deterministas, como el uso del operador de escritura min y valores negativos para los vértices explorados previamente en el código BFS. Al hacer esto, el árbol BFS final generado por el código siempre será el mismo, lo que garantiza la confiabilidad y la consistencia.

  • 01:00:00 En esta sección, el presentador analiza la implementación del operador min derecho y los beneficios de usar un código BFS paralelo determinista. El operador min derecho se puede implementar mediante un bucle con comparación e intercambio, y aunque todavía no es completamente determinista, produce un árbol BFS consistente. El código BFS paralelo determinista también se depura más fácilmente y es más fácil razonar sobre su rendimiento. El presentador también presenta la técnica de optimización de dirección, que implica un método de abajo hacia arriba para explorar los bordes entrantes cuando la frontera es grande y ya se han explorado muchos vértices, ahorrando recorridos de borde.

  • 01:05:00 En esta sección, el video analiza el desempeño de los enfoques de arriba hacia abajo y de abajo hacia arriba en BFS, según lo estudiado por Scott Beamer en 2012. El enfoque de arriba hacia abajo es más eficiente para fronteras pequeñas, mientras que el enfoque de abajo hacia arriba El enfoque ascendente es más eficiente para fronteras grandes. La elección entre estos dos enfoques se basa en el tamaño de la frontera, con un umbral de n superior a 20 que funciona bien en la práctica. El video también analiza diferentes formas de representar la frontera y compara el rendimiento de tres enfoques transversales diferentes, incluido el enfoque de optimización de dirección, que siempre es más rápido que los enfoques de arriba hacia abajo y de abajo hacia arriba. La idea de optimizar la dirección también es más general que solo BFS y se ha aplicado a otros algoritmos gráficos.

  • 01:10:00 En esta sección, el orador explica dos técnicas de optimización de gráficos: optimización de dirección y compresión de gráficos. La optimización de la dirección implica elegir entre una implementación escasa o densa en función del tamaño de la frontera. La compresión de gráficos tiene como objetivo reducir el uso de la memoria al codificar las diferencias entre los bordes consecutivos y reducir la cantidad de bits utilizados para almacenar estos valores a través de códigos de longitud variable o códigos de K bits. Un problema con la decodificación de códigos de bits K es que involucra ramas impredecibles, por lo que una optimización implica deshacerse del bit de continuación agrupando números enteros que necesitan la misma cantidad de bytes para codificar y usar un byte de encabezado para almacenar el tamaño del grupo y el número de bytes necesarios para decodificar cada entero. Esto aumenta ligeramente el uso del espacio pero reduce el costo de decodificación.

  • 01:15:00 En esta sección, aprendemos que para ahorrar espacio al ejecutar algoritmos en gráficos grandes pero relativamente escasos del mundo real, debemos decodificar los bordes sobre la marcha mientras ejecutamos nuestro algoritmo y codificarlos en fragmentos para evitar el desequilibrio de la carga. Los experimentos muestran que estos esquemas de compresión ahorran espacio y, aunque solo son un poco más lentos que la versión sin comprimir, se vuelven más rápidos que la versión sin comprimir cuando se ejecutan en paralelo debido al uso de la memoria. Finalmente, las optimizaciones para gráficos pueden funcionar bien para ciertos gráficos pero pueden no funcionar bien para otros y, por lo tanto, es importante probar las optimizaciones en diferentes tipos de gráficos para ver dónde funcionan bien y dónde no.
 

Lección 23. Alto Rendimiento en Lenguajes Dinámicos



Lección 23. Alto Rendimiento en Lenguajes Dinámicos

Los desafíos de escribir código crítico para el rendimiento en lenguajes de escritura dinámica de alto nivel se analizan en este video, con un enfoque en el lenguaje de programación Julia. Julia tiene como objetivo proporcionar capacidades interactivas de alto nivel al mismo tiempo que ofrece el mismo nivel de rendimiento que los lenguajes de nivel inferior como C y Fortran. La capacidad de Julia para escribir código genérico que funciona para varios tipos, la metaprogramación integrada y las rutas de código optimizadas lo hacen más rápido que Python en situaciones como la generación de grandes matrices de vandermonde y código optimizado para polinomios específicos en funciones especiales. Además, las rutas de código optimizadas de Julia asignan cuadros mucho más rápido que Python, lo que lo convierte en una mejor opción para manejar estructuras de datos dinámicas como matrices. Finalmente, el video analiza las capacidades de inferencia de tipo y envío múltiple de Julia, lo que permite inferir recursivamente diferentes versiones de una función para diferentes argumentos y tipos.

En este video también se explica cómo funciona el polimorfismo paramétrico en Julia y cómo permite crear infinitas familias de tipos. Al definir un tipo parametrizado, como un tipo de punto con parámetros para X e Y, y establecer esos parámetros en un subtipo real, se puede crear un conjunto completo de tipos que se pueden "ejecutar" con un subtipo particular. Además, el orador analiza las capacidades y bibliotecas de Julia para implementar subprocesos, recolección de basura y paralelismo de memoria distribuida, así como su amplia gama de soporte Unicode para identificadores. Además, se enfatiza la importancia de tener variables con nombres propios y descriptivos, y el ponente menciona un proyecto que está explorando la fusión de la tecnología Julia con la tecnología Silk, lo que puede conducir a nuevos desarrollos en el futuro.

  • 00:00:00 En esta sección, el orador habla sobre los desafíos de escribir código crítico para el rendimiento en lenguajes de escritura dinámica de alto nivel como Python y Matlab. Si bien estos lenguajes son populares para la computación técnica y la exploración interactiva, tienden a chocar con un muro de rendimiento cuando se trata de escribir código crítico para el rendimiento. Como resultado, las personas tradicionalmente usan lenguajes de bajo nivel como Fortran o C como una solución para escribir código crítico para el rendimiento, pero esto genera un salto significativo en la complejidad de la codificación y una pérdida de generalidad. Luego, el orador presenta el lenguaje de programación, Julia, que pretende ser tan interactivo y de alto nivel como Python, al tiempo que brinda el mismo nivel de rendimiento que C. Julia permite a los usuarios escribir código genérico que funciona para múltiples tipos, y mientras se lanzó en 2013, su reciente versión 1.0 ahora es estable y ofrece el rendimiento prometido.

  • 00:05:00 En esta sección, el orador analiza las diferencias de rendimiento entre Julia y Python al generar una gran matriz de vandermonde. Mientras que Python se basa en cientos de líneas de código C para generar la matriz, lo que requiere mucho tiempo debido a la complejidad del código, Julia puede generar la misma matriz con solo dos bucles anidados y sin declaraciones de tipos. Julia también tiene técnicas integradas para metaprogramación o generación de código, lo que permite una evaluación en línea muy optimizada para polinomios específicos en funciones especiales. En algunos casos, Julia puede ser dos o tres veces más rápida que las bibliotecas C y Fortran optimizadas para funciones especiales.

  • 00:10:00 En esta sección, el orador analiza cómo los lenguajes de alto nivel como Julia permiten trucos para el rendimiento que serían difíciles de hacer en lenguajes de bajo nivel. Explica cómo Julia puede ser rápida al contrastarla con Python y destaca la capacidad de Julia de ser completamente genérica mientras permite la compilación de código a velocidades rápidas. El orador también demuestra cómo usar un cuaderno en Julia para calcular la suma de una lista de números y compara la implementación en Julia con Python y C. Muestra cómo se pueden usar las herramientas de evaluación comparativa para recopilar estadísticas y devolver el tiempo mínimo para la implementación. correr.

  • 00:15:00 En esta sección, el orador analiza el uso de una macro en Julia para reescribir una expresión que configura un ciclo y lo cronometra. Usando este método, toma alrededor de 11 milisegundos procesar 10 a la potencia de 7 números. Luego pasa a la evaluación comparativa en Python, utilizando un paquete llamado pycall que permite llamar a las funciones de Python desde Julia. Señala que, si bien la función de suma de Python está escrita en C y, por lo tanto, funciona relativamente bien, el hecho de que las listas de Python puedan estar compuestas de elementos de cualquier tipo significa que debe estructurarse de una manera que lo haga más lento que C. Esto contrasta. a Julia, que permite la heterogeneidad de una manera que no compromete el rendimiento.

  • 00:20:00 En esta sección, el orador analiza los desafíos de los lenguajes dinámicos como Python cuando se trata de lograr un alto rendimiento en estructuras de datos como arreglos. El orador señala que la combinación de un valor y una etiqueta de tipo para cada elemento de una matriz dificulta que una implementación optimizada lea información de tipo y datos para cada elemento de la matriz sin reasignar el cuadro para la matriz. Destacan el uso de numpy, una biblioteca diseñada para mejorar el rendimiento de los arreglos, como una forma de optimizar las operaciones de los arreglos escribiendo y distribuyendo valores similares juntos.

  • 00:25:00 En esta sección, el orador analiza cómo se puede crear un compilador de Python rápido para el código de Python. Sin embargo, carece de la facilidad de proporcionar una ruta rápida para verificar si todos los tipos son iguales en Python, lo que significa que en cada iteración del ciclo, tiene que asignar un nuevo cuadro para el resultado y buscar la función más dinámicamente, haciéndolo Más lento. Se encontró que el Python incorporado es mucho más lento que el código C y NumPy. El tipo de matriz en Julia tiene el tipo adjunto, lo que hace que se parezca más a una matriz NumPy en la memoria, y se descubrió que el equivalente de una lista de Python llamada matriz de cualquiera es incluso más lento que Python puro. Julia ha optimizado sus rutas de código para asignar muchos cuadros mucho más rápido que Python.

  • 00:30:00 En esta sección, el orador demuestra cómo escribir código optimizado en Julia utilizando bucles directos que funcionan en cualquier tipo de contenedor y admite una función más. La función es completamente genérica y funciona en cualquier cosa que se pueda repetir y tenga una función más. El ponente también explica que la vectorización de bucles no es la predeterminada porque la mayor parte del código no se puede vectorizar automáticamente, lo que aumenta el tiempo de compilación y el tamaño del código. Además, el código se pone a prueba con números complejos, una matriz de cuaterniones y un conjunto de enteros únicos, y funciona para todos ellos. En general, Julia es rápida debido a varios factores.

  • 00:35:00 En esta sección, el orador explica cómo el lenguaje de programación Julia compila versiones especializadas de funciones según el tipo de argumento que se pasa a la función. Por ejemplo, si a la función f de x es igual a x más uno se le pasa un entero de 64 bits, Julia compila una versión especializada de esa función para ese tipo. El proceso de pasar de los tipos de entrada a los tipos inferidos de la salida se denomina inferencia de tipo. El hablante señala que Julia es un lenguaje dinámico, por lo que la inferencia de tipo puede fallar y, si lo hace, recurre a C.

  • 00:40:00 En esta sección, el orador analiza la inferencia de tipos y da ejemplos de cómo puede funcionar recursivamente. Él muestra cómo el compilador LLVM puede tomar una función simple y optimizarla en unas pocas instrucciones de máquina haciendo un plegado constante. Luego demuestra cómo se pueden usar las declaraciones de tipo para evitar errores y hacer algo llamado despacho, que permite diferentes versiones de una función para diferentes argumentos. Al definir diferentes métodos basados en la jerarquía de tipos, muestra cómo una función puede tener múltiples métodos.

  • 00:45:00 En esta sección del video, el orador explica la jerarquía de tipos en Julia, con "número" como tipo principal y "entero" y "Polo real" como subtipos. También habla sobre el concepto de envío múltiple en Julia, donde un método está determinado no solo por el tipo del primer argumento sino por todos los tipos de argumento. Esta generalización de la programación orientada a objetos facilita la sobrecarga de una operación que opera en tipos mixtos y elige el método más específico en la jerarquía. El ejemplo de una función más se usa para ilustrar este punto.

  • 00:50:00 En esta sección, el orador explica cómo sumar diferentes tipos de valores, como un número real de precisión simple o un número complejo a otro valor. Sin embargo, agregar diferentes tipos de valores juntos, como un número complejo de precisión simple a un miembro de parejas de precisión doble, puede causar problemas con la propiedad de los métodos. El orador proporciona el ejemplo de la función de raíz cuadrada y cómo su valor de retorno debe ser de tipo estable para inferir correctamente el tipo del argumento. La inferencia de tipos garantiza que el tipo del valor devuelto depende del tipo de entrada y no del valor de la entrada. El orador también menciona los desafíos con la inferencia de tipos en lenguajes dinámicos como Python y MATLAB, lo que conduce a una disminución en el rendimiento.

  • 00:55:00 En esta sección, el orador analiza cómo los diferentes idiomas manejan los números complejos y la aritmética de enteros, y cómo la aritmética de enteros predeterminada de Julia usa 64 bits, lo que la hace menos propensa al desbordamiento que los idiomas con tamaños de bits más pequeños. El orador también habla sobre las ventajas de definir tipos personalizados en Julia, centrándose específicamente en definir un tipo de punto personalizado para vectores bidimensionales, que puede ser más rápido y eficiente que usar una matriz para dos valores. El hablante pasa por varias iteraciones para optimizar este tipo personalizado y finalmente llega a una estructura inmutable con una función definida más.

  • 01:00:00 En esta sección del video, el orador analiza las limitaciones de usar un tipo genérico para un objeto puntual y los problemas de rendimiento que resultan. Con el tipo de punto genérico, las variables X e Y tienen que ser punteros a cuadros, lo que da como resultado una persecución de puntero significativa y comprobaciones de tiempo de ejecución lentas. Además, debido a que el tipo es mutable, debe almacenarse como un puntero a un objeto en la memoria, lo que genera más problemas de rendimiento. Para abordar estos problemas, el orador propone usar una estructura no mutable con tipos de argumentos específicos para X e Y, lo que mejoraría el rendimiento al permitir que el tipo se almacene directamente en la memoria en lugar de como un puntero a un cuadro.

  • 01:05:00 En esta sección, el ponente explica cómo funciona el polimorfismo paramétrico en Julia y cómo permite crear infinitas familias de tipos. Al definir un tipo parametrizado, como un tipo de punto con parámetros para X e Y, y establecer esos parámetros en un subtipo real, se puede crear un conjunto completo de tipos que se pueden "ejecutar" con un subtipo particular. Esto permite flexibilidad en los tipos de datos sin sacrificar el rendimiento o la generalidad. El compilador es lo suficientemente inteligente como para almacenar estos tipos en memoria consecutiva y optimizar las funciones de suma con bucles estrechos. Estos tipos parametrizados se suman a la sintaxis de alto nivel de Julia y eliminan la necesidad de escribir código C para optimizar el rendimiento.

  • 01:10:00 En esta sección, el orador explica cómo Julia puede manejar la escritura mixta, lo que permite una mayor flexibilidad en la programación. Siempre que se utilice el signo más para sumar números, se pueden sumar dos tipos cualesquiera de números, y el tipo resultante se determina por el tipo de devolución. Se da un ejemplo con enteros de 64 bits y float64s que se agregan. Además, el compilador conoce todos los tipos en una matriz, lo que permite un cálculo rápido de funciones como la suma. Si bien los compiladores de vectorización pueden verse limitados en su capacidad para optimizar estructuras de datos más complicadas, en Julia hay formas de usar estructuras y parámetros para acelerar el cálculo. El orador destaca las opciones de diseño clave en Julia que permiten una compilación rápida y especializada y una inferencia de tipos.

  • 01:15:00 En esta sección, el ponente describe algunos aspectos técnicos de Julia, como su implementación de matrices y tipos parametrizados. Julia tiene como objetivo evitar la creación de demasiados tipos privilegiados y, en cambio, permite que el código de usuario sea tan bueno como el código integrado. Julia tiene tipos concretos, que son finales y no pueden tener subtipos que puedan causar errores. Por ejemplo, un subtipo de una matriz no sería una matriz real de ese tipo, pero podría causar problemas con el compilador para una función que usa esa matriz. El compilador usa LLVM para generar código de máquina después de varias pasadas, incluido el análisis, la reescritura de macros y la inferencia de tipos. Julia también tiene capacidades de metaprogramación, lo que permite a los usuarios cambiar la sintaxis y reescribir el código. La generación de código es posible con matrices multidimensionales, y las funciones paralelas son menos avanzadas que lenguajes como Silk, pero el lenguaje no tiene un bloqueo de intérprete global como Python.

  • 01:20:00 En esta sección, el orador analiza las diversas capacidades y bibliotecas proporcionadas por Julia para implementar subprocesos, recolección de elementos no utilizados y paralelismo de memoria distribuida. También se introducen el tipo BigNum y la biblioteca BigFloat, que permiten la manipulación de números grandes y precisos. El orador señala que Julia tiene una amplia gama de compatibilidad con Unicode como identificadores y permite completar tabuladores de caracteres LaTeX, lo que puede ser útil al escribir ecuaciones. También se menciona el préstamo de Python de esta función.

  • 01:25:00 En esta sección, el disertante discute la importancia de tener variables con nombres propios y descriptivos en lenguajes dinámicos. Menciona que tener variables nombradas en un formato específico puede hacer que el código sea más legible y más fácil de entender. Luego, el orador agradece al presentador y menciona un proyecto que está explorando la fusión de la tecnología Julia con la tecnología Silk, lo que puede conducir a nuevos desarrollos en el futuro.
 

Richard Feynman: ¿Pueden pensar las máquinas?



Richard Feynman: ¿Pueden pensar las máquinas?

En el video "Richard Feynman: ¿Pueden pensar las máquinas?", Feynman argumenta que si bien las máquinas son mejores que los humanos en muchas cosas como la aritmética, la resolución de problemas y el procesamiento de grandes cantidades de datos, las máquinas nunca lograrán un pensamiento e inteligencia similares a los humanos. Las máquinas tienen dificultades para reconocer imágenes debido a complejidades como variaciones en la luz y la distancia, y aunque las computadoras reconocen patrones, no pueden descubrir nuevas ideas y relaciones por sí mismas. Feynman también analiza la efectividad del uso de máquinas para la predicción del clima y otras tareas complejas, citando el ejemplo de un hombre llamado Lumic que usó una lista de heurísticas para ganar el campeonato de juegos navales en California. Para hacer máquinas inteligentes, Feynman sugiere que los desarrolladores eviten las distorsiones psicológicas que evolucionan furtivamente y, en cambio, se centren en encontrar nuevas formas de evitar el trabajo, ya que las máquinas muestran las debilidades necesarias de la inteligencia.

  • 00:00:00 En esta sección de preguntas y respuestas, Richard Feynman responde una pregunta sobre si las máquinas alguna vez lograrán un pensamiento e inteligencia similares a los humanos. Él cree que las máquinas nunca pensarán como humanos porque están hechas con diferentes materiales y nunca harán las cosas de la misma manera. Sin embargo, afirma que las máquinas son mejores que los humanos en muchas cosas, incluida la aritmética, la resolución de problemas y el procesamiento de grandes cantidades de datos. Argumenta que los humanos siempre intentan encontrar algo que puedan hacer mejor que las máquinas, como reconocer patrones, lo que ha sido difícil de poner en un procedimiento definido. En general, Feynman ofrece una perspectiva interesante sobre las capacidades de las máquinas y sus diferencias con los humanos.

  • 00:05:00 En esta sección, Feynman analiza la dificultad que enfrentan las máquinas para reconocer imágenes, particularmente en comparación con los humanos. Les cuesta dar cuenta de las variaciones de luz, distancia, inclinación y otros factores que pueden estar presentes en diferentes imágenes. Si bien los humanos pueden comparar fácilmente las huellas dactilares, las máquinas a menudo tienen dificultades con esta tarea debido a las complejidades de hacer coincidir las huellas perfectamente. Aunque los sistemas informáticos pueden hacer cosas específicas que las personas pueden hacer y reconocer patrones, en este momento no pueden descubrir nuevas ideas y relaciones por sí mismos. Los seres humanos aún tienen ventaja sobre las máquinas en ciertas áreas, particularmente en el ámbito del reconocimiento, donde existen complicaciones que dificultan la comparación.

  • 00:10:00 En esta sección, Richard Feynman analiza la idea de usar máquinas para la predicción del clima y otras tareas complejas. Explica que las computadoras pueden hacer predicciones más precisas que los humanos, ya que pueden analizar más casos y variables a un ritmo más rápido. Si bien la gente ha experimentado con enfoques heurísticos para máquinas, es más efectivo darles un procedimiento establecido. Feynman cita el ejemplo de un hombre llamado Lumic, que usó una lista de heurísticas para ganar el campeonato de juegos navales en California. La máquina de Lumic aprendió de sus errores y se volvió más efectiva con el tiempo. El proceso de aprendizaje y selección de la heurística más eficaz de la máquina la hacía parecer inteligente.

  • 00:15:00 En esta sección, Richard Feynman analiza una máquina que se estaba desarrollando para resolver problemas y encontrar nuevas heurísticas. La máquina tenía varios errores, uno de los cuales involucraba una heurística a la que se le asignaba crédito cada vez que la máquina encontraba una solución. Esto hizo que la máquina usara repetidamente esta heurística, lo que provocó una distorsión en los resultados. Feynman sugiere que para hacer una máquina inteligente, los desarrolladores deben evitar desarrollar furtivamente algún tipo de distorsión psicológica y enfocarse en encontrar nuevas formas de evitar el trabajo. Concluye afirmando que las máquinas están mostrando las debilidades necesarias de la inteligencia.
 

Ojo con la IA: Ilya Sutskever



Ojo con la IA: Ilya Sutskever

Ilya Sutskever analiza una variedad de temas relacionados con la IA en este video. Comparte su interés inicial en la IA y el aprendizaje automático y describe cómo su colaboración con Jeff Hinton condujo al desarrollo de la red neuronal convolucional AlexNet. Sutskever también habla sobre los desafíos y limitaciones de los modelos de lenguaje, argumentando que hacen más que aprender regularidades estadísticas y que representar ideas y conceptos es un logro importante. También analiza la necesidad de grandes cantidades de datos y procesadores más rápidos en el entrenamiento de IA y sugiere la posibilidad de una forma de democracia de gran ancho de banda en la que las personas ingresen datos para especificar cómo deben comportarse los sistemas.

  • 00:00:00 En esta sección, Ilya Sutskever relata su interés temprano en la IA y la conciencia, y cómo lo llevó a dedicarse al aprendizaje automático, que consideraba el aspecto más importante de la inteligencia artificial en ese momento. Señala que en 2003, la idea de que las computadoras aprendieran todavía era completamente inaccesible, ya que el mayor logro en IA en ese momento fue Deep Blue, el motor de juego de ajedrez. Luego, Sutskever comparte cómo pudo encontrar a Jeff Hinton, un profesor de la Universidad de Toronto, y comenzar a trabajar con él, lo que finalmente los llevó a colaborar en la red neuronal convolucional, AlexNet, en 2012.

  • 00:05:00 En esta sección del video, Ilya Sutskever habla sobre su motivación temprana para contribuir a la IA y su comprensión de que entrenar una red neuronal grande y profunda en un conjunto de datos lo suficientemente grande necesariamente tendría éxito en la resolución de tareas complejas como la visión. . Analiza cómo esta idea condujo al éxito de la competencia Imagenet y la importancia de las redes neuronales convolucionales. Luego habla sobre cómo comenzó el proyecto GPT con la exploración de la idea de que predecir la siguiente palabra podría conducir a un aprendizaje no supervisado, que se consideraba el Santo Grial del aprendizaje automático antes de que se resolviera por completo. Estaban utilizando redes neuronales recurrentes para este propósito hasta que salió el artículo de Transformer, que les permitió lograr sus objetivos.

  • 00:10:00 En esta sección, Ilya Sutskever aborda las limitaciones de los grandes modelos de lenguaje, en particular, su conocimiento está contenido en el lenguaje en el que están capacitados y la falta de comprensión subyacente de la realidad. También habla sobre cómo la escalabilidad y el aprendizaje profundo proporcionaron la primera forma de usar la escala de manera productiva y obtener algo a cambio, y cómo importa lo que se escala. Sutskever sugiere que si bien es difícil hablar sobre las limitaciones de los modelos de lenguaje, es importante tener en cuenta cuán seguros estamos de que estas limitaciones que vemos hoy seguirán estando con nosotros dentro de dos años.

  • 00:15:00 En esta sección, Ilya Sutskever no está de acuerdo con la idea de que los modelos de aprendizaje automático solo aprenden regularidades estadísticas y no entienden la naturaleza del mundo. Argumenta que aprender regularidades estadísticas es un logro significativo y no debe subestimarse. Al predecir y comprimir datos, estos modelos obtienen una comprensión más profunda del mundo visto a través de los datos, que incluye la lente del texto generado por humanos. Si bien los modelos de lenguaje tienen algunas limitaciones para producir buenos resultados, son excelentes para aprender representaciones de ideas, conceptos y procesos. Sutskever cree que al mejorar el aprendizaje de refuerzo a partir de la retroalimentación humana, es solo cuestión de tiempo antes de que podamos limitar la inclinación de la máquina a las alucinaciones y aprovechar su conocimiento para lograr mejores resultados.

  • 00:20:00 En esta sección, Ilya Sutskever analiza el circuito de retroalimentación en el entrenamiento de redes neuronales, donde la interfaz de chat pública de GBT puede brindar retroalimentación y generar castigos o recompensas en función de la interacción del usuario. Menciona que este enfoque podría ayudar a abordar el problema de las alucinaciones en las redes neuronales. Sutskever también comenta sobre el trabajo de Jana Kun sobre arquitecturas predictivas de incrustación conjunta y la idea de un modelo mundial no lingüístico que subyace a los grandes modelos lingüísticos. Él dice que si bien es deseable la comprensión multimodal, no es necesario comprender el mundo visualmente o por video, ya que algunos conceptos como los colores aún se pueden aprender solo del texto. Sutskever ofrece el ejemplo de que las incrustaciones de colores en la red son similares a la percepción humana.

  • 00:25:00 En esta sección, el orador discute una afirmación hecha en un documento de que uno de los grandes desafíos es predecir vectores de alta dimensión que tienen incertidumbre sobre ellos, como predecir una imagen. Sin embargo, el ponente señala que los transformadores autorregresivos actuales ya tienen esa propiedad y funcionan perfectamente bien, citando el ejemplo del trabajo de OpenAI en igpt, donde aplicaron un transformador a los píxeles y generaron imágenes de una manera compleja y sutil. El orador argumenta que los modelos pre-entrenados ya tienen conocimiento del lenguaje y los procesos en el mundo que lo producen, incluyendo representaciones comprimidas de los pensamientos, sentimientos e interacciones de las personas. Por lo tanto, la cuestión de enseñar modelos sobre la realidad subyacente no es darles conocimiento sino automatizar el proceso, lo que el hablante sugiere que podría lograrse algorítmicamente.

  • 00:30:00 En esta sección, Ilya Sutskever analiza el proceso de enseñar modelos para que sus resultados sean más precisos, y explica que cuanto mejor sea el modelo de lenguaje, mejor será el modelo generativo y cuanto mayor sea la fidelidad, más capturará la proceso. Él señala que los modelos ahora tienen el conocimiento de un "ejército de maestros", que están utilizando la asistencia de IA para ser más eficientes en la enseñanza del modelo. El proceso de aprendizaje por refuerzo involucra a maestros humanos que revisan el comportamiento del modelo para lograr un alto nivel de confiabilidad. Sutskever se enfoca en hacer que los modelos sean más confiables, controlables y más rápidos en el aprendizaje, al tiempo que garantiza que no alucinen. Señala las similitudes entre los modelos de lenguaje grande y el cerebro humano y sugiere que se necesitan más parámetros y datos para manejar modelos más grandes.

  • 00:35:00 En esta sección, Ilya Sutskever analiza la necesidad de grandes cantidades de datos en el entrenamiento de IA y afirma que, si bien actualmente es necesario en las primeras etapas del entrenamiento, es posible aprender más con menos datos con ideas creativas. . Sutskever también menciona la necesidad de procesadores más rápidos para escalar modelos y el valor potencial de los costos si el resultado los supera. Sobre el tema de la democracia y la IA, Sutskever expresó su incertidumbre sobre cómo los gobiernos utilizarán la tecnología para el asesoramiento, pero sugiere que en el futuro podría ser deseable un proceso democrático en el que los ciudadanos proporcionen información a las redes neuronales.

  • 00:40:00 En esta sección, Ilya Sutskever analiza el papel de la IA en la democracia, sugiriendo que la IA podría abrir una forma de democracia de gran ancho de banda donde las personas tienen la oportunidad de ingresar datos para especificar cómo deben comportarse los sistemas. Sin embargo, Sutskever plantea interrogantes sobre la capacidad de la IA para comprender y analizar todas las variables en una situación determinada. Dado que incluso las medianas empresas pueden estar más allá de la comprensión de cualquier individuo, sugiere que la IA podría ser increíblemente útil en casi cualquier situación si se construye de la manera correcta.
 

Matemáticas para el aprendizaje automático - Cálculo multivariante - Especialización completa en línea



Matemáticas para el aprendizaje automático - Cálculo multivariante - Especialización completa en línea

  1. Este video de YouTube es parte de la especialización en línea Multivariate Calculus, cuyo objetivo es proporcionar una comprensión gráfica e intuitiva de los conceptos esenciales del cálculo para respaldar el aprendizaje automático. El video cubre una variedad de conceptos, incluida la diferenciación, la regla de la cadena, la regla del producto, las funciones de casos especiales y la diferenciación parcial, y enfatiza la importancia de comprender los fundamentos de las matemáticas para disfrutar plenamente de sus intrigantes aplicaciones. El video también presenta el cálculo multivariado, que nos permite aplicar el cálculo para navegar espacios de alta dimensión y analizar datos multivariados usando diferenciación parcial y el concepto de derivada total.

  2. En esta serie de videos se explora el concepto de cálculo multivariante para el aprendizaje automático. Se introducen el jacobiano y el hessiano junto con las técnicas de optimización y la regla de la cadena. Se cubren las redes neuronales, con un enfoque en el entrenamiento y la retropropagación. La serie de Taylor se explica como un método para aproximar funciones y se analiza el proceso de creación de aproximaciones de orden superior utilizando cálculo multivariado. El video destaca la importancia de estos conceptos para abordar problemas complejos del mundo real.

  3. La tercera parte del video cubre varios aspectos del cálculo multivariante, comenzando con la serie de Taylor como una herramienta para aproximar funciones como serie polinomial para construir una aproximación a la función original en puntos cercanos. Luego pasa al método de Newton-Raphson, que usa solo el gradiente para avanzar hacia la solución, y el concepto de grad, un vector que combina álgebra lineal y cálculo. Además, el video explica el método de los multiplicadores de Lagrange, que es útil para resolver problemas de optimización con restricciones. Finalmente, el video muestra cómo ajustar funciones a datos utilizando el método de mínimos cuadrados, que puede ayudar a revelar relaciones físicas e hipótesis entre variables. En general, el video proporciona una descripción general completa de las aplicaciones prácticas del cálculo multivariante en el aprendizaje automático.

  4. Esta sección del video analiza cómo ajustar los datos a una función, comenzando con la regresión lineal y pasando a modelos no lineales. Se presenta la fórmula de descenso más pronunciado para el ajuste de mínimos cuadrados no lineales, que se utiliza para minimizar la suma de los cuadrados de los residuos para modelos que no son lineales en funciones y parámetros. El video también cubre la importancia de generar una buena suposición inicial para los parámetros de ajuste y comparar visualmente el ajuste con los datos. El curso proporciona una comprensión introductoria del cálculo multivariante para el aprendizaje automático, desde la definición de un derivado hasta sus aplicaciones en redes neuronales y regresión lineal.

Parte 1

  • 00:00:00 En esta sección, el instructor presenta el curso de cálculo multivariante para estudiantes de aprendizaje automático. El curso tiene como objetivo proporcionar una comprensión del cálculo y sus aplicaciones utilizando gráficos y animaciones, haciéndolo más intuitivo y menos abrumador. El curso consta de seis módulos que introducen conceptos básicos de cálculo, comenzando desde lo básico y desarrollando aplicaciones interesantes en los módulos cinco y seis. El instructor sugiere enfocarse en hojear los detalles y representar conceptos gráficamente para facilitar una mejor comprensión, pero también proporciona enlaces a descripciones más rigurosas para aquellos interesados. Finalmente, la sección enfatiza la importancia de comprender el aburrido trabajo preliminar de las matemáticas, incluidas sus peculiaridades y notación, para disfrutar plenamente de las interesantes aplicaciones de las matemáticas, como el aprendizaje automático.

  • 00:05:00 En esta sección, el instructor analiza cómo seleccionar una función es la esencia creativa de la ciencia, y cómo el cálculo nos permite extraer mucho más que solo la velocidad de un gráfico de velocidad versus tiempo para un automóvil. La aceleración se define como el gradiente local y también se puede trazar contra el tiempo para crear un nuevo gráfico para el análisis. El instructor muestra cómo un gráfico de velocidad constante tendría un gradiente cero constante, mientras que un gráfico más complejo tendría puntos variables de gradiente positivo y negativo. En última instancia, el cálculo es solo un conjunto de herramientas para describir la relación entre una función y el cambio en sus variables, y nos permite investigarlas y manipularlas.

  • 00:10:00 En esta sección, se analiza el concepto de derivar la función de aceleración tomando la pendiente de la función de aceleración en cada punto, conocida como la sacudida del automóvil. El video también explora la idea de la antiderivada o el procedimiento inverso, que está estrechamente relacionado con algo llamado integral. Luego, la discusión pasa a la definición formal de derivada mediante la definición del concepto de gradientes con la ayuda de la notación matemática. El gradiente de una función lineal se explica usando la fórmula rise over run donde tanto el rise como el run son las distancias a lo largo de los ejes vertical y horizontal respectivamente. Finalmente, también se explora el concepto de cómo se puede usar el esquema de notación límite para expresar el gradiente.

  • 00:15:00 En esta sección, el video explica el concepto de diferenciación y cómo se usa para encontrar el gradiente de una función. El proceso consiste en tomar el límite cuando Delta X se aproxima a cero de la expresión (f(x+Delta X) - f(x)) / Delta X, que da la pendiente de la recta tangente en ese punto. El video proporciona ejemplos de cómo encontrar el gradiente de funciones lineales y cuadráticas simples utilizando este método, lo que demuestra la intercambiabilidad de la regla de la suma. Los gradientes resultantes son una constante y una función de x, respectivamente.

  • 00:20:00 En esta sección, el instructor explica la regla de la potencia para la diferenciación. Si tomamos una función f de X igual a AX elevado a B y la diferenciamos, el resultado es f raya de X igual a ABX elevado a B menos 1, lo que se conoce como la regla de la potencia. El instructor también menciona que la diferenciación puede volverse tediosa para expresiones largas y complicadas. Para acelerar el proceso, podemos usar reglas como las reglas de suma y potencia. Luego, el video pasa a explicar tres funciones de casos especiales que nos dan resultados interesantes cuando se diferencian. La primera función es f de X igual a 1 sobre X, que muestra una discontinuidad en x igual a 0. El instructor aplica la expresión de diferenciación a esta función para investigar su gradiente.

  • 00:25:00 En esta sección, el video analiza algunas funciones de casos especiales en cálculo. Primero, explican una función con la propiedad de que el valor de la función es siempre igual al valor de su propio gradiente. La función exponencial ea la X es la única función que satisface todos los criterios necesarios. A continuación, el video habla sobre las funciones trigonométricas seno y coseno y sus derivadas. El patrón que se repite a sí mismo de estas funciones puede recordar a uno de la función exponencial. En última instancia, el video enfatiza que la diferenciación es un concepto simple, e incluso si uno no puede trabajar con todo el álgebra, solo puede buscar el gradiente ascendente o descendente en cada punto.

  • 00:30:00 En esta sección, el video explica la regla del producto, un atajo conveniente para diferenciar el producto de dos funciones. La regla permite a los matemáticos evitar el tedioso proceso de calcular derivadas cuando se trata de funciones relativamente simples. La regla se describe mediante el uso de un rectángulo donde un lado es la función f de x y el otro lado es la función g de x. El producto de estas dos funciones nos da el área del rectángulo, que se puede llamar a de x. Al dividir el rectángulo en cuatro regiones, se realizan cambios de lado con pequeñas cantidades de Delta X y se puede ignorar el rectángulo más pequeño que se encogerá más rápido. La expresión final para la derivada de a con respecto a x es f de x por la derivada de G de X más G de X por la derivada de f de x.

  • 00:35:00 En esta sección del video, se presenta el concepto de la regla de la cadena y se usa para encontrar la tasa de cambio de la felicidad con respecto al dinero al relacionar las funciones de felicidad y pizza y pizza y dinero. La regla de la cadena es una forma de hacer una cadena de relaciones derivadas y es particularmente útil para funciones complicadas donde la sustitución directa puede no ser una opción. Luego, el video aplica la regla de la cadena a las funciones y obtiene la función deseada de la tasa de cambio de la felicidad con respecto al dinero. El video concluye con una discusión sobre los beneficios de la regla de la cadena y una vista previa de cómo se usarán todas las reglas para ahorrar tiempo en el próximo video.

  • 00:40:00 En esta sección, vemos un ejemplo de cómo aplicar la regla del producto en cálculo a una fracción que se reescribe como un producto. El primer paso es reescribir la función como un producto moviendo el denominador hacia arriba y elevándolo a la potencia de uno negativo. Luego, la función se divide en dos partes separadas: G de X y H de X. La derivada de cada parte se calcula utilizando una notación diferente y aplicando las reglas de la suma, la potencia y la cadena. Una vez que tenemos las expresiones derivadas de ambas partes, podemos aplicar la regla del producto para obtener la respuesta final. La sección termina con un recordatorio de que las funciones aparentemente intimidantes se pueden dominar fácilmente con las herramientas adecuadas, mientras que las funciones aparentemente simples pueden ser desafiantes pero también divertidas para trabajar.

  • 00:45:00 En esta sección del video, el instructor presenta el cálculo multivariado, que es una extensión del concepto de diferenciación aprendido en el módulo anterior. Con más de una variable para analizar, ahora se puede aplicar el cálculo para ayudar a navegar espacios de alta dimensión. El instructor explica las diferencias sutiles entre el uso de los términos "multivariable" y "multivariable", aunque la distinción no es crítica. Luego, la discusión continúa para aclarar las sutilezas de las variables y los parámetros en el contexto de las aplicaciones de cálculo. En módulos futuros, el instructor aplicará el cálculo a algunos problemas interesantes de análisis de datos.

  • 00:50:00 En esta sección, el ponente explica cómo usar la diferenciación parcial para encontrar la derivada de una función con respecto a cada una de sus variables. Proporcionan un ejemplo de cómo encontrar la masa de una lata dividiendo su área en diferentes partes y multiplicando estas partes por el grosor y la densidad del metal. Muestran cómo encontrar la derivada parcial de la masa de la lata con respecto a cada una de sus variables (radio, altura, espesor y densidad) y explican cómo usar el símbolo parcial rizado para diferenciar una función de más de una variable. El ponente concluye que la diferenciación parcial no es mucho más complicada que el cálculo univariado y es un concepto esencial en el aprendizaje automático.

  • 00:55:00 En esta sección, se introduce el concepto de diferenciación parcial, y el tutorial usa el ejemplo de una función de tres variables para ilustrar cómo encontrar derivadas parciales. A continuación, el tutorial introduce el concepto de derivada total y explica que se utiliza para medir los cambios que ocurren debido a un pequeño cambio en todos los parámetros de una función. El tutorial explica cómo calcular la derivada total y cómo usar la regla de la cadena para resolver problemas con muchas variables. Finalmente, el jacobiano se presenta como una forma de incorporar algunas de las ideas del álgebra lineal y convertir estas derivadas parciales en algo particularmente útil en el contexto de la optimización y el aprendizaje automático.

Parte 2

  • 01:00:00 En esta sección, el concepto de jacobiano se explica en el contexto del cálculo multivariado. El jacobiano es una expresión algebraica para un vector que, cuando se le dan coordenadas XYZ específicas, devuelve un vector que apunta en la dirección de la pendiente más pronunciada de una función. El video continúa explorando un ejemplo bidimensional de una función complicada y atractiva con un diagrama de contorno para demostrar este concepto. Se muestra que los vectores jacobianos apuntan hacia arriba, alejándose de las regiones bajas y oscuras y hacia las regiones altas y brillantes. Este claro ejemplo en dos dimensiones pretende dar a los espectadores confianza para explorar problemas de dimensiones superiores más adelante en el curso.

  • 01:05:00 En esta sección sobre cálculo multivariante para aprendizaje automático, se explora el concepto de vector jacobiano y matriz jacobiana. El vector jacobiano se usa para encontrar el campo vectorial de una función, donde el origen representa un máximo, un mínimo o una silla de montar, y la matriz jacobiana se construye para funciones que toman un vector como entrada y salida. Para funciones lineales, la matriz jacobiana es un gradiente constante y se puede utilizar para transformar coordenadas entre espacios vectoriales. Aunque muchas funciones en el aprendizaje automático son altamente no lineales, su suavidad permite que cada pequeña región del espacio se considere aproximadamente lineal, y el jacobiano en cada punto se puede sumar para calcular el cambio de tamaño.

  • 01:10:00 En esta sección, se introduce el concepto de optimización en matemáticas, que se refiere a encontrar valores de entrada para funciones que correspondan a los valores máximos o mínimos de un sistema. El proceso de optimización se utiliza en una variedad de escenarios del mundo real, como la planificación de rutas, la programación de la producción y la selección de existencias. Para encontrar los máximos y mínimos de una función simple, se puede construir el jacobiano y determinar sus valores, pero para funciones más complejas, encontrar los valores óptimos puede ser más desafiante. La analogía de un pozo de arena con una base irregular se usa para explicar el proceso de encontrar el punto más profundo de un sistema usando el jacobiano.

  • 01:15:00 En esta sección, se introduce el concepto de matriz hessiana para sistemas multivariados que se pueden considerar como una extensión del vector jacobiano. La matriz hessiana es una matriz cuadrada de N por n para una función de n variables, donde n es el número de variables en la función f. Para encontrar el hessiano, primero podemos encontrar el jacobiano y luego diferenciar sus términos nuevamente. La matriz hessiana es simétrica a lo largo de la diagonal principal y se puede usar para determinar si una función es máxima o mínima en un punto. El determinante de la arpillera se utiliza para determinar si una función es un punto de silla o no.

  • 01:20:00 En esta sección, el video analiza las limitaciones de los paisajes bidimensionales y los desafíos que conllevan dimensiones más altas, cálculos costosos, características nítidas y funciones ruidosas. El método de diferencias finitas se introduce como una técnica de aproximación para generar soluciones a problemas que pueden no tener una fórmula explícita. Tomando pequeños pasos en diferentes direcciones, el jacobiano se puede aproximar utilizando este enfoque, pero es importante encontrar el equilibrio adecuado al elegir el tamaño de los pasos.

  • 01:25:00 En esta sección, el video comienza con una discusión sobre los datos ruidosos y los desafíos que surgen cuando se trata de funciones computacionalmente costosas. El orador destaca que el enfoque más simple para tratar con datos con ruido es calcular el gradiente utilizando algunos tamaños de paso diferentes y tomando algún tipo de promedio. Luego, el video presenta el Módulo 3, donde la regla de la cadena univariante se actualizará para abordar las funciones multivariantes. El orador simplifica la notación y explica que la regla de la cadena multivariable se puede expresar claramente a través del producto escalar de dos expresiones derivadas multivariables. El video concluye destacando que el resto de las reglas de ahorro de tiempo ya funcionan para problemas multivariados, concluyendo su discusión sobre la forma generalizada de la regla de la cadena multivariable.

  • 01:30:00 En esta sección, el video cubre cómo funciona la regla de la cadena para más de dos eslabones usando un ejemplo univariante con tres funciones. Luego, el video presenta el caso multivariante, donde la regla de la cadena aún funciona pero con atención adicional a los detalles, como la matriz jacobiana. La derivada de F con respecto a T es el producto del jacobiano de F con el jacobiano de X y el vector derivado de U, lo que da como resultado una salida escalar. Este concepto es crucial para las redes neuronales artificiales y su aplicación a problemas del mundo real.

  • 01:35:00 En esta sección, el video presenta la función matemática de una red neuronal. Una red neuronal es simplemente una función que toma una variable y devuelve otra variable, donde ambas variables pueden ser vectores. Cada nodo de una red neuronal se denomina actividad, que consiste en un peso, un sesgo y una función de activación (representada por la letra griega Sigma) que le da a las redes neuronales su asociación con las neuronas cerebrales. El video muestra cómo crear más complejidad en la red agregando más neuronas y generaliza la expresión para tomar n entradas, pesos, sesgos y salidas, que se pueden representar en forma de vector compacto. La pieza final del rompecabezas es agregar capas ocultas de neuronas entre las entradas y las salidas, que se comportan de la misma manera que las capas anteriores.

  • 01:40:00 En esta sección, se introduce el concepto de entrenamiento de redes neuronales utilizando datos etiquetados y retropropagación. El enfoque está en encontrar los pesos y sesgos que permitan a la red hacer coincidir mejor las entradas de entrenamiento con sus etiquetas, lo que se logra eligiendo una estructura simple y luego actualizando gradualmente los pesos y sesgos. Se define una función de costo y se toma el gradiente de C con respecto a la variable W para determinar la dirección para actualizar los pesos y sesgos. Además, se destaca la expresión de la regla de la cadena para la derivada parcial del costo, que se puede usar para navegar por el espacio WB a fin de minimizar el costo de la red para un conjunto de ejemplos de capacitación.

  • 01:45:00 En esta sección del video, la serie de Taylor se presenta como un enfoque para construir aproximaciones a funciones. El video proporciona un ejemplo de cómo se puede usar la serie de Taylor para aproximar los tiempos de cocción de los pollos. El proceso implica hacer suposiciones sobre las propiedades del horno y del pollo, y usar una serie de funciones más simples para modelar la relación entre la masa del pollo y el tiempo de cocción. El método de la serie de Taylor permite derivar una función con la misma pendiente y altura que uno de los puntos del gráfico, pero a medida que uno se aleja del punto de interés, la aproximación se vuelve pobre. El video también explica que la serie de Taylor se puede denominar serie de potencias y proporciona una expresión generalizada simple para una serie de potencias.

  • 01:50:00 En esta sección, se discute el concepto de serie truncada y el proceso de construcción de funciones a través de aproximaciones. Una serie de potencias generalizada se presenta como una serie de potencias crecientes de X. El método de la serie de Taylor permite la reconstrucción de una función en cualquier otro lugar conociendo todo sobre la función en un punto. Este método solo se puede utilizar para funciones continuas de buen comportamiento. La mejora gradual de las aproximaciones para construir una función se demuestra gráficamente con un ejemplo. Las primeras aproximaciones se basan en solo una o dos piezas de información, mientras que se utiliza más información para mejorar aún más las aproximaciones.

  • 01:55:00 En esta sección, el video analiza el proceso de creación de aproximaciones de orden superior de una función usando cálculo multivariante. Comienza con encontrar las aproximaciones de primer y segundo orden utilizando información como F(0), F'(0) y F''(0) para crear ecuaciones cuadráticas. Luego, el video pasa a discutir las aproximaciones de tercer y cuarto orden, mostrando que los términos de orden superior por partes se pueden agregar mientras se mantienen iguales los términos de orden inferior. El video también señala que el coeficiente delante del término cúbico en la aproximación cúbica resultó de derivar dos veces un término cúbico. En general, el video demuestra la utilidad del cálculo multivariado en la aproximación de funciones complejas.

parte 3

  • 02:00:00 En esta sección, se aplica más el concepto de serie de potencias, donde diferenciamos la función "e a x" término por término y encontramos algo satisfactorio que permanece sin cambios. La serie de Taylor reconoce que no hay nada especial en el punto x igual a 0 y dice que si sabes todo sobre la función en cualquier punto, entonces puedes reconstruir la función en cualquier lugar. Partiendo del punto x igual a P, se puede ajustar la ecuación alemana para permitir puntos de expansión arbitrarios. El término de orden cero será una línea horizontal que solo usa el punto F de P en todas partes, y para construir una tangente a la curva en el Punto P, tenemos que anotar toda la información disponible y usar el gradiente de la función.

  • 02:05:00 En esta sección, el ponente presenta la serie de Taylor como una herramienta útil para aproximar funciones como series polinómicas. Demuestra cómo convertir la serie de Maclaurin a la forma general de la serie de Taylor aplicando la segunda derivada en un punto P y reemplazando X con X menos P. La expresión de la serie de Taylor unidimensional resultante se puede usar para reexpresar convenientemente funciones como series polinómicas. El orador también muestra cómo construir una serie de Maclaurin de expansión de la función coseno y usa este ejemplo para explicar el patrón cíclico de cosenos y senos, la ausencia de potencias impares de X en la serie y el uso de notación de suma para describir completamente el serie. La sección termina con un recordatorio para tener cuidado al manejar aproximaciones de series y saber el dominio en el que son aceptables.

  • 02:10:00 En esta sección, el orador analiza cómo la serie de Taylor puede tener dificultades para lidiar con una función de mal comportamiento como 1/X debido a su discontinuidad en x=0, lo que conduce a valores indefinidos. Sin embargo, yendo a otro lugar, como x=1, y aplicando la serie de Taylor con una notación de suma prolija, se puede construir una secuencia de aproximaciones mejoradas a las funciones. Luego, el video explora el error esperado en una aproximación y cómo usar la aproximación de primer orden para evaluar una función cerca del punto P. El orador menciona que el error se puede calcular con precisión, dando una forma de estimar qué tan precisa será cualquier aproximación dada. .

  • 02:15:00 aproximando la función original en un punto cercano. En esta sección, aprendemos sobre el término de error introducido en la aproximación de primer orden, que es del orden de Delta x al cuadrado en el caso de un número pequeño. También vemos cómo la aproximación de aumento sobre la ejecución puede ayudarnos a construir la definición de una derivada y el error en ella cuando el segundo punto permanece a una distancia finita de X. Luego actualizamos la serie de potencias a su forma multivariada más general en el caso bidimensional, que da una función bidimensional para aproximar la función original en un punto cercano. En general, estos conceptos juegan un papel importante cuando se aplican métodos numéricos en la resolución de problemas.

  • 02:20:00 En esta sección, el instructor describe cómo construir expansiones de series de Taylor para funciones multivariadas. Una aproximación de orden cero es simplemente una superficie plana con la misma altura que la función en el punto de expansión, mientras que la aproximación de primer orden incorpora la información del gradiente en las dos direcciones. Para la aproximación de segundo orden, tenemos tres términos, todos los cuales son segundas derivadas, y para hacer esta suma, necesitamos multiplicar nuestro vector Delta X por el hessiano y luego nuevamente por la transposición del vector Delta X. El instructor explica que esto se generaliza inmediatamente de 2D a hipersuperficies multidimensionales, haciendo uso de las habilidades de cálculo y álgebra lineal, así como los conceptos jacobiano y hessiano.

  • 02:25:00 En esta sección, el narrador explica un método para ajustar una ecuación a una distribución de alturas utilizando dos parámetros, la media y el ancho, en lugar de trasladar todos los puntos de datos. El proceso implica encontrar una expresión de qué tan bien se ajusta el modelo a los datos y luego observar cómo cambia esa bondad de ajuste a medida que cambian los parámetros de ajuste. Luego, el narrador presenta el método de Newton-Raphson, que consiste en iterar para adivinar una solución a una ecuación, evaluarla, generar una nueva suposición y repetir el proceso hasta llegar a la solución. Este método es útil cuando una gran función multidimensional se ajusta a los datos y resolverla analíticamente o graficarla es demasiado costoso.

  • 02:30:00 En esta sección del video, se presenta el método de Newton-Raphson como una forma de resolver ecuaciones usando solo el gradiente para avanzar hacia la solución. Sin embargo, el método a veces puede crear problemas, como quedarse atascado en un bucle o divergir a valores locos. A pesar de esto, el método es un medio poderoso para iterar hacia una solución. La siguiente sección del video se enfoca en cómo aplicar este método a funciones con múltiples variables al encontrar el vector de gradiente y bajar una colina en un gráfico de contorno. Esto eventualmente permitirá la optimización y encontrar el mejor ajuste para los parámetros de una función.

  • 02:35:00 En esta sección, se explica el concepto de grad, un vector que combina álgebra lineal y cálculo. Grad se define como el vector donde escribimos DF por DX y DF por DY en las ubicaciones X e Y del vector. El gradiente direccional se presenta como el producto escalar del grado F con un vector unitario, que es paralelo al grado F, y el valor máximo del gradiente direccional es el tamaño del grado F. La dirección en la que los puntos de grado se explica como la dirección de descenso más empinado perpendicular a las curvas de nivel. Finalmente, se analiza el uso del gradiente para minimizar la diferencia entre los valores de los datos y el ajuste del modelo.

  • 02:40:00 dado es que X al cuadrado más Y al cuadrado es igual a A al cuadrado, lo que significa que los puntos que estamos viendo están todos en un círculo con radio A. Para encontrar los máximos o mínimos en este camino, podemos usar el método de los multiplicadores de Lagrange. Esto implica encontrar dónde el vector gradiente perpendicular al contorno de la función está en la misma dirección, hasta un signo menos, que el vector gradiente perpendicular a la trayectoria del círculo. Esto nos dará los puntos donde el contorno toca el camino, que es donde encontraremos los mínimos y máximos. Este enfoque nos permite resolver problemas de optimización sujetos a restricciones, como encontrar el valor máximo o mínimo de una función a lo largo de un camino determinado.

  • 02:45:00 En esta sección, se introduce el concepto de multiplicadores de Lagrange como una herramienta para resolver problemas de optimización con restricciones. Se usa un ejemplo práctico que involucra una restricción de ecuación circular y una función multivariable para ilustrar el uso de los multiplicadores de Lagrange. Las ecuaciones se establecen y resuelven para encontrar los valores máximo y mínimo de la función dentro de la restricción. Trazar los resultados en tres dimensiones muestra los puntos máximo y mínimo. Este método puede ser útil en problemas de optimización en aprendizaje automático en los que intervienen restricciones.

  • 02:50:00 En esta sección, el video analiza cómo optimizar funciones y resolver problemas usando cálculo multivariado. Se introduce el método de Newton-Raphson que usa gradientes para estimar qué tan lejos hay que pasar de una conjetura actual a una solución para un problema, mientras que el vector de gradiente se define como perpendicular a las líneas de contorno y tiene elementos iguales a la diferencia de la función a lo largo de cada uno. eje. Luego, el video muestra cómo resolver un problema sujeto a una restricción al igualar la función de gradiente a la tangente de la restricción, usando el método del multiplicador de Lagrange. La aplicación del cálculo multivariado puede ayudar a ajustar funciones a los datos utilizando el método de mínimos cuadrados, lo que permite limpiar, analizar y graficar los datos para revelar relaciones físicas e hipótesis entre variables.

  • 02:55:00 En esta sección del video, el disertante explica cómo encontrar el valor óptimo de m y c usando un residuo R y una medida de calidad de ajuste llamada chi-cuadrado. Él define R como la diferencia entre los elementos de datos y su ubicación predicha en la línea y chi-cuadrado como la suma de los residuos cuadrados. Al trazar cómo se verá el chi-cuadrado para muchos valores diferentes posibles de M y C, encuentra el mínimo alrededor de 215 y cerca de una intersección de 0. El mínimo se encuentra cuando el gradiente de chi-cuadrado es cero. . El disertante continúa explicando cómo resolver el problema de forma explícita y luego muestra cómo hacerlo por descenso lineal. También explica cómo hacerse una idea de las incertidumbres en los parámetros de ajuste.

parte 4

  • 03:00:00 En esta sección, se analiza el concepto de ajustar una línea a algunos datos a través de la regresión, y se presenta el estimador de bondad de ajuste chi-cuadrado que mide la desviación del ajuste de los datos. Se destaca la importancia de comparar visualmente el ajuste junto con el hecho de que la intercepción depende del gradiente. El problema se reformula como la ubicación del centro de masa en y en la barra y para eliminar la incertidumbre en el gradiente al considerar el término constante en el ajuste. Luego, el video continúa hablando sobre el ajuste de funciones que son arbitrariamente más complicadas que la regresión lineal, y los parámetros se ajustan a los datos usando mínimos cuadrados no lineales, donde chi-cuadrado se calcula como la suma de todos los puntos de datos del diferencia entre el YI y el modelo de XI con sus parámetros a K, todo dividido por Sigma al cuadrado.

  • 03:05:00 En esta sección, el orador analiza la fórmula de descenso más pronunciado para el ajuste de mínimos cuadrados no lineales, que se utiliza para minimizar la suma de los cuadrados de los residuos para un modelo que no es lineal en funciones y parámetros de ajuste. El ponente explica que esta fórmula se usa para actualizar el vector de parámetros de ajuste durante cada iteración hasta que se alcance el valor mínimo de chi-cuadrado, que podría ser cuando el gradiente de chi-cuadrado sea igual a cero o cuando el valor de chi-cuadrado deje de cambiar. Si bien existen varios métodos para resolver este tipo de problemas, el descenso más pronunciado es el más simple y es suficiente para encontrar el valor mínimo para un problema generalizado de ajuste de mínimos cuadrados no lineales.

  • 03:10:00 En esta sección sobre cálculo multivariado, el video explica varios métodos para resolver problemas de mínimos cuadrados no lineales, incluido el uso de Hessian para una convergencia más rápida, el método de Levenberg-Marquardt para estabilidad y un ajuste robusto para manejar valores atípicos. Luego, el video demuestra cómo usar MATLAB y Python para realizar un ajuste de curvas de mínimos cuadrados no lineales, utilizando el ejemplo de ajuste de una distribución gaussiana a los datos de altura de la población. Enfatiza la importancia de comenzar con una estimación sensata de los parámetros iniciales para garantizar que el algoritmo pueda converger a un mínimo significativo.

  • 03:15:00 En esta sección, el orador enfatiza la importancia de generar una buena suposición inicial y comparar el ajuste con los datos al ajustar datos a funciones. Concluyen la discusión sobre el uso del cálculo multivariado para optimizar funciones y ajustar datos a funciones, señalando que es fácil computacionalmente ajustar funciones en solo unas pocas líneas de código en Python, MATLAB o R. Sin embargo, el orador señala la importancia de comprender cómo funcionan los algoritmos bajo el capó y cómo solucionarlos si algo sale mal. El curso ha proporcionado una comprensión introductoria del cálculo multivariado para el aprendizaje automático, desde la definición de un derivado hasta cómo se puede aplicar en redes neuronales y regresión lineal, lo que permite una intuición sobre dónde puede ser útil el cálculo.
 

Serie de oradores ETL: Ilya Sutskever, OpenAI



Serie de oradores ETL: Ilya Sutskever, OpenAI

En un video de YouTube titulado "ETL Speaker Series: Ilya Sutskever, OpenAI", Ilya Sutskever, cofundadora y científica en jefe de OpenAI, analiza temas como los grandes modelos de lenguaje, la premisa detrás de las neuronas artificiales, la conciencia en la IA y la estructura financiera de Organizaciones de IA sin fines de lucro. Sutskever enfatiza la importancia del progreso técnico y de hacer una buena investigación para el éxito de OpenAI y alienta a los estudiantes interesados en la IA y el espíritu empresarial a explorar sus ideas únicas. También predice que las mejoras en varias capas de la pila de aprendizaje profundo y la capacitación especializada tendrán un gran impacto en el futuro. Finalmente, los anfitriones agradecen a Sutskever por su perspicaz discusión y lo invitan a participar en futuros eventos, al mismo tiempo que dirigen a los espectadores al sitio web del rincón electrónico de Stanford para obtener más recursos sobre el espíritu empresarial y la innovación.

  • 00:00:00 En esta sección, Ravi Balani presenta a Ilya Sutskever, cofundador y científico jefe de OpenAI, reconocido como la mente fundamental detrás del lanzamiento del Transformer 3 (GPT-3) preentrenado generativo de modelo de lenguaje grande. y el producto que lo acompaña, Chat GBT. Balani explica los antecedentes de Sutskever como inmigrante ruso-israelí que estudió matemáticas e informática en Israel y luego obtuvo su doctorado en la Universidad de Toronto. A Sutskever se le atribuye el impulso detrás de AlexNet, que se hizo conocido por iniciar la revolución del aprendizaje profundo que condujo al panorama actual de la IA. Luego, Sutskever explica la premisa detrás del modelo de lenguaje grande y cómo se inspira en las neuronas biológicas del cerebro humano.

  • 00:05:00 En esta sección, Ilya Sutskever de OpenAI analiza el desarrollo del algoritmo de propagación inversa, la ecuación matemática que utilizan las redes neuronales para aprender de la experiencia. Él explica que un modelo de lenguaje grande es una red neuronal entrenada para adivinar la siguiente palabra de las palabras anteriores en el texto con alta precisión, y esa comprensión se pone en práctica a través de la optimización del error de predicción. Sutskever sugiere que las neuronas artificiales no son tan diferentes de las neuronas biológicas, y si podemos imaginar esto, podemos ver que los humanos son capaces de hacer un buen trabajo al adivinar la siguiente palabra, al igual que los grandes modelos de lenguaje actuales. Sin embargo, advierte contra hacer comparaciones directas entre humanos y redes neuronales artificiales porque nuestra comprensión del aprendizaje humano aún es limitada.

  • 00:10:00 En esta sección, Ilya Sutskever, cofundador de OpenAI, analiza las diferencias entre la forma en que aprenden las redes neuronales y la forma en que aprenden los humanos. Las redes neuronales son sólidamente buenas en matemáticas o programación; sin embargo, necesitan una gran cantidad de datos para lograr este nivel de experiencia. Por otro lado, los humanos pueden comprender algo profundamente a pesar de haber leído solo una pequeña cantidad de documentos. Cuando se trata de discutir el punto de singularidad en el que las máquinas superarán el aprendizaje y la adaptación humanos, Sutskever no sabe cuándo ocurrirá ese punto. Es necesario que se produzcan avances, y la incertidumbre es alta. Es complicado definir la Conciencia, pero es algo inevitable que debe probarse en los sistemas de IA.

  • 00:15:00 En esta sección, Ilya Sutskever, director científico de OpenAI, analiza el concepto de conciencia en la inteligencia artificial. Sugiere que la conciencia es más una cuestión de grado que un concepto binario y que los animales también pueden tener una forma reducida de conciencia en comparación con los humanos. Luego pasa a hablar sobre la misión de OpenAI y los problemas éticos que rodean su decisión de cambiar de una organización sin fines de lucro a una con fines de lucro con estrechos vínculos con Microsoft. Reconoce su responsabilidad directa en los avances realizados por OpenAI y cómo la ética juega un papel en su toma de decisiones.

  • 00:20:00 En esta sección, Ilya Sutskever analiza los pros y los contras de la IA de código abierto frente a la de código cerrado. Si bien la IA de código abierto evita la concentración de poder en manos de unos pocos, lo cual es deseable desde la perspectiva del equilibrio de poder, puede que no sea ideal a largo plazo, ya que las capacidades de la IA se vuelven cada vez más poderosas. Eventualmente, la seguridad debería convertirse en el impulsor obvio e inmediato para no abrir estos modelos. Además, la decisión de ir sin fines de lucro versus con fines de lucro no es sencilla dado el costo significativo de los centros de datos, que la mayor parte del dinero de la financiación se destina a los proveedores de la nube.

  • 00:25:00 En esta sección, Ilya Sutskever, cofundador de OpenAI, explica la estructura financiera de organizaciones sin fines de lucro como la suya que se ocupan de la inteligencia artificial (IA). Estas empresas requieren grandes fondos para respaldar grandes redes neuronales, que ya no pueden ser respaldadas por universidades porque sus costos se han vuelto demasiado altos. Por lo tanto, las organizaciones sin fines de lucro como OpenAI, financiadas con donaciones, ofrecen a las empresas de IA una vía para contribuir con el mundo académico. La estructura financiera de OpenAI es única; no es una corporación con fines de lucro sino una "compañía con ganancias limitadas". La equidad en OpenAI es un bono con una obligación finita para los inversores. Una vez pagado, OpenAI vuelve a ser una organización sin fines de lucro. Aunque parezca una locura, esta estructura es esencial porque la IA se está volviendo cada vez más prominente y puede ser más beneficioso para las empresas de IA apoyar inversiones sin fines de lucro. Microsoft es uno de los inversores de OpenAI, y OpenAI mantiene conversaciones sobre AGI (inteligencia general artificial) con ellos, ya que comprenden el potencial de AGI y su impacto en el mundo.

  • 00:30:00 En esta sección, Ilya Sutskever analiza el deber fiduciario de OpenAI y los riesgos potenciales para los inversores. Él distingue a OpenAI de DeepMind porque OpenAI está en manos de una organización sin fines de lucro que tiene un GP o un LP en la sección con fines de lucro. Además, Sutskever comparte sus pensamientos sobre la necesidad de regulaciones gubernamentales y evaluaciones cuidadosas para redes neuronales más poderosas para lograr un progreso que sea sensato y que haya sido completamente verificado o certificado. En cuanto a las obligaciones éticas, reconoce la importancia de las obligaciones ciudadanas, pero prioriza el florecimiento de los Estados Unidos donde reside.

  • 00:35:00 En esta sección, el entrevistador le pregunta a Ilya Sutskever de OpenAI qué métricas rastrean como North Star para su éxito. Sutskever dice que el KPI principal es el progreso técnico y hacer una buena investigación, comprender los sistemas, capacitarlos mejor y controlarlos mejor. Él cree que la tecnología central está en el corazón del éxito de OpenAI. Cuando se le preguntó si OpenAI sería un destino para las personas o si se usaría como parte de la infraestructura de back-end, Sutskever dice que la pregunta es difícil de responder ya que las cosas cambian tan rápido. En términos de consejos para los estudiantes interesados en la IA y el espíritu empresarial, Sutskever recomienda apoyarse en las predisposiciones únicas de cada uno y explorar sus propias ideas.

  • 00:40:00 En esta sección, Ilya Sutskever habla sobre su creencia en confiar en la intuición, especialmente valiosa en el espíritu empresarial donde se pueden aprovechar perspectivas únicas para perfeccionar nuevas oportunidades. Cuando se le preguntó sobre el futuro del aprendizaje profundo en los próximos cinco a diez años, Sutskever predijo que se seguirá avanzando en el campo, tal vez no a través del enfoque anterior en la escala, sino a través de mejoras en varias capas de la pila de aprendizaje profundo. . También enfatiza el valor de identificar nuevas fronteras en el aprendizaje profundo como una vía de contribución y predice que la formación de especialistas tendrá un gran impacto en el futuro, pero solo después de que se haya establecido una formación generalista de redes neuronales.

  • 00:45:00 En esta sección, el orador analiza la idea de la capacitación especializada y cómo ya está sucediendo hasta cierto punto, particularmente en la comunidad de código abierto, donde las personas trabajan con modelos que tienen poca potencia y necesitan obtener el mayor rendimiento. como sea posible. Él cree que la ventaja ganadora en IA será una combinación de varios factores, incluido tener conjuntos de datos propietarios y un modelo base capaz. Cuando se trata de lanzar tecnología de IA a investigadores y empresas emergentes, sugiere que los enfoques intermedios, como el acceso a modelos, pueden ser muy productivos para estudiar redes neuronales que tienen una superficie de comportamiento grande y complicada. Por último, el orador comparte que el impacto de la integración de IA en OpenAI es un ligero aumento en la productividad, pero no ha llevado a un cambio dramático en la dinámica del equipo.

  • 00:50:00 En esta sección, los anfitriones agradecen a Ilya Sutskever por su perspicaz discusión sobre inteligencia artificial y aprendizaje profundo. Lo invitan a eventos futuros y le recuerdan a la audiencia las próximas sesiones de ETL con líderes de la industria. También dirigen a los espectadores al sitio web del rincón electrónico de Stanford para obtener más recursos sobre el espíritu empresarial y la innovación.
 

Ilya Sutskever (Científico Jefe de OpenAI) - Creación de AGI, Alineación, Espías, Microsoft e Ilustración



Ilya Sutskever (Científico Jefe de OpenAI) - Creación de AGI, Alineación, Espías, Microsoft e Ilustración

El científico jefe de OpenAI, Ilya Sutskever, cubre una variedad de temas en este video, incluido el potencial de usos ilícitos de GPT, la importancia de la confiabilidad en los sistemas de IA, el papel de la colaboración hombre-máquina en la construcción de AGI, las limitaciones de software y hardware de AGI, y el potencial de la investigación académica. Él cree que será necesaria una combinación de enfoques para reducir la probabilidad de desalineación en la construcción de AGI, y que los avances necesarios para la IA sobrehumana pueden no sentirse necesariamente como avances en retrospectiva. También enfatiza el valor del aporte humano en los modelos de enseñanza y sugiere que el impacto de los modelos lingüísticos puede ir más allá del mundo digital.

  • 00:00:00 En esta sección, Ilya Sutskever analiza el potencial de usos ilícitos de GPT y reconoce que es posible que gobiernos extranjeros ya lo estén utilizando con fines propagandísticos. También señala que si bien es difícil dar un marco de tiempo exacto para la transición de AI a AGI, el valor económico de AI continuará aumentando de manera exponencial en los años previos. Sutskever también usa el automóvil autónomo como una analogía para el estado actual de la IA, y señala que si bien los modelos pueden parecer capaces de hacer todo, aún queda trabajo por hacer para garantizar la confiabilidad y la solidez. Finalmente, Sutskever admite que es difícil predecir qué porcentaje del PIB representará la IA para 2030 y por qué podría no alcanzar un porcentaje alto.

  • 00:05:00 En esta sección, el científico jefe de OpenAI, Ilya Sutskever, analiza la importancia de la confiabilidad en los sistemas de IA y cómo puede afectar el valor económico que producen. También habla sobre el potencial del paradigma actual de modelos generativos para conducir a AGI y que la integración de diferentes ideas del pasado puede crear el próximo paradigma. Sutskever desafía la afirmación de que la predicción del próximo token no puede superar el rendimiento humano y explica cómo puede conducir a conocimientos sobre personas hipotéticas con una capacidad mental mucho mayor que la persona promedio. Finalmente, confirma que la mayoría de los datos para el aprendizaje por refuerzo ya provienen de la IA en lugar de los humanos y habla sobre el potencial de los maestros humanos para colaborar con la IA para mejorar sin el aporte humano.

  • 00:10:00 En esta sección, el científico en jefe de OpenAI, Ilya Sutskever, analiza la importancia de la colaboración hombre-máquina en la creación de sistemas con capacidades de razonamiento avanzadas y la necesidad de capacitación dedicada para mejorar las capacidades de razonamiento de varios pasos en los modelos de aprendizaje automático. También aborda las preocupaciones sobre la escasez de datos y sugiere que la multimodalidad puede ser una dirección valiosa para obtener más datos. Si bien la robótica no era una dirección factible para OpenAI en el pasado debido a la escasez de datos, ahora puede haber más potencial para el progreso en el campo, pero requiere un fuerte compromiso y dedicación a la tarea. Finalmente, Sutskever expresa su entusiasmo por las ideas futuras que pueden no funcionar bien con las limitaciones de hardware actuales.

  • 00:15:00 En esta sección, Ilya Sutskever analiza las limitaciones de hardware para construir AGI y sus perspectivas para lograr la alineación. Él cree que no habrá una única definición matemática para la alineación, sino múltiples definiciones que analizan la alineación desde diferentes aspectos, y que será necesaria una combinación de enfoques para reducir la probabilidad de desalineación. Sutskever también menciona la posibilidad de una red neuronal pequeña que se entienda bien para verificar el comportamiento de una red neuronal grande. Cuando se le preguntó acerca de los ingresos proyectados de OpenAI de mil millones de dólares en 2024, Sutskever explica que las ganancias inesperadas de una nueva tecnología de uso general son difíciles de estimar, pero atribuye la cifra al crecimiento potencial de los productos de OpenAI.

  • 00:20:00 En esta sección del video, Ilya Sutskever, científico jefe de OpenAI, habla sobre cómo los datos juegan un papel vital para determinar el futuro de AGI. Él enfatiza que hacer predicciones sin datos conducirá a un gran margen de error. También comparte sus pensamientos sobre el futuro posterior a AGI, diciendo que AGI podría ayudar a los humanos a ser más ilustrados e interactuar con el mundo de manera más correcta. Sin embargo, Sutskever señala que será difícil para las personas comprender qué está sucediendo con precisión y cómo contribuir a la transformación de la sociedad. Además, espera que AGI no dicte cómo se debe administrar la sociedad, y que las personas sigan siendo libres de cometer sus propios errores y sufrir sus consecuencias, con AGI proporcionando más como una red de seguridad básica.

  • 00:25:00 En esta sección, el científico jefe de OpenAI, Ilya Sutskever, analiza el hardware en la IA y desacredita la creencia de que la TPU personalizada de Google les da una ventaja sobre las GPU. Explica que, fundamentalmente, la arquitectura de las TPU y las GPU es muy similar y que lo único que importa sobre el hardware es el costo por fracaso y el costo general de los sistemas. Sutskever también comparte información sobre el trabajo que implica el desarrollo de IA, lo que implica comprender el sistema y los resultados, no solo generar nuevas ideas. También habla sobre la asociación de OpenAI con Microsoft y cuán vulnerable es el ecosistema de IA ante contratiempos como un desastre natural en Taiwán.

  • 00:30:00 En esta sección, Ilya Sutskever analiza la posibilidad de que el costo de la inferencia se convierta en una barrera para el avance de los modelos de IA. Sugiere que la utilidad del modelo determinará si el costo es prohibitivo o no, y señala que diferentes clientes ya usan diferentes redes neuronales de diferentes tamaños según su caso de uso. También aborda las preocupaciones sobre los gobiernos extranjeros que intentan aprender sobre los modelos y la importancia de la confiabilidad y la capacidad de control como propiedades emergentes. Si bien predecir capacidades específicas no es simple, él cree que se logrará un progreso en la mejora de los modelos, haciéndolos más confiables y más capaces de resolver problemas.

  • 00:35:00 En esta sección, Ilya Sutskever analiza las leyes de escala de la IA y el vínculo entre la precisión de la predicción de la siguiente palabra y la capacidad de razonamiento. Si bien considera que las leyes de escala son importantes, cree que otras cosas pueden dar más razonamiento por unidad de esfuerzo. También enfatiza el valor del aporte humano en los modelos de enseñanza, así como la relación entre la existencia de datos, GPU y transformadores, lo que sugiere que su desarrollo está entrelazado. Además, Sutskever expresa su creencia de que la revolución del aprendizaje profundo eventualmente habría ocurrido, independientemente de quiénes fueran los pioneros, y admite la dificultad de alinear modelos que podrían tergiversar sus intenciones.

  • 00:40:00 En esta sección, Ilya Sutskever analiza el potencial de la investigación académica para generar conocimientos importantes sobre las capacidades de la IA, pero reconoce que actualmente parece más fácil para las empresas realizar estas capacidades. También señala que el impacto de los modelos de lenguaje puede ir más allá del mundo de los bits y llegar al mundo de los átomos, según las acciones que provoquen. Sutskever cree que los avances necesarios para la IA sobrehumana pueden no sentirse necesariamente como avances en retrospectiva, y que puede ser importante inspirarse en los humanos y el cerebro, pero también ser consciente de las cualidades no esenciales que pueden desviar la investigación.

  • 00:45:00 En esta sección, Ilya Sutskever responde la pregunta final sobre por qué existe una fuerte correlación entre ser el primero en la revolución del aprendizaje profundo y seguir siendo uno de los mejores investigadores. Él cree que la perseverancia es una condición necesaria pero no suficiente para el éxito. Muchas cosas deben unirse, y uno debe tener la forma correcta de ver las cosas. Es una pregunta difícil de responder, pero siguió esforzándose mucho y resultó haber sido suficiente hasta ahora.
 

Lección 1: Aprendizaje profundo práctico para codificadores 2022



Lección 1: Aprendizaje profundo práctico para codificadores 2022

En este video de YouTube "Lección 1: aprendizaje profundo práctico para programadores 2022", el instructor presenta el curso, destaca el rápido ritmo de cambio en el aprendizaje profundo y demuestra la facilidad de crear un sistema "ave o no pájaro" usando Python. El curso tiene como objetivo mostrar a las personas cómo construir e implementar modelos primero, en lugar de comenzar con una revisión de álgebra lineal y cálculo, y cubrirá una variedad de modelos de aprendizaje profundo, incluidos algoritmos basados en imágenes que pueden clasificar sonidos o movimientos del mouse. El instructor enfatiza la importancia de la creación de bloques de datos, la comprensión de los detectores de características y el uso de modelos previamente entrenados para reducir los requisitos de codificación. El curso también cubre la segmentación y el análisis tabular, con fast.ai que proporciona las mejores prácticas que ayudan a reducir la codificación y mejorar los resultados.

El video proporciona una introducción al aprendizaje profundo y sus aplicaciones en varios campos. El presentador analiza los conceptos básicos del aprendizaje automático, incluido el proceso de entrenamiento del modelo y la importancia de calcular la pérdida para actualizar el peso del modelo para un mejor rendimiento. La lección cubre dos modelos: aprendizaje tabular y filtrado colaborativo. El presentador también destaca la utilidad de los cuadernos Jupyter para crear y compartir código, incluidos ejemplos de proyectos de estudiantes anteriores que han dado lugar a nuevas empresas, artículos científicos y ofertas de trabajo. La conclusión principal es que los aspirantes a estudiantes profundos deben experimentar y compartir su trabajo con la comunidad para obtener comentarios y experiencia valiosos.

  • 00:00:00 En esta sección, el instructor presenta la primera lección de Aprendizaje Profundo Práctico para Programadores, versión 5, destacando cuánto ha cambiado desde la última actualización del curso. Utiliza un cómic humorístico de XKCD de finales de 2015 como ejemplo de la rapidez con la que evolucionan las cosas en el campo del aprendizaje profundo. Posteriormente, demuestra la creación de un sistema de "pájaro o no pájaro" usando Python, que implica descargar y cambiar el tamaño de imágenes de pájaros y bosques, crear un bloque de datos usando fast.ai y mostrar algunas de las imágenes descargadas. El instructor enfatiza que el curso proporcionará muchos más detalles y que el objetivo de esta sección es brindar una descripción general rápida de alto nivel.

  • 00:05:00 En esta sección, el presentador muestra una demostración de lo fácil que es crear un modelo de visión por computadora e identificar si una imagen contiene un pájaro o un bosque con solo 200 imágenes de cada uno. Lo que solía ser casi imposible ahora se ha vuelto fácilmente accesible con el aprendizaje profundo, y el presentador comparte el ejemplo de DALLꞏEꞏ2, un algoritmo que genera nuevas imágenes a partir de texto sin formato. Estos avances recientes en el aprendizaje profundo son un testimonio de lo rápido que se mueve este campo, y el presentador señala que es accesible sin necesidad de mucho código, matemáticas o nada más que una computadora portátil.

  • 00:10:00 En esta sección, el orador analiza las capacidades de los modelos de aprendizaje profundo y cómo están realizando tareas que antes se creían imposibles para las computadoras. Mencionan cómo se está utilizando el aprendizaje profundo en el arte y los modelos de lenguaje, como el modelo de lenguaje de vías de Google que puede explicar la respuesta a un chiste. El orador también reconoce la necesidad de consideraciones éticas en el aprendizaje profundo y recomienda consultar un curso de ética de datos enethics.fast.ai. Luego presentan una versión en línea del sistema de vasos de colores para verificar cómo les está yendo a los estudiantes y agradecen a Radek por crearlo, quien acaba de anunciar que consiguió el trabajo de sus sueños en Nvidia AI.

  • 00:15:00 En esta sección del video, el instructor enfatiza la importancia del contexto en el aprendizaje, particularmente en el campo del aprendizaje profundo. En lugar de comenzar con una revisión de álgebra lineal y cálculo, el instructor cree que las personas aprenden de manera más efectiva cuando se les da un contexto. Él usa la analogía de aprender deportes, donde a uno se le muestra un juego completo de deportes y luego, gradualmente, junta más piezas. Este es el enfoque que adopta en este curso, donde uno aprenderá a construir e implementar modelos primero y luego profundizará tanto como las clases más sofisticadas y técnicamente detalladas más adelante. El instructor también analiza sus credenciales y experiencia en aprendizaje automático, incluida la redacción del popular libro "Deep Learning for Coders".

  • 00:20:00 En esta sección, el instructor explica el enfoque histórico de la visión artificial antes de la introducción de las redes neuronales. Describe cómo los modelos de aprendizaje automático anteriores se basaban en expertos para crear características que dictaban cómo el algoritmo identificaría los objetos. El instructor contrasta esto con las redes neuronales que aprenden estas características por sí mismas, lo que permite un desarrollo y entrenamiento de modelos mucho más rápido. El instructor señala que la capacidad de las redes neuronales para aprender sus propias funciones y adaptarse a nuevos datos es clave para explicar por qué el aprendizaje profundo ha tenido éxito en los últimos años.

  • 00:25:00 En esta sección, el instructor explica el concepto de detectores de características en el aprendizaje profundo, que son capas de redes neuronales que pueden identificar y extraer características específicas de imágenes sin intervención humana. Ilustró cómo se pueden combinar estos detectores de características para reconocer imágenes más complejas y sofisticadas. Además, el instructor enfatiza la versatilidad de los algoritmos basados en imágenes y cómo se pueden usar para clasificar sonidos o incluso movimientos del mouse. Por último, desacredita el mito de que el aprendizaje profundo requiere una gran cantidad de datos, computadoras costosas y matemáticas extensas, afirmando que el aprendizaje por transferencia permite un trabajo de vanguardia con recursos mínimos.

  • 00:30:00 En esta sección, el instructor analiza la popularidad de Pytorch versus Tensorflow en el mundo del aprendizaje profundo, con Pytorch creciendo rápidamente y superando a Tensorflow en los repositorios de investigación y entre los investigadores. Sin embargo, señala que Pytorch puede requerir una gran cantidad de código para tareas relativamente simples, que es donde la biblioteca fast.ai resulta útil. La biblioteca fast.ai se basa en Pytorch y proporciona mejores prácticas que ayudan a reducir la cantidad de código necesario y mejorar los resultados. El instructor también presenta Jupyter Notebook, una aplicación basada en web ampliamente utilizada en la industria, la academia y la enseñanza de la ciencia de datos, y menciona servidores en la nube como Kaggle que se pueden usar para ejecutar Jupyter Notebooks.

  • 00:35:00 En esta sección del video, el instructor presenta cómo usar los cuadernos Jupyter para codificar, experimentar y explorar con ejemplos. Explica cómo editar o copiar el cuaderno de otra persona, iniciar una computadora virtual para ejecutar códigos, usar métodos abreviados de teclado, escribir prosa o marcas e insertar imágenes en el cuaderno. El curso también cubre la última versión de fast.ai y una pequeña cantidad de código Python. A través de los cuadernos de Jupyter, los desarrolladores pueden mostrar su código y hacer que su trabajo sea accesible para otras personas en la comunidad de código abierto.

  • 00:40:00 En esta sección, el orador analiza el uso de bibliotecas externas y presenta algunas de las bibliotecas fast.ai, como "fastdownload" y "resize_images". También explican la importancia del comando de bloque de datos, que se utiliza para introducir los datos en el modelo. El bloque de datos tiene cinco parámetros principales para especificar, incluido el tipo de entrada, el tipo de salida, el tipo de etiqueta y de qué elementos necesitamos entrenar. El orador enfatiza que comprender el bloque de datos es crucial para los profesionales del aprendizaje profundo, ya que la modificación de la arquitectura de la red neuronal rara vez surge en la práctica, y este curso se centra en el aprendizaje profundo práctico.

  • 00:45:00 En esta sección, el orador explica los pasos necesarios para crear un bloque de datos, que es fundamental para el éxito de un modelo de aprendizaje profundo. El bloque de datos es responsable de encontrar imágenes para entrenar usando una función que recupera todos los archivos de imagen dentro de una ruta específica, reservando algunos datos para probar y cambiando el tamaño de las imágenes a un tamaño estándar. A la creación de un bloque de datos le sigue la creación de cargadores de datos, que proporcionan un flujo de lotes de datos que el modelo puede procesar. El orador también presenta el concepto de alumno, que combina el modelo y los datos y es esencial para entrenar un modelo de aprendizaje profundo.

  • 00:50:00 En esta sección, el instructor explica cómo usar modelos preentrenados en fast.ai para tareas de visión por computadora usando la biblioteca de modelos de imágenes pytorch (timm). La familia de modelos de resnet es suficiente para la mayoría de los casos de uso, pero hay muchos otros modelos disponibles para su uso. El instructor demuestra cómo ajustar el modelo para una tarea específica, como reconocer imágenes de pájaros en un bosque y cómo implementar el modelo usando el método predict(). El instructor también señala que hay muchos otros tipos de modelos disponibles además de la visión artificial, incluida la segmentación.

  • 00:55:00 En esta sección, el orador explica la segmentación, que se utiliza para colorear cada píxel de una imagen según lo que representa. Usando una pequeña cantidad de datos y un código mínimo, el orador muestra cómo se puede entrenar un modelo para segmentar imágenes de escenas de carreteras en diferentes categorías, como automóviles, cercas y edificios en solo 20 segundos, con un modelo entrenado que es casi perfecto después. 2 minutos. El orador explica que se pueden usar clases especiales de cargadores de datos para el manejo de datos, lo que requiere aún menos código para los conjuntos de datos que ocurren con frecuencia. Luego, el orador pasa a explicar el análisis tabular y cómo se usa ampliamente en industrias como la predicción de columnas de hojas de cálculo y tablas de datos. Al proporcionar información similar a los bloques de datos y usar el tipo de despacho, puede usar fast.ai para hacer automáticamente lo correcto para sus datos, independientemente del tipo de datos que sean.

  • 01:00:00 En esta sección, la lección cubre dos tipos de modelos: aprendizaje tabular y filtrado colaborativo. Los modelos tabulares se utilizan para datos sin un modelo previamente entrenado, donde las tablas de datos varían ampliamente. El filtrado colaborativo es la base de la mayoría de los sistemas de recomendación y funciona al encontrar usuarios similares en función de los productos que les gustan. Un conjunto de datos de filtrado colaborativo tendrá una identificación de usuario, una identificación de producto (como una película) y una calificación. La lección continúa mostrando cómo crear cargadores de datos de filtrado colaborativo y analiza las diferencias entre ajustar y ajustar un modelo.

  • 01:05:00 En esta sección, el orador habla sobre la utilidad de los cuadernos Jupyter como herramienta para crear y compartir código, incluido el hecho de que toda la biblioteca fast.ai está escrita en cuadernos. Además, el orador aborda el estado actual del aprendizaje profundo y sus aplicaciones en varios campos, incluidos la PNL, la visión por computadora, la medicina, los sistemas de recomendación, los juegos y la robótica. El orador señala que el aprendizaje profundo ha sido capaz de romper los resultados más avanzados en muchos campos y que, en general, es bueno en tareas que un ser humano puede hacer razonablemente rápido.

  • 01:10:00 En esta sección, el presentador explica la idea básica del aprendizaje automático, comenzando con un programa normal que tiene entradas y resultados codificados con condicionales, bucles y variables. Luego, el programa se reemplaza con un modelo que contiene pesos aleatorios, y el modelo es una función matemática que toma entradas y las multiplica por los pesos. El modelo es esencialmente inútil a menos que los pesos se elijan cuidadosamente, por lo que es necesario calcular la pérdida, que es un número que mide la calidad de los resultados, y actualizar los pesos para crear un nuevo conjunto que sea ligeramente mejor que el conjunto anterior. Este proceso es fundamental para mejorar el rendimiento del modelo.

  • 01:15:00 En esta sección, el orador explica el proceso de entrenar un modelo en aprendizaje automático, lo que implica repetir una secuencia simple de pasos que usan redes neuronales para generar resultados mientras se reemplazan los negativos con ceros. En teoría, el modelo puede resolver cualquier función computable si se le da suficiente tiempo, datos y entradas, y el modelo entrenado puede integrarse en cualquier programa como otra pieza de código que asigna entradas a resultados. Es probable que los programadores de Python se familiaricen con el proceso fácilmente, pero aquellos que no están familiarizados pueden experimentar con los cuadernos de Kaggle y probar cosas diferentes, como modificar el ejercicio del pájaro o del bosque, probar tres o cuatro categorías y compartir su trabajo en los foros. Lo más importante es experimentar y leer el capítulo 1 del libro para estar preparado para la siguiente lección.

  • 01:20:00 En esta sección del video, el instructor comparte varios ejemplos de proyectos en los que los estudiantes anteriores trabajaron en el curso "Aprendizaje profundo práctico para codificadores", lo que generó nuevas empresas emergentes, artículos científicos y ofertas de trabajo. Estos proyectos incluyen la clasificación de diferentes tipos de personas según el lugar donde viven, la creación de un clasificador de calabacín y pepino, la clasificación precisa de imágenes satelitales en 110 ciudades diferentes y el reconocimiento del estado de los edificios para los esfuerzos de resiliencia ante desastres. Algunos estudiantes incluso han superado lo último en sus respectivos campos, como un clasificador de sonido y secuenciación tumoral normal. El instructor alienta a los estudiantes actuales y futuros a comenzar a crear proyectos, sin importar su nivel de experiencia, y a compartirlos con el foro para obtener comentarios y aliento.
 

Lección 2: Aprendizaje profundo práctico para codificadores 2022



Lección 2: Aprendizaje profundo práctico para codificadores 2022

Esta serie de videos de YouTube proporciona una introducción al aprendizaje profundo para codificadores. Cubre temas como la preparación de datos, la creación de modelos y la implementación de un modelo de aprendizaje automático.

En este video, el hacker Jeremy Howard enseña a las personas cómo crear sus propias aplicaciones web mediante el aprendizaje profundo. Cubre cómo configurar un proyecto en Git, cómo usar el espacio de la cara que abraza para cargar un modelo en el que se entrenará, el procesamiento del lenguaje natural y cómo reconocer el texto.

  • 00:00:00 Esta lección cubre el aprendizaje profundo práctico para codificadores en 2022. Se están enseñando técnicas nuevas y de vanguardia que ayudarán a los estudiantes a recordar mejor el material. El curso va con el libro y hay cuestionarios disponibles para ayudar a los estudiantes a evaluar su progreso.

  • 00:05:00 Este video cubre los conceptos básicos del aprendizaje profundo para la codificación, incluido cómo encontrar datos, limpiar datos y poner un modelo en producción. El siguiente video de la serie mostrará cómo hacerlo.

  • 00:10:00 En este video, Wes explica cómo entrenar un modelo en aprendizaje profundo usando el sitio web de ddg. Muestra cómo buscar objetos y cómo cambiar el tamaño de las imágenes.

  • 00:15:00 En este video, se presenta una técnica para el aprendizaje profundo: RandomResizedCrop. Esto se utiliza para mejorar la precisión del reconocimiento de imágenes. También se analiza el aumento de datos y se muestra que si desea entrenar un modelo de aprendizaje profundo durante más de cinco o diez épocas, debe usar RandomResizedCrop y "aug_transforms".

  • 00:20:00 Este video de YouTube demuestra cómo usar un objeto de interpretación clasificador para determinar dónde una pérdida es alta en un conjunto de datos. Esta información se puede usar para limpiar los datos antes de que se usen para entrenar un modelo.

  • 00:25:00 El video presenta la limpieza de datos y el aprendizaje profundo práctico para codificadores 2022. Cubre la preparación de datos con herramientas como la limpieza de datos acelerada por GPU y HuggingFace Spaces, seguido del uso de Gradio para modelos de aprendizaje automático en producción.

  • 00:30:00 Este video cubre cómo usar Git para administrar tu código y cómo usar una terminal para trabajar en el código. El video también explica cómo usar VS Code para editar código.

  • 00:35:00 Este tutorial explica cómo crear un modelo de aprendizaje profundo utilizando algunos métodos diferentes, incluido un ejemplo de Kaggle y un ejemplo de Colab. Una vez que se crea el modelo, se puede descargar y copiar en el mismo directorio que el código.

  • 00:40:00 En esta lección, el autor muestra cómo usar un alumno capacitado para predecir si una imagen es un perro o un gato. El alumno está congelado en el tiempo y se puede cargar y descargar fácilmente.

  • 00:45:00 Este video explica cómo crear una interfaz de Gradio para convertir imágenes en clasificaciones y cómo crear un script de Python para hacer esto.

  • 00:50:00 En esta lección, el instructor demuestra cómo crear un modelo PyTorch simple y subirlo a Gradio. También proporciona instrucciones sobre cómo usar fastsetup para instalar PyTorch y Jupyter Notebooks en una computadora.

  • 00:55:00 Este video brinda instrucciones para instalar Python y algunas de las bibliotecas necesarias para el aprendizaje profundo, incluidas Pytorch y Numpy. El autor recomienda usar una distribución de python basada en conda, como mambaforge, en lugar del sistema python. Finalmente, el autor recomienda instalar nbdev para usar Jupyter Notebook.

  • 01:00:00 En esta lección, el instructor demuestra cómo usar Gradio, una plataforma gratuita para entrenar modelos de aprendizaje profundo, para crear un sitio web que prediga los nombres de perros y gatos. Si bien streamlit es más flexible que Gradio, ambas plataformas son gratuitas y fáciles de usar.

  • 01:05:00 Este video explica cómo crear modelos de aprendizaje profundo usando Javascript. El tutorial incluye una versión de varios archivos y una versión HTML del mismo modelo.

  • 01:10:00 Este video explica cómo crear una aplicación básica de aprendizaje profundo usando solo Javascript y un navegador. Una vez que se crea la aplicación, puede usar FastPages para crear un sitio web que se parezca a la aplicación.

  • 01:15:00 En este video, el hacker Jeremy Howard enseña a las personas cómo crear sus propias aplicaciones web utilizando el aprendizaje profundo. Primero analiza cómo configurar un proyecto simple en Git y luego muestra cómo usar el espacio de la cara que abraza para cargar un modelo en el que se entrenará. A continuación, analiza el procesamiento del lenguaje natural y explica cómo funcionan los modelos bajo el capó. Finalmente, demuestra cómo se puede usar el aprendizaje profundo para reconocer texto.