3 puntos por GN⁺ 2023-08-27 | 1 comentarios | Compartir por WhatsApp
  • El artículo explica un concepto importante llamado diferenciación automática usando Python, que es un componente clave del entrenamiento de redes neuronales.
  • El autor es ingeniero de aprendizaje automático, usa bibliotecas como Tensorflow y Pytorch, y busca escribir el código más simple posible para realizar diferenciación automática.
  • El autor comienza escribiendo código en Python que suma dos variables, x e y, y asigna el resultado a la variable z. Sin embargo, z no rastrea las variables utilizadas, por lo que es imposible actualizar automáticamente el valor de z si cambia el valor de x o y.
  • Para resolver esto, el autor presenta una clase Tensor que permite cálculo simbólico sobre variables. En esta clase, la operación de suma se redefine.
  • La clase Tensor se mejora aún más usando un árbol binario. Cada tensor puede incluir otros dos tensores y la operación que lo creó. Esto se logra introduciendo una tupla Children.
  • El autor agrega un método forward a la clase Tensor para ejecutar el grafo computacional y calcular el valor real del tensor.
  • El autor introduce diferenciación automática en el grafo computacional agregando derivadas para las operaciones básicas que soporta la clase Tensor. Las llamadas recursivas a la función grad recorren el grafo computacional y descomponen funciones complejas en combinaciones de funciones simples.
  • La clase Tensor se amplía para poder manejar fórmulas más complejas al agregar operaciones adicionales como resta, división, exponente y negación.
  • El autor muestra el uso de la clase Tensor creando fórmulas complejas y derivándolas.
  • El autor concluye proponiendo posibles mejoras y optimizaciones para la clase Tensor, como agregar operaciones sobre arreglos de tamaño arbitrario, detener el recorrido en nodos que no dependen del tensor x y establecer caché para evitar repetir cálculos.
  • El artículo busca ayudar a los lectores a entender cómo se realiza la diferenciación automática para la optimización y el entrenamiento de redes neuronales.

1 comentarios

 
GN⁺ 2023-08-27
Opiniones de Hacker News
  • Los lectores valoran las demostraciones de código concisas y elegantes que ayudan a entender conceptos complejos.
  • La explicación de la diferenciación automática en el texto principal parece estar demasiado simplificada, ya que solo aborda el caso en que el grafo es un árbol y no trata grafos acíclicos dirigidos más complejos.
  • Algunos lectores consideran que la diferenciación automática es muy interesante y escribieron su propia introducción al concepto.
  • Un lector compartió su propia implementación de autodiff en 26 líneas de Python.
  • Se señaló que las técnicas discutidas son similares al "seguimiento de dependencias" y a las usadas en sistemas de Knowledge Based Engineering para reducir cálculos en grandes modelos 3D paramétricos.
  • Se recomendó el video de Andrej Karpathy sobre cómo construir un motor de autograd por ser revelador.
  • Algunos lectores sugirieron que la diferenciación automática no necesariamente construye un grafo de operaciones, sino que calcula los valores correspondientes sobre la marcha.
  • Se propuso que explicar autodiff como una regla de la cadena numérica resulta más claro.
  • Surgió una pregunta sobre la justificación de llamar tensor a la clase.
  • La simplicidad de la implementación sorprendió a algunos lectores, haciendo que el concepto pareciera más accesible de lo que pensaban al principio.
  • La implementación fue comparada con el free monad de Haskell, lo que muestra la relación del artículo entre distintos lenguajes.