Torch é uma biblioteca de aprendizado de máquina de código aberto, um framework de computação científica e uma linguagem de script baseada em Lua. Ela fornece interfaces LuaJIT para algoritmos de aprendizado profundo implementados em C. A biblioteca foi criada pelo Idiap Research Institute e posteriormente portada para Python como PyTorch em 2017, momento em que o desenvolvimento ativo migrou para a versão em Python. Torch oferece um conjunto flexível de ferramentas para construir e treinar redes neurais, incluindo tensores, módulos de redes neurais e utilitários de otimização. Seu design influenciou frameworks subsequentes de aprendizado profundo e contribuiu para o campo mais amplo de aprendizado profundo e aprendizado de máquina como parte do ecossistema de pesquisa em inteligência artificial.
Pacote Principal: torch
O pacote principal do Torch, chamado torch, fornece um array N-dimensional flexível chamado Tensor, que suporta indexação, fatiamento, transposição, conversão de tipos, redimensionamento, compartilhamento de armazenamento e clonagem. Tensores são a estrutura de dados fundamental usada pela maioria dos outros pacotes no framework. Eles suportam operações matemáticas como máximo, mínimo e soma, distribuições estatísticas como uniforme, normal e multinomial, e operações básicas de álgebra linear (BLAS), incluindo produto escalar, multiplicação matriz-vetor, multiplicação matriz-matriz e produto de matrizes. O pacote também simplifica a programação orientada a objetos e a serialização por meio de funções de conveniência. A função torch.class permite a criação de fábricas de objetos (classes), e objetos criados por esse mecanismo podem ser serializados quando não contêm referências não suportadas, como corrotinas Lua ou userdata (a menos que o userdata seja envolvido em tabelas com métodos read e write).
Pacote de Redes Neurais (nn)
O pacote nn é projetado para construir redes neurais. Ele é composto por objetos modulares que compartilham uma interface Module, com métodos forward() e backward() para propagação direta e retropropagação. Módulos podem ser combinados usando estruturas compostas como Sequential, Parallel e Concat, enquanto módulos mais simples, como Linear, Tanh e Max, formam os blocos básicos de construção. Essa interface modular fornece diferenciação automática de primeira ordem. Funções de perda são implementadas como subclasses de Criterion, que têm uma interface semelhante e calculam a perda e os gradientes. Critérios comuns incluem MSECriterion (erro quadrático médio) e ClassNLLCriterion (entropia cruzada). O pacote também inclui uma classe StochasticGradient para treinamento usando gradiente descendente estocástico, embora o pacote optim ofereça mais opções, como momentum e regularização por decaimento de peso.
Pacotes Adicionais
Além dos pacotes principais oficiais (torch e nn), vários pacotes extras estendem a funcionalidade do Torch. Esses pacotes fornecem utilitários para computação paralela, entrada/saída assíncrona, processamento de imagens e outras tarefas especializadas. Eles são tipicamente instalados via o gerenciador de pacotes Lua LuaRocks, que é incluído com a distribuição padrão do Torch. A comunidade desenvolveu uma ampla gama de extensões, permitindo que o Torch se adaptasse a vários domínios de aplicação.
Aplicações
Torch foi usado por vários grupos proeminentes de pesquisa e indústria, incluindo o Facebook AI Research Group, IBM, Yandex e o Idiap Research Institute. Ele foi estendido para uso em plataformas móveis, como Android e iOS, e foi usado para construir implementações de hardware para fluxos de dados como os encontrados em redes neurais. O Facebook também lançou um conjunto de módulos de extensão como software de código aberto, demonstrando a flexibilidade da biblioteca em ambientes de produção e pesquisa.
Legado e Transição para PyTorch
O desenvolvimento transitou em 2017 para PyTorch, uma portabilidade da biblioteca original para Python. PyTorch mantém os conceitos centrais de tensores e grafos de computação dinâmicos, mas aproveita o ecossistema do Python para uma adoção mais ampla. A mudança levou o PyTorch a se tornar um dos frameworks mais amplamente usados em pesquisa e indústria de aprendizado profundo, com influência significativa em ferramentas subsequentes, como modelos de linguagem de grande escala e arquiteturas transformer. Hoje, o Torch é menos ativamente desenvolvido, mas permanece historicamente significativo como precursor do PyTorch e contribuinte para a evolução dos frameworks modernos de aprendizado profundo.