翻译 | AI科技大本营(rgznai100)
参与 | reason_W
不知道大家以前听没听说过“10x Developer”这个词,如果你连听都还没听说过,那可真是时候考虑放弃自己的程序猿事业了。就像传说一样,一些程序猿的战斗力能达到同行的10倍,也就是说一个10x程序猿能够替换一个10人的开发团队。
本篇文章我们就针对数据科学,来谈一谈如何才能成为一名传说中的10x老司机。本文作者主要从事数据挖掘及处理方面的开发工作,是西雅图女性程序员俱乐部PyLadies创始人,曾在PyData Seattle 2015上做过关于通过自然语言处理和机器学习调查用户体验的主题演讲。
以下正文~~
最近我在PyData Seattle(https://pydata.org/seattle2017/)发表了一个关于如何通过借鉴开发社区的提示和窍门来提高数据科学技能的主题演讲。这些建议将帮助开发者成为一名非常受团队成员和其他人欢迎的数据科学方面的老司机。
这篇文章分为五部分,其中包括:
10x开发者的历史和争议
项目设计
代码设计
工作工具
生产模式
当然,如果你想观看原始演讲的视频,可以点击这里(https://www.youtube.com/watch?v=nFVjLSvK5po)
10x开发人员,顾名思义,就是比普通开发人员生产力高出10倍的人。
一个10x的开发人员,不只是能在一定时间内比普通开发人员生产更多代码,还能像boss一样调试bug,代码里的bug也更少。因为他们会测试代码,指导初级开发人员,编写自己的文档,并且拥有很多其他技能来让自己超越仅仅知道如何写代码的境界。
H. Sackman,W. J. Erikson和E. E. Grant在1968年进行了一个叫做“比较在线和离线编程性能的探索性实验研究”的实验,发现程序员在完成写代码的任务上有很大的时间差异。
虽然该实验选取的被研究人员平均开发经验已经达到了七年之久,但相互之间的时间差异却能达到惊人的20倍。
虽然该实验的设计存在一定的缺陷,例如将使用低级语言的程序员和使用高级语言的程序员混合到了一起,但之后越来越多的研究都发现了类似的结果。
虽然关于到底存不存在10x开发人员仍有着广泛的争论,但本文重点关注的不是这些,而是关注开发人员,如何通过从那些经验丰富并且被认为开发速度更快的人那里得到的提示和窍门,成为一名更有生产效率的数据科学家。
你得真正了解业务
不管你是为教育、生物技术还是金融公司工作,都应该至少对解决问题的业务有一个比较深入的了解。
为了有效地沟通数据分析背后的故事,你应该了解是什么在驱动业务,并且了解业务目标。
例如,如果你负责优化食品卡车的位置,那么你就需要了解客流量,竞争,该地区发生的事件,甚至天气。你需要想了解公司为什么要优化位置。可能是因为公司要增加现有卡车的销售量,或者是想要增加卡车数量。
哪怕你可能是今天在搜索网站工作,明天就到了金融公司去当数据科学家,你也应该为了使你的分析与利益相关者相关知道是什么让业务成为可能。
你还应该了解你所在项目的业务流程,例如知道谁需要签署最终结果,一旦你负责的部分完成,数据模型被传递给谁,以及预期的时间表是如何安排的。
最后,你应该确保你知道这个项目的利益相关者是谁,并且能够向不懂技术的利益相关者讲明白这个项目实际的效果。就像是成为教育工作者一样,并能够向不懂技术的利益相关者讲明白为什么达成目标可能需要比他们预期的更多时间或资源。
当你了解了利益相关方的目标,并能够确保你沟通技术,专业知识和建立解决方案所需的时间,那么你在你们公司的价值一定会变得更大。
你得真正了解数据
了解业务很重要,了解数据更重要。你需要知道数据该怎样提取,何时提取,谁负责质量控制,为什么数据会可能存在差距(例如供应商的变化或提取方法的变化),什么可能会丢失,并且哪些其他数据源可以被添加进来以创建一个更准确的模型。
这真的需要你去和不同的团队交谈,并且不断地提出问题。不要害怕问他们正在做哪些工作,也不要害怕跟他们讨论你正在做哪些工作,因为你永远不知道大家是不是在做重复的工作,或者他们是否有一个更干净的版本的数据,而这恰恰是你需要数据。这样可以节省你大量查询数据库的时间,例如对SiteCatalyst进行多个API调用。
为什么在项目设计过程中多花费一些时间和精力可以让你成为10x数据科学家?
你只需要做那些需要完成的工作(在写代码之前已经思考过),这样就可以快速完成项目,因为你会减少工作量!
通过在客户/用户认为他们需要的东西和他们真正需要的东西之间发现不同,你就能把自己定位成这个领域的专家和共识的制定者。
你会巩固自己对问题的理解,从而减小犯那些重大错误的几率。
你得懂得代码设计
虽然在设计代码时有很多非常好的实践,但其中有一些非常突出的细节将大大增加你的生产效率。
我第一次听到关于清晰度或清晰度胜过聪明才智的论述是在大学写作课。 被自己一时的聪明想法抓住,并使用今天刚想到的最新词汇来表述想法是很容易的一件事,但是像编程一样,你这样做不仅可能会混淆自己,还会混淆别人。(小编注:比如不按变量命名规则,每次都是a,b,c。。。真的在日后看代码的时候很崩溃)
在上面的Scala示例中,第一行显示了使用简写语法的sortBy方法。虽然简明扼要,但很难想象下划线代表什么。虽然这是许多人在匿名函数中表示参数名称的常见模式,但对于不太高级的开发人员(或者当你过了一段时间再看你的代码)时,搞明白代码到底代表什么的做法就变得很头痛了。
在第二个例子中,我们起码使用了一个参数名称,加上它还显示了赋值,我们可以看到它是通过序列x中的最后一个元素排序的。
当代码不怎么抽象的时候,之后的调试才会更容易,所以在第三个例子中,我明确命名了我的参数,以便它表示数据。
当你的大脑必须要经历每一步,或者查找或回想代码的简写代表什么的时候,调试会需要更长的时间,添加新函数也会需要更长的时间,因此即使使用上述示例的简写可以简洁而快速地输入,从长远来看,明确命名参数对你和他人都会是有利的,从而避免你们耍小聪明犯下的错。
虽然我们不会检查缓存,但我们将介绍命名的重要性。想象一下,你正在查看一些旧的代码,你会看到序列按Scala示例进行排序:
.sortBy(x => -x._2)
使用单个字母来命名序列根本提供不了有用的信息,因为当你可能从API,数据库或Spark中的数据流中提取数据时,你必须运行代码才能看到”x”到底代表什么。
所以保持与之前Scala的示例的代码应该是:
sortBy(clothesCount => -clothesCount._2)
这样你就可以知道我们正在对什么进行排序,甚至不用运行代码。
但是,有时使用X作为变量名称却很好。例如,X通常用于机器学习库,其中X表示观察到的数据,而y是试图预测的变量。在这种情况下,使用这个领域约定俗成的表示,如“模型”,“拟合”,“预测”和“x”和“y”等字段是最好不过的。
除了数据科学方面的要求,你还要遵循你所使用的语言的编程语言惯例。例如,我建议你去检查一下文档,如PEP for Python,来了解最佳做法。
通过规范你的命名约定,并通过清晰而不是耍小聪明的代码,它将使重构和调试更容易和更快。按照这两个代码设计的窍门,你将走上成为10x数据科学家的道路。
保持代码样式一致,与刚刚我们说的保持命名约定一样重要。要获得一些基本的风格点,你应该坚持一种情况,不要在同一个脚本中混合使用驼峰式大小写和snake的命名规范,否则的话,你的代码很快就会变得难以阅读和浏览。另一种你应该保持一致的方法是同一种任务要坚持使用相同方法。例如,要从字典中删除重复项,并且需要在代码的好几个位置处执行此操作,那么就不要仅仅因为在Stack Overflow网站上看到过就使用其他创造性的方法来执行操作。使用最清晰和最不聪明的方法来让你的代码和脚本保持一致。并且,我还要再次强调,一致性的目的是为了避免让你自己和其他人混淆,这将有助于你更快地进行调试!(请注意,我们这段话的核心是调试)。
还记住我们刚刚谈到的,必须在代码中的多个地方删除字典中的重复项吗?使用函数,你就不需要多次重写代码。当然,即使你不重用代码,把代码封装在函数中也是至关重要的最佳做法。你的函数应该很小,小到只能做一件事情,以便可以重复调用。
当你不使用函数时,经常会有有全局变量导致命名冲突,代码不可测试和代码的不断重复。
通过使用函数,你的代码就可以自由组合,更易于编写测试单元。
但是不要仅仅止步于写一些只做一件事情的小函数,请务必抽象你的函数,以便重新使用它们 - 这样有助于降低代码冗余度,并能加快你的开发时间,这样做下去至少让你成为一个2x 程序猿。
尽管不太常见,但代码设计中很重要的一点是使用桩代码。桩代码是简单的mock类以及函数,可以显示输入,输出和注释,并为代码提供一个大纲。在你开始实际编写代码之前,使用桩代码会让你先考虑代码,并可以帮助你避免怪异的意大利面条式的代码。你会注意到你在编写代码之前有哪些重复的代码,并且会考虑最合适的数据结构。
上面的代码示例给我们展示了注释和文档。要真正成为一个被同事喜欢的程序猿,并提高自己作为一名数据科学家的效率,就要会写有用的简明扼要的注释。这不仅应该包括关于代码段的注释,还包括其输入和输出。
此外,关于docstrings可能最酷的是,它们可以通过大多数语言的库转换为文档。例如Python有一个名为Sphinx的库,可以让你将docstrings转换成完整的文档。
你现在可能知道你的代码是什么,但当你尝试调试或添加函数时,你和其他人将非常开心有注释。
无论你使用什么语言编写代码,请记得使用异常处理,并为你自己,同事和最终用户留下有用的错误信息。上面的代码显示了一个停止函数,能够传递来自正在调用的API的错误消息。
如果数据不是API需要的,那么它就会引发一个有用的错误消息。在你自己的代码中,你可以在停止函数中写一个消息,帮助用户:
stop(paste0(“Make sure all your inputs are strings: ”, e))
以上示例来自“Hitchhikers Guide to Python”,它使用Python测试库Pytest。
尽管编写测试单元对于开发人员来说相当普遍,但这在数据科学领域却很少使用。当然,你可以使用交叉验证,混淆矩阵和其他方法来验证你的模型。 但是,你是否测试了正在为你获取数据的查询? 你使用的各种方法是如何清理和转换数据的,你的模型需要它们吗? 这些方面对于安全防范“Garbage in, garbage out”(小编注:这两个单词的意思是,如果将错误的、无意义的数据输入计算机系统,计算机自然也一定会输出错误、无意义的结果。)至关重要。 当你测试代码时,不仅这两个未来的证据可以反映可能引入错误的变化,而且当你有能力自己给自己检查代码时,每个人都会认为你就像一个摇滚明星一样耀眼,因为一旦代码被用于实际生产就会发现bug非常少。
为你的项目使用版本控制是成为10x数据科学家的重要一步。这最明显的好处是保存模型的不同版本,既可以轻松地进行团队工作,也可以通过在存储库中使用版本控制进行备份,防止在笔记本电脑被盗或硬盘驱动器坠毁的情况下丢失工作。
在beta版中,有一个名为Data Version Control的开源数据版本控制项目,对于数据科学工作流程来说看着很有希望。 它依靠Git,并允许通过构建数据依赖图来跨团队重现项目。你的数据会与你的模型分开保存,它与其他版本控件一样工作,允许你回滚到以前保存的备份。
10x开发人员知道使用正确的工具来完成工作,无论是使用库来节省时间,切换语言以实现性能,还是使用API,而不是自己从头构建解决方案。
比方说你现在有一些Twitter或其他社交数据要用来进行情绪分析。一个选择是自己标注数据,训练自己的模型,另一个则是使用预先训练的模型。不去自己建立每个数据模型来重新造轮子是很薄的。使用最适合工作的工具,即使这意味着使用你没有构建过的工具。
我们都写过一个与Cron工作配对的Bash脚本来自动化一些报告,但是,在你花费一些时间尝试调试由Cron自动执行的其他人撰写的报告时,你甚至不知道它在哪里运行,你会意识到必须有更好的方法才行。通过使用自动化工具,如Puppet,Chef,Ansible或任何其他流行的自动化工具,你就可以从集中的位置运行你的工作,因此调试他人(或你自己)的工作就能快很多。
有时你可能找不到一个团队来负责你设计的模型,这个时候就需要知道如何自己部署自己的模型。
虽然上面那副图中的提供商之间有很多差异,但它们包含了从难以置信的易用性到你需要的更多的设置和知识。本节的内容其实可以单独成为一个话题。如果你想了解有关模型托管的更多细节,可以查看我们的其他几个不同的报告,分别介绍部署模型(https://blog.algorithmia.com/building-intelligent-applications/ )以及部署和扩展你的深度学习模型(https://blog.algorithmia.com/deploying-deep-learning-cloud-services/)。
可能是致命伤的事情:
易用性
成本(包括附加组件和隐藏成本,如托管数据)
投标人锁定
语言可用性
通过了解如何部署模型,你才有能力通过数据来讲述故事,轻松地与团队成员共享(不管使用哪种语言)或将其部署到生产环境中,从而与数千用户共享。这将帮助你成为10x-er,因为一旦了解了这一点,你就可以创建更多性能更高的模型,使用户开心。当用户开心时,企业主就会开心。
成为10x数据科学家的技巧
为了让这篇文章圆满,这里有一些关于如何成为10x数据科学家的最受欢迎的技巧:
模式匹配。这来自于以前遇到类似问题并意识到可以重用或修改当前问题解决方案的经验。
了解如何解释你的代码 - 给自己和其他人。 这意味着你可以在白板上,做/得到代码甚至协同编程。要习惯于谈论你的代码和思考过程。
了解如何/何时退出并重新开始。如果你意识到有一个更好的方法来解决问题,那就不要害怕重新开始。最好就是重新开始,做一个更好的方法来完成,而不是放出一些不是最佳或高性能的东西。
创建你自己的Gists库,或通过GitHub或其他托管服务的存储库组织代码片段。
最后,回顾整篇帖子,如何成为一个10x的数据科学家和如何调试其实是相同的主题。每个10x的开发人员都可以想象成一个主调试器,因为这个规则就是无论你的代码多长,你都可以将它乘以10,并得到你需要调试的时间。 成为一个很好的调试器的一个窍门就是使用异常处理,你可以在IDE中使用调试器,你可以通过代码查找逻辑中的错误,并检查涉及错误的库的源代码,以确保你正在传递代码需要的内容。
即使你从这个帖子只得到了几点收获,恭喜你,你已走上了成为10x数据科学家的道路。
当然,能不能抵达道路的尽头,就看你自己咯。
作者 | Stephanie Kim
https://twitter.com/StephLKim
— End —
来源:AI科技大本营
作者/分享人 | 李嘉璇
《TensorFlow技术解析与实战》作者,InfoQ、51CTO、Oreilly Strata 等大会讲师,活跃于国内各大技术社区,知乎编程问题回答者。擅长研究深度学习框架的架构、源码分析及在不同领域的应用。有处理图像、社交文本数据情感分析、数据挖掘等深度学习实战经验,参与过基于深度学习的自动驾驶二维感知系统 Hackathon 竞赛, 曾任职百度研发工程师。现在研究 NLP、ChatBot,以及 TensorFlow 的性能优化及 FPGA 编译。
文章来源Gitchat,AI科技大本营合作发布
本场 Chat 内容主要包括:
人工智能的整体知识体系梳理。
人工智能/深度学习工程师的职业前景如何?
非相关专业有可能自学入门么?自学的方法和进阶体系如何构建?
在 Java/客户端/前端/iOS 已经工作8年,那进入这个新的领域,新手深度学习工程师有哪些门槛,怎么克服?
希望和大家理解 AI 的一些编程思路和模型,帮助梳理自我成长路线。
一、人工智能的整体知识体系梳理
AI 领域目前有哪些知识体系构成是怎么样的呢?也就是说真正成为一名深度学习工程师,我们在现有的工程师基础上,要做哪些方面的准备呢?
目前的深度学习的研究领域主要有以下3类人群。
学者。主要做深度学习的理论研究,研究如何设计一个“网络模型”,如何修改参数以及为什么这样修改效果会好。平时的工作主要是关注科研前沿和进行理论研究、模型实验等,对新技术、新理论很敏感。
算法改进者。这些人为了把现有的网络模型能够适配自己的应用,达到更好的效果,会对模型做出一些改进,把一些新算法改进应用到现有模型中。这类人主要是做一些基础的应用服务,如基础的语音识别服务、基础的人脸识别服务,为其他上层应用方提供优良的模型。
工业研究者。这类人群不会涉及太深的算法,主要掌握各种模型的网络结构和一些算法实现。他们更多地是阅读优秀论文,根据论文去复现成果,然后应用到自己所在的工业领域。这个层次的人也是现在深度学习研究的主流人群。
我详细目前大家的转型需求上来看,和大家最契合以及最匹配的,就是第二类和第三类人群,且以第三类人群居多。这就是深度学习工程师目前要做的主要工作。
从这个目标来看,我们从以下几个方面进行梳理。
框架
目前市面上的 DL 框架很多,例如 TensorFlow、Caffe、Pytorch 等,框架的性能优劣也有很多人在比较。我们仅从流行度上和转型者上手的难易程度上来看,建议大家首选 TensorFlow。下面是截至到今年3月份的框架流行度趋势图:
那么抛开特定的框架,从功能上讲,一个深度学习/机器学习的框架应该具有哪些功能呢?
Tensor 库是对 CPU/GPU 透明的,并且实现了很多操作(如切片、数组或矩阵操作等)。这里的透明是指,在不同设备上如何运行,都是框架帮用户去实现的,用户只需要指定在哪个设备上进行哪种运算即可。
有一个完全独立的代码库,用脚本语言(最理想的是 Python)来操作 Tensors,并且实现所有深度学习的内容,包括前向传播/反向传播、图形计算等。
可以轻松地共享预训练模型(如 Caffe 的模型及 TensorFlow 中的 slim 模块)。
没有编译过程。深度学习是朝着更大、更复杂的网络发展的,因此在复杂图算法中花费的时间会成倍增加。而且,进行编译的话会丢失可解释性和有效进行日志调试的能力。更多请参考《The Unreasonable Effectiveness of Recurrent Neural Networks》。
TensorFlow 提供了 Python、C++、Java 接口来构建用户的程序,而核心部分是用 C++ 实现的。
下图给出的是 TensorFlow 的系统架构,自底向上分为设备层和网络层、数据操作层、图计算层、API 层、应用层,其中设备层和网络层。
数据操作层、图计算层是 TensorFlow 的核心层。
下面就自底向上详细介绍一下 TensorFlow 的系统架构。最下层是网络通信层和设备管理层。网络通信层包括 gRPC(google Remote Procedure Call Protocol)和远程直接数据存取(Remote Direct Memory Access,RDMA),这都是在分布式计算时需要用到的。设备管理层包括 TensorFlow 分别在 CPU、GPU、FPGA 等设备上的实现,也就是对上层提供了一个统一的接口,使上层只需要处理卷积等逻辑,而不需要关心在硬件上的卷积的实现过程。
其上是数据操作层,主要包括卷积函数、激活函数等操作。再往上是图计算层,也是我们要了解的核心,包含本地计算图和分布式计算图的实现。再往上是 API 层和应用层。
使用 TensorFlow 的公司有很多,除了谷歌在自己的产品线上使用 TensorFlow 外,国内的京东、小米、新浪、中兴等公司,以及国外的 Uber、eBay、Dropbox、Airbnb 等公司,都在尝试使用 TensorFlow。
论文
每周读懂一篇论文,每月实现或者读懂一篇论文的开源实现,是一个比较合理的学习节奏。
从工程上转型的人,之前缺乏论文阅读的习惯,可能一时半会读起来费力,加上英语的语言障碍,会很长时间徘徊在外面无法入门。
这里的一个好的建议就是:
先看和这篇论文主要思想相关的中文综述,中文博士论文,而后是英文综述。
通过中文综述,可以首先了解这个领域的基本名词、实验常用方法。否则直接从论文入手的话,作者站的高度和我们的水平不一致,很容易想当然的理解或者根本看不下去。因此,在阅读这篇文章之前,对于这篇文章中涉及到的基础知识,对应中文基础都理解透彻。
那么转型时期读哪些论文能尽快掌握精髓呢?我们以 CNN 的发展为例,来看:
卷积神经网络的发展过程如图所示。
卷积神经网络发展的起点是神经认知机(neocognitron)模型,当时已经出现了卷积结构。第一个卷积神经网络模型诞生于1989年,其发明人是 LeCun。学习卷积神经网络的读本是 Lecun的论文,在这篇论文里面较为详尽地解释了什么是卷积神经网络,并且阐述了为什么要卷积,为什么要降采样,径向基函数(radial basis function,RBF)怎么用,等等。
1998年 LeCun 提出了 LeNet,但随后卷积神经网络的锋芒逐渐被 SVM 等手工设计的特征的分类器盖过。随着 ReLU 和 Dropout 的提出,以及GPU和大数据带来的历史机遇,卷积神经网络在2012年迎来了历史性突破—AlexNet。
如图所示,AlexNet 之后卷积神经网络的演化过程主要有4个方向的演化:
一个是网络加深;
二是增强卷积层的功能;
三是从分类任务到检测任务;
四是增加新的功能模块。
如上图,分别找到各个阶段的几个网络的论文,理解他们的结构和特点之后,在 TensorFlow Models 下,都有对这几个网络的实现。
对着代码理解,并亲自运行。随后在自己的数据集上做一做 finetune,会对今后工业界进行深度学习网络的开发流程有个直观的认识。
下面就简单讲述各个阶段的几个网络的结构及特点。
网络加深
LeNet
LeNet 的论文详见:
http://vision.stanford.edu/cs598_spring07/papers/Lecun98.pdf
LeNet包含的组件如下。
输入层:32×32
卷积层:3个
降采样层:2个
全连接层:1个
输出层(高斯连接):10个类别(数字0~9的概率)
LeNet的网络结构如图所示
下面就介绍一下各个层的用途及意义。
输入层。输入图像尺寸为32×32。这要比MNIST数据集中的字母(28×28)还大,即对图像做了预处理 reshape 操作。这样做的目的是希望潜在的明显特征,如笔画断续、角点,能够出现在最高层特征监测卷积核的中心。
卷积层(C1, C3, C5)。卷积运算的主要目的是使原信号特征增强,并且降低噪音。在一个可视化的在线演示示例中,我们可以看出不同的卷积核输出特征映射的不同,如图所示。
下采样层(S2, S4)。下采样层主要是想降低网络训练参数及模型的过拟合程度。通常有以下两种方式。
最大池化(max pooling):在选中区域中找最大的值作为采样后的值。
平均值池化(mean pooling):把选中的区域中的平均值作为采样后的值。
全连接层(F6)。F6是全连接层,计算输入向量和权重向量的点积,再加上一个偏置。随后将其传递给sigmoid函数,产生单元i的一个状态。
输出层。输出层由欧式径向基函数(Euclidean radial basis function)单元组成,每个类别(数字的0~9)对应一个径向基函数单元,每个单元有84个输入。也就是说,每个输出 RBF 单元计算输入向量和该类别标记向量之间的欧式距离。距离越远,RBF 输出越大。
经过测试,采用 LeNet,6万张原始图片的数据集,错误率能够降低到0.95%;54万张人工处理的失真数据集合并上6万张原始图片的数据集,错误率能够降低到0.8%。
接着,历史转折发生在2012年,Geoffrey Hinton 和他的学生 Alex Krizhevsky 在 ImageNet 竞赛中一举夺得图像分类的冠军,刷新了图像分类的记录,通过比赛回应了对卷积方法的质疑。比赛中他们所用网络称为 AlexNet。
AlexNet
AlexNet 在2012年的 ImageNet 图像分类竞赛中,Top-5错误率为15.3%;2011年的冠军是采用基于传统浅层模型方法,Top-5错误率为25.8%。AlexNet 也远远超过2012年竞赛的第二名,错误率为26.2%。AlexNet 的论文详见 Alex Krizhevsky、Ilya Sutskever 和 Geoffrey E.Hinton 的《ImageNet Classification with Deep Convolutional Neural Networks》。
AlexNet 的结构如图所示。图中明确显示了两个 GPU 之间的职责划分:一个 GPU 运行图中顶部的层次部分,另一个 GPU 运行图中底部的层次部分。GPU 之间仅在某些层互相通信。
AlexNet 由5个卷积层、5个池化层、3个全连接层,大约5000万个可调参数组成。最后一个全连接层的输出被送到一个1000维的 softmax 层,产生一个覆盖1000类标记的分布。
AlexNet 之所以能够成功,让深度学习卷积的方法重回到人们视野,原因在于使用了如下方法。
防止过拟合:Dropout、数据增强(data augmentation)。
非线性激活函数:ReLU。
大数据训练:120万(百万级)ImageNet图像数据。
GPU 实现、LRN(local responce normalization)规范化层的使用。
要学习如此多的参数,并且防止过拟合,可以采用两种方法:数据增强和 Dropout。
数据增强:增加训练数据是避免过拟合的好方法,并且能提升算法的准确率。当训练数据有限的时候,可以通过一些变换从已有的训练数据集中生成一些新数据,来扩大训练数据量。通常采用的变形方式以下几种,具体效果如图所示。
水平翻转图像(又称反射变化,flip)。
从原始图像(大小为256×256)随机地平移变换(crop)出一些图像(如大小为224×224)。
给图像增加一些随机的光照(又称光照、彩色变换、颜色抖动)。
Dropout。AlexNet 做的是以0.5的概率将每个隐层神经元的输出设置为0。以这种方式被抑制的神经元既不参与前向传播,也不参与反向传播。因此,每次输入一个样本,就相当于该神经网络尝试了一个新结构,但是所有这些结构之间共享权重。因为神经元不能依赖于其他神经元而存在,所以这种技术降低了神经元复杂的互适应关系。因此,网络需要被迫学习更为健壮的特征,这些特征在结合其他神经元的一些不同随机子集时很有用。如果没有 Dropout,我们的网络会表现出大量的过拟合。Dropout 使收敛所需的迭代次数大致增加了一倍。
Alex 用非线性激活函数 relu 代替了 sigmoid,发现得到的 SGD 的收敛速度会比 sigmoid/tanh 快很多。单个 GTX 580 GPU 只有3 GB 内存,因此在其上训练的数据规模有限。从 AlexNet 结构图可以看出,它将网络分布在两个 GPU 上,并且能够直接从另一个 GPU 的内存中读出和写入,不需要通过主机内存,极大地增加了训练的规模。
增强卷积层的功能
VGGNet
VGGNet 可以看成是加深版本的 AlexNet,参见 Karen Simonyan 和 Andrew Zisserman 的论文《Very Deep Convolutional Networks for Large-Scale Visual Recognition》。
VGGNet 和下文中要提到的 GoogLeNet 是2014年 ImageNet 竞赛的第二名和第一名,Top-5错误率分别为7.32%和6.66%。VGGNet 也是5个卷积组、2层全连接图像特征、1层全连接分类特征,可以看作和 AlexNet 一样总共8个部分。根据前5个卷积组,VGGNet 论文中给出了 A~E 这5种配置,如图所示。卷积层数从8(A 配置)到16(E 配置)递增。VGGNet 不同于 AlexNet 的地方是:VGGNet 使用的层更多,通常有16~19层,而 AlexNet 只有8层。
GoogLeNet
提到 GoogleNet,我们首先要说起 NIN(Network in Network)的思想(详见 Min Lin 和 Qiang Chen 和 Shuicheng Yan 的论文《Network In Network》),它对传统的卷积方法做了两点改进:将原来的线性卷积层(linear convolution layer)变为多层感知卷积层(multilayer perceptron);将全连接层的改进为全局平均池化。这使得卷积神经网络向另一个演化分支—增强卷积模块的功能的方向演化,2014年诞生了 GoogLeNet(即 Inception V1)。谷歌公司提出的 GoogLeNet 是2014年 ILSVRC 挑战赛的冠军,它将 Top-5的错误率降低到了6.67%。GoogLeNet 的更多内容详见 Christian Szegedy 和 Wei Liu 等人的论文《Going Deeper with Convolutions》。
GoogLeNet 的主要思想是围绕“深度”和“宽度”去实现的。
深度。层数更深,论文中采用了22层。为了避免梯度消失问题,GoogLeNet 巧妙地在不同深度处增加了两个损失函数来避免反向传播时梯度消失的现象。
宽度。增加了多种大小的卷积核,如1×1、3×3、5×5,但并没有将这些全都用在特征映射上,都结合起来的特征映射厚度将会很大。但是采用了图6-11右侧所示的降维的 Inception 模型,在3×3、5×5卷积前,和最大池化后都分别加上了1×1的卷积核,起到了降低特征映射厚度的作用。
延展阅读:Medium上6900个赞的AI学习路线图,快速上手机器学习
来源:AI科技大本营
翻译 | AI科技大本营(rgznai100)
参与 | thinkdeeper
Part 1:为什么机器学习如此重要
AI科技大本营编者按:
这篇文章在Medium上总共获得了6900多个赞,在Medium上极受欢迎。受欢迎最大的原因是,作者能以比较浅显的文字,将机器学习所囊括的各类原理讲得清楚透彻。而这,对于以下三类人群来说,简直是个福利包:
A.想要快速提升机器学习能力的技术人员;
B.想要初步了解机器学习,并愿意接触相关概念的非技术人员;
C.任何对机器是如何思考感兴趣的人。
虽然文章中也会讨论概率、统计学、程序设计、线性代数和微积分的基本概念,但在作者的深入浅出的语言描述下,即便没有相关背景知识,也不会觉得难懂。
如果你想在3个小时内快速了解机器学习的概念,也不知道上哪里找价值高的指导性文章,建议您阅读该作者系列文章。AI科技大本营会陆续更新该系列的Part2、3、4、5部分及资源列表。
(关注”AI科技大本营(rgznai100)“可获取资源链接)
本篇为系列的第一篇文章,作者以讲故事的方式,告诉你,为什么机器学习如此重要。
这让人想起前不久小扎与马斯克关于“AI是否会超越人类”的论战,小扎说AI只是帮人提升效率,让人能够专注于更重要的工作;而马斯克则在twitter上公开批小扎“理解太浅薄,没有看到更长远的威胁”。
本篇文章的观点与马斯克如出一辙,作者对未来充满担忧,也正是这份担忧,他提出:
虽然预测未来有点不现实,但有一件事是肯定的:2017年是了解机器如何思考的最好开始时间。
在他看来,人们必须深入机器了解世界的内部细节,搞清楚机器到底要什么,它们的偏见和弱点是什么。
而要搞清楚这些问题,作者强调“得把机器当成人来研究”;正如研究心理学和神经科学,探索人类如何学习、决策、感觉等课题。从这个层面来说,这已经不单单是技术问题了,而是需要综合逻辑、心理、哲学、语言学等各学科,才能真正摸清楚黑匣子背后的秘密。
正文:
人工智能比本世纪的任何其他创新都来得更猛,而它也将更有力地塑造我们的未来。
在这个技术统治的世界里,任何不了解它的人,会很快发现自己落..伍...了...他会对即将到来的魔法世界,呈一脸懵逼状。
虽然人工智能历代的潮起潮落已经被各大资料文章说烂了,早已老生常谈,但请保持点耐心,我仍想用自己的方式,将其梳理一遍。
在经历了过去四十年的几番AI停滞和发展周期之后,数据的爆发和算力的提升让人工智能终于突破了瓶颈。
2015年,Google训练了一个对话机器人(AI),不仅可以作为技术支持与人进行交流,还可以跟人讨论道德问题,表达意见和回答一般性的基于事实的问题。
Vinyals&Le,2017
同年,DeepMind开发出一个程序,仅以像素和游戏得分作为输入,在49局 Atari游戏中超越人的表现。
不久后,DeepMind再次实现自我超越,发布一款名叫A3C的新的前沿游戏算法。
与此同时,AlphaGo击败了世界顶级围棋选手,这是继机器征服国际象棋后,历经二十年时间,再次在以人类为主导的游戏中大获全胜。
许多围棋大师不理解,为什么一台机器能掌握这个古老的中国战略游戏,机器怎么可能掌握其中的精髓和复杂,在10¹⁷⁰个可能的布局中大败人类。要知道,宇宙中原子的数量也就 10⁸⁰。这太不可思议了。
图为与AlphaGo进行了一场比赛失败后,职业围棋选手Lee Sedol在复盘这局棋局
不过,这还没完。
2017年3月,OpenAI用自己发明的语言开发机器人,有效地实现了自己的目标。不久之后,Facebook成功训练了会谈判甚至说谎的机器人。
2017年8月11日,在多人在线游戏Dota 2的1v1比赛中,OpenAI击败世界顶尖游戏选手人士,这又让好一波人受到了惊吓。
观看全程比赛,请移步YouTube,Dendi (human) vs. OpenAI (bot)
除了这些惊天大逆袭,人工智能也开始渗透到我们的日常生活。
比如下面两张图片,你只用将相机对准菜单,选中的图片就可以通过Google翻译APP自动翻译成英文。
如果下一次你入住某酒店,致电前台让送牙膏到房间。当你打开门,眼前是一个小的家政送货机器人,不必惊讶。
各细分领域也开始借助人工智能进行智能化升级。
如今在医疗领域,AI可用于为癌症患者设计循证治疗计划,用于实时分析医学检测结果,并用于药物发现。(小编注:可参考AI科技大本营此前编译的一篇文章《一文讲述人工智能在医疗行业的九个落脚点,让你更懂AI》)
(小编多一句嘴:作者会在本系列的5个章节中,深入探讨这些技术背后的核心机器学习概念,并教你利用工具构建类似应用程序。)
下面我给出一个知识树的图片,从中可以看出,机器学习主要包括监督学习,无监督学习和增强学习三个方面。
人工智能主要是研究能感知周围世界、制定计划、并做出决策以实现其目标的机器人。其所需要的基础包括数学、逻辑、哲学、概率、语言学、神经科学和决策理论。许多领域都属于AI,如计算机视觉,机器人,机器学习和自然语言处理。
机器学习则是人工智能的一个子领域。它的目标是让计算机自己学习。机器学习算法使其能够在数据中识别模式,从而构建模型,而不是利用预定义的规则进行预测。
智力大爆炸
其实,上述讨论的例子,尽管会让人一惊,但都属于弱人工智能(ANI),不过它确实能高效解决特定任务。
我们一直在为强人工智能(AGI)做一些基础性的推进工作。AGI的定义是一种能执行人类所要求的各类复杂任务,包括在不确定情况下进行学习、规划和决策,用跟人类一模一样的语言方式进行交流、讲笑话,指挥股票交易或自己编程。
会自己编程,这一点尤为关键。一旦我们创造了一个能自我改进的AI,它将会以一种循环递归的方式进行自我完善。这预示着,我们将在未来的某个时期,将进入到一个智能爆炸的时代,
超智能机器可以超越任何人的智力活动。由此可以推出,设计这台超智能机器是人类智力活动之一,超智能机器大于人类的智力活动,那超智能机器可以设计出更好的机器。
如此一来,将会产生智力爆炸,远远超过人类的智力大爆炸。
可以这么说:第一台超智能机器是人类最后的一个发明。
下图被称为奇点。该术语借用于发生在黑洞中心的引力奇点,一个无限拥有无限密度的一维点。在这里,我们惯常理解的物理定律已无法适用。
我们对黑洞里面到底是如何的一番景象完全搞不清楚,因为没有光线可以逃脱这个黑洞。
同样,在我们解锁AI的自我改进能力之后,我们也没有办法预测将会发生什么。
正如用于人类实验中的小白鼠,它永远也不知道人类在对自己做什么,它只能肤浅地理解为人类在帮他们获得更多的奶酪。
最近,人类未来研究所发表了一份调查报告,该报告调查了AI研究人员对实现AGI时代的预测。
研究人员认为在45年后,AI有50%的胜算超过人类。当然,有人说时间更长,有人说已经没几年了。
这是2005年在奇点临近一书中的图片。如今,2017了,墙上还能有多少我们自以为是的图片呢?
超人工智能的出现,对人类到底是件好事还是坏事?
先不做好坏的预测,而是谈一个很实际的问题:我们怎么能用一种对人类友好的方式,来指定AI做我们想让他做的事情呢?
要达到这个目的,我们就了解机器学习,不是应用机器学习,而是真正搞明白。
机器学习——避免机器逆袭的唯一通路
所以我一直笃定一件事:2017年,该是我们了解机器如何思考的开始时间了。
这可不是拍脑袋,借助哲学抽象概念或其他形象比喻来理解和学习AI。而是,我们必须深入其中,了解机器世界的内部细节—它们到底“想要什么“,它们潜在的偏见和弱点到底有哪些——正如我们研究心理学和神经科学,以了解人类如何学习、决策、行为和感知这样。
有关AI的复杂性和高风险的问题,将在未来几年内越来越多引发人们的注意。不少问题亟待解决:
我们如何应对AI 在现有数据集中显而易见的系统性偏见倾向?
世界上最强大的技术人员关于人工智能潜在风险和利益的根本分歧应该如何看待?
在一个没有工作的世界中,人类的使命感如何?
机器学习是通用人工智能的核心,同时也将改变每一个行业,并对我们的日常生活产生巨大的影响。这就是为什么我们认为了解机器学习是值得的。至少在概念层面上,我写这些系列文章比较适合入门,不会有一种一来就将人拒之千里之外的感觉。
那么讲了这么多,到底如何阅读这个系列文章呢?
你不一定要把整个系列全部读完,这里我有三个建议,具体还得取决于你的兴趣和时间。
1. T型方法。从头到尾阅读。并在每一节做总结。这种方式会让你能更积极主动地阅读,并且不容易遗忘。为了深入了解你最感兴趣的内容,我们将会在每个部分的末尾提供一些参考资料供你拓展。
2. 专注方法。直接阅读你最感兴趣的部分。
3. 80/20法则。大概浏览全部内容, 对主要概念做笔记即可,并理解它。
好的,今天我们的开篇就到此,请关注AI科技大本营微信,获取持续更新。
关于本系列文章作者的简介:
Vishal最近在Upstart任职,这是一个利用机器学习来定价信贷,借贷过程自动化和获取用户的贷款平台。他的研究主要基于如何思考创业,应用认知科学,道德哲学和人工智能的伦理学。
Samer是UCSD的计算机科学与工程硕士生,Conigo Labs的联合创始人。在毕业之前,他创立了TableScribe,这是中小型企业的商业智能工具。他花了两年的时间为麦肯锡的财富100强企业提供咨询服务。Samer曾经在耶鲁大学学习计算机科学与伦理学,政治学和经济学。
两人的目标是,巩固自己对人工智能,机器学习的理解,以及深入了解它们之间的融合方式 ,并希望在此过程中创造值得分享的东西。
其实,机器学习一直在解决着各种重要的问题。比如说90年代中期,人们已经开始用神经网络来扫描信用卡交易记录,从中找到欺诈行为;90年代末,Google把这项技术用到了网络搜索上。
但在那个时候,机器学习还和普通的工程师无缘。开发一个机器学习系统,需要读个PhD,还得找到一群想法类似、志同道合的朋友。
现在,机器学习终于更强大也更亲民了。
一个普通的软件工程师,不需要去专门回炉重造读个研究生,就能运用机器学习开发出非常不错的系统。
当然,普通的码农要用好机器学习,还得补一些课,学一些数据技能。InforWorld的这篇文章就讲述了一些技巧和策略,能够帮助开发者们更有效地使用机器学习。
在良好的软件工程实践过程中,你经常能通过推理得到所需的设计,写好软件部分,然后直接且独立地对这个解决方案进行检验。
有时候,你甚至能从数学上证明你软件是正确的。但这在实际问题中往往较难实现,尤其是要考虑人类参与的时候,但如果你有良好的规范,你仍可以执行一个正确的解决方案。
但机器学习不一样。大体上,你不需要一个严格的规范。你有了能表示系统以往经验的数据,然后需要的是建立一个能够在未来奏效的系统。
为了测试系统是否真的奏效,你需要在真实情况中评估它的表现。切换到这种“重数据,轻阐述”的开发模式会有很大阻力,但这是你构建机器学习系统的关键一步。
比较两个数字的大小是很简单的事情。假设它们都是有效的值(不是非数字类型),你只需要判断哪个值更大,就结束了。
而在比较机器学习的准确性时,问题就不这么简单了。
你要比较的模型有大量的输出结果,而没有一个明确的答案。构建机器学习系统所需的一项非常基本的能力,就是通过观察两个模型之前制定的决策,决定哪个模型更符合你的问题情境。
做出这个判断,你需要将这些数据做整体考虑而不是某个单一的值。这通常也需要你能够很好地进行数据可视化,比如说使用柱状图,散点图和许多其他相关的数据表示方式。
与判断哪个模型更好一样,对你自己的结论保持怀疑同样很重要。
你的结果是否只是统计上的偶然,数据变多后就不再成立?在你评估后情况是否发生了变化,因此之前的决策是否仍有效?
搭建一个内嵌机器学习的系统意味着你需要时刻确认系统依然在做你一开始布置的任务。这种怀疑精神是在变化的现实情况中进行模糊比较所必须的品质。
在软件行业有一句老话,你构建的第一版系统是注定要扔掉的。这句话的含义是,直到你实实在在搭建了一个有效的系统之后,你才能充分理解问题从而更好地搭建系统。所以你可以先通过构建一个版本来积累经验,随后把学到的经验应用到设计中,构建出实际的系统。
对于机器学习来说,情形相同乃至更甚。搭建一个系统来练手还不够,你要做好搭建数十上百个版本的准备。有些版本可能用的是不同的学习方式,或者只是不同的参数设置;另外一些版本则是对问题或者训练数据完全不同的重述。
举例来说,你可能会发现在你想预测的信号之外,还可以用其它的替代信号来训练模型。这样,你可能会有十倍于原始的数据来训练。或者你可以去尝试用另一种方式来重述问题,使其变得更易解决。
这个世界瞬息万变。比如说你搭建模型检测欺诈行为的时候,即便你已经搭建了一个成功的系统,仍需要在未来适时做出改变。因为骗子会识别出你的漏洞,从而改变它们的行为。你将会被迫采取新的对策。
所以为了取得成功,你需要搭建一系列用来丢弃的机器学习模型。不要寄希望于有一个永久适用的万能模型。
开始你想用机器学习解决的问题情景通常是不对的,甚至可能大错特错。因此,可能会遇到根本无法训练的模型,或是收集不到用于训练的数据,又或者模型训练出的最优结果却价值有限。
重新审视这个问题,可能会使得一个简单的模型就具有很高的价值。
我曾经遇到过一个有关推荐商品的问题,哪怕用上一些高大上的技能,想获得一点微博的收益也很难。
但实际上,我们应该关注的高价值问题是优秀的商品何时上市。只要你知道了这个时间点,就有很多好商品可供选择,“推荐什么产品”这个问题就迎刃而解了。
重新定义问题,让整个项目更容易解决了。
将你的原始系统应用到一些简单情形或者是一个子问题上,是有很价值的。这会让你集中精力获得该问题领域的专业知识,并在搭建模型的过程中得到同伴的支持。
确认你拥有足够多的训练数据。事实上,如果可能的话,你要收集10倍于本来预想中所需的数据量。
在机器学习中,搞清楚一个模型怎样决策或预测是一件事,更重要的是搞清楚真正的问题在哪。
就这点而论,如果你已经拥有很多专业知识,那你更有可能提出恰当的问题,从而能够将机器学习用到一个可行的产品中。要正确判断哪里需要仔细检查,专业知识非常关键。
有很多工具意图让你仅通过简单拖拽就完成搭建机器学习模型的过程。事实上,搭建机器学习系统的大部分工作跟机器学习或者模型毫无关系,而是在于收集数据以及搭建能够使用模型输出结果的系统。
于是,拥有良好的编程技能尤为重要。
尽管不同人在处理数据的代码上存在一些风格的差异,但彼此间要相互理解并不难。所以开发的能力在很多机器学习的问题中非常有用。
现在有很多工具和新兴技术,让几乎所有的软件工程师能够针对有趣的问题开发出相应的机器学习系统。基本的程序开发技能将会在这个搭建过程中非常有用,但在使用它们的时候你需要多多关注数据。
掌握这些新技能的最好方式,是从现在开始动手搭建一些有趣的东西。
9月12日上午,南京金秋洽谈会“2017中国人工智能峰会(CAIS 2017)”在南京国际博览会议中心盛大开幕。本次峰会以“创新、变革、突破”为主题,并设两大主题论坛,共吸引了30余位人工智能领域著名的科学家、企业领袖亲临现场,1500余名专业观众报名参会,AI科技评论作为受邀媒体参加了本次峰会并进行了报道。
在大会上,南京大学计算机系教授、欧洲科学院外籍院士周志华回顾了人工智能的发展以及机器学习兴起的由来,并介绍了“学件”的思路。周志华教授称,经过人工智能发展的第一个阶段即上世纪六十年代,机器所具有的推理能力就已经达到了人类的巅峰水平,之后人工智能相继进入知识工程和机器学习阶段。在大数据时代,机器学习得到了长足的发展,直接导致了今天的人工智能热潮。但技术上仍存在诸多局限,为此,周志华教授提出了“学件”(Learnware)的概念,期望经过10到15年的探索以后进入一个新局面。
周志华教授在现场还列举了一组数据,在今年的IJCAI大会上,中国本土相关研究论文数录用数量首次超过了美国,占到了差不多全世界三分之一,其中北京占约30%,江苏省占14%,居全国前两位。周志华教授认为,江苏有国内前列的人工智能研究实力,同时有国内前列的人工智能产业基础。“在国内的各个省份里面,同时具有这两个条件的地方并不是很多。”
以下是AI科技评论根据周志华教授演讲现场记录稿整理的主要内容,已获得大会授权:
我本人是从事人工智能方面研究的。经常有人问,“比人类更聪明的人工智能什么时候能够出现?”,这样的问题对我们来说非常难回答,这是为什么呢?因为谈到人工智能,其实可以说有两种完全不同的观点,或者说差别非常大的观点。
第一种我们把它叫做“强人工智能”。目的是希望研制出和人一样聪明、甚至比人更聪明的机器;另外一种是“弱人工智能”,主要目的是觉得我们人做事的时候很聪明,那么能不能向人借鉴一下,让机器做事的时候更聪明。实际上在人工智能科学界,大家探索的主要是在第二个方面。
有一个或许更容易理解的类比:一百多年前,人们看到天上鸟在飞,然后大家就想那我们能不能做一个东西飞起来。后来经过空气动力学研究,现在我们有了很好的飞机。但是如果现在问:这个飞机到底有没有比鸟飞得更好?这个问题可能就很难说了,因为飞机虽然飞得比鸟更远更高,但是未必有鸟飞得灵活。但不管怎么样,我们原来的目的已经达到了,我们已经有能够帮我们飞起来的工具。
人工智能做的事情和这件事情非常的相似,就是我们看到有很多智能行为,希望借鉴这些东西做出一些工具,能够帮助我们做更强大的事情,实际上这就是我们真正在研究人工智能的时候所主要考虑的内容。所以人工智能研究的主要目的并不是“人造智能”,而是“intelligence-inspired computing”,智能启发的计算。
搞人工智能的人到底在做什么呢?今天我们一般说人工智能作为一门学科诞生在1956年,那时候计算机的能力还非常弱,但已经有很多的学者在想,那么这样计算能力发展下去,我们是不是可以做一些更复杂的事情,那么这些事情到底是什么呢?在那年夏天在达特茅斯学院开了这么一个会议,在这个会议上后来被称为人工智能之父的约翰·麦卡锡,为这个学科就起了一个名字叫做人工智能。
经过了60多年历史,如果从主流研究内容来看,人工智能的发展大概经历这么三个阶段:
第一个阶段大概是在50年代中期到60年代,这个阶段主要是在做逻辑推理。这是为什么呢?大概因为我们理工科的都对数学家有一种自然的崇拜,觉得数学家非常聪明,能够证明一些非常复杂的定理,那这个背后的能力就是逻辑推理能力。所以在那个时候大家就想,如果我们能够把逻辑推理能力赋予计算机系统,那么这个机器做事情就会聪明起来,所以那个时候有很多很重要的研究结果,例如图灵奖得主西蒙和纽厄尔研制出来的“逻辑理论家”程序就是一个典型代表。
那么这样的研究成果达到了什么样的水平呢?在上个世纪有两位伟大的逻辑学家罗素和怀特海,他们写了一本书叫做《数学原理》,用逻辑把整个数学系统建构起来。为了证明这本书里面的定理,他们花了十年时间,而这个程序证明这所有的定理只用了不到两个月的时间,而且其中有一条定理的证明比这两位伟大的逻辑学家证明出来的还要巧妙,更加简短、更加容易读懂。所以我们可以看到,在上个世纪60年代,机器所具有的推理能力就已经达到了人类的巅峰水平。
但那个时候机器做事情并没有真的变得很聪明,所以大家慢慢地就意识到其实光有逻辑推理能力是不够的,即便是数学家,为了证明数学定理除了要有逻辑推理能力,还要有数学知识。所以人工智能的研究很自然的就进入了第二个阶段,在这个阶段大家就想的是我们能不能把知识总结出来教给计算机系统,所以这就进入了我们所谓的一个“知识工程”时期,这里面的代表人物例如后来的图灵奖得主,被称为知识工程之父的爱德华·费根鲍姆。在这个阶段大家主要做的事情就是希望把人类专家解决问题的知识总结出来,比如说,“如果看到岩石里面渗出红色,那么这个里面很可能是铁矿”,把这样的知识总结出来,然后编程放到计算机系统里面,由此就产生出很多“专家系统”,确实解决了很多应用问题。
但是后来慢慢的大家就发现,要把知识总结出来再交给系统非常的困难。一方面有时候我们人类专家能够解决一些问题,但是这个知识是什么可能说不清楚。有的人类专家可能还不太愿意分享他的知识。然后大家就想那么这时候我们该怎么办?因为我们的人的知识其实主要是靠学来的,所以先驱们很自然地就想到那么我们能不能让机器自动的去学知识,所以从20世纪90年代开始,人工智能的主流研究就进入到第三个阶段,这个阶段一直持续到今天,就是我们的机器学习阶段。
所以我们可以看到机器学习最早诞生出来,它是为了解决知识获取这么一个瓶颈而出现的。机器学习的经典定义是“利用经验改善系统自身的能力”。不论什么样的经验,一旦放在计算机系统中,它必然是以数据的形式存在的,所以机器学习要研究怎么去利用经验,他就必须要对数据进行分析,所以这个领域发展到今天,实际上主要研究的是怎么样利用计算机来对数据进行分析的理论和方法。
我们可以看到,其实机器学习走上历史舞台是因为要解决知识获取的瓶颈,但恰恰在20世纪末,我们人类发现自己淹没在一个数据的海洋里面,我们需要对数据分析,我们需要这样的技术,而机器学习恰恰在这个时候走上舞台了,所以给我们提供了这个机会,我们对他的需求就迫切的高涨。
今天我们都说是在“大数据时代”,但其实光有大数据并不意味着得到了价值。大数据就好比是一个矿山,我们拥有了矿山,如果要得到里面的价值,必须要有很强大的数据分析技术,而这个数据分析技术是什么呢?今天我们主要就是要靠机器学习。所以在大数据时代要让数据发挥作用,就离不开机器学习技术。所以可以看到,机器学习已经可以说是无处不在了,不管是互联网搜索还是人脸识别,还是汽车自动驾驶,还是火星机器人包括美国总统大选甚至军队的战场数据情况分析,任何地方只要你有数据只要你希望用计算机来帮助你做数据的分析,你就可能使用机器学习技术。可以说今天我们在这里有这个论坛,是因为人工智能现在很热,而人工智能有这个热潮,其实恰恰就是因为机器学习,尤其是里面的深度学习技术在过去十来年里面取得了巨大的发展,在大数据时代发挥了巨大的作用。
我们现在有很多的问题,有很多的企业是基于深度学习技术来做的,它可以解决很多问题,但是大家要注意到深度学习、机器学习、人工智能这三者之间的关系:深度学习是机器学习的一个分支,而机器学习又是人工智能的核心领域,但它并非人工智能技术的全部。深度学习虽然取得了巨大成功,但并不能够包打天下,还有很多其他的机器学习技术在很多方面在发挥作用。
关于机器学习下一步发展的看法,下面谈谈我个人的一些粗浅的思考,这些看法很可能是错的,仅供大家批评参考。
我们今天谈到机器学习的时候,很多对机器学习熟悉的人会想到什么呢?可能有些人想到的是算法,有些人想到的是数据。我们可以说,今天的机器学习就是以“算法加数据”这么一种形态存在的。在这种形态下,我们的技术上存在哪些技术局限?我来列举一些。
首先,我们可能需要大量的训练样本。大家可能说今天我们是大数据时代,那么大量的训练样本这件事情可能已经不再是问题,其实这里面有几个典型的情况能够告诉我们,这其实还是一个很大的问题。
首先在有些应用里边,可能我们的样本总量很少,比如说我们在做油田定位的时候,那这个数据必须通过人工诱发地震才能获得,所以你要获得这样的数据成本是非常高的,不可能有大量的数据去用;
第二种情况是数据可能很多,但是我们真正关心的很少,比如说我们在做银行的这种欺诈检测的时候,每天一个银行的信用卡交易数据可能有几百万上千万,但是其中真正的信用卡欺诈的数据可能很少;
还有一种情况,我们数据的总量很多,但是我们已经标注了结果的东西很少,比如说我们要做软件的缺陷检测,我们有大量的程序代码,但是程序代码里面真正把缺陷标记出来的,这样的数据是非常少的;
第二,我们今天训练好了一个机器学习模型,之后环境如果稍微发生变化,就可能导致这个模型失效,至少是大幅度降低它的性能。比如说在我们一个传感器的世界里面,我们放出去一百个传感器,一个月之后有60个传感器失效了,这时候我新部署60个传感器,那你说我还是一百个,那我原来的模型能不能用呢?很抱歉,这时候模型的性能会大幅度衰减,因为你很难把新的传感器放到原来的位置,它发出来的信号质量和强度和原来也会有很大的变化,这时候我们的模型可能就已经很难适应了,所以这又是一个很重要的问题。
第三个问题很多人都知道,今天的机器学习系统绝大多数都是黑箱,我们能做出预测,甚至是非常精确的预测,但是我们很难解释为什么做出这样的预测,这就会导致这样的系统在一些高风险应用里面很难使用,比如说我们要做地震预报,我们说明天要地震,请大家撤离。领导肯定会问那你凭什么做出这样的决策?如果这个模型是黑箱,他只能告诉你,我就告诉你肯定是这样,具体什么理由我也不知道,如果是这样的话,谁也不知道是不是瞎蒙的,那这件事情肯定不太容易采纳这个建议。
这其实还有很多别的问题,比如说今天我们在使用机器学习技术的时候,即使对同样的数据,普通用户所能得到的结果和专家所能得到的结果,这中间的差别可能非常的大,怎么样使用这个数据怎么样使用这个模型,大家的知识和经验的差别会导致结果模型巨大的差异。
此外还有一个问题可能提到的人比较少,我举一个例子,比如说我们现在有大医院,他有很多的病例数据,如果我们现在要做智慧医疗,那他基于这些数据可能做出非常好的诊断系统。而我们的社区医院的病例数据可能比较少,直接基于它的数据很难做出这样好的模型,现在社区医院说你这个大医院能不能帮帮我?大医院说我很愿意帮你,但是这件事情就算它愿意帮这个忙,可能也很难帮得上,因为一旦它要分享他的病例数据,马上就会涉及到数据隐私、数据所有权、数据保护等等的问题,所以这里面有一个数据分享的墙。
还有很多其他问题。对于几个每个方面,今天我们都有研究者在做相关的探索,但是如果把所有这些方面割裂的一个一个的去解决,可能就很难摆脱头疼医头、脚疼医脚这样的一种现状。所以我们就想,有没有可能在一个整体性的框架之下全面的去考虑这些问题。最近我们提出了一个想法,我们它叫做学件(Learnware)。这是个什么样的想法呢?很多人可能在自己的机器学习的应用中已经建立了很好的模型,他们也很愿意把这些模型分享出去。那假设我们有一个市场让大家来分享这些模型,以后一个新用户想要做他自己的机器学习应用时,就不用自己从头去建模型,而是可以先到“学件”市场上找一找有没有合适的,可以拿来用做基础。
比如说,用户要找一把切肉刀,那他肯定不会自己从采矿打铁开始重新造一把刀,而是先看看市场上有没有这样的刀,如果有合适的更好,即便没有合适的,比如说找到一把西瓜刀,那他就可以拿回去然后用自己的数据重新“打磨”一下,可能这就成为很适用的工具了。所以,这个想法的关键是希望能够部分重用他人的结果,而不必“从头开始”。
为了达到这个目的,我们设想的学件是由两部分组成,一部分是模型(Model),另一部分是用于描述这个模型的规约(Specification)。模型需要有满足三个重要的要求:可重用性、可演进性、可了解性,规约要能够给模型提供足够的描述。这些在技术上现在大概都有一些初步的想法和探索,今天就不展开了。如果学件真能成为现实的话,可能我们刚才提到的这些问题都可以得到全面的解决。我们期望也许经过10到15年的探索以后,也许我们机器学习可以从“算法加数据”这种形态过渡到未来的这么一种学件的形态。
最后,因为我今天是代表江苏省人工智能学会,用两分钟谈谈我们江苏省的人工智能事业。我们可以做两个判断,江苏省有国内前列的人工智能研究实力,还有国内前列的人工智能产业基础。在国内的各个省市里面,同时具备这两个条件的地方并不多。
下面给大家看几个数据,是关于人工智能研究力方面的一点反映。在2017年的国际人工智能领域的顶级会议IJCAI上,我们中国本土单位的录用论文数首次超过了美国,这个里面各个省区的分布,北京大概占30%。江苏省14%,居第一和第二位。我们再看看过去这几年发展增长的速度,中国计算机学会人工智能大会在2013年的时候,北京录用论文是江苏省的两倍多,2017年江苏是北京的两倍,这在一定程度上反映出过去这么几年的时间里面,江苏的人工智能基础人才发展可能有一个快速的增长。江苏省人工智能学会8月28号在省科协指导下成立,得到了省科技厅、经信委、民政厅等很多单位以及高校科研院所和企业的支持,也反映出各方面对人工智能事业的发展非常重视。
在人工智能时代什么东西最贵?什么最缺?答案大家都很清楚,那就是人工智能人才。可以说,有多好的“智能人工”,才可能有多好的“人工智能”。江苏省在这方面有很好的基础,所以我相信江苏的人工智能事业前途应该一片光明。谢谢大家。
(AI科技评论整理)
人工智能赛博物理操作系统
AI-CPS OS
在“人工智能赛博物理操作系统”(新一代技术+商业操作系统“AI-CPS OS”:云计算+大数据+物联网+区块链+人工智能)分支用来的今天,企业领导者必须了解如何将“技术”全面渗入整个公司、产品等“商业”场景中,利用AI-CPS OS形成数字化+智能化力量,实现行业的重新布局、企业的重新构建和自我的焕然新生。
AI-CPS OS的真正价值并不来自构成技术或功能,而是要以一种传递独特竞争优势的方式将自动化+信息化、智造+产品+服务和数据+分析一体化,这种整合方式能够释放新的业务和运营模式。如果不能实现跨功能的更大规模融合,没有颠覆现状的意愿,这些将不可能实现。
领导者无法依靠某种单一战略方法来应对多维度的数字化变革。面对新一代技术+商业操作系统AI-CPS OS颠覆性的数字化+智能化力量,领导者必须在行业、企业与个人这三个层面都保持领先地位:
重新行业布局:你的世界观要怎样改变才算足够?你必须对行业典范进行怎样的反思?
重新构建企业:你的企业需要做出什么样的变化?你准备如何重新定义你的公司?
重新打造自己:你需要成为怎样的人?要重塑自己并在数字化+智能化时代保有领先地位,你必须如何去做?
AI-CPS OS是数字化智能化创新平台,设计思路是将大数据、物联网、区块链和人工智能等无缝整合在云端,可以帮助企业将创新成果融入自身业务体系,实现各个前沿技术在云端的优势协同。AI-CPS OS形成的数字化+智能化力量与行业、企业及个人三个层面的交叉,形成了领导力模式,使数字化融入到领导者所在企业与领导方式的核心位置:
精细:这种力量能够使人在更加真实、细致的层面观察与感知现实世界和数字化世界正在发生的一切,进而理解和更加精细地进行产品个性化控制、微观业务场景事件和结果控制。
智能:模型随着时间(数据)的变化而变化,整个系统就具备了智能(自学习)的能力。
高效:企业需要建立实时或者准实时的数据采集传输、模型预测和响应决策能力,这样智能就从批量性、阶段性的行为变成一个可以实时触达的行为。
不确定性:数字化变更颠覆和改变了领导者曾经仰仗的思维方式、结构和实践经验,其结果就是形成了复合不确定性这种颠覆性力量。主要的不确定性蕴含于三个领域:技术、文化、制度。
边界模糊:数字世界与现实世界的不断融合成CPS不仅让人们所知行业的核心产品、经济学定理和可能性都产生了变化,还模糊了不同行业间的界限。这种效应正在向生态系统、企业、客户、产品快速蔓延。
AI-CPS OS形成的数字化+智能化力量通过三个方式激发经济增长:
创造虚拟劳动力,承担需要适应性和敏捷性的复杂任务,即“智能自动化”,以区别于传统的自动化解决方案;
对现有劳动力和实物资产进行有利的补充和提升,提高资本效率;
人工智能的普及,将推动多行业的相关创新,开辟崭新的经济增长空间。
给决策制定者和商业领袖的建议:
超越自动化,开启新创新模式:利用具有自主学习和自我控制能力的动态机器智能,为企业创造新商机;
迎接新一代信息技术,迎接人工智能:无缝整合人类智慧与机器智能,重新
评估未来的知识和技能类型;
制定道德规范:切实为人工智能生态系统制定道德准则,并在智能机器的开
发过程中确定更加明晰的标准和最佳实践;
重视再分配效应:对人工智能可能带来的冲击做好准备,制定战略帮助面临
较高失业风险的人群;
开发数字化+智能化企业所需新能力:员工团队需要积极掌握判断、沟通及想象力和创造力等人类所特有的重要能力。对于中国企业来说,创造兼具包容性和多样性的文化也非常重要。
子曰:“君子和而不同,小人同而不和。” 《论语·子路》云计算、大数据、物联网、区块链和 人工智能,像君子一般融合,一起体现科技就是生产力。
如果说上一次哥伦布地理大发现,拓展的是人类的物理空间。那么这一次地理大发现,拓展的就是人们的数字空间。在数学空间,建立新的商业文明,从而发现新的创富模式,为人类社会带来新的财富空间。云计算,大数据、物联网和区块链,是进入这个数字空间的船,而人工智能就是那船上的帆,哥伦布之帆!
新一代技术+商业的人工智能赛博物理操作系统AI-CPS OS作为新一轮产业变革的核心驱动力,将进一步释放历次科技革命和产业变革积蓄的巨大能量,并创造新的强大引擎。重构生产、分配、交换、消费等经济活动各环节,形成从宏观到微观各领域的智能化新需求,催生新技术、新产品、新产业、新业态、新模式。引发经济结构重大变革,深刻改变人类生产生活方式和思维模式,实现社会生产力的整体跃升。
产业智能官 AI-CPS
用“人工智能赛博物理操作系统”(新一代技术+商业操作系统“AI-CPS OS”:云计算+大数据+物联网+区块链+人工智能),在场景中构建状态感知-实时分析-自主决策-精准执行-学习提升的认知计算和机器智能;实现产业转型升级、DT驱动业务、价值创新创造的产业互联生态链。
长按上方二维码关注微信公众号: AI-CPS,更多信息回复:
新技术:“云计算”、“大数据”、“物联网”、“区块链”、“人工智能”;新产业:“智能制造”、“智能驾驶”、“智能金融”、“智能城市”、“智能零售”;新模式:“案例分析”、“研究报告”、“商业模式”、“供应链金融”、“财富空间”。
点击“阅读原文”,访问AI-CPS OS官网
本文系“产业智能官”(公众号ID:AI-CPS)收集整理,转载请注明出处!
版权声明:由产业智能官(公众号ID:AI-CPS)推荐的文章,除非确实无法确认,我们都会注明作者和来源。部分文章推送时未能与原作者取得联系。若涉及版权问题,烦请原作者联系我们,与您共同协商解决。联系、投稿邮箱:erp_vip@hotmail.com