Torch是一个基于Lua脚本语言的开源机器学习库和科学计算框架。它于2002年由Idiap研究所发布,提供了LuaJIT接口,用于调用以C语言实现的深度学习算法,使其成为研究人员在人工智能和神经网络模型方面的重要早期工具。该库的设计强调灵活性和模块化,这促进了其在学术和工业环境中的采用。2017年,Torch的开发转向了PyTorch,这是该库向Python的移植版本,此后PyTorch已成为深度学习研究中的主导框架。
核心包:torch
Torch的核心包是torch包,它提供了一个灵活的N维数组,称为Tensor。该Tensor支持索引、切片、转置、类型转换、调整大小、共享存储和克隆等基本例程,构成了大多数其他包使用的核心对象。除了这些结构操作外,Tensor还支持数学函数,如max、min和sum,统计分布,包括均匀分布、正态分布和多项分布,以及基本线性代数子程序(BLAS)操作,如点积、矩阵-向量乘法和矩阵-矩阵乘法。
torch包还通过其生态系统中使用的便捷函数简化了面向对象编程和序列化。torch.class(classname, parentclass)函数创建对象工厂或类,使开发者能够定义自定义数据结构。当调用构造函数时,Torch会初始化一个带有用户定义元表的Lua表,将该表转换为对象。通过此工厂创建的对象可以被序列化,只要它们不包含对不可序列化实体(如Lua协程或原始userdata)的引用;但是,如果userdata被包装在具有read()和write()方法的表中,则可以被序列化。
神经网络包:nn
nn包旨在构建神经网络架构。它由共享公共Module接口的模块化对象组成,其中forward()和backward()方法分别支持前馈和反向传播。这些模块可以使用Sequential、Parallel和Concat等复合结构组合,以创建特定任务的图。Linear、Tanh和Max等基本组件作为构建块包含在内。这种模块化接口提供了一阶自动微分,使研究人员能够在不手动推导梯度的情况下构建模型。
损失函数作为Criterion的子类实现,它镜像了Module接口,具有用于计算损失和传播梯度的forward()和backward()方法。常见标准包括用于均方误差的MSECriterion和用于交叉熵损失的ClassNLLCriterion,这些有助于在典型任务上进行训练。该包还包括一个StochasticGradient类,用于应用随机梯度下降,尽管optim包提供了额外选项,如动量和权重衰减正则化。
附加包和生态系统
除了官方包之外,许多第三方库扩展了Torch的功能,涵盖并行性、异步输入/输出和图像处理等领域。这些包通常通过LuaRocks安装,LuaRocks是Torch发行版中包含的Lua包管理器。生态系统的模块化鼓励了实验,专用工具的可用性使Torch能够适应多样化的研究需求。
应用和采用
Torch在学术和工业环境中都得到了应用。它被Facebook AI研究组、IBM、Yandex和Idiap研究所采用,其中Facebook发布了一组扩展模块作为开源软件。该库还被扩展用于Android和iOS平台的部署,并用于构建神经网络数据流的硬件实现。这些应用突显了Torch在处理现实世界机器学习任务方面的多功能性,从研究原型到生产系统。
遗产和继承
Torch的开发于2017年停止,当时项目转向了PyTorch,这是一个基于Python的移植版本,保留了Torch的许多核心概念,同时利用了Python更广泛的生态系统。PyTorch此后已成为现代机器学习研究的基石,推动了Transformer模型和大规模生成式人工智能系统等领域的进步。作为前身,Torch在张量操作和模块化神经网络设计方面奠定了基础工作,影响了后来的框架。然而,其对Lua的强调限制了其相对于基于Python的替代方案的更广泛采用,这一因素促成了最终的过渡。
影响和传承
Torch的影响超出了其直接继承者。其模块化架构和对灵活性的强调为后续机器学习库的设计提供了参考,其使用C语言支持算法与高级脚本结合的方式为面向性能的框架树立了先例。向PyTorch的过渡将Torch的贡献整合到一个广泛使用的工具中,巩固了其在人工智能软件开发历史中的地位。如今,PyTorch为众多应用提供支持,包括大型语言模型训练和生成式人工智能系统,这些建立在Torch引入的基础概念之上。