Torch es una biblioteca de aprendizaje automático de código abierto, un marco de computación científica y un lenguaje de scripting basado en Lua. Proporciona interfaces LuaJIT para algoritmos de aprendizaje profundo implementados en C. La biblioteca fue creada por el Idiap Research Institute y posteriormente portada a Python como PyTorch en 2017, momento en el cual el desarrollo activo se trasladó a la versión en Python. Torch ofrece un conjunto flexible de herramientas para construir y entrenar redes neuronales, incluyendo tensores, módulos de redes neuronales y utilidades de optimización. Su diseño influyó en marcos de aprendizaje profundo posteriores y contribuyó al campo más amplio del aprendizaje profundo y el aprendizaje automático como parte del ecosistema de investigación en inteligencia artificial.
Paquete Principal: torch
El paquete principal de Torch, llamado torch, proporciona un arreglo N-dimensional flexible llamado Tensor, que soporta indexación, segmentación, transposición, conversión de tipos, redimensionamiento, compartición de almacenamiento y clonación. Los tensores son la estructura de datos fundamental utilizada por la mayoría de los otros paquetes en el marco. Soportan operaciones matemáticas como max, min y sum, distribuciones estadísticas como uniforme, normal y multinomial, y operaciones básicas de álgebra lineal (BLAS) incluyendo producto punto, multiplicación matriz-vector, multiplicación matriz-matriz y producto de matrices. El paquete también simplifica la programación orientada a objetos y la serialización mediante funciones de conveniencia. La función torch.class permite la creación de fábricas de objetos (clases), y los objetos creados a través de este mecanismo pueden ser serializados cuando no contienen referencias no soportadas como corrutinas de Lua o userdata (a menos que el userdata esté envuelto en tablas con métodos read y write).
Paquete de Redes Neuronales (nn)
El paquete nn está diseñado para construir redes neuronales. Se compone de objetos modulares que comparten una interfaz Module, con métodos forward() y backward() para propagación hacia adelante y retropropagación. Los módulos pueden combinarse usando estructuras compuestas como Sequential, Parallel y Concat, mientras que módulos más simples como Linear, Tanh y Max forman los bloques básicos de construcción. Esta interfaz modular proporciona diferenciación automática de primer orden. Las funciones de pérdida se implementan como subclases de Criterion, que tienen una interfaz similar y calculan la pérdida y los gradientes. Los criterios comunes incluyen MSECriterion (error cuadrático medio) y ClassNLLCriterion (entropía cruzada). El paquete también incluye una clase StochasticGradient para entrenamiento mediante descenso de gradiente estocástico, aunque el paquete optim ofrece más opciones, como momento y regularización por decaimiento de pesos.
Paquetes Adicionales
Más allá del núcleo oficial (torch y nn), varios paquetes adicionales extienden la funcionalidad de Torch. Estos paquetes proporcionan utilidades para computación paralela, entrada/salida asíncrona, procesamiento de imágenes y otras tareas especializadas. Generalmente se instalan a través del gestor de paquetes de Lua, LuaRocks, que se incluye con la distribución estándar de Torch. La comunidad desarrolló una amplia gama de extensiones, permitiendo que Torch se adapte a diversos dominios de aplicación.
Aplicaciones
Torch fue utilizado por varios grupos prominentes de investigación e industria, incluyendo el Facebook AI Research Group, IBM, Yandex y el Idiap Research Institute. Ha sido extendido para su uso en plataformas móviles, como Android e iOS, y se ha utilizado para construir implementaciones de hardware para flujos de datos como los que se encuentran en redes neuronales. Facebook también lanzó un conjunto de módulos de extensión como software de código abierto, demostrando la flexibilidad de la biblioteca en entornos de producción e investigación.
Legado y Transición a PyTorch
El desarrollo se trasladó en 2017 a PyTorch, un port de la biblioteca original a Python. PyTorch conserva los conceptos centrales de tensores y gráficos de computación dinámicos, pero aprovecha el ecosistema de Python para una adopción más amplia. El movimiento llevó a que PyTorch se convirtiera en uno de los marcos más utilizados en la investigación y la industria del aprendizaje profundo, con una influencia significativa en herramientas posteriores como modelos de lenguaje grandes y arquitecturas transformer. Hoy en día, Torch se desarrolla menos activamente, pero sigue siendo históricamente significativo como precursor de PyTorch y contribuyente a la evolución de los marcos modernos de aprendizaje profundo.