1.2 软件工程方法
机器学习作为一门交叉学科,天生具有计算机科学特性和软件工程的属性,需要在理论方法指导下进行多次实验调优。在这个过程中,机器学习借助软件技术和人为参与的权衡选择较优的效果。遗憾的是,机器学习理论并没有明确告知待解决的问题与学习算法的对应关系,以及具体哪种算法最好或算法的最佳参数是什么。此时,我们可以尝试自己熟知或喜欢的学习算法,也可以尝试相关图书或论文中对某类问题推荐的算法,当然也可以试用机器学习比赛或GitHub中知名的算法。实践中,我们会将企业现有的基础架构和数据环境作为算法选择的依据之一,这是个实验的过程。我们凭借经验选定的算法并不一定在当前的数据集下表现依然良好,即使同一算法在不同的数据集上表现也有所差异。接着,凭借类似经验进行算法调参,同样,之前表现良好的算法参数在新数据集上往往表现不尽人意,我们只能遵循一定的调参策略进行实验。
以上过程我们需要多次实验,以数据驱动。
从数据层面描述机器学习的过程就是一个数据驱动的过程,数据完全决定了机器学习的最终效果。
此时,便利的机器学习系统、软件包、工具和标准的流程化是高效构建机器学习模型的关键,其中的每个部分都有软件工程的影子。
一个可见的趋势是机器学习的自动化。以上描述的数据驱动本质上是一个搜索过程,恰好可以利用自动化,包括自动化变量分析处理、特征选择、自动超参数优化、多模型选择及集成、模型报告等。这衍生出了机器学习另一个较大的主题——自动机器学习(Auto ML)。自动机器学习主要研究在时间、存储空间、性能的约束下机器学习过程自动化的问题。想必在未来,机器学习中人工参与的部分将逐渐减少,机器学习系统将自动完成许多分析和预测任务。第7章将介绍特征衍生自动化方法和技巧,第8章将开发自动特征选择的工具,第12章将介绍自动调参方法和XGBoost自动调参开发示例。
实现自动机器学习的过程就是机器学习软件工程方法的落地过程。爱因斯坦曾经说:
“理论上,理论和实践是一样的,事实上,它们并不是。”软件工程方法实际上是将计算机科学理论应用于实践的指导原则,它同样适用于将机器学习理论应用于实践的这一过程。机器学习立足于计算机科学,与其密不可分。我们可以说机器学习实际上是算法、软件技术和人工权衡的有机结合。对于一个具体的机器学习项目来说,整体的解决方案(包括算法、参数、实验、工程)才能凸显机器学习从业者的综合能力。
此外,随着对机器学习、人工智能的接受度普遍提高,越来越多的企业开始应用人工智能,部署机器学习模型,建立普适的和垂直领域的机器学习系统,最终得到一款产品或产品中的一个核心模块。企业的重心有从研究机器学习算法转向应用落地的趋势。机器学习从业人员的工作内容也有从单一的建模或算法延伸到产品前端数据定义,再到后端的模型上线与监控、算法实施和集成的趋势。实际工作中,我们面临的大部分问题是工程问题,而不是算法或理论问题,更多是对业务、流程、架构与过程的仔细推敲和精益追求。从互联网领域“全栈工程师”的产生过程来看,很有可能出现机器学习领域的全栈工程师。
基于这些点,那些具有较好的基础设施(良好的数据平台、机器学习平台和工具、规范化的机器学习项目流程等)的企业或机构更容易在人工智能浪潮中获益。
纵观IT发展史,技术更新迭代再快,软件开发背后的知识体系和方法论却万变不离其宗,软件工程就是经过时间考验而沉淀的实践方法。