如何优雅地装扮成一个AI专家

2021年10月21日 64 次阅读 本文共4502字,预计阅读时间13分钟

前言

如何能够在你还不是专家的时候假装成一个专家呢?

首先,你要说人话。要用外行能听得懂的语言。很多真正的专家之所以没有被广大外行接受,就是因为他们说的话太过专业,绝大部分的人都听不懂。虽然大家也会认可你的能力,但恐怕下次万万不敢再找这样的专家交流,因为完全不知所云,会对听众的自信心造成一万点的暴击。当然了,项目的实际交付阶段还是要这样的真专家出马的,不然就只能用ppt糊弄人了。

其次,要体现实践的经验。不管你是否真的有实践经验,一定要在交流中把一些相对实在的、接地气的、在实际交付阶段能够发挥作用的point甩出来,这样才能有效加持你的专家身份。众所周知,现在的客户,尤其是大厂的客户见多识广,越来越不好打(hu)动(you),那些只会规划而没有实操经验的顾问生存空间越来越小,极有可能第一次交流就被客户挑落马下。因此,一定要记下几句能够体现实操经验的箴言作为防弹衣。

言归正传,下面就为大家提供一些这样的防护工具,希望有所帮助。

背景

最近参加了一次机器学习的培训课程,该培训的主题是为有一定基础的顾问提供关于开展机器学习项目的进阶知识和要点。几个小时的课程听下来,确实受益匪浅。课程主讲人是有着丰富经验的一线专家,他深入浅出地讲述要点,不夹杂过多的理论知识,非常方便广大咨(da)询(hu)师(you)现买现卖。

这样的课程简直就是咨询、售前技术支持从业者的最爱——说的都是人人都能听懂的通俗语言,并且乍一听起来,还挺有道理,充满着实操过程中的宝贵经验总结。

下面就将一些要点摘录如下,方便朋友们平时打单、交付、吹牛、闲扯时装扮成AI专家之用。

要点

优化指标与满足指标

如果你同时关心多项指标,你可以将其中的一项指标设为优化指标,使其表现尽可能的好,将另外的一项或多项设为满足指标,确保其表现满足要求即可。

对于一个模型来说,可能有很多指标需要满足,但是很难都兼顾到,因此可以将所有的指标分为两类,一类叫做优化指标,另一类叫做满足指标。对于最关心的优化指标,要尽可能地好,而满足指标,只要满足其基本的阈值要求就可以了,以此来降低模型调整的难度。

训练集、验证集、测试集的大小设置

传统做法是70/30分,但是现在往往数据量非常大,例如100万条,那么可能98万条数据做训练集,验证集和测试集各1万条。

现在的趋势是,使用更多数据作为训练集,使用较少的数据作为验证集和测试集,还是不建议不使用测试集,也就是说测试集的存在让人更安心

平时我们做项目,尤其是工业现场的项目极有可能遇到的情况是数据量不足,刚好与上述情况相反。因此,为了充分利用数据,经常采用S折交叉验证的方式,也就是随机将已有的数据分成S个互不相交的大小相同的子集,然后利用S-1个子集的数据作为训练集,利用其余的一个子集作为测试集。将可能的S种选择重复进行,选择出S次测评中平均测试误差最小的模型。

人类水平的表现

(很多场景中)可以认为人类的表现水平就是极限了,即贝叶斯误差。

通过贝叶斯误差就能够帮助数据科学家判断下一步的优化方向。比如,模型的错误率已经接近了贝叶斯误差,那么就应该尝试去减少方差,即缩小模型在训练集和测试集上的表现差异。

对于一个误差不可能为0的问题,有一个好的贝叶斯误差估计,可以很好的帮助你评估可避免的偏差和方差,从而更利于做决定究竟是专注于偏差降低技术 还是方差降低技术

这方面可以作为一个参考,但是对于人类水平的表现,其指标到底是多少,这个要如何才能准确获得呢。查文献?做实验?可能这个建议只能作为某些场景应用的一个参考了。

训练集、验证集和测试集不同分布怎么办

验证集和测试集应该聚焦在你所关心的领域,而训练集有一些不一致的分布,倒是不那么重要。

可以将大量其他分布的数据全部加入到训练集中,而将自己所关心的领域的数据(可能相对很少量的数据)分配到训练集、验证集、测试集中,或者都放在验证集和测试集中。

因为验证集和测试集的数据一定要聚焦在我们所关心的领域,与其保持同分布,这样对于模型的选择和评估才是有意义的

有的时候,我们能够用于训练的数据非常少,那么不妨充分利用一些相关的数据,虽然分布不同,但是放在训练集中也未尝不可。

训练-开发集(training-dev set)

注:所谓开发集,就是验证集的另一种叫法。

当训练集与开发集、测试集不同分布时,为了确定方差是由数据不同分布造成的,还是由过拟合造成的,这是就需要引入训练-开发集。

训练-开发集是从原有的训练集中拿出一小块数据,这样其分布与训练集一致。

在训练集进行训练后,在训练-开发集进行验证,对比其精度的变化,如果变化大,说明模型的泛化有问题,否则,说明先前的方差是由数据的不同分布(训练集、开发集、测试集的数据不同分布)造成的。

这一条经验同样是应对上文中提到的“训练集、验证集和测试集不同分布”而来的。

迁移学习(transfer learning)

深度学习中最有力的方法之一,是有时你可以把在一个任务中神经网络学习到的东西,应用到另一个任务中去。比如,你可以让神经网络学习去识别物体,比如猫,然后用学习到的(一部分)知识来帮助你更好地识别X射线的结果。这就是所谓的迁移学习。

之所以这样的过程是有用的,是因为从大规模的图像识别数据集中,学习到的边界检测,曲线检测,明暗对象检测等低层次的信息,或许能够帮助你的学习算法更好地去进行放射扫描结果的诊断。

所以当神经网络学会了图像识别,意味着它可能学习到了以下信息:关于不同图片的点,线,曲面等等信息,在不同图片中看起来是什么样子的。或许关于一个物体对象的很小的细节,都能够帮助你在放射信息诊断的神经网络中,学习得更快一些或者减少学习需要的数据。

那么迁移学习在什么时候有用呢?当你在你的被迁移的模型中拥有大量的数据,而你在你需要解决的问题上拥有相对较少的数据时,迁移学习是适用的。

不适用的场景如下:如果目标任务有更多的数据,那么就直接针对目标任务建模就好了,不需要再利用一个数据相对少的任务成果了

需要明确的是,迁移学习绝对不是咱们人类的所谓的“触类旁通”的推理与抽象能力。

多任务学习

在不同输出之间,神经网络前面的特征可以共享,那么你会发现,训练一个神经网络做4件事的结果比 训练4个完全独立的神经网络的结果要好。

在多任务学习中,即使一些图像只标记某些对象也能正常工作。

多任务学习的使用条件包括:1、所训练一系列的任务可以共享一些低层次的特征;2、针对每个任务的数据也非常相似;3、在所有的任务之上训练一个足够大的神经网络,这样效果比较好。

实际上多任务学习要比迁移学习用得少得多。

我看到很多迁移学习的应用,你想通过一个小数量的数据来解决问题。你找一个有大量数据的相关问题来学习,然后转移到这个新的问题。多任务学习用的更少,一般在你有大量任务需要完成,你可以同时训练所有这些任务。

端到端深度学习

概念:传统的方式是将输入到输出分成若干个阶段来分别处理,而端到端就是用一个神经网络处理所有的阶段。而如果你的数据量比较小的话,那么通常传统的管道方式(分阶段)比较好。

与传统的分阶段的方法相比,这种方式需要更多的数据。

如果你有中等量的数据,可以采用折衷的方法:例如,输入音频,绕过这些特征,只学习输出神经网络的音素,然后继续其它阶段。

局限:如果你有足够的数据, 也许端到端的方案会更加好,如果没有足够的数据,目前来说在实际应用中这不是最好的方法。但是,也可以尝试将一个问题分解成两个问题,如果这两个问题都是有足够训练数据的。

总结一下:具体用哪种方式(分阶段还是端到端)由数据情况决定,如果有很多端到端的数据,那么就用端到端的方法,否则,需要把整个问题分解成若干个阶段,而每个阶段的问题都有足够数量的数据来训练。端到端深度学习能够非常有效,并且简化系统,但是它不是万能的,并不总是那么有效

如何确定是否使用端到端深度学习

端到端深度学习的好处:有数据来决定,只要有足够的数据,就能够通过训练一个足够大的神经网络,进行识别。而且会比机器学习效果更好。也就是说,让学习算法直接去学习从X->Y的效果,可能比认为增加一些中间步骤要好很多

所需的人类动手设计的组件变的更少了 所以这可以简化你的设计工作流程,意味着你不需要花大量的时间去动手设计特征,手工设计这些中间表示形式。

缺点:端到端学习需要大量的数据,所以为了使用机器学习直接得出X到Y的映射 你或许需要大量的(X,Y)数据。并且它排除了一些具有潜在用途的手工设计组件,所以机器学习研究人员往往会轻视手工设计的组件。

决定因素:你正在尝试去决定是否要使用端到端的深度学习,关键的问题是,你是否有足够的数据去学习出具有能够映射X到Y所需复杂度的方程。

总结一下:算法的两个主要知识来源一个是数据,另一个是人工设计的东西。如果有足够多的数据,那么手工设计的组件就无所谓了。但是,如果没有足够多的数据,那么就需要手工设计了。一个精心人工设计的系统实际上可以让人们向算法中注入人类关于这个问题的知识。

当前人工智能的局限性(摘录自《Python深度学习》)

什么是目前人工智能做不了的——推理和抽象,这也正是人工智能与人类的差距。

思考这样的问题,想要学习让火箭登陆月球的正确的发射参数,如果使用深度网络来完成这个任务,并用监督学习或强化学习来训练网络,那么我们需要输入上千次、甚至上百万次发射时延,也就是说,我们需要为它提供输入空间的密集采样,以便模型能够学到从输入空间到输出空间的可靠映射。相比之下,我们人类可以利用抽象能力提出物理模型(火箭科学),并且只用一次或几次试验就能得到让火箭登陆月球的精确解决方案。

同样,如果你开发一个能够控制人体的深度网络,并且希望它学会在城市里安全行走,不会被汽车撞上,那么这个网络不得不在各个场景中死亡数千次,才能推断出汽车是危险的,并作出适当的躲避行为。将这个网络放到一个新城市,它不得不重新学习已知的大部分知识。但人类不要死亡就可以学会安全行为,这也要归功于我们对假想情景进行抽象建模的行为。

之前确实遇到过客户在这方面的挑战,他说,我们针对设备的某一类故障做预测分析的方式不能算作智能化,他认为真正的智能是,你让模型学习A故障发生的历史数据,最后模型连B故障的发生也能预测,这才算是智能化。

我当时就用上面这段话回应了客户,虽然他仍然将信将疑,但是毕竟咱们也算是有理有据。

并且我也委婉的表示,您老还是应该加强学习,不能沉浸在自己个儿的臆想当中。试想,一个骨外科的医生即使从业经验再丰富,为再多的病人做骨科的手术,也很难成为消化内科的专家。人类尚且如此,那么当前的人工智能技术就更无法实现了。

结语

最后还是说一点正能量的东西吧。

希望大家好好学习、努力工作,做一个真正的专家,一个能给客户带来价值的专家。“装专家”完全是一种奢望,你可能忽悠人家一时,但是不可能一直不露馅。即使运气好,签下一单,交付也会出现问题,到时不止是公司的商誉受影响,作为顾问,个人的信誉也要大打折扣。如果因为自己的一个忽悠成功而沾沾自喜的话,那就太可悲了。因此,奉劝大家谨慎。

踏踏实实地每天多看点书、多敲几行代码、多实践、多总结才是真正的专家之路。

上一篇:

下一篇: