作者 | 周明耀
前 言
参考塞缪尔. 约翰逊(18 世纪英国文学评论家、诗人,著有《英语大辞典》、《莎士比亚集》)的思路,“当一个人厌倦了学习技术,那他肯定也厌倦了 IT 行业,因为只有持续学习,才会有 IT 行业带给你的一切,包括金钱”。这是 IT 行业的实际情况,没有哪个人可以靠吃老本长期生存,AI 技术更是如此。最近我在读《伦敦人》,书中讲述了 200 多位新老伦敦人对于伦敦这座城市的切身感受和故事,感觉应该就 AI 技术人才的成长写一篇,因此,有了本文。
非 AI 专业技术人员转型 AI 技术,或是作为一名学生学习 AI 技术,对每个有这样诉求和经历的人来说,可能都希望能够看到类似经历的人,给出自己的真实经历分享。
今天,我找了几位我的同事,包括我在内一共五位,我们都很有代表性,逐一介绍一下:
麦克周:2004 年毕业于浙江大学,计算机专业硕士,15 岁开始学习编程,使用的是 Basic 语言,读书期间主要写 C 语言,2004 年毕业时写的是 JSP 代码(一种将 Java 语言嵌入在 HTML 代码中的编写方式),工作几年后转入分布式软件技术,再后来进入大数据技术领域,最近的 4 年时间从事 AI 平台产品研发工作。
Mr Qiu:算法相关专业硕士,工作五年时间。2013 年进入杭州电子科技大学学习人工智能和电子信息技术,硕士方式主要以嵌入式和图像算法为主,毕业后进入安防行业的大华公司,再到华为,一直从事计算机视觉、算法移植优化、训练框架优化、机器学习等工作。
Hannah:曼彻斯特大学电子电气工程本科,伦敦大学学院数据科学硕士,毕业后加入华为公司,已经工作两年。华为公司作为国内私有云的先驱厂商之一,在数据科学这一领域有很多沉淀。因此,工作期间有机会参与多维度的工作,从算法研究落地,到平台开发,再到 POC 项目开发、现场建模 PK 等,在短时间内加深了对数据科学这一学科的认知。
Doctor Zeng:国内某重点大学博士,2018 年华为 Special Offer。本科毕业工作五年之后回到学校,继续自己的硕博攻读。硕士期间开始协助导师做项目,接触 IT 行业的十余年时间,具备丰富的信息系统项目开发与管理经验、人工智能领域的项目实战经验,并作为实验室技术骨干参与若干国家级、省部级项目。博士期间的主要研究领域是 NLP、知识图谱,现担任华为某算法建模团队首席专家。
帆哥:20 年 ICT 工作经验,4 年信号处理机开发,5 年企业数通产品研发,3 年操作系统架构设计,3 年大数据分析研究,5 年 AI 产品规划,目前是华为云 ModelArts 首席产品管理专家。
正 文
麦克周
知识不能单从经验中得出,而只能从理智的发明和观察到的事实两者比较中得出。-- 爱因斯坦
作为一位喜欢彻底搞清楚原理的软件工程师,我的每一次转型都在大量阅读和实际操作中完成。我给的建议是根据自己的实际情况,从全局性的到具体技术的书,一本本读,不要急。
我看的第一本书是尼克的《人工智能简史》,这本书几乎全面讲述人工智能的发展史,几乎覆盖人工智能学科的所有领域,包括人工智能的起源、自动定理证明、专家系统、神经网络、自然语言处理、遗传算法、深度学习、强化学习、超级智能、哲学问题和未来趋势等,当然,他不是一本动手教你编程的书,而是给你一个宏观印象,适合 AI 产品经理、CTO 阅读。
如果你觉得还需要进一步拓展自己对技术的全局性理解,我建议你可以读 Stephen Lucci 和 Danny Kopec 一起编写的《人工智能(第二版)》,这本书有点像高校的人工智能相关专业教材,堪称“人工智能的百科全书”,全书涵盖了人工智能简史、搜索方法、知情搜索、博弈中的搜索、人工智能中的逻辑、知识表示、产生式系统、专家系统、机器学习和神经网络、遗传算法、自然语言处理、自动规划、机器人技术、高级计算机博弈、人工智能的历史和未来等主题。
看了全局化的知识后,建议你可以根据自己的实际情况选择书籍,周志华的《机器学习》、Ian 等人合著的《深度学习》、Aston Zhang 等人合著的《动手学深度学习》、郑泽宇等人合著的《TensorFlow:实战 Google 深度学习框架(第 2 版)》、Vishnu Subramanian 的《PyTorch 深度学习》,这些书都是不错的,当然还有其他很多优秀的著作,这里不展开介绍,更多取决于你当前的状态,你是想快速动手训练模型,还是想了解清楚原理,因人情况不同而异。
除了系统化看书学习以外,我最希望的是尽快上手编码、训练模型,动手必须有 IDE 工具的支撑,我不太适应公有云的 IDE,但是又希望使用公有云的强大的计算资源,所以我希望能有工具,帮助完成本地 IDE 能够与公有云平台联动,我讲一个已经实现的案例 -- 如何使用 PyCharm 与 ModelArts 公有云服务联动开发,快速且充分地利用云端 GPU 计算资源。
这里我连接的是某花厂公有云 AI 平台。我们实际上使用一个 PyCharm ToolKit 工具来帮助建立从本地 PyCharm IDE 到 ModelArts 的连接通道,本案例我使用 MXNet 实现手写数字图像识别应用的示例,在本地快速完成代码编写,发布到 ModelArts 公有云完成模型的训练和模型生成,生成的模型可以进一步快速进行部署(本文没有覆盖该步骤)。安装 ToolKit 前需要先安装 2019.2 版本(目前 ToolKit 仅适配该版本)的 PyCharm
下载地址:
https://download.jetbrains.com/python/PyCharm-professional-2019.2.exe?_ga=2.11170941.815358500.1587189937-686177363.1586569505
需要注意,如果已经安装了高版本的 PyCharm,需要首先卸载(自动)已安装的 PyCharm:
下载一个工具 PyCharm-ToolKit-PC-2019.2-HEC-1.3.0.zip,连接本地 IDE 与云之间的链路:
https://www.jetbrains.com/PyCharm/download/other.html
接着回到 PyCharm IDE,打开 Settings:
找到 Plugins,选择一个插件:
重启后看到如下界面:
然后我们需要去华为云申明 OBS 的秘钥:
短信验证码注册成功后,请务必把 csv 文件保存到本机。回到 PyCharm IDE:
注意,需要你重新点击 edit credential 按钮,退出后就能看到打钩了。
这样我们就完成了 PyCharm IDE 与 ModelArts 的对接工作,进入下一步,实际训练一个模型。首先,下载手写字的数据集,下载链接如下:
https://modelarts-cnnorth1-market-dataset.obs.cn-north-1.myhuaweicloud.com/dataset-market/Mnist-Data-Set/archiver/Mnist-Data-Set.zip
登录华为云上传 OBS:
创建完毕文件夹后,接着在 PyCharm 打开工程,填写参数,可以参考 ModelArts 训练模型时填写的参数:
点击“Run Training Job”,右下角是从公有云传回到 PyCharm 的训练日志信息:
训练完成后,训练模型保存在公有云的 OBS 里,你可以自己选择下载或是在云上做推理。
如果有这样的一堆工具,是我们这些实际写代码的人的福音。
Mr Qiu
“某利郡后;颇与郡人相安;日知来四处无虞;早收中熟;觉风雨如期;晚稻亦可望;惟是力绵求牧;来日方长。”-- 宋·文天祥《与洪度瑞明云岩书》
在介绍如何转型进入 AI 领域之前,先介绍下个人的经历。从接触 AI 到工作至今大概 7 年,我把它分为 3 段:(1)在校学习期;(2)实习转型期;(3)工作成长期。在校期间学的比较广,主要方向在人工智能、高频电子电路、传统图像算法、嵌入式系统等,这个阶段通过以赛促学方式,取得了一些不错的比赛成绩;实习期间有幸参与到某重点项目的“以图搜图”模块,积累了大量的图像、人工智能方面的实战经验;毕业参加工作后,主要围绕计算机视觉、算法移植优化,深度学习框架优化,机器学习等进入研究和实践,有了一定的全栈 AI 经验。偶有感慨,虽然资质平平,但好在目标明确,持续奋斗,也遇到很多值得感谢的人,才有机会在这里介绍下经验。
2012 年,一年一度的 ImageNet 图像识别比赛,CNN 网络 AlexNet 以碾压的分类性能超过第二名(SVM 方法),从此深度学习开始吸引研究者的注意。但真正吸引工业界去大规模投入深度学习,大概到了 2015 年到 2016 年,这个时候,贾扬清在博士期间开源了深度学习框架 Caffe,谷歌开源第一版的人工智能引擎 TensorFlow,Caffe 曾一度以其优秀的代码架构,便捷的开发接口等优点受到广大研究者和工程师的推崇。早期做 AI 开发,很多工具都不完善,需要造轮子,这里的轮子主要包括离线训练时需要开发图像标注工具、需要修改深度学习框架实现相关算子的前向和后向计算、实现卷积中间特征可视化来调优模型等,在线部署时需要自己实现算子的 FP16 和 int8 计算,需要自己写 CUDA 代码等。
现在,进入 AI 领域的开发者不再需要做这些轮子,真的很幸福。
图像标注工具 LabelImg 等已开源,可以直接拿过来使用;TensorFlow 迭代到更加利于开发者使用,提供了很多优秀的示例,可视化工具和推理部署工具等;随着 PyTorch 的逐渐崛起,已经可以与 TensorFlow 平分秋色,开发者有了更多的选择;英伟达推出了基于 GPU 的推理加速工具 TensorRT 可以免费使用,华为也推出了基于自研芯片达芬奇的推理加速和框架 MindSpore,以更高密度的算力丰富开发者的选择。
随着巨头公司全力投入 AI,AI 的工具也越来越完善,开发者可以将精力集中在模型开发以及业务的实现上,这是一个 AI 的好时代,也是 AI 开发者的好时代,我想现在开始转型 AI 正逢其时。
再回头看看这些年的 AI 发展历程和踩过的坑,以个人的角度提炼出传统软件开发转型到 AI 开发工程的方法,希望对大家有帮助。暂且把这些总结为 3 个部分,分别为(1)动手跑起来、(2)原理掌握起来、(3)推理部署起来。
动手跑起来:
这个阶段就是通过现有开源的优秀项目进行学习,这里我推荐 darknet YOLOv3,项目地址 https://github.com/pjreddie/darknet。该项目框架基于 C 语言实现,框架清晰易于调试。初学者在下载到项目代码后首先要将该项目跑起来,通过跟踪数据在整个框架的流动大致掌握 AI 是怎么工作的,可以解决什么样的问题。同时在跑通搭建环境的过程中,可以快速掌握 GPU 跟深度学习框架是怎么结合起来工作的、深度学习框架在运行过程中需要有什么依赖。
原理掌握起来:
作为优秀和经典的端到端检测算法,首先推荐以 YOLO 进行学习,从推出至今已迭代到第四版本。可以从第一版本 YOLOv1 开始进入,再到第四版本 YOLOv4,掌握 YOLO 是如何演化的,分别作了哪些改进,改进为什么会起到性能提升的效果。网上已有大量优秀的博客,开发者可以自行去搜索阅读。结合动手跑起来阶段的代码调试,相信会进步的更快。研究完成 YOLO 演化过程后,有兴趣可以再去研究下 R-CNN 系列的检测算法,R-CNN 系列算法区别于 YOLO 是召回率高、准确率高,但是耗时,所以综合考虑工业界一般用的更多还是 YOLO。
推理部署起来:
推理部署就是将深度学习框架训练好的模型部署到 PC 或者端侧设备进行推理,解决实际的业务问题。这个过程主要包括模型性能调优,GPU 或者 D 芯片的适配,业务逻辑的实现。对于模型性能调优,主要是将模型推理原有的 FP32 量化成 FP16 或者 int8,从而实现推理加速,实现实时推理。这里推荐英伟达的 TensorRT 和华为的 D 芯片加速模块,它们会对模型做更高阶的优化,除了量化,还会有模型网络层之间的算子融合、kennel 优化等,具体资料可以到相应的官网去搜索。模型优化完成后,通过相应的推理引擎和业务逻辑实现去完成模型的在线推理,完成真正的工业化,解决实际问题,这也是 AI 真正为社会产生价值的部分。
通过这三个部分的学习,日积月累,相信你也会慢慢成为 AI 领域的资深算法工程师。
Hannah
既然我已经踏上这条道路,那么,任何东西都不应妨碍我沿着这条路走下去。——康德
大家好,在本文的五人组里,我是一个职场小白。作为一个没啥社会经历的小白,我的大部分人生是在学校度过的,我这边就主要介绍我上学的经历吧。
本科的时候,我选择了电子电气工程这个专业。当时对于专业和工作没有什么大的概念,只是觉得理科生就该选一个“带电”的专业,我就从长长的专业列表里选了这个最多“电”的专业,然后背着我的小书包,开开心心到了曼彻斯特开始我的大学生涯。
开学后,果然和我想象的不一样,这种工科类的专业对学生的动手实验能力要求很高,我在第一次上实验课,看到一堆的实验器材的时候就懵了。当时场景对我来说是挺可怕的,同组印度小哥听了实验老师给的要求后就咔咔一顿操作,我在旁边愣住了,连把他的操作录下来后面自己回去学习这么重要的事情都忘了。在他得出实验结果后,我才小心翼翼地求教这些操作是怎么一回事。小哥哥是热心肠,用快速的印度口音英语给我解释了一遍。但是我学的英语听力,只听过英音和美音,对于印式英语实在是陌生,我只能厚脸皮让小哥再说一次。他在第三次的时候,终于失去了耐心,指着教材的一段让我读。我这才意识到,他一直都在说这段话,只是我没听懂,包括他指着读的那一次。于是,第一节实验课我是在查各种仪器名称、和同组印度小哥的高速咖喱英语解释的过程中,度过的。感恩团队没有放弃我,让我顺利度过我的大一。
到本科选择毕设方向的时候,我灵机一动,选了 DSP(数字信号处理)相关的一个降噪耳机的项目。用下面的图来解释下原理:
一般主动降噪耳机内部会有一个小的麦克风用来采集外界的声音,通过计算,可以生成一个完全相反的音波,然后和外界的噪音叠加,使得噪音消减。
整个项目只是按照老师的教材和给的参考书上面的操作,实现了一个 FIR-LMS 算法的滤波器。算法虽然简单,但是实现效果还蛮好的。我额外做了一套麦克风的小硬件用来演示成果,在麦克风旁边用手机播放白噪,同时说话,最后从音响出来的声音是有部分降低噪音的效果的。
在做这个项目的时候最大的感触就是,这种算法不仅是可以在科研界获得一些成果,更多的是,在应用到生活中的时候,可以给我们这些普通人很多的便利。
当时很中二的我就会想,如何能接触到更多的这种科技,甚至于参与这种科技的落地。这个时候,一个动画片告诉了我答案。《超能陆战队》里的高级人工智能机器人大白,他是一个近乎全能的家庭医生。这个是 AI 的力量,在当时几个研究生的 offer 里,最终选择了数据科学作为我的研究生方向。
研究生阶段起步并不轻松,从电子电气的方向转到数据科学这个学科并不是非常的顺利。数据科学这个专业是统计系和计算机科学系合作办的,也就是说,这个专业对于统计学和计算机科学的要求是比较高的。当时老师也列出了长长的一串参考书目,印象深刻的是 PRML(《模式识别与机器学习》)和 BRML(《贝叶斯推理和机器学习》)。大家有兴趣也可以去看看,国内也有很好的书籍,推荐李航《统计学习方法》和周志华的《机器学习》。
这个专业依旧也是非常重视我们的实际建模的技能,几乎所有的课程都有 30% 以上的分数是需要我们去建模。其中有一门是应用机器学习,这门课要求我们在 Kaggle 上参加比赛,并用我们的名次来给我们打实验分。一个月时间内,我们组参加了三个项目,其中有一个我们拿到了前 4% 的成绩。Kaggle 上面的项目很适合初学者练手,在学习了一堆理论知识后,初学者很多时候会对这一堆数学公式很陌生,不知道他们的实际效果。在 Kaggle 上的比赛给了初学者一个接触真实数据并用来建模的机会,参加这些比赛,还能根据自己的结果了解当前学习的模型在解决真实问题的时候,能否在排名中靠前,是否是真的比较好的解决方案。这让我在短时间内,对我在课堂上学习到的理论有了更深一层的认识。即使我们对于数据的实际含义并不明晰,即使数据的含义是经过加密处理的,但是还是可以使用一些机器学习技巧建模,对结果进行预测。Kaggle 里的 Titanic 这个项目,也是很多老师选择给学生进行数据分析入门和机器学习入门首选项目,有兴趣的人可以去实际体验一下。
学术界和工业界对模型对要求和应用是不一样的,为了更加了解实际的建模过程,我在毕设的时候,选择了学校和公司合作的项目。毕设项目是我第一个数据科学方面的实习,为华纳音乐公司做一个简单的相似歌手推荐和一份歌手在英国巡演的最佳城市路线图。在这个项目中,我接触了真实的客户数据,并和公司合作,尝试在数据中挖掘更多的关联。同时我也在挖掘更多的可能,在 Kaggle 上参加了另一个 NLP 类的比赛,判断两个短文本的相似度。这些项目结束的时候,我的研究生生涯也结束了。
回国后,我休息了一段时间就加入了华为公司。在华为公司,我这边第一个大数据相关的项目是 PyTorch 大规模加速训练,类似于华为云上面的 MoXing,但这个是基于 PyTorch 的一个优化。在这个项目中,我有机会接触到深度学习计算中较为底层的一些概念,并对 GPU 之间对通信有了了解。随后,为了给平台上增添更多的模型,我有机会更深一层去了解模型的架构,复原了当时很流行的 MobileNet 的效果。接着学习并在我们的产品上成功嵌入了 R-CNN 系列的目标检测算法。
在这一段深度学习的经历后,我又投入了我们产品的机器学习的平台和基础算法实现部分。我在华为云嵌入了 LightGBM 算法,并对我们机器学习平台进行了一些优化的工作。
接着,我主导了某国家级单位的算法模型 POC 项目和国内某大行的信用卡中心算法联创项目。再次接触到真实到数据,并针对数据进行建模的工作。这两个项目都是风险控制类的项目,在真实的数据中建模真的十分有趣。每一次使用不同行业的数据进行建模,都像是对另一个行业有了全新的认知。在这期间,我还有机会站在国外的论坛上,用英文给 VIP 客户介绍一些机器学习的科普知识。
在我短短两年的工作中,我尝试了专业范围内所有的工作。我现在还是觉得我的专业很棒,他帮我打开了新的世界。
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 工程师、数据科学家、应用工程师。
具体展开讲:
1. 算力—> 普惠(面向 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 技术。
文章来源AI前线