背景
问题:公众视角 -> 机器学习是「黑盒&黑魔法」。
一些研究调查表明,尽管机器学习技术以及渗透到了各行各业的应用之中,但公众对机器学习知之甚少。
2017 年The Royal Society对英国普通大众进行采访,发现大部分被试对机器学习“一无所知”。虽然大部分人都知道一些采用了机器学习的科技应用,但是他们不知道机器学习如何运作,就算是比较宽泛的概念也不了解。
另一项调研,对机器学习项目里的 UX 设计师进行了调查,发现他们对机器学习也缺乏常识了解。其中一位被试,TA 把机器学习看做「黑魔法」,TA 表示:“设计师不理解科技的「边界限制」以及如何合理地应用它。”
问题:机器学习从业者-> 缺乏人种多样性 -> 「女性&黑人」是少数派
- 2018 年,在 21 个机器学习学术会议中,仅有 18%的第一作者是女性。
- 黑人在谷歌员工中占比 2.5%。
简介
在油管的ML Tidbits频道,2位麻省AI相关专业的女博士,通过视频来阐释机器学习的整个工作循环周期,内容通俗易懂且有趣,通过此举,她们致力于减少公众对机器学习的理解偏差,以及提升机器学习相关从业人士的背景多样性。
视频传送门:https://www.youtube.com/watch?v=ZmBUnJ7lGvQ
总流程:机器学习生命周期
定义问题(Problem Definition) -> 数据收集(Data Collection) -> 数据分割(Dataset Spit up) -> 模型训练(Model Training) -> 模型评估(Model Evaluation) -> 应用部署(System Deployment) -> 改变世界(Impact the world)!
例子 -> 一个类似朋友圈的 APP
MIT 的博士2位小姐姐,通过介绍一个有趣好懂的例子,来讲解机器学习应用的全流程。
假设: 你有一个点子,想要为朋友们做一个类似微信朋友圈的APP
- 这个 APP,采用机器学习技术(图片分类 -> 人脸情绪识别)
- 根据他们上传的照片,判断TA是不是心情悲伤。
- 如果判断TA心情悲伤,给TA发送提示消息,让TA给朋友打语音电话,或者发送一张萌图给 TA
- 默认假设:看了萌图,你的朋友更容易高兴起来。
问题来了:
- 如何创建这个机器学习应用系统?
- 相应的道德问题有哪些?如何处理?
1.定义问题(Problem Definition)
从点子 -> 应用,需要走过很长的流程啊。
- 定义问题
首先,我们需要定义待解决的问题,明确问题的可操作性定义。
然后,问题明确之后,相关的团队成员才能协同开展工作,整个团队可以围绕着同一个目标,朝着同一个轨道在前进。
根据本次例子中的产品逻辑,使用机器学习术语来表述,这个问题定义该为「二元分类」任务。也就说,我们让电脑来预测情绪,你的朋友上传的照片是否体现了 TA 有着悲伤情绪,这里包含两个情况,也就是两种分类,因此称为「二元分类」任务。
- 问题假设
同时,我们需要对情绪下一个可操作性定义,这样,在后续工作中,我们才能确认数据集图片样本对应的标签,是准确无误的。
比如什么是悲伤,什么是不悲伤,如何定义,如何判断?如果是复合情绪呢?本例中,我们假设人们只有 2 种情绪,悲伤或不悲伤。这样做,牺牲了对复合情绪的考虑。(当然,有人可以既悲伤又高兴,或者看起来悲伤,其实内心狂喜。同时,如果脸部表情不能准确呈现用户内心情绪呢?(根据莉莎.巴瑞特教授的「情绪建构论」)。
- 问题限制
本例中,我们本能地「假设」,根据用户上传的照片(包含 TA的影像),我们可以判断用户的情绪。现实世界中,这个假设成立吗?如何界定对假设的置信度?
总之,模型难以完美,要有妥协。
如果悲伤的人,上传照片之后,收看了萌图,或者得到提示,给朋友打了一通语音电话,心情变好了,那不就是实现了初心吗?
2. 数据收集(Data Collection)
- 第一步:总体定义
从哪些用户总体(Population)收集数据?用来做什么?
若用户总体不具有代表性,那么机器从数据集中学到的特征,也是没有代表性的,实际的模型应用表现,会很差劲。
样本群体需要如何从用户总体中获取,他们之间的相似度及差别是什么?
用户总体数量需要多少,也就是说,多少人你需要考虑顾及到?
- 第二步:特征衡量
你无法管理你不能衡量的东西 – [Morris A. Cohen]
You can’t manage things you can’t measure
考虑下列问题:
- 我们假设,要从总体用户群中手机照片图片,那么,在总体中,他们的照片(自拍/他拍)的质量是否稳定可靠?
- 是否收集其他信息 -> 用户人口学特征(性别/年龄/坐标等)?
- 是否需要收集标签(label)?本例中,图片的标签类别分为悲伤(sad)或不悲伤(not sad)
- 标签如何收集?拍照时做调研,或者找专业人员来手工标注?注意,务必评估标签的准确程度,包括偏差(bias,有些标签存在争议。)乃至错误的比率。
- 样本平衡。每种标签类别都有足够的样本数,以及比例均衡。本例中,悲伤和不悲伤的标签数目应该是五五开。这样,模型才能充分学习到图片中的人物悲伤与否的视觉特征。
接着,数据科学&机器学习工作的脏话累活到了。
这一步叫做「数据预处理」。(以下省略数十万字)
本例中,数据预处理或许是图片处理成为一致的大小和分辨率。
- 数据收集(其他可选方法):
获取开源数据集。例如,我们在网上找到已经处理好的数据集,对图片进行了是否在微笑的标注。为了能处理我们的任务,我们可以->转换标签–>微笑/不微笑 -> 不悲伤/悲伤
同时,需要验证数据是否可靠:
这个公开数据集,是否可信?数据是如何收集的,总体是多少?是否很好的测量?是否适合我们的任务?
有时候,根据手头可用数据及标签,我们会迭代&修正初始的「问题定义」。也就是说,重新定义问题(Redefine Problem)。此外,真实的机器学习工作流,并不是一个顺时针不变的进程,流程有时会根据现实变化,反复回溯修改,这是一个螺旋式进程。
3.数据集分割
数据收集完毕之后,我们需要分割数据集,一般会把数据集分成三份:训练集-验证集-测试集。
训练集:模型学习数据特征的那部分,数量占比最大。类似我们考试时,做的常规习题
验证集:模型做常规习题之后,会做模拟题,比如高考前每月进行月考模拟考,以此来评估日常学习的效果。
测试集:模型学习了训练集及在验证集评估之后,类似于真正一锤定音的高考题目。需要真刀真枪地在一些它没有学习过的题目上,进行预测分类等任务。
4. 定义模型
前期的数据准备好了之后,万事俱备只欠东风。这时候,就是「机器」学习的时候了。
模型结构,需要根据数据类型来搭建。比如,如果你的数据是时序数据(timeseries),那么你最好选择擅长学习时序关系的模型架构。
常见的数据结构类型:
文本数据(text)
结构数据(tabular)
图片数据(image)
本例中,对于图片数据,卷积神经网络是当前最合适的。卷积神经网络的简易应用,参见笔记[旧调重弹—— Fastai-v3版尝鲜之猫狗图片识别(https://www.jianshu.com/p/7f315d0482a4)
模型结构的深度及广度,不是越高级越复杂越好,针对具体的数据集,合适就好。
对于简单的数据集,模型无需太复杂。
对于复杂的数据集,模型不能太简单。
如何微调模型的结构和参数等,目前更多地依靠数据科学家们的直觉经验,更像一门艺术,而非严谨的科学。fastai创始人Jeremy曾解释过,他都是根据经验法则(Rule of Thumb)来选择超参数(HyperParameters)中的学习率(LearningRate)的。
5. 训练模型
- 不同模型,有着不同的步骤来优化表现。例如,神经网络反向传播技术(BackPropagation)来迭代模型各层的权重来优化模型整体表现。
- 通过对比评估在验证集上的表现,我们可以选择最优的模型结构,选择训练时长。(比如,在过拟合之前停止训练。)
6. 评估模型
- 测试集。模型训练完毕之后,我们可以在测试集上评估其整体表现。
- 基准(benchmark)数据集。我们可以在公开的基准数据集上测试,以对比我们与其他模型的性能。别忘了「交叉验证」思维,同时,需要对基准数据集的是否可靠进行评估。
- 衡量模型的指标。针对不同任务,我们需要选择不同的指标(metrics)来评估模型。如果你了解「真阳性(True Positive)」、「False Negative(假阴性)」等概念,那么,在本例中,你应该明白,模型预测时出现了太多的「假阳性」的错误判断,并不是那么重要,因为如果你的朋友并不悲伤,但是给 TA 发送萌图,也并不影响,这是锦上添花。但是如果模型有太多的「假阴性(False Negative)」,那就表现差劲了,因为,我们不想错失那些上传了在图片里表现悲伤的朋友们。所以,我们更密切关注「 假阴性率(False Negative Rate)」这一指标。
- 评估模型在不同用户群(sub-group)中的表现,我们需要保证,在不同的用户分群中,模型的表现都是一致的。比如,如果训练集的图片,大多来自女性,那么在预测其他性别朋友的图片时,模型的表现会很差。在部署模型前,我们需要测试,及时发现这些表现不均衡的问题。
7. 应用部署
- 第一步
为了确保模型高效及正确地部署到现实世界,请考虑模型的外在呈现:
用户交互界面如何设计?模型预测结果如何在界面中视觉化呈现?
如何让用户上传图片?是否需要考虑相应地调整亮度?
如何获取用户实时反馈:如果某些图片中的用户情绪,我们的模型预测错了,如何收集这些错误的例子?
- 第二步
假如,这个产品原型冷启动之后,在朋友之间大受欢迎,我们想要提升(Scale it up)用户规模和群体。请考虑如何 适配新增的用户群:
- 新增用户群:其他用户群?比如,老年人&小孩,模型是否还适用?是否需要新增关于「老年人」&「小孩」的数据集?甚至邀请「老年人」来做用研测试?
- 与利益相关者沟通:随着应用的影响力范围规模增大,更多的利益相关者会参与进来,如何协同平衡各方的利益?
- 用户隐私&数据知情权:用户数据如何收集?如何使用?本例中,最开始,我们假设用户都知道了他们的图片会被收集,但如果我们提升了用户群体的规模,我们也需要让其他用户对自己的隐私数据是如何被收集/存储/处理的。
当模型在现实中运转时,我们需要密切监控的表现,保证其朝着积极的方向在运行。
如果出现故障bugs或社会争议(比如,有人认为YouTube推荐系统存在政治偏见及用户内容的刻意诱导。Was this Google Executive deeply misinformed or lying in the New York Times?)
结尾鸡汤:记住,世界在变,新问题每天降临,让我们用机器学习的集体智慧,来拥抱不确定吧。
Changelog
2019.5.13 init
2019.5.15 add content
2019.5.17 finish draft
2019.7.06 edit
2019.7.09 publish