Torch是一个基于Lua脚本语言的开源机器学习库和科学计算框架。它于2002年由Idiap研究所发布,为用C语言实现的深度学习算法提供了LuaJIT接口,是早期研究人工智能和神经网络模型的重要工具。该库的设计强调灵活性和模块化,这促进了它在学术界和工业界的采用。2017年,Torch的开发转向了PyTorch--一个将该库移植到Python的项目,此后PyTorch已成为深度学习研究中的主导框架。
核心包:torch
Torch的核心包是torch包,它提供了一个灵活的N维数组,称为Tensor。该Tensor支持基本的索引、切片、转置、类型转换、调整大小、共享存储和克隆等操作,构成了大多数其他包所使用的核心对象。除了这些结构操作外,Tensor还支持数学函数,如最大值、最小值和求和,以及统计分布(包括均匀分布、正态分布和多项分布),还有基础线性代数子程序(BLAS)操作,如点积、矩阵-向量乘法和矩阵-矩阵乘法。
torch包还通过其生态系统中使用的便捷函数简化了面向对象编程和序列化。torch.class(classname, parentclass)函数创建对象工厂或类,使开发者能够定义自定义数据结构。当调用构造函数时,Torch会用用户定义的元表初始化一个Lua表,将该表转换为对象。通过此工厂创建的对象可以被序列化,只要它们不包含对不可序列化实体(如Lua协程或原始用户数据)的引用;不过,如果用户数据被包装在具有read()和write()方法的表中,则可以进行序列化。
神经网络包:nn
nn包用于构建神经网络架构。它由模块化对象组成,这些对象共享一个通用的Module接口,其中forward()和backward()方法分别实现前向传播和反向传播。这些模块可以通过组合方式(如Sequential、Parallel和Concat)组合在一起,以创建特定任务的图结构。线性层(Linear)、双曲正切激活函数(Tanh)和最大值池化(Max)等基本组件作为构建块被包含在内。这种模块化接口提供了一阶自动微分功能,使研究人员无需手动推导梯度即可构建模型。
损失函数作为Criterion的子类实现,它镜像了Module接口,具有用于计算损失和传播梯度的forward()和backward()方法。常见的标准包括用于均方误差的MSECriterion和用于交叉熵损失的ClassNLLCriterion,这些有助于在典型任务上进行训练。该包还包含一个StochasticGradient类,用于执行随机梯度下降,尽管optim包提供了额外的优化选项,如动量和权重衰减正则化。
其他包与生态系统
除了官方包之外,许多第三方库扩展了Torch的功能,涵盖了并行计算、异步输入/输出和图像处理等领域。这些包通常通过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引入的基础概念之上。