Doctor Zeng
一寸光阴一寸金,寸金难买寸光阴
–《增广贤文》
作为一位有很多年实际工作经验的计算机科学专业博士,我就直截了当讲讲自己对建模流程的理解,以及对应的实际案例。
对于 IT 界的从业人员而言,从事传统信息系统项目开发的项目经理、工程师,可能大多数都被这个时髦的名字所吸引,但却不知如何下手打造一个高大上的 AI 项目,就像古代的杨子,遇见了歧路便只知道蹲下来哭泣。好在这是一个最美的时代,我们不用再望着千百条路不知如何下脚,大量头戴智慧光环的科学家与工程师们,早已为我们打下了牢固的基础,出现了许多连业余人员都可以快速上手的 AI 建模平台。
说到机器学习,可能很多人会望而却步,认为需要掌握非常高深的数学知识和各种晦涩难懂的理论。幸而不幸,专业的 AI 人员确实需要掌握牢固的数学知识,也需要精通机器学习的各种理论,但对于构建一个 AI 项目却不一定要精通这些知识。这里我会从一个简单场景逐步铺开,帮助大家了解一个典型的机器学习项目构建过程。
所谓众生熙熙皆为利来,那我们就拿金融业中的场景开刀。金融业可能是大家非常关注的一个领域,就连穷得走漏了风声的我,也略微知道几个金融业术语,比如信用卡欺诈。既然第一个冒出的念头是信用卡申请欺诈,那就听从内心的声音,让我们以信用卡申请欺诈检测为例聊聊 AI 项目的构建过程。
万事开头难,然后中间难,最后结尾难。对于很多人而言,AI 项目似乎就是这种感觉,总是让人难以捉摸。有人说,AI 三要素是“数据”、“算力”和“算法”,但我认为还有一个要素也不可或缺—“业务”。与学术研究不同,工程项目通常是面向特定的业务场景及特定的业务目标的,平时我们在构建 AI 项目的过程中,总是习惯性地把整个过程划分为数据处理、特征工程、模型训练、模型推理及模型部署等过程,但其实对业务的分析与理解贯穿项目始终。一位前辈说,以他从事 AI 项目开发的经验,理解了业务、有了充足的数据、找到了合适的算法,这个项目便十拿九稳,其中吃透业务是至关紧要的一步,我深以为然。
既然业务理解会贯穿始终,那么我们首先来谈谈业务理解。简单地讲,业务理解就是要去弄清楚我们要做的事(业务常识)、这件事的现状(现有资源)以及要达成的目标(业务目标)等。对于信用卡欺诈检测项目而言,除了项目准备、资源准备等前期工作外,首先需要做的就是深入理解信用卡业务,知道什么是信用卡申请欺诈、为什么容易出现信用卡申请欺诈、我们拥有哪些可用的数据资源,以及信用卡欺诈检测系统要达成的目标,等等,然后才去思考如何做信用卡申请欺诈检测。业务理解的过程,往往需要业务专家的深度介入,需要算法建模人员与业务专家的密切配合。
在理解了业务需求后,对数据的获取、分析及处理就成为了无法绕过的重要步骤。数据的获取相对容易理解,简单点说就是在合法合规的前提下,尽可能多地收集到与业务问题密切关联的数据,比如信用卡申请人在申请信用卡过程中填写的个人信息、人行征信报告、第三方机构的信用分析报告等等,均可作为信用卡申请欺诈检测系统的输入数据。数据分析的主要目的是认识数据并从数据中提取有用信息,这又是一个一言难尽的大范畴,工具五花八门,手段也多种多样,甚至贯穿着整个 AI 项目构建过程。
一般而言,从不同渠道获取到的数据,其质量良莠不齐,充斥着大量的冗余、重复、缺失、异常以及不一致的数据,很难直接用于 AI 模型的构建过程。冗余数据的判定需要结合业务分析、相关性分析等手段,通常包括在业务上无效的数据,或与别的数据高度相关的数据等,这类数据与重复数据的处理方法很简单,简单粗暴地删除即可;缺失数据的处理方式有很多种,通常有简单删除、特殊值填补、相关数据衍生等常规方法,以及热卡填充、聚类填充、基于简单机器学习模型预测的高阶方法等;而异常值的处理,需要采用箱型图、三西格玛准则、DBSCAN 聚类及孤立森林等方法进行分析,识别出数据中的异常值后,按照缺失值的处理方式进行处理;不一致数据主要指那些意义相同但表示方式不一致的数据,比如大小写混用、日期格式不规则、地址不规范以及单位不统一等,这类数据只需要结合数据规则进行统一规整即可。
数据规整后,通常需要对数据集进行切分。当数据量比较大的时候,可以切分出训练集、验证集与测试集,直接使用训练集训练模型,用验证集确定最佳的模型参数,用测试集评估模型性能;当数据量较小的时候,通常不切割出专门的验证集,而采用交叉验证的方式确定模型参数,以确保模型得到充分的训练。信用卡申请欺诈检测数据,往往总量特别大,但其中真正发生了欺诈行为的数据却很少,即存在非常严重的数据不均衡问题。因此,在数据集切分过程中,要确保欺诈类的数据能够以一定比例进入到各个数据集中。下面这张截图包含数据分割算子的平台。
数据处理完成后,便进入了复杂精巧的特征工程阶段。在传统的机器学习类项目中,数据处理和特征工程具有极高的地位,甚至有人提出数据和特征决定了机器学习的上限,而算法和模型不过是逼近这一上限而已。在我们的实践中,数据处理和特征工程的整个过程至少占据了整个项目的百分之七十以上的开发人力,通常还需要在建模过程中回过头对特征进行反复打磨。下面这张图是特征工程工作流截图。
终于,用于建模的数据准备好了,我们可以开始进行高大上的建模工作了。我更乐意把这个过程叫成模型工程,涵盖了模型选择、模型训练、模型评估和模型推理等子过程。模型选择的过程,通常既要用到很多机器学习的基本功,又需要对数据、业务等有深刻理解,还可能需要一定的建模经验(别人的经验也是经验)。
我们知道,机器学习任务通常可以根据数据集是否有标签而划分为有监督、无监督或半监督等类别,根据预测的数据是离散值还是连续值又可以划分为分类问题和回归问题两类。对于信用卡申请欺诈检测这个问题而言,最简单的处理方式就是把它当成有监督的二分类问题,即我们只需要判断用户发起的一个申请是或不是欺诈申请。现在我们用得比较多的是 LGBM、XGBoost、RF 等,如下图所示。
模型选定后,就进入模型训练、推理和评估的过程了。模型的训练过程就是要把准备好的训练数据喂给模型,让模型以参数等形式学习到数据中蕴含的规律和规则等。通常,在这个过程中,你要设置好模型需要的各类超参数。现在各类开源的机器学习库、便捷易用的机器学习平台俯拾皆是,大部分情况下,我们并不需要从零开始构建一个机器学习模型,只简单地做个“调包侠”调一下各种开源机器学习包或者在机器学习平台上拖拽几个算子即可。模型推理的过程很好理解,就是把测试集中的数据喂进训练好的模型中,让模型预测出结果即可。比如对于信用卡申请欺诈检测问题而言,就是将待预测的数据丢进模型中,由模型给出每一条数据对应的预测结论。模型评估过程则是通过各类指标对预测结果进行评估,度量预测结果与真实结果之间的差距。对于分类问题而言,常见的有精确率、准确率、召回率、F1 值等度量指标,对于回归问题而言,常见的有 MAE、MSE 等度量指标。
ModelArts Miner 平台评估算子结果显示界面截图
模型训练、推理和评估过程,甚至包含数据处理和特征工程过程,可能需要反复调整与锤炼,但只要功夫深,金箍棒也能磨成针,你终究会得到你想要的。好了,我们假设你已经得到想要的了,你的模型也能一定程度地预测信用卡申请单是否存在欺诈了。至此,黎明的曙光终于照亮东方的长空,天边也出现了一丝鱼肚白。现在你要做的,就是让黎明来的更猛烈一些,把你的模型部署到你的业务系统中,让你的数据欢快的畅游在 AI 的管道里,喷出耀眼的烟火。部署到业务系统后,你要不断地审视你的结果,并且根据最新的数据不断地调整与优化你的整个模型。但这时候,已经不是我这篇文章能帮助你的了,你展开雄壮的翅膀,去击穿苍穹,尽情翱翔吧。下面这站图是基于华为云 AI 平台工作流模式,针对信用卡欺诈检测全流程界面截图。
帆哥
天行健,君子以自强不息。
– 《周易·乾》
作为一名资深产品经理,转型搞 AI 后从事了多年的 AI 平台产品设计,我讲讲我对 AI 产品的理解。对于公众认知的 AI 开发而言,大家往往想到的都是算法开发,其实对一个商业落地的 AI 开发过程,会涉及到很多不同方面,它不仅仅是算法开发,还会涉及到算力、数据、迭代优化等环节。 对于 AI 的商业化落地中, CTO 们会均衡考虑到三类方面的资源投入,不仅仅是 IT 基础实施还包括工程师投入:
算力 –> 普惠;
数据 --> 模型;
算法 --> 落地; 每一个环节涉及到的人力投入不同,大致会涉及到 IT 工程师、数据科学家、应用工程师。
具体展开讲:
算力—> 普惠(面向 IT 工程师)
对于 AI 开发而言,如何利用好算力资源,提升资源利用率是目前特别重要的工作。往往算法工程师并不擅长这些事情,需要有专业的系统级工程师来帮助是实现,从集群的搭建、运维、固件运维、底层算子优化、分布式调优,以及大量的框架维护等方面,另外面向不同部门之间的资源管理也是 IT 工程师需要关注的内容。对于简单开发而言,自己用开源搭建搞搞是可行的,但是一旦需要大规模的商业化,需要一个有个比较好的平台尤为重要。
数据 --> 模型(面向数据科学家)
对于 AI 建模,本质上面是基于数据去生成模型的过程,那么一般来说,初始 demo 快的几天就可以出来,但是到真正落地的时候,少则花费算月,多则上年。这个过程中涉及两类的大量投入,一类投入获取训练数据,从数据收集和标注端到端,另一类投入不断模型迭代优化上,涉及到大量的领域技能。
训练数据:面向通用类的场景,会涉及大量的数据标注的工作,这会花费大量的标注人力,对于一般场景下,普通的人员就可以标注,但是面向复杂场景下,都需要专业人士去标注,如医疗影像类场景,一般人都标注不了。所以对于专业领域的标注,以及大量的数据标注下,有一个非常友好的自动化标注及数据难例的算法能力,尤为重要。
迭代优化:模型建模过程中,商业场景下,数据科学家建模过程中,更多的使用成熟的论文和算法,围绕具体的业务场景,结合数据的情况,来选择性建模,并且随着不同环境变化情况下,不断的调整算法的设计和组合优化,从而达到最佳的算法效果。这个过程中涉及到大量的场景理解。对于开发模型而言,有一个很好的案例库,能快速找到场景化的沉淀领域知识,是非常有帮助的。
算法 --> 落地(面向应用工程师)
以往大家觉得算法落地就是一个类似软件开发的集成过程,其实对于 AI 类的应用并非那么简单。一般非常通用类的场景下,集成已有的模型去做一些识别比较成熟,如语音识别。但是往往商用类场景下,往往场景的适配度都不够好,虽然业界都在讨论万物识别的可能,但是都并不如意。所以从对于算法实际落地而言,都需要基于实际情况去不断优化。由于需要迭代优化的过程,那么应用工程师就必须要围绕思考场景下部署与训练的业务通路和方便性。一般数据科学家和算法工程师都是比较稀缺的,让数据科学家和算法工程师到每一个现场去做调优实施是不可行的,大量的现场实施工作必须有大量的应用工程师来完成。面向应用工程师去自优化模型并且不断迭代和调整模型的精度将是以往软件工程不太发生的问题。
所以这往往也需要一个系统体系化的平台,去支撑业务场景的快速迭代,从而提升应用工程师的效率。
从近 20 年的自身工作经历来说,商用落地一个 AI 业务其实是一项最复杂的系统工程的事情。它不仅仅是一个单独的算法开发这么简单,围绕商用 AI 落地的所需的相关技能特别多。
1、从 IT 工程师角度上,他需要聚焦资源效率和成本做不同的考虑,围绕底层资源管理、系统架构设计、分布式优化、资源调度管理、IT 建设设计、端-边-云的部署与简便维护等做相应的设计,从而能很好的支撑算法应用落地;
2、从数据科学家角度上,他不仅仅要懂得去开发一个算法和参数优化能力,还要对行业场景做深入理解,具备行业 Know-how,根据环境和数据的问题,不断迭代和建模,不断调整算法应对环境变化,达成相应的效果,期间会需要关注大量的伦理和道德,包括安全合规,模型的防攻击和可解释性类的问题等;
3、从应用工程师角度上,他不仅仅是一个应用集成,需要理解 AI 应用的不确定性,去选择合适的场景限制,并且根据实际的情况,去适应已有模型的能力。并且还能够有独立进行模型的训练迭代的能力,通过数据科学家预置好的流水线去迭代,自行现场去优化和迭代。从而达到真实场景下的落地。
综述,对于很多商业公司而言,他们更聚焦在 AI 的商用场景上面,往往会忽略 AI 平台的重要性。但往往对于有前瞻性的商业公司 CTO/CIO 们,他们都会考虑 AI 商业落地的时的 AI 平台选择。华为云 ModelArts 平台的初衷也是聚焦在 AI 商业落地的困难孕育而生,结合华为自有的昇腾芯片系统,集合 ModelArts 不断致力于 AI 的普惠。
后记
经过几十年的发展,计算机科学已经成为一门成熟的学科,当前大学计算机系的组织架构图,每个计算机系大多有三拨人:理论、系统和 AI(人工智能)。20 年前的美国计算机圈子曾有一种说法:理论和系统的人互相看不起,但又同时看不起 AI 的人。AI 这几年火了,但曾经也是被压迫者。哲学曾经孕育了科学,但一旦问题确定,就分离成为单独的科学。
正如 Allen Newell 所言,AI 的历史是一串儿对立议题的斗争,如模拟与数字、串行与并行、取代与增强、语法与语义、机械论与目的论、生物学与活力论、工程与科学、符号与连续、逻辑与心理等,在每一个议题下有进一步可分的子议题,如在逻辑与心理下又有定理证明与问题求解等,有争议才有发展的空间。
我相信这个斗争的趋势依然会存在相当长的一段时间,我们只有适应这样的斗争、进步,不断增强自己的技术、迎接新技术的挑战,我们才能保持自己职业生涯的持续前进。因此,你可以利用业界大公司提供的一揽子培训计划,不断加强自己的技术深度,例如华为云面向所有向往 AI 的开发者,设计了一门优质课程《2020 华为云 AI 实战营》,内容包括图像分类、物体检测、图像分割、人脸识别、OCR、视频分析、自然语言处理和语音识别这 8 大热门 AI 领域的基础知识、经典数据集和经典算法的介绍和实践。每章课程都是由华为云 AI 专家精心打造的实战案例,全流程覆盖模型训练、测试、评估,配合代码讲解和课后作业,帮助您掌握八大热门 AI 领域的模型开发能力,转型成为一名 AI 开发者。
作者介绍
周明耀,九三学社社员,2004 年毕业于浙江大学,工学硕士。现任华为云 AI 产品研发总监,著有《大话 Java 性能优化》、《深入理解 JVM&G1 GC》、《技术领导力-如何带领一支软件研发团队》、《程序员炼成记》等。职业生涯从软件工程师起步,后转为分布式技术工程师、大数据技术工程师,2016 年开始接触 AI 技术。
评论