La Revolución de la Evolución

Rate this content
Bookmark

Las matemáticas elegantes y graciosas hacen una portada de libro de texto genial, pero el interior de esos mismos libros suele ser una ingeniería fría y seca. Es importante mezclar la teoría de la innovación con la emoción de la practicidad, y a través de la composición de estos elementos encontramos la innovación. En esta charla, te mostraré desde una perspectiva de ingeniería cómo explorar, equilibrar y, en última instancia, embotellar el éxito mecanizado.

31 min
02 Jul, 2021

Video Summary and Transcription

La charla aborda los desafíos de implementar soluciones de software y la necesidad de abstracciones. Se enfatiza la importancia de la innovación y de implementar una vez para evitar la complejidad. Se destacan el uso de Brain.js en la investigación de aprendizaje automático y sus aplicaciones prácticas. La charla también menciona los beneficios de utilizar JavaScript y GPU.js para el procesamiento de gráficos. En general, la charla fomenta la simplicidad, la eficiencia y la colaboración en el desarrollo de software.

Available in English

1. Introducción a Adam 2 y el Problema de Ingeniería

Short description:

Pero primero, una breve palabra sobre cómo puedes comenzar a usar React para escribir tu propio código. Así que aquí hay un escenario. Está Adam, ¿verdad?, para el aprendizaje automático, ¿cómo lo llaman? El entrenador. Tienes esta nueva idea de entrenador. Se llama Adam 2. Y es revolucionario. Y estás emocionado por ello. Representa un problema de ingeniería. Las implementaciones que tenemos que gestionar.

Probablemente el menos calificado para estar aquí. Pero dejando eso de lado, quiero plantear un escenario y lo recorreremos. Y quiero proponer algo.

Así que aquí hay un escenario. Está Adam, ¿verdad?, para el aprendizaje automático, ¿cómo lo llaman? El entrenador. Hay varias palabras para ello. Tienes esta nueva idea de entrenador. Se llama Adam 2. Y es revolucionario. Va a cambiar todo con el aprendizaje automático. Y estás emocionado por ello. Quieres implementarlo en algún lugar. Y es asombroso porque representa innovación. Y eso es realmente de lo que se trata el aprendizaje automático. Estamos innovando a una velocidad vertiginosa.

Y no queremos que las cosas nos obstaculicen en esta área. Así que aquí está nuestra solución elegante y simple que representa a Adam. Y aquí está Adam 2. Entonces, sí, es asombroso. Lo verás en todas partes. Pero hay un problema incluso con solo agregar ese pequeño número allí. Y eso es esto. Representa un problema de ingeniería. Las implementaciones que tenemos que gestionar. Personalmente, escribo en Node. Soy el líder técnico del equipo de aprendizaje automático. Y para que lo usemos en Node, tendríamos que crear traducciones en todos estos lenguajes. Y potencialmente más si quisiéramos que se ejecute en estos entornos. Así que tenemos JavaScript, WebGL, el próximo WebGPU, Wasm, enlaces nativos, tal vez TPU e incluso nuevos lenguajes.

2. Desafíos de Implementación y Abstracciones

Short description:

Entonces, sí, eso es lo que necesitas saber para agregar ese pequeño dos. Y también, no quieres olvidarte de las pruebas unitarias para cada lenguaje porque quieres asegurarte de que tus cosas se mantengan juntas. Cada implementación tiene diferentes necesidades y, por lo tanto, van a requerir diferentes habilidades, diferentes capacidades. Y ese problema se complica debido a esos errores, tienes que corregirlos. Cada implementación que agregas casi duplica la complejidad de la implementación original. Y todo lo que quieres hacer es agregarlo. Las abstracciones nos quitan la comprensión de lo que realmente estamos tratando de lograr. Todo esto ralentiza la innovación.

Entonces, sí, eso es lo que necesitas saber para agregar ese pequeño dos. Y también, no quieres olvidarte de las pruebas unitarias para cada lenguaje porque quieres asegurarte de que tus cosas se mantengan juntas. Y no te lo dicen cuando estás desarrollando en la GPU o cuando te acercas mucho al hardware, que hay diferencias de precisión que deben ser gestionadas.

Y cada implementación tiene diferentes necesidades, por lo tanto, van a requerir diferentes habilidades, diferentes capacidades. Y cada una eventualmente aumentará la deuda técnica. Así es como funciona el desarrollo. Y ese problema se complica debido a esos errores, tienes que corregirlos. Los lenguajes subyacentes están constantemente siendo refinados y cambiados, ¿verdad? Y tienen que ser gestionados para agregar eso a esa función Atom. Tienes que entrar en esos lenguajes y alterarlos realmente. ¿Y qué pasa si alguien crea Atom 3? ¿Qué hace eso a Atom 2? ¿Lo extendieron con Atom 3? Y usan algún tipo de estructura de clase, o tal vez no pueden porque usan funcional, dependiendo del entorno, y cada uno es diferente. Y eso lleva a un código divergente, porque cada código es diferente. Y cada código diferente debe ser probado de manera diferente, y tienes una gestión divergente. Cada uno, porque cada lenguaje requiere diferentes estrategias, diferentes sistemas para gestionar lo que has implementado.

Y luego, está cómo llegas a las matemáticas. Eso diverge. Y así, cada implementación, piénsalo cuidadosamente. Cada implementación que agregas casi duplica la complejidad de la implementación original. Y todo lo que quieres hacer es agregarlo. Y ni siquiera he mencionado el peor, que son las abstracciones. Las abstracciones nos quitan la comprensión de lo que realmente estamos tratando de lograr. Las matemáticas, ¿verdad? Se vuelve realmente difícil de entender. Y por eso le tenemos tanto miedo. Como hablamos, no quieres tener que preocuparte por estas matemáticas subyacentes, porque si lo haces, te volverás loco. Hay tanto en qué pensar, porque hay muchos niveles diferentes de abstracciones. Y todo esto ralentiza la innovación. Así que nuestra elegante y simple Atom2, que puedes ver en YouTube. No está realmente en YouTube, me inventé todo eso. No se mantiene elegante y simple, aunque en teoría, en las matemáticas, no se mantiene así. Y así tenemos que cambiar nuestra comprensión de las cosas. Si queremos escalar, ¿verdad?, y nuestra elegante y simple, nuestra ingeniería, ¿verdad? ¿Cuál era el objetivo principal que queremos lograr? Innovación.

3. Innovación e Implementación Única

Short description:

Queremos ser más innovadores de lo que somos actualmente. Sin pensar en las cosas de manera diferente, simplemente seguiremos por este camino de divergencia. En la película Big Hero 6, el personaje principal simplifica el diseño de un robot y lo hace más pequeño y portátil, lo que resulta en capacidades increíbles. Implementar algo una vez, sin agregar nuevos lenguajes o implementarlo dos veces, es un enfoque más radical.

Queremos que sea innovador. Queremos ser más innovadores de lo que somos actualmente. Frank Zappa mencionó esto, sin desviación de la norma, el progreso no es posible. Es un tipo interesante, pero lo que dijo fue absolutamente acertado. Sin pensar en las cosas de manera diferente, simplemente seguiremos por este camino de divergencia y se vuelve cada vez más difícil con el tiempo.

Así que voy a cambiar un poco el ritmo aquí. Recientemente vi una película con mis hijos y me encantó, es una gran película. No voy a arruinar nada si no la has visto, pero se llama Big Hero 6. En ella, hay una ilustración fantástica. Un héroe, el personaje principal, construye un robot y ese robot es realmente genial. Es extremadamente capaz de hacer todo tipo de cosas increíbles y se propone innovar, hacer algo aún más sorprendente de lo que ha hecho antes, y todo lo que hace es simplificar el diseño y hacerlo más pequeño y portátil, y cuando lo presenta a todos, nadie siquiera se voltea. Ni siquiera es tan importante y luego muestra lo que son capaces de hacer al simplificar, al innovar, al usar este pequeño robot, básicamente se convierte en un superhéroe y todos, se voltean y lo miran y dicen, ¿qué? Él está flotando desde el techo y está patinando por el aire porque estos pequeños robots lo están ayudando porque son simples, porque son innovadores y todo lo que hizo fue hacerlo más simple. Así que hay una historia realmente increíble que se puede desarrollar a partir de eso. Así que si tomamos algo de eso de Big Hero 6, ¿qué pasaría si hiciéramos algo más radical? Implementarlo una vez y cuando digo una vez, realmente una vez. Piensa en eso por un segundo, implementarlo una vez. Actualmente, hay planes de grandes jugadores del aprendizaje automático, entidades enormes que dirigen los motores de búsqueda más grandes del planeta. Ellos dirán que lo haremos, lo implementaremos una vez. Así que sigamos por ese camino de lo que están hablando. Implementan un nuevo lenguaje desde el principio, un lenguaje completamente nuevo. ¡Yay! Increíble. Ahora no tienes, ya sabes, ocho lenguajes o seis o cinco lenguajes o tres. Tienes dos lenguajes, pero aún tienes enlaces y tienes un nuevo lenguaje. Piensa en eso. Tenemos un nuevo lenguaje. Chicos, no necesitamos otro lenguaje y no necesitamos implementarlo dos veces. Estos no son...

4. Describiendo Matemáticas, Brain.js e Implementación Única

Short description:

Tenemos una forma de describir cómo realizar las matemáticas. Sin embargo, todavía no tenemos una forma de comunicarnos directamente con los dispositivos de hardware. Los detalles internos de Brain.js despertaron mi interés en el aprendizaje automático. Brain.js utilizó dos formas de entrenamiento, a las que llamé la Desviación Arthur. Brain.js superó a bibliotecas más grandes en el procesamiento del lenguaje natural. La implementación única puede ser desafiante debido a las diferencias de lenguaje, pero GPU.js traduce a código GPU para JavaScript.

No necesitamos hacer eso. Tenemos... Hemos tenido durante 30, 40, 50 años matemáticas de bajo nivel que se manejan en hardware y tenemos una forma de describir eso en lenguajes de nivel superior como para nosotros, JavaScript o Python o cualquier otro caso. Tenemos una forma de describir cómo realizar las matemáticas.

El problema es que no tenemos una forma de comunicarnos directamente con esos dispositivos de hardware o al menos no lo hemos tenido. Y esto se implementa, ellos dicen una vez, pero en realidad es dos veces. Aún conduce a abstracciones. Así que eso sigue siendo un problema. Así que tenemos que reiniciar nuestra forma de pensar si realmente queremos llegar al metal y pensar en las cosas e implementarlas una vez.

Ahora, me adentré en el aprendizaje automático. Hice mucha investigación previa pero lo que realmente me llamó la atención fue cuando estaba viendo los detalles internos de Brain.js. Brain.js es una biblioteca de JavaScript muy buena y está escrita en JavaScript y en ese momento estaba escrita solo para la CPU. Ahora se ejecuta en ambos pero hicieron todo en un solo lenguaje. Y su retropropagación utilizaba dos formas de entrenamiento en lugar de solo una. Así que dos optimizadores, dos entrenadores, como quieras llamarlo. Los llamamos praxis y brain. Y para mí eso fue súper innovador. Nunca había visto a nadie hacer eso antes, retropropagando usando dos formas diferentes de entrenamiento. Y de hecho, le puse un nombre a la Desviación Arthur porque merecía más crédito del que se le dio.

De hecho, este tipo aquí, Jesús Ciajes creo que es su nombre, probablemente esté pronunciando eso incorrectamente. Tomó Brain y lo convirtió en un procesador de lenguaje natural y su cita de esta URL. Rompimos todos los récords y estaba comparando Brain.js, esta pequeña y humilde biblioteca con Google Diagflow, Microsoft Luis e IBM Watson. Superó a esos con esta pequeñita. Y creo que en parte se debe a la rápida capacidad innovadora de editar en un solo lenguaje. Y eso para mí convirtió a Brain.js en un superhéroe. Eso fue increíble.

Entonces, si realmente lo implementáramos una vez nos encontramos con algunas dificultades aquí la inferencia de tipos, la transpilación, el manejo de errores, el manejo de tipos porque tienes múltiples lenguajes para traducir pero realmente no tenemos tiempo para explayarnos en eso porque estoy construyendo mi argumento y más de la mitad de mi tiempo se ha ido. Así que vamos a omitir eso. Pero te diremos ahora mismo que GPU.js traduce a código GPU para JavaScript. Y ahora mismo lo hace tanto para Node como para el navegador.

5. Brain.js y el Principio de Escribir una Vez

Short description:

Y Brain.js está escrito en JavaScript y actualmente se está convirtiendo a TypeScript. La idea es escribirlo una vez. Los errores se manejan una vez. No hay divergencia, abrazas las matemáticas. Que eso sea una fuerza dominante. Al hacer eso, mantienes tu cordura e innovas más rápido. Te conviertes en un superhéroe. Aquí hay algunos ejemplos prácticos para transmitir lo que quiero decir. Nuestro primer ejemplo es Colorblind, escrito por Gant Laborde. Es la versión de TensorFlow y yo la llamo el enfoque predefinido.

Y Brain.js está escrito en JavaScript y actualmente se está convirtiendo a TypeScript. Implementa GPU.js. Así que no estoy aquí solo para promocionar Brain.js y GPU.js Realmente estoy aquí hablando del principio. Solo quiero asegurarme de transmitir eso. La idea es escribirlo una vez. Los errores se manejan una vez. No hay divergencia, abrazas las matemáticas. Porque las matemáticas, cuando escribimos las matemáticas para estas operaciones, las matemáticas son hermosas. Pero tan pronto como las ingeniamos. Quitamos toda esa belleza. Pero estoy diciendo que abracémosla y acerquémonos lo más posible a eso. Y que eso sea una fuerza dominante. Y al hacer eso, mantienes tu cordura e innovas más rápido. Te conviertes en un superhéroe. Piensa en algunos superhéroes que realmente los distinguen. Los chicos que eran normales. Como Batman. Era el auto o el traje, ¿verdad? Lo convirtió en un superhéroe. Era algo. Quiero decir, tal vez no era muy simple. Pero el auto, para Big Hero 6 era ese pequeño robot. Así que aquí hay algunos ejemplos prácticos para transmitir, supongo, más o menos lo que quiero decir. Entonces nuestro primer ejemplo fue escrito por Gant Laborde. Y él escribió Colorblind. Cómo es ser daltónico en TensorFlow. Y esta es la versión de TensorFlow. Yo la llamo el enfoque predefinido. Ok, tenemos estas funciones que obtenemos. Y no hay nada malo en esas funciones. De hecho, en particular, en partes de Brain.js, usamos esas funciones, igualmente.

6. TensorFlow.js, Brain.js y el Conjunto de Mandelbrot

Short description:

Con TensorFlow.js, debes poder modificar cualquiera de esos métodos como split, mean, stack o concat. Ese es el enfoque predefinido. Ahora esto es lo que tengo aquí con Brain.js. Esa es en realidad la versión de GPU.js. El siguiente es una pantalla verde. Tomamos ese babuino. Tomé una pantalla verde de Wikipedia y las fusioné solo pensando, ¿cómo se vería eso? Y esto es la matemática detrás de eso. Ya he mostrado esto antes. Mucha gente ve el conjunto de Mandelbrot y ve las matemáticas y es tan simple. Bueno, este es el conjunto de Mandelbrot. Hermoso.

Pero ten paciencia conmigo. Con TensorFlow.js, debes poder modificar cualquiera de esos métodos como split, mean, stack o concat. Debes poder acceder al código, al código subyacente y para cada uno de los entornos. Eso es realmente de lo que estoy hablando aquí.

Ese es el enfoque predefinido. Ahora esto es lo que tengo aquí con Brain.js. Esa es en realidad la versión de GPU.js. Así que configuramos nuestro entorno. Ves las configuraciones. Tenemos nuestro ancho y alto de salida que es gráfico. Pero realmente todo lo importante está en la función de creación del kernel. Así que estamos obteniendo un píxel y básicamente ajustando cuál es el promedio de rojo y verde y luego estableciendo nuestro color. Así que realmente hay como tres líneas de operaciones allí. Y eso es para mí el enfoque directo porque estás tratando directamente con los números. Y para mí, eso es más innovador. Así que esa es una versión.

El siguiente es una pantalla verde. Tomamos ese babuino. Ni siquiera mostré esa imagen, el babuino ahí mismo, en la parte superior derecha. Así es como se ve la salida, ¿verdad? Es como, vaya, falta algo de color. Porque así es como se ve cuando eres daltónico. La pantalla verde, tomé ese babuino. Tomé una pantalla verde de Wikipedia, y las fusioné solo pensando, hey, ¿cómo se vería eso? Y esto es la matemática detrás de eso. Básicamente solo tomas la diferencia de color, y simplemente dices, hey, ¿debo reemplazar? Porque están dentro de una diferencia máxima o diferencia mínima. Ya he mostrado esto antes. Mandelbrot dijo que mucha gente ve eso y ve las matemáticas y es tan simple. Y dicen, ¿qué? No puedo entenderlo. Es demasiado complejo. Bueno, este es el conjunto de Mandelbrot. Hermoso.

7. Mandelbulb para GPU.js y Ejemplos de Extremo a Extremo

Short description:

Alguien escribió Mandelbulb para GPU.js, que es el código para el conjunto de Mandelbrot. En Brain.js, hay un ejemplo práctico con solo una línea de código para la capa de adición. Estoy trabajando en una solución de extremo a extremo llamada Welton, que te permite personalizar el sabor de la cerveza y proporciona instrucciones de elaboración. Brain.js también tiene un ejemplo de extremo a extremo utilizando la arquitectura FeedForward, similar a los componentes de React, con capas de entrada, ocultas y de salida.

Incluso alguien escribió Mandelbulb para GPU.js. Este es el código en realidad. Es el conjunto de Mandelbrot, solo que se ejecuta recurrentemente, en un bucle. Así que se va acumulando. Pero así es como se ve en JavaScript justo en las matemáticas.

Y aquí hay un ejemplo más práctico en Brain.js. Entonces, en aprendizaje automático, hay capas y hay propagación hacia adelante y propagación hacia atrás. Bueno, solo tomando esta capa, que es la capa de adición, y miramos la función de predicción o propagación hacia adelante, podemos ver que realmente hay una línea de código. Aparte de configurar el nombre real de la función y los argumentos, tenemos un retorno de los pesos de entrada uno, obtenemos el valor de X e Y, y luego los pesos de entrada dos, X e Y y los sumamos. Así de simple.

Ahora, ¿existe una solución de extremo a extremo? Eso es mucho más grande, ¿verdad? porque estamos hablando de GPUs en todos los ámbitos. Bueno, estoy trabajando en Welton. Lo terminaré tal vez hoy o mañana. Y hay enlaces a eso, donde puedes elegir cómo quieres que sepa y huela una cerveza y qué tan alcohólica te gustaría que sea, y te dirá qué tipo de cerveza estás intentando elaborar, de qué color será e incluso cómo elaborarla. Y en realidad no es tan difícil, en realidad es un problema de clasificación estándar. Solo que no hemos pensado realmente en la normalización, desnormalización de los valores. Pero habrá enlaces a eso en la presentación. Y como un uso más general, tenemos un ejemplo práctico de extremo a extremo para brain.js. Esto es solo XOR, o Zor, o como quieras decirlo. Lo más importante aquí es que la red se construye sobre esta nueva arquitectura llamada FeedForward, que depende casi por completo del procesador gráfico. Puedes cambiarlo, digo casi por completo, puedes cambiarlo entre la CPU y la GPU. Pero aquí trabajas con capas como lo harías con los componentes React, si estás familiarizado con la configuración de sitios web y ese tipo de cosas. Entonces, si puedes pensar en brain como el React para el aprendizaje automático. Tenemos una capa de entrada definida como una entrada, capas ocultas como una matriz, y la entrada del argumento anterior, que es la capa actual instanciada, se va a alimentar. Entonces, estas se alimentan recurrentemente de una a la siguiente. Puedes tener tantas capas ocultas como quieras, cada valor de retorno de una será la entrada en la siguiente y tienes tu capa de salida y luego va a la salida. Y luego básicamente net dot train, net dot run y resultados y valores. Así que eso no solo es el extremo a extremo eso es todo el entrenamiento. Eso es todo el funcionamiento. Eso es todo.

8. Evolución de Ideas y Simplificación de Implementación

Short description:

Todas las capas y máxima legibilidad concisa ahí mismo para ti. Estamos hablando de la evolución de ideas. Una idea se construye sobre otra idea, se construye sobre otra. Todo está fuertemente tipado cuando estás justo en esa capa, justo en la capa de ejecución. El lenguaje de alto nivel se convierte en la pizarra. Entonces escribes tu innovación una vez, abrazas las matemáticas y eso conduce a una innovación más rápida. Esa es mi charla.

Todas las capas y máxima legibilidad concisa ahí mismo para ti. Así que eso es como la prueba detrás de esta idea. Y en última instancia, solo queremos asegurarnos de que estamos tratando de hacer algo que sea súper sencillo no solo en ingeniería sino hasta las matemáticas. Así que la revolución de la evolución ese es el nombre de la charla que tengo hoy y no estamos hablando de la evolución con animales ni nada por el estilo. Estamos hablando de la evolución de ideas. Una idea se construye sobre otra idea se construye sobre otra. Durante mucho tiempo, todo lo que hemos hecho es abstraer en estas capas separadas. Ha sido muy difícil hacerlo de la otra manera que es leer el lenguaje de alto nivel y componer el lenguaje de nivel inferior. Bueno, eso es lo que estoy proponiendo. Y de hecho, descubrí que después de entender el entorno no es tan complejo. De hecho, todo está fuertemente tipado cuando estás justo en esa capa justo en la capa de ejecución porque puedes detectar lo que está llegando y sabes lo que está saliendo y estás detectando hacia dónde va. Y así, si puedo simplificarlo el lenguaje de alto nivel se convierte en la pizarra. La implementación del átomo dos de la que hablamos originalmente se vuelve súper simple y súper elegante porque la IDE en la que lo implementas es exactamente donde lo estás probando y ya no tienes que preocuparte por esos lenguajes subyacentes porque se componen para ti. Entonces escribes tu innovación una vez, abrazas las matemáticas y eso lleva a esa innovación anterior que incluso conduce a una innovación más rápida. Así que eso te convierte en un superhéroe. Esa es mi charla.

QnA

Agradecimientos, Preguntas y Respuestas sobre TensorFlow vs Brain.js

Short description:

Quiero agradecer a CallHammer Supply, Gantlabord y los colaboradores de GPJS, BrainJS y Sli.Go. Es bueno ver que aún tienen algo de sol de su lado. Pasemos a las preguntas. Alguien preguntó sobre la innovación detrás del uso de JavaScript para el entrenamiento de redes neuronales en comparación con frameworks como TensorFlow y PyTorch. TensorFlow es abierto y requiere configuración manual, mientras que Brain.js automatiza los pasos repetitivos. Es necesario reimplementar para nuevos lenguajes y tecnologías. La inversión a largo plazo es escribir el código una vez y crear un motor que lo transpile. Los lenguajes de programación tienen fortalezas y propósitos diferentes. Rust es seguro en memoria, Golang es bueno para tareas pequeñas. Brain.js tiene su propia definición.

Quiero agradecer a estos chicos, CallHammer Supply, además de nuestra ML Conf EU CallHammer Supply por las recetas de cerveza, Gantlabord, lo mencioné brevemente. Ha sido un colega muy agradable en impulsar el aprendizaje automático y comprenderlo. También a los colaboradores de GPJS, BrainJS y los Sli.Go de estas diapositivas.

Gracias, espero que disfruten de la conferencia. Hola, ¿cómo va todo? Hola, todo va bastante bien. Realmente disfruté tu charla. ¿Cómo te va a ti? Veo que aún tienes un poco de sol de tu lado. Oh sí, es un placer ser parte de toda la operación. Realmente han organizado un conjunto de sesiones muy bien. Sí, es gracioso que tengamos ponentes de todo el mundo, ¿verdad? Y nunca sabes qué hora es en este momento, ¿verdad? Y es bueno ver que aún tienen algo de sol porque para mí ya es de noche.

Pero pasemos a las preguntas. Ya he visto algunas preguntas en nuestro canal de Discord, así que la gente puede hacerlas en ML Q&A. Una es muy abierta, pero supongo que aún es útil responder, ya que también eres parte del equipo de mantenedores de Brain.js. Básicamente, la persona está preguntando, suena increíble, ¿verdad? Pero ¿quieres copiar todo para el entrenamiento de redes neuronales en JavaScript cuando tenemos potentes frameworks como TensorFlow, PyTorch y Python? ¿Cuál es la innovación detrás de esto? Y por cierto, ¿qué tan grande es la audiencia? ¿Quién lo está usando? ¿Cuál es la ventaja de esto? La pregunta es muy abierta, pero si puedes profundizar un poco más en tu audiencia de desarrolladores y por qué, digamos, hay un nuevo graduado de la universidad y tiene que elegir entre TensorFlow o Brain.js y cómo debería tomar esa decisión y cómo se verá ese proceso de decisión.

Bueno, TensorFlow es una herramienta muy abierta, ¿verdad? Es muy... Cada vez que lo usas, terminas comenzando, conectando todo capa por capa, entrada y salida, y luego explicándolo y luego ejecutándolo. Mientras que Brain.js no está diseñado realmente de esa manera. Está más diseñado para permitir que esos pasos repetitivos se hagan por ti. Por lo que puedes llegar rápidamente a lo que quieres hacer sin pensarlo demasiado. En cuanto a la reimplementación, quiero decir, los lenguajes cambian con el tiempo y hay nuevos lenguajes que surgen. WebGPU, por ejemplo, es algo completamente nuevo. Por lo que tendrá que ser reimplementado allí sin importar de qué estemos hablando, al menos para aquellos que quieran aprovechar el procesador gráfico y JavaScript. Por lo que se está trabajando en TensorFlow para hacer eso. Ya hemos comenzado con Brain.js, pero realmente todo lo que tenemos que hacer es cambiar el motor subyacente, GPU.js, y de repente, Brain.js simplemente lo utilizará. Por lo que es más una idea de inversión a largo plazo y una inversión a corto plazo. La inversión a corto plazo es duplicar el código y estás acumulando deuda técnica, mientras que la inversión a largo plazo es escribirlo una vez y luego crear un motor que lo transpile a cualquier entorno en el que necesitemos ejecutarlo.

Sí, y estoy completamente de acuerdo contigo, ¿verdad? Porque también puedes preguntar, bueno, tenemos C, ¿verdad? Entonces, ¿por qué necesitamos otros lenguajes de programación, ¿verdad? Simplemente copiamos y pegamos de un lugar a otro, ¿verdad? Y es útil, ¿verdad? Siempre y cuando entendamos en qué se diferencia, ¿verdad? Porque sabes que Rust es seguro en memoria, ¿verdad? Sabes que Golang es bueno para cosas pequeñas, ¿verdad? Y supongo que aún tienes tu definición para Brain.js.

Explicando Brain.js y su Uso en la Investigación

Short description:

Brain.js es una biblioteca práctica de aprendizaje automático que se adapta a trabajar con datos en primer lugar. Permite la creatividad y llegar más lejos en la aplicación del aprendizaje automático de diferentes maneras. La implementación de convoluciones en Brain.js se basó en un enfoque diferente que lo hizo más eficiente. Tanto investigadores como desarrolladores utilizan Brain.js, siendo los investigadores capaces de transmitir sus ideas e implementarlas fácilmente. El equipo detrás de Brain.js tiene como objetivo facilitar el trabajo de los investigadores y los considera parte de su audiencia.

Tal vez, quiero decir, es como una pregunta muy improvisada, pero ¿cómo explicarías Brain.js en una sola frase, ¿verdad? ¿Qué es esto, sabes, como Rust es para la seguridad de la memoria, ¿verdad, y Brain.js es para... Bueno, diría que es una biblioteca práctica de aprendizaje automático que se centra en los datos, funciona, está diseñada específicamente para trabajar con los datos en primer lugar, y no sé, probablemente haya una forma de mejorar eso. No lo difundiría, sabes, a miles de personas, pero... Sí, no, quiero decir, también es un poco como si te preguntara en el momento, ¿verdad? Así que no te preocupes por tener una respuesta perfecta. Y supongo que, ya sabes, lo que dijiste, práctico es algo que a veces también olvidamos, ¿verdad? Porque al usar una solución lista para usar perfecta, ¿verdad? No aprendes mucho, ¿verdad? No puedes ser creativo, ¿verdad? No puedes ir más allá y aplicarlo de manera diferente, ¿verdad? Así que definitivamente es una buena propuesta de venta, ¿verdad? Solo necesitas encontrar cuál es el punto fuerte de esto. Sí, quiero decir, por ejemplo, comenzamos a trabajar con convoluciones, y hay partes de la red, partes de Brain.js, el proyecto, no la red, donde hay diferentes redes que se pueden usar. Y al investigar, por ejemplo, las convoluciones, y al observar la forma de las mismas, descubrí que no se entendían muy bien. Puedes ver un algoritmo implementado, pero ver cómo funciona es muy diferente a la forma en que tradicionalmente hemos pensado. Y por eso verás implementaciones realmente ineficientes, donde se recorre cada celda y básicamente se pregunta si algo se relaciona con ella. Mientras que la forma realmente rápida es invertir el proceso, donde dices desde las salidas, busca exactamente tus entradas y luego calcula. Pero descubrí que no hay realmente buenos ejemplos para la retropropagación de eso. Y realmente me molestó. Pero de todos modos, terminamos escribiéndolo. Después de verlo, sin embargo, en JavaScript, en un lenguaje que no entiendes, es como un momento de iluminación. Oh, es tan simple. Solo estás buscando las ubicaciones y se vuelve mucho más comprensible. No, es un buen punto. Creo que también es una buena manera de... No quiero decir vender, porque no tienes que vender un producto de código abierto de nadie, pero es una buena manera de explicar de qué se trata. Así que esto es un buen punto. Tal vez una pregunta diferente. No estoy seguro si estás familiarizado con los marcos de aprendizaje automático más grandes. Pero ahora también tengo la sensación de que quienes usan el marco en la investigación son un buen indicador de quiénes lo seguirán después. Cuanto más avanzada sea la investigación, más modelos pre-entrenados, más modelos emocionantes estén disponibles para desarrolladores o ingenieros, más fácil será la transición de, no sé, a TensorFlow, a PyTorch, a Brain.js o cualquier otra cosa. La pregunta, supongo, se dividirá en dos partes. En primer lugar, ¿sientes o ves una comunidad de investigadores que intentan usar Brain.js? Porque es muy fácil para ellos transmitir lo que quieren implementar. Y en segundo lugar, ¿intentas con un equipo de Brain.js facilitar el trabajo de los investigadores? ¿Y sientes que también son parte de tu audiencia? ¿O te enfocas principalmente en desarrolladores y consumidores? ¿Qué opinas al respecto? Sí. Intentaré responder y recordar lo mejor que pueda. ¿Hay equipos de investigadores que lo usan? Sí, los hay. Un proyecto que vi fue la capacidad de observar el cuerpo humano desde diferentes puntos de vista.

Procesamiento Gráfico, Innovación y JavaScript

Short description:

Puedes procesar datos fácilmente en el procesador gráfico utilizando GPU.js. Brain.js superó a Watson y otros jugadores de aprendizaje automático con su innovación en el procesamiento del lenguaje natural. Se enfoca en la simplicidad y JavaScript, con el objetivo de proporcionar herramientas eficientes para la utilización del hardware. Los desarrolladores de JavaScript de todo el mundo encontrarían emocionante tener una herramienta más. Gracias por tus respuestas, contribución de código abierto y charla increíble.

Entonces, en realidad podrías extraer significado de esas diapositivas. Pero al tenerlo básicamente en el procesador gráfico, puedes procesar esos data muy fácilmente. Puedes verlo y luego puedes usar GPU.js para eso también.

Pero creo que se trata más de si puedes ver los resultados de algo, si puede demostrar que es una herramienta válida solo con números y por la lógica de que es simple, entonces es una opción segura para cualquiera. Uno de los ejemplos que destacé en mi charla fue el procesamiento del lenguaje natural con brain.js, donde superó a Watson y a los principales jugadores del aprendizaje automático de la época, porque hubo un poco de innovación que ocurrió dentro de la red. Podías usar diferentes tipos de activación, lo cual ahora es algo que puedes hacer, pero no lo había visto en ese momento.

¿Cuál fue la segunda parte de tu pregunta? No lo recuerdo. ¿Intentas apuntar explícitamente a los investigadores? No lo sé. Tal vez algunas personas intentan hacer algo por ellos o tratar de entender los problemas que tienen, porque supongo que los ingenieros que están utilizando modelos ya establecidos y alguien que intenta ser flexible, tienen diferentes necesidades. Necesitan diferentes APIs o cualquier otra cosa. No, no apuntamos a nadie en particular. Solo apuntamos a la simplicidad y a JavaScript. No tenemos herramientas realmente maduras en JavaScript fuera de TensorFlow que sean realmente eficientes, que realmente aprovechen el hardware de la computadora. Así que Brain.js es mi trabajo egoísta para lograr eso básicamente para mí mismo.

Sí. Y también es un pasatiempo interesante, así que estoy completamente de acuerdo. Además, también hay muchos desarrolladores de JavaScript en todo el mundo. Para ellos, tener una herramienta más es definitivamente algo genial y emocionante. Si fuera un desarrollador de JavaScript, definitivamente abriría mi consola y diría, hey, hagamos algo con Node.js. Pero por ahora, estoy más en el lado de Python. Así que veremos. Veremos cómo se desarrolla. Genial. Fue genial tenerte aquí. Gracias nuevamente por tus respuestas, por tu contribución de código abierto y por tu increíble charla. Muchas gracias. Fue un placer.

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

6 min
Charlie Gerard's Career Advice: Be intentional about how you spend your time and effort
Featured Article
When it comes to career, Charlie has one trick: to focus. But that doesn’t mean that you shouldn’t try different things — currently a senior front-end developer at Netlify, she is also a sought-after speaker, mentor, and a machine learning trailblazer of the JavaScript universe. "Experiment with things, but build expertise in a specific area," she advises.

What led you to software engineering?My background is in digital marketing, so I started my career as a project manager in advertising agencies. After a couple of years of doing that, I realized that I wasn't learning and growing as much as I wanted to. I was interested in learning more about building websites, so I quit my job and signed up for an intensive coding boot camp called General Assembly. I absolutely loved it and started my career in tech from there.
 What is the most impactful thing you ever did to boost your career?I think it might be public speaking. Going on stage to share knowledge about things I learned while building my side projects gave me the opportunity to meet a lot of people in the industry, learn a ton from watching other people's talks and, for lack of better words, build a personal brand.
 What would be your three tips for engineers to level up their career?Practice your communication skills. I can't stress enough how important it is to be able to explain things in a way anyone can understand, but also communicate in a way that's inclusive and creates an environment where team members feel safe and welcome to contribute ideas, ask questions, and give feedback. In addition, build some expertise in a specific area. I'm a huge fan of learning and experimenting with lots of technologies but as you grow in your career, there comes a time where you need to pick an area to focus on to build more profound knowledge. This could be in a specific language like JavaScript or Python or in a practice like accessibility or web performance. It doesn't mean you shouldn't keep in touch with anything else that's going on in the industry, but it means that you focus on an area you want to have more expertise in. If you could be the "go-to" person for something, what would you want it to be? 
 And lastly, be intentional about how you spend your time and effort. Saying yes to everything isn't always helpful if it doesn't serve your goals. No matter the job, there are always projects and tasks that will help you reach your goals and some that won't. If you can, try to focus on the tasks that will grow the skills you want to grow or help you get the next job you'd like to have.
 What are you working on right now?Recently I've taken a pretty big break from side projects, but the next one I'd like to work on is a prototype of a tool that would allow hands-free coding using gaze detection. 
 Do you have some rituals that keep you focused and goal-oriented?Usually, when I come up with a side project idea I'm really excited about, that excitement is enough to keep me motivated. That's why I tend to avoid spending time on things I'm not genuinely interested in. Otherwise, breaking down projects into smaller chunks allows me to fit them better in my schedule. I make sure to take enough breaks, so I maintain a certain level of energy and motivation to finish what I have in mind.
 You wrote a book called Practical Machine Learning in JavaScript. What got you so excited about the connection between JavaScript and ML?The release of TensorFlow.js opened up the world of ML to frontend devs, and this is what really got me excited. I had machine learning on my list of things I wanted to learn for a few years, but I didn't start looking into it before because I knew I'd have to learn another language as well, like Python, for example. As soon as I realized it was now available in JS, that removed a big barrier and made it a lot more approachable. Considering that you can use JavaScript to build lots of different applications, including augmented reality, virtual reality, and IoT, and combine them with machine learning as well as some fun web APIs felt super exciting to me.


Where do you see the fields going together in the future, near or far? I'd love to see more AI-powered web applications in the future, especially as machine learning models get smaller and more performant. However, it seems like the adoption of ML in JS is still rather low. Considering the amount of content we post online, there could be great opportunities to build tools that assist you in writing blog posts or that can automatically edit podcasts and videos. There are lots of tasks we do that feel cumbersome that could be made a bit easier with the help of machine learning.
 You are a frequent conference speaker. You have your own blog and even a newsletter. What made you start with content creation?I realized that I love learning new things because I love teaching. I think that if I kept what I know to myself, it would be pretty boring. If I'm excited about something, I want to share the knowledge I gained, and I'd like other people to feel the same excitement I feel. That's definitely what motivated me to start creating content.
 How has content affected your career?I don't track any metrics on my blog or likes and follows on Twitter, so I don't know what created different opportunities. Creating content to share something you built improves the chances of people stumbling upon it and learning more about you and what you like to do, but this is not something that's guaranteed. I think over time, I accumulated enough projects, blog posts, and conference talks that some conferences now invite me, so I don't always apply anymore. I sometimes get invited on podcasts and asked if I want to create video content and things like that. Having a backlog of content helps people better understand who you are and quickly decide if you're the right person for an opportunity.What pieces of your work are you most proud of?It is probably that I've managed to develop a mindset where I set myself hard challenges on my side project, and I'm not scared to fail and push the boundaries of what I think is possible. I don't prefer a particular project, it's more around the creative thinking I've developed over the years that I believe has become a big strength of mine.***Follow Charlie on Twitter
ML conf EU 2020ML conf EU 2020
41 min
TensorFlow.js 101: ML in the Browser and Beyond
Discover how to embrace machine learning in JavaScript using TensorFlow.js in the browser and beyond in this speedy talk. Get inspired through a whole bunch of creative prototypes that push the boundaries of what is possible in the modern web browser (things have come a long way) and then take your own first steps with machine learning in minutes. By the end of the talk everyone will understand how to recognize an object of their choice which could then be used in any creative way you can imagine. Familiarity with JavaScript is assumed, but no background in machine learning is required. Come take your first steps with TensorFlow.js!
React Advanced Conference 2021React Advanced Conference 2021
21 min
Using MediaPipe to Create Cross Platform Machine Learning Applications with React
Top Content
This talk gives an introduction about MediaPipe which is an open source Machine Learning Solutions that allows running machine learning models on low-powered devices and helps integrate the models with mobile applications. It gives these creative professionals a lot of dynamic tools and utilizes Machine learning in a really easy way to create powerful and intuitive applications without having much / no knowledge of machine learning beforehand. So we can see how MediaPipe can be integrated with React. Giving easy access to include machine learning use cases to build web applications with React.
JSNation Live 2021JSNation Live 2021
39 min
TensorFlow.JS 101: ML in the Browser and Beyond
Discover how to embrace machine learning in JavaScript using TensorFlow.js in the browser and beyond in this speedy talk. Get inspired through a whole bunch of creative prototypes that push the boundaries of what is possible in the modern web browser (things have come a long way) and then take your own first steps with machine learning in minutes. By the end of the talk everyone will understand how to recognize an object of their choice which could then be used in any creative way you can imagine. Familiarity with JavaScript is assumed, but no background in machine learning is required. Come take your first steps with TensorFlow.js!
ML conf EU 2020ML conf EU 2020
32 min
An Introduction to Transfer Learning in NLP and HuggingFace
In this talk I'll start introducing the recent breakthroughs in NLP that resulted from the combination of Transfer Learning schemes and Transformer architectures. The second part of the talk will be dedicated to an introduction of the open-source tools released HuggingFace, in particular our Transformers, Tokenizers and Datasets libraries and our models.

Workshops on related topic

ML conf EU 2020ML conf EU 2020
160 min
Hands on with TensorFlow.js
Workshop
Come check out our workshop which will walk you through 3 common journeys when using TensorFlow.js. We will start with demonstrating how to use one of our pre-made models - super easy to use JS classes to get you working with ML fast. We will then look into how to retrain one of these models in minutes using in browser transfer learning via Teachable Machine and how that can be then used on your own custom website, and finally end with a hello world of writing your own model code from scratch to make a simple linear regression to predict fictional house prices based on their square footage.
ML conf EU 2020ML conf EU 2020
112 min
The Hitchhiker's Guide to the Machine Learning Engineering Galaxy
Workshop
Are you a Software Engineer who got tasked to deploy a machine learning or deep learning model for the first time in your life? Are you wondering what steps to take and how AI-powered software is different from traditional software? Then it is the right workshop to attend.
The internet offers thousands of articles and free of charge courses, showing how it is easy to train and deploy a simple AI model. At the same time in reality it is difficult to integrate a real model into the current infrastructure, debug, test, deploy, and monitor it properly. In this workshop, I will guide you through this process sharing tips, tricks, and favorite open source tools that will make your life much easier. So, at the end of the workshop, you will know where to start your deployment journey, what tools to use, and what questions to ask.
ML conf EU 2020ML conf EU 2020
146 min
Introduction to Machine Learning on the Cloud
Workshop
This workshop will be both a gentle introduction to Machine Learning, and a practical exercise of using the cloud to train simple and not-so-simple machine learning models. We will start with using Automatic ML to train the model to predict survival on Titanic, and then move to more complex machine learning tasks such as hyperparameter optimization and scheduling series of experiments on the compute cluster. Finally, I will show how Azure Machine Learning can be used to generate artificial paintings using Generative Adversarial Networks, and how to train language question-answering model on COVID papers to answer COVID-related questions.