2.5 机器学习框架的编程范式
2.5.1 机器学习框架编程需求
机器学习模型的训练是其任务中最为关键的一步,训练依赖于优化器算法描述。目前大部分机器学习任务都使用一阶优化器,因为一阶优化器的方法简单易用。随着机器学习的高速发展,软硬件也随之升级,越来越多的研究者开始探索收敛性能更好的高阶优化器。常见的二阶优化器,如牛顿法、拟牛顿法、AdaHessians均需要计算含有二阶导数信息的Hessian矩阵。Hessian矩阵的计算带来两方面的问题:一方面是计算量巨大如何才能高效计算;另一方面是高阶导数的编程表达。
同时,近年来,工业界发布了非常多的大模型,从2020年OpenAI GTP-3(175B参数)开始,到2021年盘古大模型(100B参数)、鹏程盘古-α(200B参数)、谷歌switch transformer(1.6T参数)、智源悟道(1.75T参数),再到2022年百度ERNIE3.0(280M参数)、Facebook NLLB-200(54B参数),越来越多的超大规模模型训练需求使得单纯的数据并行难以满足,而模型并行需要靠人工来进行模型切分,耗时耗力,如何自动并行成为未来机器学习框架所面临的挑战。最后,构建的机器学习模型本质上是数学模型的表示,如何简洁表示机器学习模型也成为机器学习框架编程范式的设计的重点。
为了解决机器学习框架在实际应用中的一些困难,研究人员发现函数式编程能很好地提供解决方案。在计算机科学中,函数式编程是一种编程范式,它将计算视为数学函数的求值,并避免状态变化和数据可变,这是一种更接近于数学思维的编程模式。神经网络由连接的节点组成,每个节点执行简单的数学运算。通过使用函数式编程语言,开发人员能够用一种更接近运算本身的语言来描述这些数学运算,使得程序的读取和维护更加容易。同时,函数式语言的函数都是相互隔离的,使得并发性和并行性更容易管理。
因此,机器学习框架使用函数式编程设计具有以下优势:
(1)支持高效的科学计算和机器学习场景。
(2)易于开发并行。
(3)简洁的代码表示能力。