2 puntos por GN⁺ 2023-08-27 | 1 comentarios | Compartir por WhatsApp
  • El artículo sobre reconocimiento de códigos postales manuscritos de 1989 de Yann LeCun y otros es un caso temprano de aplicación práctica de redes neuronales entrenadas de extremo a extremo con backpropagation, y su dataset, arquitectura, función de pérdida, optimización y forma de reportar la tasa de error se parecen a los artículos modernos de deep learning
  • La reimplementación en PyTorch se hizo sobre un pequeño dataset de 7,291 imágenes de dígitos en escala de grises de 16x16 y una red de alrededor de 1,000 neuronas, y el entrenamiento de 3 días del artículo original se redujo a unos 90 segundos en el CPU de una MacBook Air con M1
  • El artículo original reportó un error de entrenamiento de 0.14% y un error de prueba de 5.00%, y aunque la reproducción no coincide exactamente por usar datos alternativos creados a partir de MNIST reducido a 16x16, logró 0.62% de error de entrenamiento y 4.09% de error de prueba
  • Al aplicar técnicas de 2022 como cross-entropy, AdamW, aumento de datos, Dropout y ReLU, el error de prueba bajó de 4.09% a 1.59%; el tiempo de entrenamiento aumentó unas 4 veces, pero la latencia de inferencia no cambió
  • En 33 años la estructura macro se mantuvo casi intacta, pero la escala de datos, modelos y cómputo creció de forma abrumadora, y la tendencia de foundation models y fine-tuning está volviendo obsoleto rápidamente entrenar desde cero redes neuronales para tareas específicas

Por qué se volvió a implementar en 2022 un artículo de 1989

  • El artículo de 1989 de Yann LeCun y otros, Backpropagation Applied to Handwritten Zip Code Recognition, es un caso temprano históricamente importante de aplicación práctica basada en backpropagation
    • Se considera uno de los primeros artículos que aplicó a un problema real una red neuronal entrenada de extremo a extremo con backpropagation
    • En ese momento, el dataset consistía en 7,291 imágenes de dígitos en escala de grises de 16x16, y la red tenía cerca de 1,000 neuronas
  • La estructura del artículo es muy similar a la de un artículo moderno de deep learning
    • Define el dataset
    • Explica la arquitectura de la red neuronal
    • Trata la función de pérdida y la optimización
    • Reporta la tasa de error de clasificación en los conjuntos de entrenamiento y prueba
  • El código de la reimplementación fue escrito en PyTorch y está publicado en karpathy/lecun1989-repro
  • La red original estaba implementada en Lisp y usaba el simulador de backpropagation SN de Bottou y LeCun de 1988
  • El diseño de las bibliotecas modernas de deep learning suele dividirse en tres partes
    • Una biblioteca de tensores rápida basada en C/CUDA
    • Un motor de autograd que rastrea el grafo de cómputo del forward y genera las operaciones de backpropagation
    • APIs de alto nivel, capas, arquitecturas, optimizadores y funciones de pérdida scriptables en Python

Velocidad de entrenamiento y límites de la reproducción

  • El entrenamiento original hacía 23 pasadas sobre 7,291 ejemplos de entrenamiento, presentando en total 167,693 pares de entrada-etiqueta a la red
  • La red de 1989 se entrenó durante 3 días en una estación de trabajo SUN-4/260
  • La reimplementación en PyTorch tardó unos 90 segundos en el CPU de una MacBook Air M1, lo que da una mejora simple de alrededor de 3,000 veces
    • conda usó un build nativo arm64, no emulación con Rosetta
    • Si PyTorch hubiera aprovechado por completo el GPU y la NPU del M1, la mejora de velocidad podría haber sido aún mayor
  • Al ejecutarlo de forma simple en un GPU A100, de hecho fue más lento
    • La red es muy pequeña: un convnet de 4 capas, con hasta 12 canales, 9,760 parámetros en total, 64K MACs y 1K activations
    • La estructura de SGD usaba solo un ejemplo a la vez
    • Para aprovechar de verdad el A100, CUDA y PyTorch, había que aumentar la utilización del GPU con entrenamiento full-batch en vez de SGD por ejemplo individual
  • El desempeño reportado por el artículo original fue el siguiente
    • Entrenamiento: loss 2.5e-3, error 0.14%, miss 10
    • Prueba: loss 1.8e-2, error 5.00%, miss 102
  • El resultado de la pasada 23 del script de reproducción fue el siguiente
    • Entrenamiento: loss 4.073383e-03, error 0.62%, miss 45
    • Prueba: loss 2.838382e-02, error 4.09%, miss 82
  • La reproducción exacta fue difícil por varias razones
    • Parece que el dataset original se perdió con el tiempo
    • En su lugar, se redujeron dígitos de 28x28 de MNIST a 16x16 con bilinear interpolation y se tomó una muestra aleatoria sin reemplazo del tamaño necesario
    • La descripción de la inicialización de pesos es abstracta y, por problemas del formato PDF, puede que se hayan perdido puntos o símbolos de raíz cuadrada
    • La estructura de conexiones dispersas entre H1 y H2 no se trataba en detalle en el artículo, así que hubo que hacer estimaciones razonables
    • Había preocupación de que el tanh del artículo fuera en realidad el normalized tanh popular en esa época
    • El artículo original usaba un algoritmo especial de Newton con una aproximación diagonal positiva del Hessian, mientras que la reimplementación usó un SGD más simple

Cómo se redujo la tasa de error con técnicas de 33 años después

  • El primer cambio fue pasar del enfoque de regresión con MSE a un enfoque moderno de clasificación multiclase
    • Originalmente, la clasificación de 10 clases se modelaba como una regresión con MSELoss sobre objetivos de -1 o +1
    • Se eliminó el tanh de la capa de salida para producir class logits y se aplicó CrossEntropyLoss
    • Esto sobreajustó por completo el conjunto de entrenamiento y dejó un error de entrenamiento de 0.00% y un error de prueba de 4.38%
  • Después se aplicó una familia de optimizadores Adam en lugar de SGD
    • Se usó AdamW comenzando con learning rate 3e-4 y bajándolo a 1e-4 durante el entrenamiento
    • El resultado fue error de entrenamiento de 0.00% y error de prueba de 3.59%
    • El weight decay de los parámetros por defecto también ayudó a aliviar el sobreajuste
  • El aumento de datos consistió en desplazar la imagen de entrada hasta 1 píxel en horizontal o vertical
    • Como esto simula un aumento en el tamaño del dataset, el número de pasadas subió de 23 a 60
    • Simplemente aumentar las pasadas en la configuración original no mejoraba mucho el resultado
    • El resultado fue error de entrenamiento de 1.70% y error de prueba de 2.19%
  • La combinación de Dropout y ReLU produjo una mejora adicional
    • Se agregó un Dropout ligero de 0.25 justo antes de la capa H3, la que tiene más parámetros
    • Como Dropout lleva activations a 0, se consideró que encaja mejor con ReLU que con tanh, cuyo rango de activación es [-1, 1]
    • Se cambiaron todas las no linealidades de tanh a ReLU y se aumentó el número de pasadas a 80
    • El resultado fue error de entrenamiento de 1.47%, error de prueba de 1.59% y miss de prueba de 32
  • Cambiar simplemente tanh por ReLU no produjo una gran mejora; la mayor parte de la mejora vino de agregar Dropout
  • Si estas técnicas pudieran llevarse a 1989, el número de errores podría bajar de unas 80 a unas 30, y la tasa de error de prueba podría reducirse a alrededor de 1.5%
    • A cambio, el tiempo de entrenamiento casi se cuadruplicaría, pasando de 3 días a casi 12 días en términos de 1989
    • La latencia de inferencia no se vería afectada

Antes que modelos más grandes, el aumento de datos fue lo que primero dio resultado

  • Después de eso, los márgenes de mejora fácil se fueron reduciendo
    • Técnicas adicionales como weight normalization no produjeron mejoras importantes
    • Un “micro-ViT” con cantidad similar de parámetros y cómputo tampoco alcanzó el desempeño del convnet
  • Hubo muchas innovaciones en estos 33 años, pero algunas tienen sentido sobre todo en modelos mucho más grandes
    • residual connection, layer normalization y batch normalization están más relacionadas con estabilizar la optimización a gran escala
  • Es probable que mejoras grandes adicionales vengan de ampliar el tamaño de la red, pero eso aumenta la latencia de inferencia en prueba
  • Aumentar los datos también mejora el desempeño
    • Al usar todo MNIST, el conjunto de entrenamiento pasó de 7,291 a 50,000 ejemplos, un aumento de alrededor de 7 veces
    • Al ejecutar el baseline existente por 100 pasadas, el error de prueba mejoró a 2.74%, con miss 54
  • La mejor combinación fue unir aumento de datos con técnicas modernas
    • Error de entrenamiento de 1.07%, error de prueba de 1.25%, miss de prueba de 24
    • En 1989, simplemente aumentar el dataset ya podía elevar el desempeño del sistema sin afectar la latencia de inferencia

Observaciones que van de 1989 a 2022, y luego a 2055

  • En 33 años, la estructura macroscópica no cambió demasiado
    • Seguimos construyendo arquitecturas de redes neuronales diferenciables compuestas por capas y optimizándolas de extremo a extremo con backpropagation y stochastic gradient descent
    • La diferencia es que en ese entonces la escala era mucho menor
  • El dataset y el modelo de 1989 son muy pequeños para estándares modernos
    • El conjunto de entrenamiento contiene solo 7,291 imágenes en escala de grises de 16x16
    • Los datasets modernos de visión llegan a usar cientos de millones de imágenes a color de alta resolución recolectadas de la web
    • Un ejemplo es OpenAI CLIP, entrenado con 400M imágenes, o Google JFT-300M
    • Se estima que eso equivale a aproximadamente 100,000,000 veces más datos en términos de píxeles de entrada
  • La red de 1989 tenía unos 9,760 parámetros, 64K MACs y 1K activations
    • Las redes neuronales modernas de visión alcanzan miles de millones de parámetros y del orden de 1e12 MACs
    • Los modelos de lenguaje natural pueden llegar a billones de parámetros
  • Si miramos 2022 desde 2055, podría repetirse un patrón similar
    • Las redes neuronales de 2055 serían macroscópicamente casi iguales a las de 2022, pero más grandes
    • Los datasets y modelos actuales podrían verse como aproximadamente 10,000,000 veces más pequeños
    • Se imagina que incluso un modelo de vanguardia de 2022 podría entrenarse en cerca de 1 minuto como un proyecto de fin de semana en un dispositivo personal
    • También se supone que solo cambiando detalles del modelo, la función de pérdida, el aumento y el optimizador se podría reducir el error a la mitad
  • El enfoque de entrenar una red neuronal desde cero para una tarea específica se está volviendo obsoleto rápidamente
    • Los foundation model como GPT son entrenados por unas pocas instituciones con enormes recursos de cómputo
    • La mayoría de las aplicaciones pueden implementarse con fine-tuning ligero de una parte de la red, prompt engineering, o destilación de datos y modelo hacia una pequeña red de inferencia especializada
    • En el extremo, es posible imaginar que en 2055 un usuario simplemente hable o piense en inglés para pedir una tarea a una neural net “megabrain” 10,000,000 veces más grande, y que la necesidad de entrenar directamente redes neuronales sea menor

1 comentarios

 
GN⁺ 2023-08-27
Opiniones de Hacker News
  • Hay otro punto interesante. Originalmente, el entrenamiento tomó 3 días en una estación de trabajo Sun 4/260; no pude encontrar las especificaciones exactas, pero si era de la época de las primeras estaciones de trabajo SPARC, el consumo total probablemente rondaba los 200 W.
    El CPU en sí no consumía tanta energía, pero es muy probable que el sistema completo, incluyendo disco y monitor, estuviera en ese orden. Entonces: 200 W × 72 horas = 14,400 Wh.
    Karpathy ejecutó un entrenamiento del mismo nivel en una MacBook, y ni siquiera usándola al máximo, en 90 segundos. Si estimamos 20 W × 0.025 horas = 0.5 Wh, eso implica una mejora de casi 30,000 veces en eficiencia energética.

    • Esto es bastante interesante; siempre he pensado que el rendimiento de las redes neuronales debería medirse en unidades que tengan la energía como denominador.
    • Si pensamos en la ley de Moore, 30,000 veces tampoco suena tan enorme. Desde 1989 habría esperado una mejora mayor, y el rendimiento de las supercomputadoras ha aumentado más de un millón de veces desde entonces.
    • Si hablamos de Wh, ¿no estamos hablando de julios (J), solo con un factor constante de diferencia?
  • El artículo me pareció excelente. Lo único que me deja con ganas es que la predicción para 2055 es meta-lineal. Evita el error común de dejar la tecnología actual fija y hacer una regresión lineal de los números hasta 33 años en el futuro, pero aun así parece asumir una especie de simetría de línea de mundo con el presente como origen.
    Como el horizonte temporal es lo bastante largo, avances inesperados y obstáculos podrían hacer que ninguna de estas predicciones se cumpla. Alguien podría descubrir una infraestructura mucho más simple que “perceptrón++”; todos podríamos estar entrenando nubes gaussianas 3D; o las computadoras cuánticas por fin podrían despegar, y quizá ni siquiera tengamos todavía los sustantivos para nombrar los componentes que usaremos.
    Por el contrario, podríamos toparnos con límites de escalamiento no vistos en hardware o entrenamiento, o incluso sufrir un retroceso civilizatorio. Aun así, si yo fuera una persona de apuestas, no apostaría precisamente en contra de las conclusiones del artículo. Si solo conocemos el pasado y el presente y extrapolamos, probablemente sea algo cercano a la mejor conclusión posible.

    • Me parece correcto. Es muy probable que los próximos 33 años sean bastante distintos de lo actual.
      Yo me inclino a pensar que el cambio será más drástico. No solo por los recursos, sino porque hay mucho margen para mejoras algorítmicas.
      Por el lado más obvio, la mayoría de las bibliotecas todavía no aprovechan plenamente varias técnicas conocidas de optimización por gradiente. Como era demasiado fácil simplemente agregar más datos y más capacidad de procesamiento, aún hay herramientas acumuladas por aplicar.
      Además, los grandes modelos exitosos están dando pistas importantes. Por ejemplo, los modelos de lenguaje están aprendiendo una especie de lógica lingüística similar a cómo procesamos el pensamiento, y es evidente que pueden enlazar de forma plausible información muy heterogénea.
      Si algún día entendemos la esencia de ese procesamiento, el procesamiento del lenguaje podría simplificarse drásticamente. Esa es solo una de las oportunidades para avances radicales en arquitectura y algoritmos, y realmente sería revolucionaria.
  • Entonces, ¿durante los próximos 33 años basta con hacer lo mismo pero aumentando solo los datos y la capacidad de cómputo? Si llevamos hasta sus consecuencias lógicas el entusiasmo de “por fin esto ocurre en mi vida” de cuando aparecieron los LLM y la idea de que “solo hay que hacer más grandes los modelos y los datos”, eso es lo que resulta. Pero ¿de verdad se puede llegar a la AGI solo con fuerza bruta?
    Hace 33 años, la “IA conexionista” no era el paradigma dominante, y la “IA simbólica” tampoco era el único enfoque alternativo. También existían enfoques como el “funcionalismo robótico”, según el cual no se puede tener inteligencia real sin interactuar con el mundo físico.
    Dentro de 33 años, estos otros enfoques podrían resurgir combinados con el conexionismo, o podría aparecer un enfoque completamente nuevo.

  • Excelente artículo. Viví en primera persona los primeros tiempos de las redes neuronales artificiales. A mediados de los años 80 estuve en el panel asesor de herramientas de redes neuronales de DARPA, escribí la primera versión del producto comercial SAIC ANSim y también construí un modelo simple de retropropagación que se desplegó en un detector de bombas desarrollado por la empresa bajo contrato con la FAA.
    Hace 5 o 6 años también dirigí un equipo de deep learning “tradicional” en Capital One. Los últimos 18 meses han sido realmente emocionantes. Estoy dedicando todo el tiempo que puedo a explorar LLM autoalojados y APIs de Hugging Face, OpenAI, etc.
    Solo pensar en la tecnología de aquí a 33 años me hace sentir que la cabeza me va a explotar.

  • El cambio más fundamental está en con qué se entrenan los modelos.
    Las pequeñas imágenes de caracteres se parecen más a un problema tipo cuestionario, y son algo completamente distinto de entrenar con prácticamente toda la comunicación lingüística y visual de la humanidad.
    Aunque los recursos de cómputo sigan escalando durante los próximos 33 años, no nos quedaremos en la etapa de entrenar modelos que imiten el comportamiento y el conocimiento humanos. Ese problema —es decir, nosotros mismos— se habrá reducido a un problema de juguete mucho antes.

    • Creo que los modelos de IA evolucionarán generando datos sintéticos, filtrándolos y mejorándolos, y luego volviendo a entrenarse con ellos. Sistemas externos como ejecución de código, búsqueda, personas, simulaciones y robots también podrían entrar en el loop.
      La calidad no va a deteriorarse, porque se invertirá mucho esfuerzo en filtrar datos y asegurar diversidad. Siempre se puede mejorar dándole más tiempo al modelo.
      La arquitectura del modelo no es tan importante en comparación con el dataset. Cualquier modelo de la misma familia puede aprender las mismas capacidades a partir de los mismos datos, pero si cambias los datos, las capacidades de todos cambian. La inteligencia está en los datos.
      El futuro no es el diseño de arquitecturas de modelos, sino la ingeniería de datos. Como analogía, la cultura humana evoluciona más rápido que la biología humana. Los datos están evolucionando más rápido que los modelos.
      En la IA reciente se ve una fuerte disminución de nuevas arquitecturas y una tendencia a aplicar diversos datasets al mismo modelo Transformer. Incluso dentro de Transformer, las variantes ampliamente usadas son muy pocas, y miles han sido descartadas.
      Me gusta pensar que el verdadero motor de la inteligencia es la evolución del lenguaje mediante memes. Nosotros y la IA estamos montados juntos sobre el crecimiento exponencial del lenguaje.
    • Primero me gustaría que resolviéramos casi por completo al menos ese problema de juguete llamado conducción autónoma. Sigo esperando.
  • No está claro si la capacidad de cómputo seguirá escalando durante los próximos 33 años como antes. Pero tampoco hace falta que sea así.
    Mientras leía el artículo, pensé: “Dios mío, recuerdo que en aquel proyecto de machine learning de fin de semana usé MSE y no funcionó bien. Resulta que había elegido mal la función de pérdida”.
    Los LLM actuales, o los del año que viene, probablemente podrán decirme lo suficiente sobre cómo mejorar mi código y mis gráficas. Entonces podré aplicar técnicas de nivel experto que, de otro modo, me habrían estado vedadas por la acumulación de 50 mil horas de experiencia.
    Una parte de mí dice que la humanidad ya terminó y que, dentro de 33 años, habremos creado un mundo en el que los humanos no tendrán sentido. Pero otra parte dice que, si evitamos ese destino y todas las demás catástrofes, el futuro podría ser bastante prometedor.

    • Ya hemos oído mucho hablar de cosas como “el LLM del año que viene”, y lo seguiremos oyendo. Los últimos 5 yardas son lo más difícil, y sin eso las 5 millas anteriores también tienen una utilidad limitada.
    • Creo que algún día llegará un momento en que tendremos que frenar la IA muchísimo, muchísimo, para evitar malos resultados. Coincido con la perspectiva de Zvi Mowshowitz. En todos los campos, salvo aquellos con riesgo de extinción, deberíamos fomentar el progreso y la toma de riesgos.
      Aplicar los LLM de hoy a todo tipo de problemas no nos va a acabar. Pero una AGI consciente y capaz de planificar podría llegar en pocos años, y tampoco sabemos cuál es el límite de qué tan inteligentes podremos hacerlas.
      Creo que somos responsables de todos los seres inteligentes que introducimos en el mundo. Hay quienes lamentan que no exista un examen para convertirse en padre o madre; ¿qué tal crear un millón de copias de cerebros virtuales completamente nuevos? Y, además, hacer que nazcan básicamente para trabajar de por vida.
  • Me pareció realmente bueno. Aunque no se aborda explícitamente, creo que la diferencia dentro de 33 años estará en las entradas que maneje el modelo. En 1989, el modelo de punta usaba imágenes en escala de grises de 16×16, y hoy tenemos imágenes a color de unos cuantos megapíxeles.
    Dentro de 30 años, una desktop podrá entrenar CLIP en 90 segundos, pero ¿con qué se entrenarán los modelos de punta de entonces?

    • Será comportamiento humano en un sentido mucho más general que predecir qué token escribir después. Para imitar a los humanos lo más de cerca posible con métodos básicos de deep learning, habrá que entrenar algo capaz de predecir el comportamiento humano en general.
      Para eso se necesitarán desde miles de millones hasta billones de horas de video y audio de distintas personas haciendo todo tipo de actividades humanas, y probablemente muchos otros inputs.
    • Aunque tenemos imágenes de megapíxeles que se pueden obtener fácilmente con cámaras de celulares, casi todos los modelos de visión realmente usados de forma amplia reciben como entrada una resolución de 224×224, o alrededor de 384×384. Las resoluciones más altas terminan siendo reducidas por downsampling.
      Hoy parece mejor gastar el presupuesto de cómputo en un “cerebro” más grande que en mejores “ojos”.
    • También podrían ser millones de horas de datos capturados con visores como Vision Pro.
      No sé exactamente qué capturarían, pero se podría entrenar un modelo con una combinación de varias entradas: audio, video, información espacial, iris, etc.
  • Es interesante que durante ese período casi se perdió por completo el interés en las redes neuronales y luego volvió.

    • Tuve que volver a cursar varias veces clases de IA en la universidad. Era porque no estaba de acuerdo con la visión de que “la IA es búsqueda simbólica”.
      Ahora seguramente hay gente conectando LLM para hacer razonamiento hacia adelante y hacia atrás.
    • En este caso hay una buena razón para que haya resurgido, pero en realidad algo parecido se repite en casi todo lo relacionado con el software. Solo que, cuanto más mainstream es una tecnología, más corto suele ser su ciclo de hype.
    • Eso hay que agradecérselo a Hinton. Es una lástima que no haya Premio Nobel para software.
      Aun así, el Turing Award también es bastante excelente.
  • Es sorprendente al mismo tiempo lo poco que ha cambiado y lo mucho que ha cambiado. Recuerdo lo revelador que fue leer “La efectividad irrazonable de los RNN”, y ahora se siente como si viviéramos en un mundo completamente distinto.

    • Si tomamos aquel trabajo de 2015 como una especie de línea base, creo que podríamos tener una conversación más constructiva y serena.
      La tecnología nueva es muchísimo mejor, y sus implicaciones futuras son grandes. Pero quienes venían prestando atención desde entonces tenían un punto de referencia en el que “mejoró de forma increíble” no llevaba de inmediato a “está fuera de control”.
      Es cierto que mejoró muchísimo.
  • Los textos de Andrej Karpathy siempre son refrescantes. Cuanto más sabe, más explora de forma directa y simple los fundamentos de la ciencia del machine learning.
    Este campo está lleno de papers que proponen nuevas arquitecturas complejas para pequeñas mejoras difíciles de reproducir, y que rellenan 50 páginas inútiles con la esperanza de superar los resultados más recientes y hacer que su trabajo parezca “serio”.