雷峰网 //www.xyschoolife.com //www.xyschoolife.com/resWeb/images/common/lp_logo.png 雷峰网 //www.xyschoolife.com 2015 www.xyschoolife.com All rights reserved. zh_cn Thu, 24 Mar 2022 00:49:51 +0800 科大讯飞研究院,用 「做企业」去理解「做研究」 //www.xyschoolife.com/category/yanxishe/ePlGX2oAnfJNRSOL.html 从企业和AI长期发展的意义而言,企业AI研究院代表着一种企业文化的类型。

企业有其自身独特的品格和历史,也有其适于其成长以及生存的空间,因此有其自身的存在边界和图景。也恰是因为这种长久积淀下来的企业调性,而有了其最具独特性的创新价值。

但难题也接踵而至。如何实现技术与业务同频共振?如何将新技术转化成现实生产力,投入市场完成真正的商业化闭环?

在MIT科技评论发布的《2021年人工智能创新研究院(AI Labs) 报告》中,列出了国内10 家具有技术创新力和引领力的企业 AI 研究院,深究发现,这十大AI Labs,或许提供了解决这些问题三种方案 :

一、以底层技术为基石,探索无界垂直赛道的企业研究院,以讯飞,商汤,腾讯,阿里为代表。它们拥抱城市、生活、汽车、教育、医疗、消费品、工业等各种细分场景,属于智能化浪潮中善走蛮地、敢挤大路的一批企业。它们既互通共享,又一人成伍,在系统性技术创新中解决社会重大命题。


二、关注底层技术,专注某一垂直领域,以微软、华为、百度为代表。它们在AI赋能大潮中迅速找准自己方向,形成微软面向计算革命、华为面向通信智联、百度面向智能汽车的独特版图。


三、面向场景化AI的研究院,以京东、字节、小米为代表,分别面向零售、娱乐和家居场景,挖掘企业多年深耕场景的内在基因,以AI赋能形成技术长板。

道同而术不同,在智能新时代中探索新价值,与社会、行业、市场紧密结合中,一批企业向着垂直赛道纷至沓去,究竟有何独到心法?

其中,科大讯飞研究院以「以系统性创新,解决社会刚需」上榜。遴选理由为:

22年来始终坚持「顶天立地」的理念和追求,通过源头技术创新,在人工智能发展史上树立了语音合成、语音识别、认知智能等多个里程碑,推动智能语音及人工智能走在世界前列。引领推动人工智能技术在教育、医疗、城市、消费品、工业等场景的规模化应用。

究其根本,科大讯飞研究院何以成为?

讯飞研究院:一步一步上台阶

讯飞研究院于2005年正式成立,坚持“用正确的方法、做有用的研究”,研发领域包括智能语音、自然语言处理、计算机视觉、人工智能基础理论等,研发规模达1000余人。

讯飞研究院成立时间早,自科大讯飞在1999年成立,也就有了相应的研究团队,随后在2005年正式成立。

在17年的发展中,科大讯飞研究院主导承建了语音及语言信息处理国家工程实验室、认知智能国家重点实验室等国家级平台,在语音、NLP、CV等领域拥有丰硕的技术成果。

语音领域,主导制定了 全 球 首 个 智 能 语 音 交 互 ISO/IEC 国 际 标 准 , 连 续 多 次 获 得 CHiME 、Blizzard Challenge、IWSLT等国际评测冠军,业界率先实现口语自动评测达到人工专家水平,2021年获OpenASR多语种语音识别挑战赛冠军;

NLP领域,2017年研发的医考机器人全球首次通过国家临床执业医师资格考试,近5年获得20余项国际评测冠军,2021年获吴文俊人工智能科技进步奖一等奖,开源多项前沿NLP模型并被广泛使用;

CV领域,在图文分析、虚拟形象等方向提出十余项原创成果。2021年,科大讯飞发布虚拟人交互平台1.0,推动多模态技术的融合创新。

目前,科大讯飞已获得中国知识产权领域最高奖项“中国专利金奖”,在全球拥有3800+专利,授权专利1800+件,并在 2021年获得中国知识产权领域最高奖项「中国专利金奖」,推动我国智能语音及人工智能技术走在世界前列。

科大讯飞技术聚点成面驱动源头技术突破,既在树立人工智能发展中的「里程碑」,也在成为人工智能突破中的「国家队」。

从单点技术突破到系统性创新

2010年,讯飞率先发布讯飞语音云平台,2017年升级成为智能语音国家新一代开放创新平台,在今年第五届全球1024开发者节上,讯飞又推出开放平台2.0战略、企业讯飞数字化平台、《1024计划》等一系列技术成果。

基于讯飞开放平台的2.0战略,讯飞将联合行业中最有资源和平台能力的行业龙头共同来搭建行业的基线底座,在此之后,将众多场景开放给开发者。

目前,讯飞开放平台2.0战略面向18条赛道重点发力行业低代码、零代码开发。讯飞在端到端建模、无监督训练、多模态融合、外部知识融入四个主要领域带来了众多技术创新,截至2021年12月31日,讯飞开放平台已开放449项AI产品及能力,聚集超过 293万开发者团队。而全新《1024计划》在源头创新、场景共创、共享生态、践行公益四个方面重点发力。

独行快,众行远。这句颠扑不破的老话,在智能化时代中削减了几分“不是、而是”的意味,演变成一种“既要、又要”的生存之术。

科大讯飞高级副总裁,研究院院长胡国平

“我们会有一些自己专注的赛道,但我们更多的还是把我们的核心的AI能力,能够用开放平台的方式去开放给更多的开发者和合作伙伴,由他们去找他们自己擅长或熟悉的行业和场景,去实现AI的赋能和落地。”科大讯飞公司联合创始人兼研究院院长胡国平说到,这就是科大讯飞的打法和战略。

科大讯飞董事长刘庆峰

同样, 科大讯飞董事长刘庆峰曾说到,“当前,人工智能的发展正面临着场景驱动、数据支撑、技术驱动、资本助推四大机遇。我们一直坚定不移地认为,只有企业愿意开放出自己的资源和能力,形成产业链与生态体系,才能够生生不息地发展。”

讯飞希望让各个领域的开发者在开发各个行业的应用时,几乎不用了解核心技术,可以通过自由编排、可视化的逻辑处理来解决行业关键问题。

技术更好用,一是打造开源通用平台,与合作伙伴和开发者一起搭建人工智能时代的新基建,推动人工智能落地。二是当硬科技产业成熟以后,机会肯定会转移到各种应用创新层。

这就是科大讯飞秉持的“平台+赛道”的市场战略。科大讯飞研究院,在寻找更多的可能。

从技术中来,到产品中去

胡国平院长多次提到,“从技术中来,到产品中去。”

落地产品,多条赛道摆在面前。现在,讯飞研究院正在推进AI落地在教育、医疗、城市、生活、工业等场景的规模化应用。

以教育领域举例,科大讯飞早先关注到“规模化教育与个性化培养”的教育变革,适逢2021年教育双减的政策推出,顺势推出全新力作,关注中小学生教育的AI学习机。

刘庆峰表示,“我们一直在思考和探索人工智能的技术进步到底能给孩子带来什么?如何真正实现我们一直期待的因材施教、减负增效,实现教育的优质均衡?”

今天,我们有更多的教育大数据来帮助分析。

科大讯飞承担了中国教育部和国家发改委联合启动的教育大数据专项,统计了35亿次孩子的作业,走访了16个城市、5500名用户,汇聚了1万多条客户建议,最后合并同类项、确定权重,发现60%的作业练习是无效的、低效的、重复的。

普惠制教育下,不同的孩子做的是同样的练习题,老师和孩子不知道彼此的学业能力和提升方案。

如何做到教育平等地面向每个人、适合每个人、伴随每个人的教育?

科大讯飞将这个问题落脚于两点:AI学情诊断,AI成长守护。

进一步说,AI学情诊断功能一方面可以帮助教师减负增效,通过智能扫描批改试卷,快速找到学生快薄弱环节,进而有针对性地帮助孩子学习和巩固。另一方面,AI学习机创造了学生自主学习的技术条件,比如在1对1口语辅导,作文批改等难以定量的学习内容上,讯飞借助语义理解和推理技术,将个性化学习功能引入日常生活,为每个孩子规划出最优的提升路径。 

另外,在孩子的学习成长中,学习机围绕家长关心的视力、坐姿、学习兴趣做了大量细节工作,比如在这款AI学习机中,搭载了一体式升降1600万双目前摄和内置的多颗传感器,推出跟随环境光源自动调节为护眼的低蓝光屏幕、防眩光的纸质书写膜、通过AI作答笔预测学习体态。

这背后,是讯飞研究院持之以恒的技术沉淀和应用决心。

从上世纪语音合成达到可用水平,到本世纪第一个十年启动语音评测、语音识别;第二个十年推动语音交互、语义理解、脑科学研究;第三个十年大力启动多语种研究和多模态融合交互技术,科大讯飞正在走一条“嘴巴唤醒大脑”、“大脑调动四肢”的进化道路。

同样,科大讯飞也希望用更智慧的AI,释放人类更大的创造力。

回过头看,“我在讯飞做了20多年的技术,我们讯飞研究院在干什么事情?”胡国平院长向自己求索,也向企业求索。

“第一,我们不是做语音的,我们是做深度学习算法的。

第二,我们不只是做技术的,更关键的是去预测未来两三年什么样的技术可以从不可用的状态或者说从实验状态变成可用好用,跨过使用门槛。”

科大讯飞研究院执行院长刘聪谈道,“十七年来, 有幸经历了从几个人到1000多人的发展历程,亲自见证了讯飞研究院的探索、成长、突破、重构、革新等不同时期的关键阶段。

新的一年,新的时代,讯飞研究院将责无旁贷继续前行,用系统性创新解决重大社会刚需,立志于代表中国成为世界一流的研究院。”

未来,讯飞研究院依然会坚持深耕,「用正确的方法、做有用的研究」,继续推动推动智能语音及人工智能走在世界前列!

雷峰网雷峰网

]]>
人工智能开发者 //www.xyschoolife.com/category/yanxishe/ePlGX2oAnfJNRSOL.html#comments Thu, 06 Jan 2022 20:48:00 +0800
实现开源商业化的「拦路虎」,是企业对待开源的错误态度 //www.xyschoolife.com/category/yanxishe/YtirReEbva67RMj6.html 「国内企业必须认识到开源的价值,重视开源。」堵俊平谈道。

所谓「开源的价值」,包含两个层面的意思:一是开源软件对企业发展的助益,二是企业对形成良好开源生态的反哺。

前者的例证不胜枚举,国内大多互联网公司的蓬勃发展离不开「LAMP」(Linux、Apache、MySQL、PHP)的支持,也有越来越多企业拥抱开源。然而,国内开源发展至今,仍没有形成较好的商业闭环,大多企业对开源的态度是「能蹭则蹭」,为开源付费以及贡献的意愿普遍较低。

对此现象,最直接的佐证是:相比欧美,目前中国仍没有一家类似Databricks、Redhat这样估值高达几百亿美元的开源创业公司。Databricks成立于2013年,是一家顶级高校走出来的创业公司,目前已创建了一系列蓬勃发展的开源项目,比如Apache Spark以及Delta Lake等。

堵俊平是开源领域的资深人士,目前在华为担任云与计算开源业务总经理,同时担任开放原子开源基金会技术监督委员会主席、LF AI & Data 基金会主席,早年间曾是国内第一位在Hadoop项目中入选Committer的开发者。

结合在开源领域的多年耕耘与观察,堵俊平与AI科技评论探讨了他对国内企业参与开源发展的现状。他指出,目前很多企业仍是奉行「拿来主义」与「免费主义」,对开源软件采取「只使用不维护」的态度,这既没有发挥好开源的价值,也没有做好开源。最终,企业要背负越来越多的「技术债」。

要打破这种局面,企业必须学会「买票进场」,对开源进行合规管理。


1、国内企业普遍缺乏「为开源贡献」的意识

如今,开源已经渗入各行各业,成为企业技术创业的源动力之一。

除了TensorFlow与PyTorch等人工智能框架开源,全球企业在其他软硬件设施上的开源也发展地如火如荼:针对云计算管理的OpenStack、面向大数据的Hadoop与Spark、云原生Kubernetes……

近年来,我国企业也积极参与开源,在开源项目与开源社区上做了许多工作,比如华为昇思与欧拉、百度飞浆、旷视天元……不久前(12月22日),由腾讯、浪潮、OPPO等20余家厂商成立的操作系统开源社区OpenCloudOS又成立。这些都昭示着,中国企业的角色逐渐从开源的受益者向开源的贡献者、甚至推动者转变。

随着近几年国内的头部IT企业的管理者对开源越发重视,但据堵俊平观察,国内开源仍然面临着「叫好不叫座」的尴尬处境:一方面,同质化项目不断增加,造成特定场景用户的分流,比较难形成资源的积聚效应;另一方面,成功的商业开源项目凤毛麟角,国内在探索出有效的开源商业模式之路上仍有较长的路要走。

InfoQ曾总结国内企业对开源存在的两大误解:

  • 免费:开源软件都是免费的,企业无需为开源软件付费,导致商业发行版市场空间降低。

  • 合规:开源软件可以随意使用和 fork,导致企业技术债和安全漏洞频发、挤压商业发行版市场空间。

在IT产品逐渐云服务化的过程中,要想紧跟业务的需求,就必须将基础设施进行快速迭代,以适应业务的市场竞争。开源便是其中的一个重要推手。

向外输出IT服务的大公司,如华为、腾讯、阿里等,必然要参与开源,因为当开源成为大势所趋,如果对开源缺乏了解,那么很难向客户销售服务。而对于不向外销售IT类产品的公司,即使只做上层应用,下层仍需要使用大量软件。

从表面看,开源是免费的,但随着IT系统的技术越来越复杂,使用软件的隐性成本也在逐渐增加,对开源的后期维护便是其中之一。

「我们做软件的都知道,不存在没有bug的软件,开源软件亦然。无论是安全性还是功能性的漏洞,都是无法避免的。」堵俊平说道。

据美国网络安全公司Snyk发布的《2019年开源安全现状调查报告》显示,78% 的漏洞存在于间接依赖关系中;37% 的开源开发者在持续集成(CI)期间没有实施任何类型的安全测试,54%的开发者没有对 Docker 镜像进行任何安全测试;两年内应用程序的漏洞数量增长了 88%。

链接:http://www.199it.com/archives/839573.html

鉴于上述情况,业界在使用开源软件时,必须进行维护更新。途径无非两个:要么投入力量参与开源、贡献开源,与上游社区紧密结合,上游有bug、立刻修复;要么直接购买第三方企业的专业服务——这个需求也孵化了一批开源初创公司。

然而,当前国内企业对开源软件的维护更新意识并不强。在利害严峻的领域,比如金融行业,软件(无论是否开源)漏洞所造成的损失会非常巨大。而这样的损失往往与从发现漏洞到修复漏洞的时间成正比。

如果这样的开源关键技术,例如数据库,应用在关键的业务上,却没有投入专业人才进行维护,也没有购满专业团队的技术服务来进行维护,一旦漏洞引发上层应用出现问题,却不能及时得到解决,出现的损失则是天文数字。「这不得不引发我们对当前现状深深的担忧。」堵俊平谈到。

如果将开源软件比喻为「自来水」,开源商业公司是「自来水厂」,那么国内开源的短板就在于没有形成一个「使用开源需要付水费」的机制:

「大家拧开水龙头,有水就用,但没有维护。后来自来水厂破产了,破产后,水龙头流出来的水还会是过去有人精心维护、净化过的水吗?自然不是了。」堵俊平谈道,「目前我国千行百业都还没有深入认识到这个问题,只有几个头部IT大厂在重点推动。」

今年10月,为了提升金融企业对开源管理的意识,中国人民银行等五部门发表了关于规范金融业开源技术应用与发展的意见,指明了在使用开源软件中投入维护的利害性。

相较而言,欧美在开源的商业闭环上做得较为成功,在开源中,厂商、开发者、开源公司等均能通过自己的贡献来获得商业回报,但中国在开源商业化一块仍是乱象丛生。

「中国没有Databricks这类成功的开源商业公司,是因为中国的开发者笨吗?不是的。是因为大家觉得能免费用就用,能蹭就蹭,在用户价值一环没有完成闭环。」堵俊平总结。


2、开源应像「热带雨林」

堵俊平认为,将开源比喻成一片亚马逊原始森林。在开源的世界里,有大公司、小公司,也有新创立的公司:

「亚马逊的原始森林发展地这么好,正是因为它蓬勃、有生机,其实开源也是这样。开源当中需要大树、河流,也需要各种各样的小树、蘑菇、菌菇等等,形成一种共生的关系。我认为开源的好处就是,大家可以在一种充满各种可能的环境中蓬勃生长。」

为了提高企业对开源价值的意识,华为在今年9月发起「开源雨林」计划。

一般来说,开源工作都是从供给侧讨论开发者或厂商对开源社区的贡献,而「开源雨林」是希望从消费侧引导企业正确认识开源、理解开源,从而完成较好的开源循环。

具体而言,华为将联合第三方机构把相关的理论和案例总结为若干门开源专业课程,以授课的方式让企业快速具备实战基础。同时,华为也会选择和部分伙伴与客户共建开源能力中心,或者采用联合创新项目的方式完成企业开源相关的组织和流程搭建,让这些企业具备开源实战能力。

作为开源社区的贡献者、同时又是厂商的开源策略决策者,堵俊平表示:「开源供给侧与消费侧的工作我都有在做。在开放原子基金会与 LF AI & Data 基金会,我是推动更多好项目去开源。在应用侧,我希望做的事是引导国内的企业理解开源的价值,投入到开源的创新中。」

从某种意义上来说,开源的合作性质与商业的竞争性质是相互矛盾的。为了平衡企业在开源中的竞争关系,建立公平、开放、透明的开源社区氛围是必要的;同时,发展具有中立性的基金会也是必要的, 如开放原子开源基金会、LF AI & Data基金会。

此外,企业参与开源的形式也有许多。堵俊平介绍,在国外,有些企业长期不直接参与项目的开源,而是将开源项目云服务化,进而从中获取利润。「虽然这不是传统观念中的开源贡献,开源领域对这种方式也褒贬不一,但至少它成功促进了开源项目的推广,也证明开源项目具备商业价值,具备产业化的能力。」

根据信通院发布的 2020 开源生态白皮书显示,2019 年,超半数企业使用开源软件应用于数据库方向,云计算领域已普遍应用云计算开源技术,超七成的企业应用开源容器技术,超六成的企业已经应用或正在测试微服务框架。

云计算是近年最火热的商业模式之一。堵俊平认为,在云时代,开源会对各个行业产生巨大影响。

云的核心是将IT产品互联网服务化,这就意味着为了提高效率以及简化使用,需要有一些标准,将云厂商之间的相似服务合并,在数千种服务中形成数十个颗粒度大的标准服务,从而覆盖所有的用户需求,而开源能很好地解决这个问题。雷峰网

「因为开源的本质是通过大家开放合作与竞争,最终形成对行业或领域的事实标准。对于用户而言,他可以免费获得,用起来,好的东西就不会被垄断。大家都愿意去形成一个趋势。所以开源是一个『能让好用的软件产品能够成为一个事实标准』的好手段。」堵俊平评论。

而与此同时,云对开源来说又意味着什么?

从上世纪六七十年代至今,开源已走过半个多世纪,经历了「个人英雄主义」到「企业成为开源主力」的鲜明转变。企业要持续进行开源,不去商业化是不可能的。

开源商业化有许多变现途径,云服务化是越来越普遍的方式。虽然开源是免费的,但将开源软件搬到云上、与基础设施进行深度融合以后,开源软件便成为「所见即所得」,开箱即用,完成商业闭环,真正产生应用价值。雷峰网

换言之,开源能够持续发展,也需要云计算这样的创新商业模式。


3、结语

有数据显示,中国的 500 强企业中,有超过90%的企业没有真正了解开源,参与开源贡献的仅十几家。相比而言,全球500 强企业中有 79.2% 了解开源,并且 22% 参与了开源贡献。

如果将开源比作一座戏院,看戏的人不买门票进场,而是千方百计找后门,终有一天,戏院也会倒闭。国内开源要走出「叫好不叫座」的尴尬处境,除了头部厂商的引领,最终还是要依仗各大中小企业的实际参与。雷峰网

开源界有一句流行语:「开源不是零和游戏,你在帮助别人的同时也在帮助你自己。」

「拿来主义」在开源领域的诟病由来已久。随着开源生态的愈趋完善,企业将越来越多地受到开源的影响,时代也在呼唤「贡献者文化」。这时,如果只是伸手、而对回报缄口不言,将是逆潮流而行。而我们都知道,违背事物发展规律是要受罚的。

与其他日遭受血泪教训,不如尽早未雨绸缪罢。

参考链接:

1、https://segmentfault.com/a/1190000039079846

2、http://www.cac.gov.cn/2021-10/27/c_1636928705274546.htm

3、http://www.199it.com/archives/839573.html

4、https://xw.qq.com/cmsid/20211008A05VSZ00

]]>
人工智能开发者 //www.xyschoolife.com/category/yanxishe/YtirReEbva67RMj6.html#comments Fri, 24 Dec 2021 10:00:00 +0800
4K葫芦娃重生的秘密,藏在火山引擎里 //www.xyschoolife.com/category/yanxishe/LoDi9h56hFdsh9JY.html

很快,远处的一个黑点变成了清晰的火车头,形形色色的旅客们涌了上来。


火车减速,沿月台缓缓停下,车厢门打开,奥古斯特·卢米埃尔夫人领着两个穿白衣服的孩子走进了车厢......紧接着,一个穿洁白冬装的少女走了过来,无意间看到了摄像机,她流露出害羞的表情,悄悄的躲过了镜头......

没有复杂的拍摄技巧,没有丰富的电影语言,一个简单的火车进站的纵深镜头,真实呈现了19世纪90年代法国旅客候车时的情景。

这部《火车进站》是由卢米埃尔兄弟执导的世界上第一部电影,只有50s的黑白无声影片在当时那个年代给人们带来了极强的新鲜感,如今经过4K修复仍有一种浓厚的历史韵味。

电影修复技术经过20年的发展,使大量经典、重要且珍贵的胶片电影摆脱了蒙尘的命运。《海上钢琴师》《永不消失的电波》《英雄本色》《阿飞正传》等影史经典以全新的面貌重映银屏,带回了一代人的青春记忆,也展现了老电影独特的魅力。

《永不消失的电波》4k修复剧照

4K修复既能保留胶片电影特有的质感,又能适应电影的数字化,可以说是胶片时代过渡到数字时代的良好选择。然而,这些经典电影“旧貌换新颜”的背后却是巨额的成本投入,电影修复一直都是一门大产业。

一部影片要想完成4K修复起码需要两三个月、甚至半年之久。而“周期长”意味着“成本高”,影片《决胜时刻》从修复、投资到上映大概花了上千万,詹姆斯.卡梅隆的传世之作3D版《泰坦尼克号》更是耗资6千多万元。

除了高额资金成本,人力短缺也是4K修复的一大桎梏。《开国大典》中一段10分钟的镜头片段动用了600个人,而且这些人不仅要对电影艺术有很深的了解,更要知晓胶片的物理性质、化学性质、软件修复技术以及电影特效等专业知识。

对于浩如烟海的胶片电影而言,修复工作是一项与时间赛跑的“抢救工作”。

近日,西瓜视频与火山引擎共同发布了“经典中视频4k修复计划”,表示在未来一年内,将与央视动漫和上海美术电影制片厂合作,共同利用4K技术修复《舒克与贝塔》《西游记》等 100 部家喻户晓的经典动画。

哪吒传奇(2003)、围棋少年(2005)、围棋少年(2)、大头儿子和小头爸爸(1995)、小鲤鱼历险记(2007)、我为歌狂(2001)、葫芦兄弟(1986)、三个和尚、小蝌蚪找妈妈、 黑猫警长1-5集、九色鹿、舒克和贝塔1-13集、没头脑和不高兴1-26集、邋遢大王奇遇记1-13集、西游记、魔方大厦1-10集、猴子捞月、大盗贼1-8集、葫芦小金刚1-6集、南郭先生、曹冲称象、大耳朵图图(第一季)、人参娃娃、镜花缘1-4集、小鲤鱼跳龙门、东郭先生、鹬蚌相争、老狼请客、咕咚来了、崂山道士、 半夜鸡叫、十二生肖1-13集、小虎还乡、骄傲的将军、超级肥皂、济公斗蟋蟀 、人参王国、阿凡提的故事1-13集、过猴山、大英雄狄青1-52集、狼来了等100部影片。(修复后的内容,用户可免费在西瓜视频观看)

发布会上,针对当前4K电影修复成本高、周期长、人力短缺等缺点,火山引擎多媒体实验室研究员赵世杰给出了火山引擎“智能处理”解决方案。他表示,通过超分辨率、智能插帧、色彩增强、降噪等自研算法,AI能够大幅提升老片的修复效率和质量。

4k修复,还原艺术本色

发布会上,哪吒、葫芦娃、黑猫警长,一个个经典形象以超高分辨率出现在大屏幕上,每个画面细节都被完美呈现,光影层次也变得流畅,给现场观众带来了不一样的童年感受。

所谓电影修复,其实就是将年代久远的胶片电影重新拷贝到数字载体上,通过修复、降噪、补光、调色等技术处理,还原和优化影片原貌的过程。

2k技术是早期电影修复的主要手段,用于清除影片杂质、噪音,让画面恢复最初的视觉质感;4k技术在分辨率上要求更高、更精细,除了清晰度和流畅度外,注重影片的原始色调和光影层次,为观众打造身临其境的感觉。

2014年上映的《舞台姐妹》是国内首部4K修复电影,这部4K扫描、4K输出的全彩修复影片令当时的观众耳目一新。后来随着修复技术的日臻完善,2019年上映的修复版《那人那山那狗》《滑铁卢战役》《决胜时刻》接连成为电影市场的现象级作品。从这一年开始,4K修复版电影开始走进大众的观影生活,电影修复技术也正式由“2K时代”迈入“4K时代”。

尽管有了AI,4k电影修复仍是一项艰难且繁重的任务。赵世杰介绍,受到拍摄条件和胶片保存、使用过程中的损伤等因素影响,老电影普遍清晰度低、流畅度低、色彩失真、有瑕疵等不同程度的画质问题。

在过去,老电影主要采用胶片作为拍摄和存储的介质。早期胶片的材料是一种比纸更易燃的硝酸片基,后来发展出醋酸片基、涤纶片基取而代之,但不管是哪种片基,在常温状态下都很难保存,温度、湿度以及搬运移动、使用播映外部因素很容易造成胶片损伤。

图源:北京商报

目前中国电影资料馆保存了近3万部胶片影片资料,这些胶片由于年代久远,保存条件不够理想或者转印、播放次数过多等原因,普遍存在着灰尘、污垢、霉斑、掉色、图像抖动、划痕、闪烁、噪声、变色、模糊等各种问题。

而胶片质量直接影响着人工修复的难度和时间成本。正常情况下,一位熟练的修复师一天最多可以修复200帧画面,但如果胶片保存不佳,脏污、裂痕、变色等问题严重,修复师一天可能只能修复一秒(24帧),再者,如果画面涉及夜戏、雨戏、烟雾戏、特效戏等复杂场景,修复周期更是成倍增加。在2019年上映的4K修复版《开国大典》中,一段拍摄于1945年和1945年之前的片段,全长只有10分钟,占用了整个修复团队70%的时间。

由于胶片质量和所用时间不同,修复的花费也不尽相同,但一部90分钟标准时长的4K影片修复通常需要百万人民币以上,且从物理修补,数字化转换,再到声画合成、调色,整个修复过程难度不亚于制作一部新片。

其实抛开成本问题,电影修复最大的难题是如何保留影片艺术风格和美感,4K修复版电影曾一度因为颠覆胶片的美感而引发争议。一部老电影,经过漫长的岁月侵蚀,早已变得暗淡模糊,通过AI技术把它修复得光鲜漂亮并不是难,难的是如何还原原来老电影的感觉。因此,如何赋予AI以“艺术修养”,是火山引擎所要攻克的核心问题。

四大智能算法,用“实力”让情怀落地

“不管是修复动画片,还是修复老电影,归根到底,都不只是为了提高它的清晰度,而是修复这些内容背后的记忆,通过这些记忆在几代人之间产生共鸣和火花,才是修复的价值所在。”西瓜视频总裁任利锋表示,经典作品凝结了老艺术家的智慧与精神,需要我们真实地去还原和呈现。

在首批修复的动画作品中,经典水墨剪纸动画《葫芦兄弟》也在其中,这部根据民间文学《十兄弟》改编的极具神话色彩的动画片,是70、80后的共同回忆。为了保留水墨和剪纸独有的艺术感,赵世杰坦言,他们修复《葫芦兄弟》时多次与制片方讨论方案,经过反复测试和调优才达到理想效果。

在算法方面,为了防止“误伤”水墨朦胧的艺术效果,他们在消除瑕疵算法上没有设置很高的强度,而是“故意”漏掉一部分瑕疵交由人工辅助处理。对损伤严重的老片来说,彻底消除瑕疵需要投入大量人力。火山引擎修复数据显示,算法能够直接消除95%以上的瑕疵,余下的经过人工标注后再调整算法做二次优化。

据了解,此次4K修复使用了火山引擎智能处理产品中的部分技术能力,通过超分辨率、智能插帧、智能降噪、色彩增强等算法增强视频画质。其修复过程大致为,先利用视频降噪算法做前期处理,再进一步通过几类不同的超分辨率算法增强将画幅扩大到4K分辨率,并生成更精细的细节,最后再通过插帧算法网络和HDR重制算法,将一个原本充斥着噪声和压缩损伤问题的视频增强为一个主观画质舒适的4K 60帧HDR节目。以下为各项功能及优势的简单介绍:

智能超分:根据已有的图像、视频信息重构缺失的细节,解决老片普遍存在的模糊、清晰度差、分辨率低的问题。

超分辨率 (Super-Resolution,简称超分)在视觉处理方面的广泛应用,使其有了非常成熟的解决方案。火山引擎的技术创新主要体现在时域建模和自适应处理。前者可自动生成恢复出额外的细节,后者可对视频或图像进行“区域分片”处理,以确保不同视频/图像区域的风格和美感。

智能插帧:使用深度学习算法,将低帧率视频通过插帧的方式变为高帧率视频,让视频变得更顺滑流畅。

老动画片容易出现卡顿、流畅度不佳的现象,主要是因为影片绘画帧数少。智能插帧技术的功效就是通过分析前后帧的动态和内容,生成中间帧,进而提升视频帧率和流畅度。关于动画纹理少的问题,现阶段的解决方案难以判断前后帧对应的运动块,针对这个问题,火山引擎采用块光流进行优化,提高了插帧的精准度。

视频降噪:消除胶片存放以及转录过程中带来的各种噪点以及闪烁等缺陷。

常见的视频降噪算法在消除噪声的同时,容易对纹理区域有破坏,火山引擎方案通过对纹理、噪声的智能分析,在去噪的同时尽可能地保留视频原有纹理不受影响。

划痕修复:对视频中胶片的划痕损伤进行识别和修复。

对于常见的胶片划痕,考虑到修复难度和效果,火山引擎采用了“算法+人工”相结合的解决方案。从现有研究来看,如果使用纯AI技术进行修复,密集且微小的划痕很难被全部发现,也容易出现“误伤”的情况;相对来说,人工修复的效果会更好,但它需要更多的时间和资金,效率反而降低了。火山引擎的方案是先使用算法初步修复小划痕,人工标注算法再“查漏补缺”,修补大的划痕,实验证明,算法对通过人工标注的结果进行再修复,所达到的效率和效果都是最优的,而这一点也恰好体现了火山引擎“虽有先进音视频技术,却不唯技术”的理念。

锯齿修复:针对影片下采样时出现的锯齿线条和频谱混淆,有针对性设计了一个独立算法。

锯齿修复所要解决的关键问题是锯齿定位。与划痕不同,并不是每一张图像都会出现锯齿线条。火山引擎多媒体实验室团队经过多次尝试和实验,发现锯齿效应通常是由数字化扫描不精准引入的,目前业界的修复算法和工具都没有相对应的解决方案。所以火山引擎针对性地设计了一套优化算法,使锯齿的修复效果得到了很大的改善。

SDR To HDR:针对质量较低的视频,从色彩、对比度、细节及画面层次等维度进行分析,对低质问题进行自适应处理,提高源视频的质量和转码后视频质量。

无论是产业界,还是学术界,从现有的SDR视频中恢复更高动态范围和色彩广度的HDR视频的需求一直在持续增长。一般来讲,如果标准动态范围没有太大提升,很可能就会出现画面像素过多,质量不高,且无法呈现更丰富的层次和细节等影响。与SDR相比,高动态范围(High Dynamic Range,HDR)可以提供更丰富的细节,更宽广的色域和更自然的色彩过渡,呈现更高品质的的图像。

火山引擎,与生俱来的视频能力

火山引擎是字节跳动旗下的企业级技术服务平台,围绕音视频技术搭建了视频点播、veImageX、企业直播、视频直播、实时音视频、云编辑、智能处理于一体的视频云产品矩阵。视频云属于火山引擎中台层面的服务,其最大的优势是拥有抖音、西瓜视频、今日头条等实战场地,能够在丰富的场景下不断迭代、打磨音视频能力。

火山引擎视频云产品负责人Keith此前在接受媒体采访时表示,“我们会在抖音和西瓜场景中,不断去探索视频播放体验的极致,同时解决这个过程中出现的大规模问题。而这些问题的解决方案,我们会把它沉淀成方法论,然后融合到火山引擎视频云的产品中去。”

所有音视频产品发展到一定规模后,其突破点一定是“细节”的处理,早在2016年,字节跳动就上线了大规模测试平台A/B测试,为字节跳动算法和产品提供检验和优化的平台。A/B测试连接抖音、西瓜视频等全线业务后,每天开展上万场测试,单日新增实验数量最高超过了1500个,覆盖500多个大大小小的业务。此次4K修复技术用到的智能插帧、智能超分、智能降噪等算法已经过了A/B测试及多平台多场景的千锤百炼。

标准被誉为高科技产业王冠上的宝石。谁在标准中拥有更多专利,在产业中就拥有更大的话语权与主动权。正因为如此,各大科技巨头都高度重视标准制定,将相关专利技术视为核心资产。

在国际标准H.266/VVC贡献者排行榜上,字节跳动排名第三,仅次于高通和华为。

作为一家没有参与上一代视频编解码标准开发的互联网公司,字节跳动实现了从标准跟随者到制定者的跨越。而在新一代视频编解码标准制定过程中,字节跳动发起的100多项技术提案获得H.266/VVC标准采纳,形成一系列原创性技术。

除了标准化工作的重要贡献之外,火山引擎多媒体实验室团队在H.266/VVC商业化落地方向也做出了积极的贡献。

早在2019年6月,火山引擎已经完成满足点播场景应用的自研编码器BVC第一个版本,该版本与x265编码器相比,在相同计算资源下,针对大量的1080p高清视频,BVC编码器可以将平均码率下降33%。之后,BVC经过不断迭代,性能又有大幅提升。除了自研编码器,自研解码器也已经配套完成,在高端手机上可以做到实时流畅播放高清和超高清视频。

H.266标准之后,火山引擎对视频编码技术仍在进一步探索,目前侧重的两个方向,一个是基于新兴深度学习的视频压缩(也包括深度学习和传统混合视频编码框架的结合),另外一个是基于传统混合视频编码框架技术的继续挖掘。尽管还只是刚刚开始,但已经取得了突破性的进展:

  • 基于深度学习的自适应滤波器DAM算法,获取15%以上的性能增益;

  • 基于混合视频编码框架融合多项技术,获得超过13%以上的性能增益。

其中,自适应滤波器(DAM)算法,主干是基于残差单元堆叠的深度卷积网络,辅以自适应模型选择以最大程度适应特性复杂的自然视频。所谓残差单元是指通过引入跳层连接,允许网络把注意力放在变化的残差上,这与视频图像帧之间的残差有异曲同工之妙,比如武林高手决斗,“剑光一闪”,每一帧图像绝大部分内容是相同的,闪动的剑光形成残差,这也是视频编码压缩的重点关注对象。

实验结果显示,相比H.266/VVC最新标准,字节跳动的DAM解决方案能够为视频编码性能带来显著提升,亮度信号Y可实现10.28%的性能增益,两个色度信号U和V,性能增益也分别达到28.22%和27.97%,在视频质量有所优化的同时,至少还可缩小13%的数据体积。

火山引擎多媒体实验室的各项研究成果,也将通过BVC编码器的升级换代投入应用,包括抖音、西瓜视频、今日头条等 App的视频类内容处理,以及云计算、云游戏等基础架构领域,为用户带来更高清画质、更流畅的视频体验。

小结

火山引擎定位为字节跳动对外提供技术服务的窗口,从统一的基础服务、技术中台、智能应用和行业解决方案四个方向面对B端提供技术支撑。在过去九年,字节跳动沉淀了大量增长方法、工具和技术能力,这些能力在火山引擎上有机地组合成为了 60 多款单品,被统称为『智能增长技术』。如今数字化转型和企业服务行业迅猛发展,火山引擎『智能增长技术』亟需走向市场,接受打磨和考验。

火山引擎启动大规模修复经典4k中视频,扩大了其音视频能力的应用范围,同时也为推动中国文化遗产保护做出了贡献。老电影修复是一项与时间赛跑的“抢救工作”,很多珍贵、重要的经典影片遗产再不修复就毁了。 2006年,中国电影资料馆牵头启动“电影档案影片数字化修护工程”项目,率先开始了发现、收集、拯救、保存中国胶片电影的工作,截止目前已经修复了500多部2K以上的国产电影,但要想赢得这场“竞赛”,提升AI技术能力终究是根本解决之道。

雷锋网雷锋网雷锋网

]]>
人工智能开发者 //www.xyschoolife.com/category/yanxishe/LoDi9h56hFdsh9JY.html#comments Thu, 21 Oct 2021 18:53:00 +0800
百度吴甜:首席AI架构师培养计划持续为行业输送高端复合型AI人才 //www.xyschoolife.com/category/yanxishe/K9JymeYlhIMuV09V.html 10月15日,深度学习技术及应用国家工程实验室与百度联合发起创办的AICA首席AI架构师培养计划第五期在京迎来开学典礼,来自能源、制造、金融、互联网、零售等13个行业领域的66位企业CTO及技术高管学员正式开启首席AI架构师成长之旅。

以人工智能为代表的新一代信息技术,将成为我国“十四五”期间推动经济高质量发展、建设创新型国家,实现产业智能化的重要技术保障和核心驱动力之一。加速产业科技创新,需要产业生态链多角色协同,既需要建设基础共性平台持续降低技术应用门槛,让更广泛的使用者可以便捷应用,还需要培养新一代复合型AI人才。基于此,AICA首席AI架构师培养计划统筹了百度及飞桨的顶级技术专家、产业应用经验和生态赋能资源,推动树立产业AI人才培养标准,助力产业解决高端AI人才培养的难题。

百度集团副总裁、深度学习技术及应用国家工程实验室副主任吴甜在AICA五期开学典礼致辞

开学典礼现场,百度集团副总裁、深度学习技术及应用国家工程实验室副主任吴甜谈到,各行各业拥抱AI,人才建设需先行,产业亟需培养集业务理解、技术理解和工程实践为一体的复合型AI人才。AICA自2019年启动以来,经过四期,已向业界培养了190名AI架构师,遍布数十个行业。本期学员所属的行业与场景呈现出更多元和前沿的特点,所关注的AI与业务的融合问题更加具体且深入。吴甜表示,希望学员学习理解技术的本质和能力边界,将其用于解决真实场景中的真实问题,在实践过程中积累经验和提升能力。

AICA首席AI架构师培养计划第五期通过层层选拔,最终录取了包括中国石油、国家电网、中国石化、霍尼韦尔、中国海油、法国电信、光大银行、东方航空等企业的66名学员,企业首席技术官与科学家等高级技术管理者占比91%,500强企业学员占比较往期提高一倍,学员的背景经验和能力模型向着更AI专业化、工程化方向的交叉融合扩展。

AICA首席AI架构师培养计划第五期开学典礼现场

百度深度学习技术平台部高级总监马艳军对人工智能时代下的AI架构师进行了深入解读。AI架构师是AI产业化落地催生的新型复合人才,需要具备对AI技术和开发应用流程的整体掌握能力、对业务问题进行技术抽象的能力和设计并实现高效合理的AI落地方案的能力。此外,AI架构师还要具备综合素质,即对技术团队有很强的AI技术影响力,也能从整体上构建以AI为核心的技术体系,充分发挥AI技术对业务的助力作用。

AICA首席AI架构师培养计划首批飞行助教 

据介绍,AICA首席AI架构师培养计划的教学方案包含4次线下闭门核心课程、若干选修课程及活动,学员将通过开题报告、专家授课、项目研讨、毕业答辩全流程,积极推动企业AI项目落地应用。本期课程设置在保留以往核心课程、内部助教全程常驻等设置下,还重磅推出引入“飞行助教”。飞行助教是从往期毕业的190名AI架构师中,结合专业技术、产业落地等综合能力,邀请的10位优秀AI架构师,他们将在之后的四个月时间里,为学员不间断地进行产业落地咨询和技术指导。 

现场,浙江能源集团技术研究院朱凌风、中国资源卫星应用中心应用服务部副部长李俊杰分别作为AICA往期优秀学员和新学员企业领导代表进行发言。朱凌风表示,在课程中,学员可以与百度技术专家、架构师深度交流,能够结识各行各业的优秀同学、技术大牛,并得到授课老师、指导专家、助教“三师制”的全程指导,这些帮助使他更有信心也更高效率地完成了电厂设备故障智能预判项目,收获颇丰。李俊杰从遥感行业的智能化升级谈及AI落地,认为深度学习在遥感图像超分辨率、目标检测、语义分割、变化检测等方面都取得了较大进展,并看好AI+遥感的大规模应用。

随后,学员们正式开始了本期培养计划的第一课《深度学习的再认识》,重新认识AI架构师与深度学习技术的关系,并从传统AI技术、业务应用落地和AI的未来发展三个角度了解深度学习的价值。

为了让AI架构师的成长有迹可循,AICA首席AI架构师培养计划为业界指引方向,沉淀出《深度学习工程师技能图谱》提供技术方面的学习指南,《AI架构师》白皮书更是集百度最资深架构师经验为一体,阐明AI产业落地方法论。《AI架构师》从多维度、多角度描述新时代“业务+算法+架构”三位一体的AI架构师转型路径,带业界AI人才一同预见AI 产业落地前瞻变量。

产业数字化转型与智能化升级的速度与成效,归根到底是相关人才的转型与升级。越来越多的企业将面临从应用AI技术跨入AI工业大生产的升级阶段,AICA首席AI架构师培养计划也将持续为企业学员提供强有力的知识、经验与资源支撑,助力高端复合型AI人才培养,一起为国家科技创新和产业智能化升级贡献自己的力量!

雷锋网雷锋网雷锋网

]]>
人工智能开发者 //www.xyschoolife.com/category/yanxishe/K9JymeYlhIMuV09V.html#comments Fri, 15 Oct 2021 18:52:00 +0800
机器人学国家重点实验室副主任刘连庆:为什么要开发基于生物细胞和细菌的微纳机器人? //www.xyschoolife.com/category/yanxishe/IWpx4gnFYX0wBby2.html 2021年9月10-13日,2021世界机器人大会(WRC)在京召开。

在12日全天的未来峰会上,中国科学院沈阳自动化研究室主任、机器人学国家重点实验室副主任刘连庆,主持召开了人机共融未来时代的 “新前景”、“新风向”两项论坛,并重点分享了微纳机器人和类生命机器人的研究进展与发展趋势。

 

刘连庆主任负责机器人学国家重点实验室微纳机器人和类生命系统课题组,从事微纳尺度下机器人的感知、驱动和控制方法研究,推动生物医学应用;以及生命系统和机电系统的融合方法、类生命体的建模和控制技术,推动新一代机器人系统创新突破。

在我们所处的宏观世界中有多种机器人,比如各种工业机器人、服务机器人、特种机器人等。而在微观世界中进行探索和操作则需要一类“小”机器人,它们能在微米尺度甚至纳米尺度进行操作,这就是微纳米机器人。

由于微型机器人尺寸小,所以它可以进入比较狭小的空间,比如微流控管道,生物芯片,甚至生物体血管内。通过控制微型机器人的运动,可指定它到一个位置进行探测。

在对话中,刘连庆主任讲到,现在的微纳机器人面临的主要问题是如何找到合适的材料和驱动能源。大的趋势是逐渐向活性、完全生物兼容性、生物可降解的方向发展,比如人体寄生细菌、心肌细胞或者骨骼肌细胞。现在刘老师团队正在研究用趋光性藻类细菌做机器人,也在考虑通过人体自然腔道的路径推动高效治疗。

交谈中,刘连庆主任流露出一个真切的态度:科技工程要有抓手。类生命器件“抓”来了物种进化亿万年的生存能力,微纳机器人“抓”来了依附人体的寄生细菌。生命课题不仅要虚远处遥望,也要向实处探寻。生命体丰富,人体奥秘自有章法,要在创新中发现并发挥其价值,催动现代效能。

 

本次世界机器人大会上,雷锋网(雷锋网)有机会与刘连庆老师亲面对话,以下为对话实录。

Q:老师,您是长期从事微纳机器人学(微型机器人和纳米机器人)和类生命器件方向的研究,在研究领域,纳米机器人有多大?

刘连庆:纳米机器人的尺寸,学术界并没有严格定义,通常指机器人至少在一个维度达到了纳米尺度。这里说的纳米尺度并不是要求在1纳米(10的负9次方米)以下,可以在10纳米到100纳米之间。比如一个纳米机器很长,但很细,直径不到100纳米,也可以称为纳米机器人。也有学者认为纳米机器人只要本体尺寸小于1um(微米)就行,所以学术界通常用微纳机器人来泛指自身尺寸很小、能够注射进入人体的机器人。

Q:微纳机器人学和类生命机器人现在成熟度如何,达到了什么精度?

刘连庆:微纳机器人已经在实验室阶段了,类生命机器人程度更低一点。具体来说,微纳机器人已经在老鼠身上做实验了,类生命机器人现在还处在实验室探索阶段。

我举个例子,现在我们能够对微纳机器人进行群体控制,从而进行靶向药物的传递。现阶段能够在老鼠身上做实验,证明了在活体小动物上,纳米机器人可以被集群控制。同时,纳米机器人集群对实体瘤定向性杀伤作用效果显著。

不过必须要指出的是,学界并没有对这些老鼠进行长期的跟踪。如果在人身上使用时,纳米机器人不仅能够杀伤癌细胞,还要对人体尽可能没有副作用。但生物学实验上,目前几乎所有已发表的论文只关注主要指标,就是能不能把肿瘤消除,对老鼠其他生理状态观测比较少。所以,不能轻易下结论说微纳机器人比现有放疗、化疗好很多,只能说在“药物传递效率”这一指标上比传统方法要好。

类生命机器人跟动物和人体实验比较远。我们总是说仿生,仿生更侧重形态模仿和功能模仿,比如比较流行的四足机器人、仿蝙蝠机器人,都是比对着动物结构和功能发展而来,整个机器人的本体都是基于非生命体材料构建的。但类生命机器人不是仿生的概念,它是把生物进化的功能直接拿出来,集成在机器人上来用。

核心是将生命系统与机电系统在分子、细胞和组织尺度上进行深度有机的物理和信息融合,形成一种新型的基于生命功能机制的机器人系统,从而使机器人能够兼具生命系统的优势和传统机电系统的优点。

我举个例子,响尾蛇能感受红外线,它能感受红外线并不是依靠眼睛,它是有一个叫TRPA1的离子通道,我们就把离子通道拿出来,脱离响尾蛇而转染到一个模式细胞上,从而用这个细胞去感受红外线。

狗也一样,它有很好的嗅觉,我们搞清楚它的嗅觉的离子通道和基本原理,再把这些分子机理转染到我们的模式里,相当于我们做了一个人工的类生命器件,把狗的嗅觉能力在人工器件上得到复现。

我们做出了一个红外可见光的感知的器件,能感受红外线,灵敏度比响尾蛇还差很多,但这是走出的第一步。

Q:您之前说到人机共融这方面,第一步先是人机协同、第二步组织融合、第三步是细胞融合,这就是刚才您讲到的的类生命器件吧?

刘连庆:对,人机共融分三块。一个是独立个体的互助共融,比如有个工业协作机器人,机器和我是完全分开的物理体;还有一种是穿在身上的外骨骼机器人,它是身机同体的互补共融。比如我力量没那么大,但是外部骨骼给我一个力量,我就能举起来重物了。

还有一个是同生共体,简单的例子,比如说我想让这些电子器件跟身体长在一起,我一进屋,只要我就这么一想,灯就亮了。还比如说一个色盲的人,他做了一个传感器,上面带个相机,相机一拍照,他就能把这些颜色信息跟脑子连起来,直接传到大脑里,这样他就能“看”到紫外线了,说是看到,其实是探测到了。

Q:在昨天高小榕教授谈到,他现在对有创的脑机接口还是很谨慎的,您刚才谈到同生共体,这算是一种侵入式的机器人研究吗,现在的研究程度如何?

刘连庆我刚才说的半人半机器那是更长远的事了,比如什么时候能做出一个机器人,让它像响尾蛇一样感受到红外,这太难了。我们可以先在人体外做测试,直接把生物在大自然亿万年中进化的功能在体外得以复现,这是一条路。

Q:目前国内外微纳机器人的研究进展如何?

刘连庆:从发表文章的数量、质量和实验进展来看,在微纳机器人方向上,我国跟国际领先水平是同步的。

从实验进展来看,也基本与国外持平,国内已将微纳机器人应用到小动物身上做实验了,比如老鼠等。现在大家都在争着往大动物上做,从大动物到灵长类再到人。但是能做灵长类实验需要经过严格的审批,全国有资质的单位并不多。“十四五”期间,我国科学家的目标是在大动物身上开展实验,比如家猪、狗等。

Q:那就是说微纳机器人主要往医学方向发展吧?

刘连庆:对,微纳机器人现在最重要的就是医学方向。今年上海交通大学携手《科学》杂志发布的“全世界最前沿的125个科学问题”中,人工智能领域有一个问题:“可注射的抗病纳米机器人会成为现实吗?”实际上,医学肿瘤治疗是现在大家最感兴趣的方向。

Q:微纳机器人真正落实到就是说到临床上,您觉得可能还要多少年?

刘连庆:这个挺难估计的,但是我觉得在大动物身上做实验5年之内肯定可以。目前,用大动物做实验准入门槛相对比较低,学校和有资格的医院可以联合做。如果想做猴子等灵长类动物的实验,需要进行严格审批。尽管技术是相通的,但从动物保护、伦理等方面考虑,想做灵长类动物或者人体实验,还需要一个相对较长的过程

Q:现在科学家研究纳米机器人用于医学上的癌症治疗,纳米机器人可以理解为靶向药吗?

刘连庆:我觉得还不全面。研究纳米机器人的一个目的是把它变成靶向药的载体,使其定向输送药,但是纳米机器人还有别的作用。举个例子,比如患者做了一个手术,在体内留下创伤。纳米机器人可以自己组织起来形成一个平面,类似于创可贴,贴在伤口上。此时它的作用就不是输送药,而是进行伤口的愈合。

随着今后的发展,科幻电影中的场景可能成真。比如纳米机器人有了执行能力,人体心脑血管有阻塞的地方,它可能相当于挖掘工或者搬运工,有手有爪,能抓住和杀死细胞,把阻塞部位疏通,所以把纳米机器人理解为靶向药并不全面。

虽然目前纳米机器人主要应用于医疗卫生、癌症治疗,但未来,它也可以像纳米灰尘一样,携带传感装置收集信号,可能对国防、环境监测发挥作用。

Q:老师您认为,在整个微纳机器人领域,难题是什么?

刘连庆:现在的纳米机器人各式各样的材料都有,但大的趋势是逐渐向生物可降解、完全生物兼容性的材料方向发展。因为要进入人体的纳米机器人,其材料一定要有生物兼容性。

目前使用最多的是磁性材料,但其生物兼容性稍微差一点儿。现在被研究的具有生物兼容性的材料很多,比较有代表性的是可降解的水凝胶或者多肽。但具有生物兼容性的材料也存在一个问题。举例来说,使用磁性材料,纳米机器人进到人体之后,人们可以通过外磁场对其进行控制。如果换成生物兼容性材料,能源从哪儿来、怎么控制它就变成了新的问题。

Q:老师您现在的一些课题项目都有哪些突破口?

刘连庆:我们现在在研究基于生物细胞和细菌的这种微纳机器人。人身上与很多种寄生的细菌,一是它毒性不大,而且是生物兼容的;二它能养活自己,从血液或者体液里等吸取能量。

比如我们用藻类细菌做机器人,因为它有趋光性,就可以通过导进光的方式实现它的控制。当然我们还会用细胞做机器人,比如从人身上取他自己的心肌细胞或者骨骼肌细胞,因为这个细胞和人体本来就是生物兼容的,还能代谢掉或者自己分泌成人体可以吸收的物质。

但是我现在在想,如果微纳机器人进入血液里治疗肿瘤比较难,走自然腔道可能会更快一点,就像一个超小胶囊。

所以我们刚才说到类生命机器人,指的就是要用活性材料来做机器人,而不是用无机材料,不是用铁、磁粉。那些都是死材料,我们要用活材料,用细胞、用细菌做微纳机器人的本体,我想这可能是生物兼容性的一个非常好的解决方案,第二对能源的供给也可能是一个比较好的解决方案。

Q:在微纳机器人领域,接下来这几年,您会有一个什么样的长远目标,或者是想要实现什么样的一个应用效率?

刘连庆:第一个就是大动物实验,这个是要做的。第二个我们想和国内外的一些医药企业合作,比如医药管理局。因为我们不能只看微纳机器人这一个综合指标,它进入人体把肿瘤杀伤,但它有没有副作用?现在的实验老鼠、猪、狗也不能显示准确的生理反应,但是从药物开发的角度仍然有很长的路要走,所以微纳机器人领域还要建立一个系统性的评价体系。

现在微纳机器人的主要指标是药物输送效率,治愈率,但是副作用和周边影响如何评价,我觉得这不仅是临床医生和我们搞工程的人就能做的,而是要和药学,甚至是药物审批管理结合起来,建立一个综合治疗体系。现在都是跟医生合作,还在一个初始阶段。

Q:您是第几次参加世界机器人大会,感觉怎么样,大会对您的研究领域有没有推进作用?

刘连庆:每次都来。我觉得世界机器人像机器人领域的奥林匹克竞赛,它不是一个纯学术会议。这是一个扩宽知识面的地方,方便大家了解整个机器人领域的前沿动态、最新产品。

我觉得世界机器人大会的定位挺不错的,因为学术上有ICRA、中国机器人学术年会那种纯学术的会议,还缺少一个能够面向公众,既有教育目的,又有信息传播能力,还能了解国内外学术及产业发展趋势的会议。这个大会不仅有论坛、大赛,还有企业展览,方便大家交很多朋友,这一点意义挺重要的。

雷锋网雷锋网雷锋网

]]>
人工智能开发者 //www.xyschoolife.com/category/yanxishe/IWpx4gnFYX0wBby2.html#comments Thu, 30 Sep 2021 11:55:00 +0800
最新研究:声音和词语在大脑中并行处理 //www.xyschoolife.com/category/yanxishe/cVx1A7rJNKGcMMdF.html 受到生物神经网络的启发,目前深度神经网络已经被证实效果很好。如今,深度神经网络和深度学习在计算机视觉、语音识别和自然语言处理等许多重要问题上有着出色的表现。

神经网络本身是一般的函数逼近,这就是为什么它们几乎可以应用于任何从输入到输出空间复杂映射的机器学习问题。

然而深度神经网络更多的是关心所谓的端到端学习,内部发生什么事情它并不关心。这在认知科学里面叫“弱等价”,也就是说人和机器可以干同一件事,但是它们的内部过程并不是一样的。

或者和生物智能类似,深度神经网络要在增加内部的认知过程中,也应该和生物系统类似。此时,站在生物神经学的参照系下,或许能赋予AI语言处理更精细的洞察。

经过多年研究,神经科学家发现了人类大脑中处理语言声音的运行规则

8月18日,美国加州大学旧金山分校的研究人员在《细胞》杂志上发表论文称,听觉处理和语言处理是并行进行的。这与长期以来认为大脑先处理听觉信息,然后将其转化为语言信息的理论相矛盾。

最新研究表明:当含有语意的声音传到耳中,耳蜗将其转换成电信号,然后发送到位于颞叶的听觉皮层。

人脑左半球听觉皮层的位置和分区示意图

几十年来,科学家们一直认为,听觉皮层在处理语音时像工厂流水线一样有先后工序:首先,初级听觉皮层处理简单的声音信息,比如声音频率。然后,颞上回(superior temporal gyrus,STG)提取更重要的特征,如辅音和元音,将声音转换为有含义的单词。

但一直以来,这一理论缺乏直接证据的支持,因为它需要整个听觉皮层极高时空分辨率的详细神经生理学记录。这是一个挑战,原因是初级听觉皮层位于大脑额叶和颞叶的裂口深处。

美国加州大学旧金山分校神经科学家和神经外科医生Edward Chang说:"所以,我们进行了这项研究,希望找到声音等低级表征转化为词汇等高级表征的证据。"

Edward Chang

这项研究的开展离不开一些患者的支持。几年时间里,有9名患者参与了实验。因为需要切除脑部肿瘤或定位引发癫痫的病灶,这些患者接受了神经外科手术。与此同时,他们同意让医生在手术过程中将微电极阵列放置在他们的听觉皮层,收集神经信号,用于分析语言功能和定位癫痫,以及研究听觉皮层如何处理语音信息。

"这是我们第一次可以直接从大脑表面同时覆盖听觉皮层的所有区域,研究声音到字词的转换。"Chang教授说。相比过去只能在有限的几个点记录神经活动的电信号,无疑是巨大的进步。

接着,在实验中,研究人员开始向参与者播放词组和短句,试图寻找信息从初级听觉皮层流向颞上回的迹象。按照原来的假设,这两个脑区应该会先后被激活。

然而,事实并非如此。他们观察到,播放句子时,颞上回某些区域的反应速度与初级听觉皮层一样快,也就是说,这两个区域同时开始处理声音信息。

在另一项实验中,研究人员用微弱的电流刺激患者的听觉皮层。按照原来的假设,刺激初级听觉皮层,很可能会扭曲患者对言语的感知。然而,这些患者表示,尽管刺激引起了某些声音的幻听,但他们仍能清楚地听到并重复对他们播放的字词。

相反,当研究人员用电流刺激患者的颞上回,患者报告说他们能听到有人在讲话,"但分辨不出字词"。"事实上,有一名患者说,听起来就像单词的音节发生了互换。"Chang教授说道。

综合这些证据,研究小组认为,大脑听觉皮层对声音和语音的信息处理是并行的,而不是传统模型所认为的串行处理。

传统语音处理模型过于简化,甚至很可能是错误的。研究人员推测,颞上回可能独立于初级听觉皮层而发挥作用,而不是作为初级听觉皮层处理的下一步。

语言处理的并行性可能会给医生提供治疗诵读困难症等病症的新思路。患有这些疾病的儿童在识别语音方面存在困难。

"虽然这是向前迈出的重要一步,但我们还不了解这个平行听觉系统。这些发现表明,声音信息的传递可能与我们想象的非常不同。这无疑带来了更多问题。"Chang说。

站在生物神经学的参照系下,AI语言处理被赋予更精细的洞察

生物神经元构成一层一层的网络,一层一层进行特征提取,这是深度学习已经模拟的,其实大脑还有一个根本不同,我们识别物体的时候不是像深度学习网络一样由简单到复杂的特征提取,而是有多条通路:

我们看到一个物体的时候,第一步会快速的从皮层下通路,对物体的整体的性质进行识别,这些信息到了高级脑区,和记忆、先验知识等进行融合,先猜测出来是什么东西,通过神经反馈再和深度学习模拟的那个慢速的腹侧通路进行动态交互,这个过程可能会经过几个回合,整个识别的过程都是输入和大脑内部的先验知识不断的相互比较印证的过程,而这个过程在目前是深度学习没有包含的,也是图像理解这个数学上不适定问题(ill-posed problem)的一个解决方案。

那为什么我们好像深度学习网络用的很好,我们没有包含动态的过程,由粗到细、由global到local的过程,也能做的挺好。或许是因为现在我们的任务太简单了,如果只是做静态图像的识别根本不需要这个,但是如果真的要做一个能够与环境动态交互、很自主的机器人,这样的计算需求就会出现,那个时候就需要动态交互的过程了。

而深度学习一般认为是黑盒子,每个人的模型得到大致相同的结果,但是也不完全一样,那么这里的一致性和不一致性到底体现在哪里。如果生物神经在语言处理方面搞的很清楚的话,实际上对深度神经网络的架构也会很有帮助。

资料来源:

https://mp.weixin.qq.com/s/agDJMUtJZf7XccdR6yzqlQ

https://mp.weixin.qq.com/s/h5C9s7nqsGBUTfITnjG8pQ

雷锋网雷锋网雷锋网

]]>
人工智能开发者 //www.xyschoolife.com/category/yanxishe/cVx1A7rJNKGcMMdF.html#comments Thu, 26 Aug 2021 09:55:00 +0800
人工智能的民主化:低代码和无代码解决方案的兴起 //www.xyschoolife.com/category/yanxishe/pDqa3lUsYOdwpw8Q.html 今年早些时候,全球创新、研究与孵化总监René Schulte(雷内舒尔特)预测:2021年,人工智能的民主化和低代码/无代码解决方案将成为商界领袖应该关注的顶级技术趋势之一。

在他最近的文章《智能边缘AI视频分析》(Intelligent Edge AI Video Analytics)中,分享了一些证据和关键指标,表明人工智能民主化的预测是正确的,它正在通过现代人工智能工具使任何人都成为数据科学家。

低代码人工智能解决方案的增长

Gartner 等研究公司的分析师对人工智能的民主化进行了各种各样的描述,但都具有变革的特征,这是Gartner的最高效益评级。

例如, 在公民数据科学中,领域专家可以利用易于使用的数据科学工具,而无需事先掌握数据科学知识。这是非常有用的,因为某一领域的专家,拥有多年的经验和领域专业知识,可以创建有价值的人工智能解决方案,速度可以媲美该领域的任何数据科学家。所有这些都没有数据科学的陡峭学习曲线。这种预先存在的专业知识不仅提高了解决方案的可行性、上市速度和ROI,而且还允许组织利用稀有的数据科学家资源来解决更复杂的问题,如优化模型。

其他越来越受欢迎的领域是 AI 增强设计( AI-Augmented Design),其他越来越受欢迎的领域是人工智能增强设计,AI工具帮助自动创建或增强视觉设计、故事板、用户流程和表示层代码。此外,人工智能增强开发,一般使用机器学习和人工智能技术来加强应用程序开发,以更快、更一致、更高质量地交付软件。这对于低代码开发来说也特别有趣,因为副驾驶员AI助理甚至可以帮助完成代码片段。

对开发人员和其他技术相关工作的需求,特别是在人工智能和数据科学领域,正在持续增长。LinkedIn的新兴就业报告指出,未来5年,全球将新增不少于1.5亿个技术相关岗位。《2020年美国新兴就业报告》还估计,数据科学家和数据工程师职位每年将增长35%。最近的数据表明,需求还在进一步增长。以这样的速度增长,将很难找到足够的具备必要技能的专家来满足需求。低代码和无代码的人工智能工具为组织提供了机会,在公民数据科学家的帮助下缩小差距,他们不需要人工智能专家为许多场景构建AI解决方案。

商业领袖应该紧跟这些趋势,鼓励他们的领域专家、设计和开发团队评估和适应各种人工智能工具,以增强他们的能力,优化他们的工作流程。领导者还应该制定计划,教育员工如何负责任地使用这些工具,以及偏见数据的道德影响等。

以低代码应用平台为中心的Gartner 新兴技术趋势影响雷达图

Microsoft 的低代码和无代码 AI 解决方案

与大多数大型科技公司一样,微软也在公民开发人员、公民数据科学家领域进行了大量投资。他们的业务应用程序平台提供了各种引人注目的解决方案,从无代码或低代码到全代码开发。

Microsoft PowerPoint: 微软PPT中的人工智能增强设计已经集成在一些Office 365产品中,即PPT Designer。这一功能为幻灯片布局提供了建议,并有助于迅速将枯燥的幻灯片变成精心设计的幻灯片。它可以提供完全主题化的模板,或者某些改进建议,比如更好的文本可读性。为了便于访问,用户可以在演示期间利用自动替代文本、字幕和实时字幕。

这意味着AI完全集成在PowerPoint中,并在演示的所有阶段提供帮助,包括演示彩排,由虚拟演示者教练提供指导。

Microsoft Word: AI 增强写作也已集成到 Office 365 中,例如微软Word提供了一个带有文本预测功能的人工智能自动完成功能。这一功能不同于其他人工智能实验,它可以从一个简短的段落完成整个文本文件,而且为即将到来的单词组提供了加快打字速度的建议。Word还配备了AI工具,通过半自动替代文本生成和可访问性检查器,使文本更容易访问。

GitHub:人工智能增强开发最近由微软拥有的开源社区 GitHub 推出。GitHub 的Co-Pilot文本补全比一般的文本补全更优化,可以直接在 Visual Studio Code 编辑器中为代码行甚至整个函数和方法提供建议。Co-Pilot 利用了 OpenAI 的新 Codex AI 系统,该系统经过来自 GitHub 公共源代码存储库及其多种编程语言的数十亿行代码的训练。Co-Pilot 目前正处于私人预览计划中,但已经非常有希望通过自动化处理日常任务使开发人员的生活更轻松。

Azure Cognitive Services: 人工智能除了应用于 GitHub Co-Pilot,还有提供了一些服务可供开发人员轻松地将 AI 添加到他们的应用程序中。例如,Azure认知服务(Azure Cognitive Services)提供了广泛的服务,让每个开发人员都能接触到人工智能,而无需任何机器学习的专业知识。

认知服务允许用户通过简单的 REST API 调用或专门的 SDK 将看、听、说、搜索、理解和加速决策的能力嵌入到任何应用程序中。认知服务利用预先训练的 AI 模型,甚至可以根据特定需求定制,如定制视觉,以创建定制的人工智能计算机视觉解决方案。许多认知服务也可在边缘使用,并且可以在边缘设备上现场运行工作。

Azure Machine Learning Studio:这是微软另一个出色工具,无需编写任何代码即可构建 AI 模型。Azure ML Studio支持不同技能的用户,在包容性数据科学平台中结合了无代码和代码优先体验。它甚至具有AutoML功能,该技术将自动确定给定问题陈述和数据域的最佳机器学习模型架构。

Azure Machine Learning MLOps: Azure机器学习的另一个很好的特性是使用内置的机器学习操作来处理DevOps周期。MLOps提高了处理AI模型的效率,以更快地开发、部署和质量保证生命周期。

不要将MLOps与AIOps混淆,AIOps使用人工智能,通过自动解决问题和提高洞察力来简化IT运营管理。云计算时代,企业客户很少在本地运行他们的工作,而选择具有更多优势的云计算。一个小的缺点是不再看到实际的硬件。因此,洞察、故障排除等成为一个抽象的过程。

IT管理员去服务器室拉网线或排除错误故障的日子已经一去不复返了。此外,收集到的大量遥测和应用分析数据很难让人类自己消化,这就是AIOps可以提供帮助的地方,微软正在这一领域进行大量投资。

Azure已经有了一些内置的东西,比如Azure Monitor AIOps带有动态阈值的警报,无需以耗时的方式手动设置和调整阈值。相反,阈值是由机器学习基于历史行为自动设置的。通常,AIOps将使分析数据变得更有用,这些数据通常根本不被利用,或者仅以响应式的方式用于故障诊断。AIOps提供了一个机会,以一种前瞻性的方式利用分析数据,利用机器学习进行预测智能,并可以自动识别即将到来的问题。如果操作正确,可以在问题发生之前自动进行更改和调整,以增加正常运行时间和服务质量。因此,AIOps有潜力为云计算提供预测性维护,而无需编写任何代码。

Microsoft Power Platform: Microsoft 的低代码/无代码 (LC/NC) Power Platform允许用户轻松创建自定义应用程序,即使是非开发人员,也支持注入 AI 来创建智能应用程序,例如聊天机器人虚拟代理和自动化工具。

最近在 Build 开发者大会上,微软推出了一个新的令人兴奋的 Power Platform 附加产品,它利用了世界上最大的语言转换器模型之一,OpenAI 的 GPT-3。对于 Power Apps,它被用于各种用途,例如将自然语言转换为Power Fx公式(Power Apps 中使用的低代码机制)。因此,这是一种人工智能增强开发,用于定制应用的低代码创建。此外,它还支持示例编程,并将示例转换为 AI 生成的代码输出。所有这些都直接集成到 Power Apps Studio 中,以支持每个用户快速构建应用程序,同时在此过程中学习高级概念。

Power BI:这是 Microsoft Power Platform 的另一个非常强大的部分,提供数据驱动的见解。Valorem Reply 的数据驱动型企业团队拥有深厚的Power BI 专业知识,并定期提供免费培训机会,例如日间分析研讨会、日间仪表板研讨会和我们全新的全包式 Power Platform 研讨会。用户可以报名参加我们的免费活动,甚至可以在这里和这里为团队申请一个私人研讨会。此外,Valorem Reply 可以在托管服务模型中提供 Power BI 和 Power Platform 专业知识,允许组织在完全不需要专业技术知识的情况下体验这些工具的强大功能,或者在其内部团队加快速度时作为临时解决方案。

Azure Percept:这是一款端到端智能边缘解决方案,以 Azure 服务、工具和名为Azure Percept DK的开发工具包的形式出现,其中包含一系列预构建的 AI 模型。不过也可以使用无代码构建自定义模型,并通过 Azure Percept Studio 应用程序进行简化,包括半自动生成深度学习训练数据和自动触发的相机捕捉。

Lobe.ai:微软拥有多样化的产品组合,并为各种场景提供多种解决方案。在创建无代码 AI 模型的情况下,还有微软在 2018 年收购的Lobe.ai。Lobe的目标是通过易于使用的桌面应用程序真正实现机器学习的民主化,它提供了一个易于使用的桌面应用程序,可以免费在Windows或Mac电脑上预览。Lobe 利用开源 AI 模型架构和迁移学,习在用户自己的机器上训练自定义机器学习模型。这意味着所有数据都保存在本地,不需要互联网连接或登录。

用Lobe创建的低编码工作场所安全边缘AI

Lobe可用来为一种叫做图像分类的人工智能计算机视觉任务创建各种解决方案,利用视频分析的工作场所安全场景引入了自定义 Edge AI 独立解决方案。

Adafruit ML Kit for Lobe允许快速创建自定义低成本Edge AI解决方案,直接运行在树莓派4。结合微软的低代码人工智能平台,自定义人工智能视觉模型可以创建和部署在树莓派上,以快速和迭代的方法来开发边缘人工智能。

使用几百几千 个手动标记的图像来训练模型听起来很费力,但实际上并没有那么难。Lobe 不仅允许导入图像,还可以使用网络摄像头快速捕捉照片并分配标签。Lobe 的 UX(用户体验)和 UI(用户界面)通过评估和微调的实时反馈使该任务变得非常简单和高效。

Lobe 基本上允许任何人,无论以前的数据科学经验如何,都可以导入图像并轻松标记它们以创建深度学习数据集。Lobe 将自动选择正确的 AI 模型架构并在后台开始训练,无需任何设置或配置。训练完成后,用户可以通过实时视觉反馈评估模型的准确性,然后对定制模型进行试验并通过提供评估结果的实时反馈来提高性能。随后可以将完成的模型导出为各种行业标准格式并嵌入到应用程序、网站或 Edge IoT 设备中。

编译来源:https://www.valoremreply.com/post/democratizationofai/

雷锋网雷锋网雷锋网

]]>
人工智能开发者 //www.xyschoolife.com/category/yanxishe/pDqa3lUsYOdwpw8Q.html#comments Tue, 17 Aug 2021 11:15:00 +0800
DeepMind的智能体成精了,还学会“发脾气”了? //www.xyschoolife.com/category/yanxishe/mQYWYxBY2dskn8LT.html DeepMind又造“小人”了!

这群小人就是英国人工智能实验室造出的“智能体”,不过只可以在游戏中看到。之前以4:1力挫世界围棋冠军李世石的阿尔法狗,就是这家实验室训练的智能体。

但你可能不知道的是,DeepMind”还训练过“象棋棋手”、“足球球员”、”电竞玩家“,甚至提出“人工生命"的言论。

最近的这群智能体,竟然能直接跳过数据填食,在开放式的任务环境中自我进化。

此前的阿尔法狗和阿尔法star,能力再强,也只能在各自的游戏里释放大招,超出自己的游戏范围立马“歇菜”。而这批小人却能在不同的游戏里游刃有余地完成任务,展现出超强的泛化能力。难道人工智能要迈出泛化“顽疾”了吗?

在一个抢夺高地金字塔的任务里,两个不同颜色的小人能力值相当。都没有跳跃功能的它们,开始“发脾气"乱扔东西。混乱中,竟把其中一块板子”扔“成了楼梯,长驱直入,任务完成!

多次实验发现,这些小人可以复现这种方法,难道这群智能体有了记忆?

不仅如此,小人还学会了“相对运动”--我上不去,你下来--借助板子直接把目标扒拉下来了! 甚至为了赢得比赛,多个小人学会了打配合,团体成长力刷刷上涨。

这种在虚拟游戏中自我进化的智能体,仅仅需要人为搭建一个任务环境,设计大量的任务目标,利用加强深度学习的方法,一步一步打通关,最终成为一个“十八般武艺”的智能体。

没有样本,没有经验,这些智能体究竟如何进化,零样本学习方式是否意味着这些智能体已经具备了基本的“自学意识”?

社会达尔文主义的训练场

相比之前做出的Ai足球场,这批智能体的训练场更像一个游戏“社会”,里面有无数个游戏房间,每个房间的游戏按照竞争性、平衡性、可选性、探索难度四个纬度进行区分。

不管是哪种任务,这批智能体都只能从最简单的开始,一步步解锁更复杂的游戏,这也导致整个游戏更像一个虚拟社会。

这些无需大数据集训练出来的智能体,每玩一次游戏就成长一次,在与各种环境的互动和“奖励”中,成长为一个更通用的智能体,也更类似于人工“生命”。

能让智能体自我进化的关键在于正确设计初始智能和进化规则。一开始是非常简单的,所有的复杂结构都是进化而来。就像婴儿做不了生孩子的事,布置任务的核心是不要超出智能体自身的改进能力。

根据 DeepMind的说法,每个AI智能体会在4000 个游戏房间中玩了大约 70万个独特的游戏,并在 340 万个任务中经历了 2000 亿个训练步骤。1 亿个步骤相当于大约 30 分钟的训练。按照这种训练方法,41天就能训练出一群“成年”智能体。

它还是不会思考

DeepMind表示,“单个AI智能体可以开发智能来实现多个目标,而不仅仅是一个目标。”

AI智能体新科技公司Pathmind 的CEO Chris Nicholson 也说到,“它学到的技能可以举一反三。例如,智能体学习抓取和操纵物体,就能完成敲锤子或者铺床的任务。而DeepMind 正在用编程为AI智能体在这个世界上设定目标,而这些AI智能体正在学习如何一一掌握它们。”

但是南加州大学计算机科学副教授 Sathyanaraya Raghavachary表示,这些智能体并不能定义为“生命”,尤其是关于智能体拥有身体感觉、时间意识以及理解目标的几个结论。

“即使是我们人类也没有完全意识到我们的身体,更不用说那些人工智能了。”

他讲到,一个活跃的身体对于大脑不可或缺,大脑要放在合适的身体意识和空间位置里进化。如果AI智能体能够理解它们的任务,何必需要 2000 亿步的模拟训练来达到最佳结果。总体而言,这个虚拟环境训练出来的AI智能体只是和以往的“大同小异”。

从理论到现实的路还很长

狭义的人工智能是“复制人类行为的元素”,在计算机中执行某种任务。例如实现对图像进行分类、定位照片中的对象、定义对象之间的边界等等。

这些系统旨在执行特定任务,而不具有解决问题的一般能力。

相比之下,Deepmind使用的“通用人工智能”有时也被称为人类级别的人工智能,因为它可以理解上下文、潜台词和社会线索,甚至被认为可能完全超过人类。

但是正如行为主义和认知主义之间的对抗,智能体是否具有解决问题的能力,并不能单纯地考虑统计的结果。善于“事后解释”任何观察到的行为,在实验室之外,都无法“预测”哪些行动即将发生。


编译来源:

https://bdtechtalks.com/2021/08/02/deepmind-xland-deep-reinforcement-learning/

雷锋网雷锋网雷锋网

]]>
人工智能开发者 //www.xyschoolife.com/category/yanxishe/mQYWYxBY2dskn8LT.html#comments Tue, 10 Aug 2021 16:01:00 +0800
像人类一样会“类比”的AI,才是真正的AI //www.xyschoolife.com/category/yanxishe/8LRUiW8TIYQryOv1.html

最近,从事圣达菲研究所(Santa Fe Institute)的戴维斯复杂性研究的米切尔教授接受采访时谈到,“机器人要变得更像人,首先要学会类比思维。”一句话道出目前人工智能的困境。

让机器更像人,这并不是白日做梦。如今AI正在学习各种认知,包括最难突破的时间认知、经验认知、感性认知。

长期以来,思维是人类独有的本领。在人工智能训练上,科学家们更专注逻辑和行为规则的编程。但这样训练出来的AI,前期需要大量的数据学习,也并没有思维,所会的技能几乎全被打碎。

目前,米切尔领导着SFI的自然和人工系统智能基础项目,"AI类比"研究要比以往任何时候都更加突出。该项目将在明年召开一系列跨学科研讨会,研究生物进化、集体行为(如蚂蚁等群居昆虫的行为)和如何利用身体促进智力的发展。

半路出家,高中数学老师做起人工智能

1979 年获得普利策奖的著作《哥德尔、艾舍尔、巴赫》激发了大批计算机科学家的灵感,但很少有人像梅兰妮·米切尔( Melanie Mitchell)那样改变了人生轨迹。

在阅读了这本 777 页的大部头书后,纽约的高中数学老师米切尔决定:我"需要"从事人工智能的工作。

她很快找到了这本书的作者、人工智能研究员道格拉斯·霍夫斯塔德(Douglas Hofstadter),并说服他给自己一个实习机会。

虽然当时她只学了几门计算机科学课程,但霍夫斯塔德似乎对她的胆量印象深刻,并不关心她的学历。

米切尔赶上了“最后一刻”的研究生申请,并加入了霍夫斯塔德在密歇根大学安娜堡分校的新实验室。在接下来的六年里,两人密切合作,开发了一个名为“Copycat"的电脑程序。用他们的话来说,这个程序的目的是"发现创新性的类比,并做出具备这样思想的智能体"。

此后的科研路上,米切尔便一直和“AI数字思维”维系在一起。

类比到底是什么

这是一种抽象的能力,比如你告诉我一个故事,然后我说,“哦,我懂你”,实际上这种事并没有发生在我身上,但我可以做一个假设。

然而,机器人知道“理解”是什么吗,知道“意义”是什么吗,以数字形式存在的它们,计算过自己的生命长短吗?当人工智能遇上“认知”障碍,能否自主解决?

滑稽的是,要明白人类意义时,它们却在忙着处理数据。

他们永远也学不会类比吗?

在探索AI“认知”的问题上,不少科学家正在做相关的实验。上个月DeepMind实验室发博文称,“正在训练开放式学习的智能体。” 这些无需监督和数据喂养的智能体,能以很少的例子在游戏任务里自主进化,并且表现出不俗的泛化能力。

这暗示了AI学会类比的可能性,但实际情况是,智能体在游戏中运行得很好,如何将其扩展到我们真正关心的领域? 假如能够证明AI具备类比能力,如何在拥有认知之后再学习和推理?

更重要的是,这是否意味着人工智能也需要像我们一样,拥有一个身体呢?

因为认知和智力活动不仅仅是大脑孤立的计算,而是大脑、身体和环境的相互作用。因此,电影《东成西就》里的段王爷,只有漂浮的脑袋就能飞升成仙,在人工智能这并不现实。


编译来源:https://www.quantamagazine.org/melanie-mitchell-trains-ai-to-think-with-analogies-20210714/

雷锋网雷锋网雷锋网

]]>
人工智能开发者 //www.xyschoolife.com/category/yanxishe/8LRUiW8TIYQryOv1.html#comments Sat, 07 Aug 2021 09:11:00 +0800
1.2毫秒! 英伟达TensorRT 8运行BERT-Large推理创纪录 //www.xyschoolife.com/category/yanxishe/EVQAMK8F6SzYucAc.html 自今年5月份TensorRT 8-EA版(Early Access,尝鲜版)发布之后,英伟达终于在本周二发布了TensorRT 8的正式版。

作为支持英伟达GPU平台的深度学习推理框架,TensorRT 8正式版与以往的版本相比,能够在在1.2毫秒内运行全球最广为采用的基于transforemer模型之一——BERT-Large,即将语言查询推理时间缩短至上一个版本的一半,创下最新记录,为搜索引擎、广告推荐和聊天机器人的AI模型提供支持。

英伟达官方声称,TensorRT8不仅针对transformer作出突破性优化,还新增其他两项关键特性,实现AI推理方面的突破。

推理时间缩短至1.2毫秒,速度提升1倍

“AI模型以指数级的速度增长,很多公司不得不缩减模型大小以追求响应速度。英伟达2016年推出的TensorRT可以帮助这些企业扩大规模,提升精度。” 英伟达AI软件部的产品管理总监Kari Briski回顾TensorRT推出的背景时说道。

TensorRT是英伟达自家的深度学习推理框架,在模型推理的过程中,可以将Pytorch、TensorFlow等其他框架训练好的模型转化为TensorRT格式,再使用TensorRT推理引擎运行,从而提升这一模型在GPU上的运行速度。

因此,支持更多的模型和进一步缩短推理时间,提高推理速度是广大AI软件开发者对TensorRT升级的普遍期望。

2019年,黄仁勋在GTC China上发布TensorRT 7。相比于只支持30多种模型的TensorRT 5,TensorRT 7能够支持各种类型的RNN、Transformer和CNN,支持多达1000多种不同类型的计算变换和优化,还能让推理时间缩短至0.3秒,为此黄仁勋将其称之为“我们实现的最大飞跃”。

这次更新的TensorRT 8版本,虽然升级“飞跃”程度比不上从5.0版本到7.0版本的升级,但也有一定程度的更新。

英伟达宣称,TensorRT 8的各项优化为语言带来了创纪录的速度,能够在1.2毫秒内运行全球最广为采用的基于transforemer模型之一——BERT-Large,帮助企业将模型扩大一倍或两倍,从而提高精度。

落实到具体的应用上,这种推理速度的提升能够让对话式AI更加智能,交互应用程序的性能也能够得以提升。

新增两项核心技术,是推理速度提升的关键

在此之前,之所以能够凭借TensorRT提升模型在英伟达GPU上的运行速度,主要得益于TensorRT的一系列优化,这些优化包括:

  • 权重与激活精度校准:通过将模型量化为INT8 来更大限度提升吞吐量,同时保持高精度,力求精度和吞吐量的最大平衡;

  • 层与张量融合:通过融合内核中的节点,优化GPU显存和带宽的使用;

  • 内核自动调整:基于目标GPU选择最佳的数据层和算法;

  • 动态张量显存:更大限度减少显存占用,并高效地为张量重复利用内存;

  • 多流执行:并行处理多个输入流的可扩展设计;

简单而言,就是在力求以低混合精度提升吞吐量的同时,减少计算和内存访问,合并网络层。

而在TensorRT 8版本中,英伟达又新加入两个关键特性,以实现AI推理方面的突破。

其一是稀疏性。TensorRT 8中使用稀疏性技术,在保证精度推理的同时,降低深度学习模型中的部分权重,减小模型所需要的带宽和内存,在提升效率的同时使开发者能够通过减少计算操作来加速神经网络。

这项技术能够帮助NVIDIA Ampere架构GPU得到性能上的提升。

其二是量化感知训练。开发者能够使用训练好的模型,以 INT8 精度运行推理,且不会造成精度损失,大大减少计算和存储成本,在Tensor Core核心上实现高效推理。

TensorRT诞生第五年,下载次数近250万次

推理模型上的速度优势让TensorRT广受欢迎。五年来,已有来自医疗、汽车、金融和零售等各个领域的27500家企业,超过25万名开发者下载使用TensorRT,累计次数近250万次。

GE医疗是TensorRT的使用者之一,他们用TensorRT助力加速早期检测疾病的关键工具——超声波计算机视觉创新,使临床医生能够通过其职能医疗解决方案提供方最高质量的护理。

GE医疗心血管超声首席工程师Erik Steen表示:“临床医生需要花费宝贵的时间来选择和评估超声图像。在Vivid Patient Care Elevated Release项目的研发过程中,我们希望通过在Vivid E95扫描仪上实施自动心脏视图检测,使这一过程变得更加高效。心脏视图识别算法将选择合适的图像来分析心壁运动。TensorRT凭借其实时推理能力,提高了视图检测算法的性能,同时缩短了我们研发项目的产品上市时间。”

开源AI技术的领导者Hugging Face也在同英伟达展开密切合作,其产品总监Jeff Boudier表示,通过TensorRT 8,Hugging Face在BERT上实现了1毫秒的推理延迟,十分期待能在今年晚些时候为客户提供这一性能。

目前,TensorRT 8已经全面上市,且面向英伟达计划开发者成员免费提供,用户能够从TensoRT GitHub库中获得最新版本插件、解析器和样本开放源代码。

雷锋网雷锋网雷锋网

]]>
人工智能开发者 //www.xyschoolife.com/category/yanxishe/EVQAMK8F6SzYucAc.html#comments Wed, 21 Jul 2021 15:41:00 +0800
玄点智能——世界人工智能创新大赛 跑出的一匹黑马 //www.xyschoolife.com/category/yanxishe/GyplQIHlO6Cr58A4.html

7月10日下午,锣鼓喧天,英雄齐聚。2021世界人工智能创新大赛AIWIN盛典即将召开,哪些企业能从激烈的竞争中脱颖而出获得佳绩?谁能摘得应用创新赛和技术算法赛的桂冠?

在上海世博会议中心世界人工智能大会(WAIC)的现场,来自全球各地的大咖们一边热烈的讨论着AI如何赋能数字化创新,一边热情的期待着奖项的揭晓。世界人工智能创新大赛(AIWIN),是世界人工智能大会的重要组成部分,为人工智能生态输送最佳的人工智能企业。

今年的AIWIN赛事分剑道风云录(应用创新赛)和气道群侠传(技术算法赛),将评选出“数字底座”、“数字赋能”、“数字未来”三大领域的12强企业和四大秘境的前三选手。终评产生的优秀算法、基建、平台和应用将一同打造数字化下的AIWIN江湖,见证新一代的AI未来生态。

在这一盛典时刻,有一家仅仅成立8个多月的初创企业从全国264家参赛队伍中脱颖而出,在两个奖项中都获得了好成绩。

玄点智能--一家名不见经传的新公司不仅摘得了 AIWIN 应用创新赛数字赋能 7强和算法技术赛第三的双奖,而且还代表AIWIN获奖企业在世界人工智能大会的闭幕式上发表了获奖感言:“感谢大赛提供的舞台,玄点智能首次提出APA(AI Process Automation)的概念,是轻量级AI流程自动化的倡导者。我们希望用APA实现企业AI的敏捷运营,用云的基因激活企业的数字神经,为客户的数字化转型提供源源不断的澎湃动力。”

APA是什么?玄点智能又是什么来头?

一家成立才八个多月的公司营收就已经做到了八位数,不仅入围“数字赋能”的全国7强还在“文化传媒数字资产的自动编目竞赛“中以略落后于腾讯的得分获得第三名的好成绩。

可以说这是玄点智能的一个高光时刻! 

玄点智能所做何事?

相较于不断革新的人工智能技术,如何突破瓶颈推动提升AI应用段位和产业规模化推广成为第四届世界人工智能大会中技术平台与产业均重点关注的问题。而玄点智能在大会上首次提出APA(AI Process Automation)的理念,是轻量级AI流程自动化的倡导者。经过和公司创始人的沟通,笔者了解到和其他强调算法领先性的公司不同,玄点更强调的是 AI 项目流程的简化,乃至自动化希望用 APA 来简化准备AI的流程,降低研发 AI 的成本,提高构建 AI 的效率,以此来实现企业AI的敏捷运营。

目前已经成型的一个产品“媒体翻译字幕”就是一个鲜明的例子。产品本身需要的AI能力并不复杂,但是从达到客户预期到真正落地运营,中间有很多细枝末节需要考虑。而这真是玄点团队的优势所在,从获取客户需求,概念验证到设计方案和真正落地,前后只用了两周的时间,同时该产品也经过了 WAIC 和 IJCAI学术精英大会的考验。在会议前夜彩排的时候才发现来自 IJCAI 理事长的致辞没有字幕,现场使用了协办单位玄点的“媒体翻译字幕”的产品,5分钟就快速完成了翻译和字幕合成的工作,省去了专业翻译人员和字幕合成人员的工作量,节约了时间,快速完成了任务。

而玄点这次参赛的“AI体育大脑”更是创业8个多月的重要收获。接触了不同体育大项的业务场景,通过一系列的技术论证和尝试,玄点的团队发现体育赛事虽有场地大小和规则上的不同,但是从收录画面到呈现效果,AI所能带来的帮助和价值确是触类旁通的。由此,玄点借助前沿的科学研究自主研发了针对视觉类数据的自动标注模型,从而大大简化了不同体育赛事数据标注的工作。只需要对同类赛事少量数据进行人工标注,即可实现大批量同类赛事数据的自动标注。而自动标注的数据结合了AI流程自动化,同时又使得AI模型自动训练变成了可能。不同的赛事,通过数据自动标注和流程自动化的加持,AI变成了体育真正的大脑。

玄点还通过和上海交通大学人工智能研究院成立联合实验室,通过产学研结合的模式,从真实世界技术挑战中凝练科学问题,从而将关键技术应用于真实产业系统实践。

 

玄点智能背后的团队

为何玄点智能可以在8个多月的时间里取得如此多的成绩?

这是和背后的团队密不可分的。在采访中 AI 科技评论了解到,玄点智能的创始成员来自于亚马逊AWS,所以天生具有“云”的基因和创新的思维逻辑,这是一家拥有成熟团队的创业公司,无论是专业度还是经验值都非一般的初创企业可比。他们分工虽有左右,但伙伴不分上下,团队目标统一,笔者在玄点感受到了满满的创业活力和高效的工作节奏。

构建大规模AI自动化流水线、让企业 “AI”上AI,这是玄点智能的团队一直秉持的愿景。在笔者看来,在企业数字化转型的过程中AI是配角,需要的是与行业、数据、算力等产生“化学反应”,这样的AI企业,才算是真正接地气的、有价值的AI企业。

雷锋网 雷锋网 雷锋网 

]]>
人工智能开发者 //www.xyschoolife.com/category/yanxishe/GyplQIHlO6Cr58A4.html#comments Tue, 20 Jul 2021 16:25:00 +0800
旷视天元背后的追风少年 //www.xyschoolife.com/category/yanxishe/XD63xt7YjYauCKcE.html

在大多数人的眼里,程序员的生活是刻板的:996的工作时间、长期熬夜、掉发严重、万年格子衫…

然而,旷视天元的开源研发团队,却以多元化的面貌展示了这个群体少为人知的浪漫与执着:

有人痴迷明史,选择北漂就是为了故宫;有人是职业旅行家,探访过三十多个国家;有人钟爱二次元,动漫就是他的全世界;有人是Dota 2信仰粉,也有人是强大的Dota 3号选手;还有猫奴、影迷、德州扑克爱好者……

他们唯一的共同点,也许就是写程序这个“业余爱好”。

但正是这样一群个性不一的年轻人,让旷视成为了国内第一个将深度学习框架开源的AI独角兽。2020年3月25日,旷视正式将在内部使用多年的深度学习框架开源,并命名为天元MegEngine。

开源的背后,是数不清日夜的付出,以及一往无前的勇气。在天元开源的征程上,旷视的“程序员”做了什么?对于中国开源,他们扮演了怎样的角色?

 

旷视决定开源

自2020年3月25日正式发布天元 Alpha 版本之后,旷视天元打出“深度学习,简单开发”的口号,在开发者社区引起火热关注。

深度学习框架堪称AI时代的核心软件支柱,下接芯片,上承应用。

“为什么要开源一个深度学习框架,真的不是在重复造轮子吗?”

天元开源后,团队成员经常收到这样的提问。毕竟,在旷视将天元开源前,市场上已经有Google所开发的TensorFlow和Facebook所开发的Pytorch等主流深度学习框架。

那么,旷视为什么还要坚持开源?

自2012年起,尽管深度学习尚未引起广泛关注,但已陆续有研究者开发出第一代深度学习框架,比如Theano。然而,在实践过程中,旷视的技术人员发现,这类早期开源框架使用手工的方式编写每层配置文件,非常不灵活,根本无法满足对算法训练效率的需求。雷锋网

于是,旷视研究院决定自己开发一款框架,通过计算图的方式设计模型并求导。2014年初,旷视研究院的 3 名实习生从第一行代码写起,用了不到半年的时间,成功开发出深度学习框架天元(MegEngine)的初始版本MegBrain。雷锋网

2019 年年底,公司决定将 MegBrain 开源,开源版产品进行了重新整合,更名为MegEngine,中文名为“天元”。其中,“Meg”对应旷视“Megvii”,而"Engine"指"引擎"。旷视将天元开源,是希望它能成为人工智能技术发展的“引擎”。雷锋网

首先,饮水不忘挖井人。

在技术进步层面,旷视团队在开源社区中受益颇多,因此,当旷视的框架技术有了些积累后,他们也希望把技术拿出来,回馈给开源社区。

其次,旷视渴望向世界发声。雷锋网

自2011年成立以来,旷视在各种行业顶级期刊与会议上发表了大量优秀的论文,在人工智能领域积累了丰富的研究成果。如同一个初窥门径的武林少侠,它渴望与江湖高手对话、切磋,实现共同进步。

如果天元是开源的,那么旷视的许多内部研究成果就可以直接拿出来供大家使用,而不需要改写到其他的框架上,对话会更容易;此外,天元框架对企业级应用(尤其是部署推理)做过深度优化,大家可以开箱即用,这对旷视乃至整个行业在研究落地上均有帮助。

天元的研发负责人许思然认为:“我们是工程师,我们用代码沟通。开源代码,实际上就是旷视所有技术人员与开发者交流的一种方式,这是工程师自然而然的追求。”

他认真而又不失乐观的表示:“开源这件事,对于我们整个团队乃至整个旷视都是一个激励和鼓舞,因为我们的代码将能够产生更大的影响,服务更多人。”

因此,尽管困难重重,旷视毅然决定将天元框架开源。众人拾柴火焰高。这句中国俗语亦可用于形容现代开源事业的核心:多元,团结,贡献。在背景各异的团员驱动下,天元开源,拉开了帷幕。

 

开源:过五关、斩六将

确定开源后,许思然与团队对天元框架进行了全面升级:

首先,旷视团队重新设计了天元的Python前端,让它更加易用,让有机器学习相关使用经历的开发者上手更容易。

接着,审查开源代码许可证,保证整个流程遵循开源社区的规范。在这一方面,许思然与团队花了大量时间,与内外部的法务专家合作,一行一行代码地检查,对整个代码库进行了十多次人工分析和回顾。

经过多次反复审查,许思然笑称:“现在我们团队人人都是“法律高手”,什么 License(许可证)的代码能用、什么不能用,啥叫"分发源代码",啥叫“分发产物”,用了要怎么写声明,我们现在都一清二楚…… ”

其次,团队在用户环境适配方面下了大功夫。

在旷视内部,所有人统一使用旷视自研的Brain++平台(一个融合了算法、算力和数据的AI生产力平台),很容易做到“开箱即用”。但是,在开源版本,用户所使用的机器各种各样,各种配置都不太一样,比如系统版本、各种软件版本、机器的型号、显卡的类型等等。为此,他们通过天元开发者群的交流与 GitHub 上所提交的信息,不断改进,让代码可以适配各种各样的机器和型号 。

除此之外,天元团队还在原有内部版本的基础中增加了中文API文档。一位开发者在和许思然闲聊时反馈:“有一种莫名的亲切感,可能因为它是中文的。”

在加入天元项目之前,团队的许多成员都对开源有一定了解。程聪宇接触过 Linux Kernel、Chromium与LLVM等开源项目;张风在美国读博期间也直接或间接参与了一些科学计算相关的开源项目;文洁此前的经历则是持续推进已经开源的项目,直到加入旷视才开始从准备工作跟到项目正式开源、完善。

与其余同学相比,通过校招进入旷视的王波此前对开源几乎一无所知,因此,在刚被通知天元要开源时,“整个人有点懵,不知道该干啥。”后来,他参与到代码审核工作,在审查过程中慢慢跟上大部队的节奏:“去年2月26日完成审核工作、确定代码无法律风险后,在会议室里深深地舒了一口气。”

在开源前,程聪宇和团队的主要任务是保证x86的性能就绪,优化卷积实现,最终达到对标 OpenVINO 的水平。令程聪宇印象最深刻的是:x86 nchw88 的 winograd 没有就绪前,他们的 x86 在 ResNet50 的性能一直比OpenVINO 低一点。后来,他与组员在 winograd conv 上进行了各种调优,性能终于超过 OpenVINO。那一刻,“大家真的是如释重负!”

文洁记得,除了正常的代码开发工作外,开源发布会的各种准备工作非常多。正式发布的前一天才发现直播供应商出了些问题,开发团队临阵磨枪研究了一晚直播转发功能,非常累。但看到直播的那一刻,她非常激动,觉得一切辛苦都是值得的:“因为我们做到了!”

终于,2020年3月25日,旷视在北京发布了国产深度学习框架天元的 Alpha 版本,正式面向全球开发者开源!

 

开源:正在进行时

发布会当天,团队定了蛋糕,大家一边吃着蛋糕一边看天元开源的线上发布会,既兴奋又忐忑。

除了激动、自豪,天元团队的成员也感到压力:天元在开发者社区引起了很多关注,自己写的代码将接受整个行业的检测,不确定能否得到大家的认可;Alpha 版本之后,还有许多工作要完善。

开源后,许思然特地跑去社区看关于天元的反馈,有真诚的赞许,也有很多细节改进的建议:“作为一个新的开源项目,天元可能存在很多问题,我们都愿意承认这一点。但是我们在不断地改进它,这也是大家现在工作的一个非常重要的部分。”

天元是一个由企业主导、社区共建的开源项目,因此参与的人员更广泛,来自科研、教学、生产等各个领域。这也意味着,天元将收到不同的反馈意见。

继3月开源后,旷视团队又在2020年6月发布了 Beta 版本。大约90天内,他们收到了330多个来自使用者的反馈意见,大多是关于修bug方面的改进和速度方面的提升。

根据反馈,许思然与队员一一作了改进,在中文 API 文档的流程中补充了大量针对中高阶开发者的进阶使用部分,提供了在安卓上从训练到完成产品一整套的教程,还提供了相关的支撑程序设施,使大家能更好体验训练推理一体的完整流程。

Beta 版本的进步是肉眼可见的:天元开源了ARM系列CPU支持、完善量化训练和推理功能、推理功能优化等3项功能升级,并与小米的MACE深度学习推理框架、OPEN AI LAB 的Tengine框架实现深度集成。

随后,2020年9月,团队发布了天元1.0预览版,新增5大技术特性:全新的Imperative Runtime、自动代码裁剪功能、更多的国产硬件支持、10余项推理侧性能优化、基于MLIR的静态子图优化引擎;2020年10月发布 1.0 正式版;2021年1月又发布了 1.2 版本,2021年3月24号,天元1.3版本上线……

密集的发版节奏也让团队工作异常忙碌。最忙的时候,为了赶工,团队在周末也会赶到公司加班。“不过大家一边讨论,一边吃好吃的外卖,也是非常有意思的体验。”负责模型量化的刘希宇谈道。

在高强度的工作状态下,每个人逐渐养成了自己的“护肝”秘诀。张风在压力大时,会通过跑步与健身出汗,让自己冷静下来;刘希宇会偶尔做一下办公室桌椅健身操,改善颈椎职业病。

开源让团队度过了很多不眠之夜:在2020年的四次版本发布中,许思然分别熬到了凌晨3点、4点、5点和6点。发版前需要确保开源版本一切正常,由于在同步过程中往往会出现裁剪错误或依赖内部的文件,总是在对外发布之前突然发现各种小问题导致编译不了,于是通宵达旦的调查到底哪里裁剪出现了差错。

但如今,团队已经开发出许多小工具,可以让各种开源版测试自动完成,不用工程师再熬夜盯。

对于程聪宇来说,忙碌只是小case,最大的困难是开源后继续做 Arm 优化。天元希望可以实现比其他深度学习框架更快的速度,这给优化带来了巨大挑战。当时,他们几乎用了所有能用的方法来进行优化,但都没有取得效果,一度非常绝望。

后来,他们通过profile发现存在的问题是访存瓶颈。在开会讨论解决方法时,有组员提出对不同卷积 case 进行不同的优化,配合 layout 来进行优化。实验证明,这个方法非常有效。程聪宇很自豪:“虽然很难,但我们做到了。”

天元的开源与迭代,最终使性能达到了团队目标吗?

根据以往的开源经历,程聪宇深知做一个好用的“训练+推理”的框架非常不容易,既要保证性能,又要保证易用性,且不同硬件平台差异也大。开心的是,天元在高性能方面做得不错 (算子优化、多平台支持),典型模型的预测和推理性能在 x86/Arm/CUDA 平台上不弱于主流框架;遗憾的是,易用性还需要继续打磨。

对张风与王波来说,天元在静态图的性能和显存占用方面达到了预期目标,但Alpha版本发布时,动态训练的能力刚刚起步,在架构设计、显存和性能上都表现一般。但经过团队的努力,在2020年结束之际,天元的动态训练能力也达到了一个成熟的状态。

“这是令大家最有成就感的事。”张风如是说。

 

从开源到开放

回顾过去的一年,旷视团队的各成员均被开源文化深深吸引:在工作中,他们既为中国的开源事业奉献了自己的力量,收获了友谊与自我成长,还遇到了很多志同道合的朋友。

尽管开源的工作无比繁重,但程聪宇觉得,在天元团队工作还是非常快乐的:“和有趣的人一起工作,是1+1>2的效果。”

有一次,他们特地挑了一个“良辰吉日”去开卡丁车,去之前还积极制定了缜密详细的比赛规则。

张风对这次赛事印象深刻,“戴上头盔,耳朵里就只有发动机的轰鸣声,轮胎和跑道摩擦声和自己的心跳声,大家好像一下子就从电脑前的程序员变身为职业赛车手,非常解压!”

那一次,王波因为有事没参加,事后既羡慕又庆幸,“据说开太猛了有点累。”

开源,让团队成员不再感觉自己是“打工人”,有了更多的主人翁意识。许思然认为,开源有一个重要的点,就是用户第一。“你自己就是用户,你最懂你自己的诉求,知道怎么改。在开源的逻辑之下,人人都要为最终使用者的体验去负责。”

在这个过程中,天元团队有一个明显的变化,就是心态变得更加开放。

刚开源的那段时间,运营的小伙伴督促天元的研发同学做线上直播,和开发者做一些技术分享的talk,大家都不敢去。如今,天元的Meetup活动内部讲师征集,大家却十分踊跃,令活动进行非常顺利。

比如,刚开始对开源几乎毫无经验的王波,最近成功晋升为小组组长,成为了2021年天元首期Meetup的讲师。直播前,王波预讲了3-4次。“现场效果还不错,意外收获了很多开发者的反馈,还是挺开心的。”王波事后总结道。

文洁也有同样的感受:“在之前的开源工作中,我们更多是宣传代码的心态。但在天元开源中,我们知道我们的不完美,也很诚实地告知大家,欢迎大家一起来讨论、改进。”


与开发者的日常

程聪宇认为,“一个软件之所以能取得成功,很大程度上要归功于开源本身,因为有更多人参与到这个软件的开发,有更多使用者发现问题,从而解决问题。这些开源软件的贡献者非常厉害,值得尊敬。”

有些贡献者“来无影、去无踪”。天元有一个编译工具,里面有一千多行代码。“开源之后,真的有开发者跑过来,帮我们仔仔细细地检查一遍,挑出几个错误,改过来。咦,果然合适!” 这件出乎许思然意料的事情,令他至今记忆犹新。

天元开源后,来自社区开发者的反馈帮助天元团队成长了很多。

许思然回忆,刚开源的那段时间,几乎天天被身边几位热情的开发者怼,说这个做的不对,那个也不对。后来,大家在互怼的过程中找到了一个相对平衡和彼此理解的状态。曾经的主怼人之一W同学让许思然印象深刻:“他是喷天元最厉害的开发者之一,但也是天元每次版本更新后最先试用的人。”

W同学将自己的行为归结为“爱之深、责之切”。在W同学眼中,天元经过一年的迭代,现在的量化框架非常优雅,能使得量化训练更容易正确初始化,兼容各种算法,“虽然还有点慢,但是真香!”如今,W同学已成为天元的“推广大使”,在自己的社交平台积极安利天元,繁忙的工作之余还常常为天元贡献教程文档。

天元的开发者社区中还有一个微信群,叫做“MegEngine和喝奶茶的好盆友们”。群里有旷视的员工,也有很多外部开发者,大家因为天元开源而结识。

2020年结束的跨年夜,大家在群里相约,通过云聚会写模型的方式一起庆祝跨年。开发者“落月星辰”在12月31号当晚就写了好多个经典模型。

“落月星辰”评价天元:虽然天元目前也存在一些缺陷,比如缺少预训练权重文档。但相比其他框架,天元提供的 API 在计算机视觉一块提供了更多支持,文档更齐全,对用户提问秒回;而且天元的后端静态推理很强,内存优化做到了极致。”

 

展望

2020年被称为国产深度学习框架开源的元年。除了旷视的天元MegEngine,清华的Jittor、华为的MindSpore等国产框架也都纷纷开源,市场似乎变得拥挤起来。

然而,挑战与机遇总是并存。旷视的野心不是垄断,而是成全。布局天元,意味着不计较一角一地的得失,跳出局部,从全局看问题。

正如“天元”的命名启示,“天元”在围棋中,是棋盘的正中心。旷视将天元开源,是希望自研的深度学习框架成为中国人工智能领域发展的基石,动力,以及信心。

开源本身,往往是“后来居上”:将自家的独门绝技分解成一招一式,慷慨对外,既是开诚布公的交流,也是明枪暗箭的较量。将天元开源之后,旷视不再独享其优势性能,天元的代码随时被修改、被借鉴、被创新,但在天元团队看来,这正是开源的魅力所在:“促进交流,共同成长!”

许思然相信:“一个领域越火,发展的速度就越快。深度学习是一个技术主导的领域。技术做得好,能够被其他人借鉴;做得差的,方案就没人用。开源的深度学习框架变多,最大的好处是大家可以相互学习对方的长处。”

一年的奋战过后,旷视团队继续走在开源的路上。

当被问及何时会觉得天元开源成功了,许思然想起电影Soul(《心灵奇旅》)中的一个片段:“没有一个明确的时间点,说到那个时间点,突然就成功了,进入到下一个阶段了。”他认为,开源也是如此,也许有一些标志性的阶段,但没有尽头。

问及接下来的工作期待,许思然的回答是:“多做几个强大的 feature,让更多人来用 MegEngine 。”张风等人则希望,能够从开发者社区的交流中获得更多助力。

尽管越来越多国人意识到开源的价值,但必须承认的是,中国的开源生态仍待完善,我们仍有一段漫长的道路要走。

路漫漫其修远兮,吾将上下而求索。旷视天元开源团队的身上,有着新一代青年人对技术创新一往无前的勇气、热情与执着。作为中国开源队伍中的一分子,他们让我们看到天元框架的潜力,以及中国开源生态发展的更多可能性。

致敬天元少年,致敬中国开源事业!(举杯)

(天元团队成员觉得所取得的成绩都是团队贡献,请求化名,感谢读者理解)

]]>
人工智能开发者 //www.xyschoolife.com/category/yanxishe/XD63xt7YjYauCKcE.html#comments Fri, 26 Mar 2021 11:52:00 +0800
刷arxiv有哪些技巧?5个问题快速理解机器学习论文 //www.xyschoolife.com/category/yanxishe/uceMHQtYOu60CWm4.html 译者:AI研习社(听风1996

双语原文链接:How to Understand ML Papers Quickly


我所指导的ML学员经常会问我一些不同的问题:"你如何从每天大量充斥在Arxiv网址上的出版资料中选择阅读哪些论文?" 

阅读大多数ML论文的好处是,你只需提出五个简单的问题就能跨越(忽略)一些专业术语。当我浏览论文时,我会尽可能快地回答这些问题。

1)函数近似器的输入是什么?

如:一张224x224x3的RGB图像,其中单个物体大致位于视图中心。

2)函数近似器的输出是什么?

如:一个对应输入图像的类维度为1000的向量。

请借助与具体(论文中的)方法无关的方式考虑整个系统的输入和输出,可以让你从算法术语本身中脱身,并考虑其他领域是否已经开发出使用不同方法(算法)在这里可能会有效的方法。我发现这种方法在阅读Meta-Learning论文时非常有用。

通过首先将ML问题视为一组输入和期望的输出,可以推断输入是否足以预测输出。如果没有这种推断练习,你可能会意外得到一个ML问题,其中输出不可能由输入决定。结果可能会是一个ML系统进行预测的方式是社会所认为有问题的方式(译者注:这里可能是想表达不符合人类常识与逻辑的执行方式)。

3)什么样的损失在监督输出预测(译者注:关注损失函数)?这个目标函数在什么样的背景假设下设立的?

ML模型是通过组合偏差数据而形成的。有时偏差很强,有时偏差很弱。为了使模型具有更好的泛化能力,你需要添加更多的偏差或添加更多的无偏数据。天下没有免费的午餐

举一个例子:许多最优控制算法都会假设一个固定的数据偶发过程,这个过程就是马尔科夫决策过程(MDP)。在MDP中,"状态 "和 "决策"通过环境的动态转换来确定映射到 "下一个状态、奖励以及事件是否结束"。这种结构虽然很笼统,但也是可以用来构造一个损失,让学习Q值遵循Bellman方程。

4)一旦模型被训练后,对于以前没见过的输入/输出对,模型能够泛化到什么程度?

归功于所捕获的数据信息或模型架构,ML系统可能会相当好地泛化到它以前从未见过的输入。近年来,我们看到越来越多更高等次的泛化能力,所以在阅读论文时,我注意观察那些在论文中惊人的泛化能力以及它的泛化能力来自哪里(数据、偏差或两者都有)。

对于这个领域来说,更好的归纳偏差意味着存在更多的噪音,例如因果推理或符号方法或以对象为中心的表示。这些是构建稳健可靠的ML系统的重要工具,我发现将结构化数据与模型偏差分开的界限可能是模糊的。话虽如此,但让我感到困惑的是,有许多的研究人员认为推动ML前进的方式是减少学习量(译者注:训练轮次)并增加编写硬编码的量。   

我们之所以进行ML研究,恰恰是因为有些东西我们不知道如何编写硬编码。作为机器学习的研究者,我们应该把工作重点放在改进学习方法上,把编写硬编码和符号方法留给那些研究编写硬编码的研究者。

5)论文中的说法是否可以证伪?

那些声称不能证伪的论文是不属于科学范畴的。


AI研习社是AI学术青年和AI开发者技术交流的在线社区。我们与高校、学术机构和产业界合作,通过提供学习、实战和求职服务,为AI学术青年和开发者的交流互助和职业发展打造一站式平台,致力成为中国最大的科技创新人才聚集地。

如果,你也是位热爱分享的AI爱好者。欢迎与译站一起,学习新知,分享成长。

]]>
人工智能开发者 //www.xyschoolife.com/category/yanxishe/uceMHQtYOu60CWm4.html#comments Wed, 03 Feb 2021 15:37:00 +0800
图解 | NumPy可视化指南 //www.xyschoolife.com/category/yanxishe/ld25AJQZJ30rDDf0.html 译者:AI研习社(季一帆

双语原文链接:NumPy Illustrated: The Visual Guide to NumPy


NumPy是一个广泛适用的Python数据处理库,pandasOpenCV等库都基于numpy。同时,在PyTorchTensorFlowKeras等深度许欸小框架中,了解numpy将显著提高数据共享和处理能力,甚至无需过多更改就可以在GPU运行计算。

n维数组是NumPy的核心概念,这样的好处,尽管一维和而为数组的处理方式有些差异,但多数不同维数组的操作是一样的。本文将对以下三个部分展开介绍:

  1. 向量——一维数组

  2. 矩阵——二维数组

  3. 3维及更高维数组

本文受JayAlammar的文章“ A Visual Intro to NumPy”的启发,并对其做了更详细丰富的介绍。

numpy数组 vs. Python列表

乍看上去,NumPy数组与Python列表极其相似。它们都用来装载数据,都能够快速添加或获取元素,插入和移除元素则比较慢。

当然相比python列表,numpy数组可以直接进行算术运算:

除此之外,numpy数组还具有以下特点:

  • 更紧凑,高维时尤为明显

  • 向量化后运算速度比列表更快

  • 在末尾添加元素时不如列表高效

  • 元素类型一般比较固定

其中,O(N)表示完成操作所需的时间与数组大小成正比(请见Big-O Cheat Sheet),O(1)表示操作时间与数组大小无关(详见Time Complexity)。

1.向量与1维数组

向量初始化

通过Python列表可以创建NumPy数组,如下将列表元素转化为一维数组:

注意,确保列表元素类型相同,否则dtype=’object',将影响运算甚至产生语法错误。

由于在数组末尾没有预留空间以快速添加新元素,NumPy数组无法像Python列表那样增长,因此,通常的做法是在变长Python列表中准备好数据,然后将其转换为NumPy数组,或是使用np.zeros或np.empty预先分配必要的空间:

通过以下方法可以创建一个与某一变量形状一致的空数组:

不止是空数组,通过上述方法还可以将数组填充为特定值:

在NumPy中,还可以通过单调序列初始化数组:

如果您需要[0., 1., 2.]这样的浮点数组,可以更改arange输出的类型,即arange(3).astype(float),但有更好的方法:由于arange函数对类型敏感,因此参数为整数类型,它生成的也是整数类型,如果输入float类型arange(3.),则会生成浮点数。

arange浮点类型数据不是非常友好:

上图中,0.1对我们来说是一个有限的十进制数,但对计算机而言,它是一个二进制无穷小数,必须四舍五入为一个近似值。因此,将小数作为arange的步长可能导致一些错误。可以通过以下两种方式避免如上错误:一是使间隔末尾落入非整数步数,但这会降低可读性和可维护性;二是使用linspace,这样可以避免四舍五入的错误影响,并始终生成要求数量的元素。但使用linspace时尤其需要注意最后一个的数量参数设置,由于它计算点数量,而不是间隔数量,因此上图中数量参数是11,而不是10。

随机数组的生成如下:

向量索引

对于数组数据的访问,numpy提供了便捷的访问方式:

上图中,除“fancy indexing”外,其他所有索引方法本质上都是`views`:它们并不存储数据,如果原数组在被索引后发生更改,则会反映出原始数组中的更改。

上述所有这些方法都可以改变原始数组,即允许通过分配新值改变原数组的内容。这导致无法通过切片来复制数组:

此外,还可以通过布尔索引从NumPy数组中获取数据,这意味着可以使用各种逻辑运算符:

anyall与其他Python使用类似

注意,不可以使用`3 <= a <= 5`这样的Python“三元”比较。

如上所述,布尔索引是可写的。如下图np.where和np.clip两个专有函数。

向量操作

NumPy的计算速度是其亮点之一,其向量运算操作接近C++级别,避免了Python循环耗时较多的问题。NumPy允许像普通数字一样操作整个数组:

在python中,a//b表示a div b(除法的商),x**n表示 xⁿ

浮点数的计算也是如此,numpy能够将标量广播到数组:

numpy提供了许多数学函数来处理矢量:

向量点乘(内积)和叉乘(外积、向量积)如下:

numpy也提供了如下三角函数运算:

数组整体进行四舍五入:

floor向上取整,ceil向下取整,round四舍五入

np.around与np.round是等效的,这样做只是为了避免 from numpy import *时与Python  aroun的冲突(但一般的使用方式是import numpy as np)。当然,你也可以使用a.round()。

numpy还可以实现以下功能:

以上功能都存在相应的nan-resistant变体:例如nansumnanmax

在numpy中,排序函数功能有所阉割:


对于一维数组,可以通过反转结果来解决reversed函数缺失的不足,但在2维数组中该问题变得棘手。

查找向量中的元素

不同于Python列表,NumPy数组没有索引方法。

index()中的方括号表示j或i&j可以省略

  • 可以通过np.where(a==x)[0] [0]查找元素,但这种方法很不pythonic,哪怕需要查找的项在数组开头,该方法也需要遍历整个数组。

  • 使用Numba实现加速查找,next((i[0] for i, v in np.ndenumerate(a) if v==x), -1),在最坏的情况下,它的速度要比where慢。

  • 如果数组是排好序的,使用v = np.searchsorted(a, x); return v if a[v]==x else -1时间复杂度为O(log N),但在这之前,排序的时间复杂度为O(N log N)。

实际上,通过C实现加速搜索并不是困难,问题是浮点数据比较。

浮点数比较

np.allclose(a, b)用于容忍误差之内的浮点数比较。

  • np.allclose假定所有比较数字的尺度为1。如果在纳秒级别上,则需要将默认atol参数除以1e9:np.allclose(1e-9,2e-9, atol=1e-17)==False。

  • math.isclose不对要比较的数字做任何假设,而是需要用户提供一个合理的abs_tol值(np.allclose默认的atol值1e-8足以满足小数位数为1的浮点数比较,即math.isclose(0.1+0.2–0.3, abs_tol=1e-8)==True。

此外,对于绝队偏差和相对偏差,np.allclose依然存在一些问题。例如,对于某些值a、b, allclose(a,b)!=allclose(b,a),而在math.isclose中则不存在这些问题。查看GitHub上的浮点数据指南和相应的NumPy问题了解更多信息。

2.矩阵和二维数组

过去,NumPy中曾有一个专用的matrix类,但现在已被弃用,因此在下文中矩阵和2维数组表示同一含义。

矩阵的初始化语法与向量类似:

如上要使用双括号,因为第二个位置参数(可选)是为dtype(也接受整数)保留的。

随机矩阵的生成也与向量类似:

二维数组的索引语法要比嵌套列表更方便:

“view”表示数组切片时并未进行任何复制,在修改数组后,相应更改也将反映在切片中。

轴参数

在求和等操作中,NumPy可以实现跨行或跨列的操作。为了适用任意维数的数组,NumPy引入了axis的概念。axis参数的值实际上就是维度数量,如第一个维是axis=0  ,第二维是axis=1,依此类推。因此,在2维数组中,axis=0指列方向,axis=1指行方向。

矩阵运算

除了+,-,*,/,//和**等数组元素的运算符外,numpy提供了@运算符计算矩阵乘积:

类似前文介绍的标量广播机制,numpy同样可以通过广播机制实现向量与矩阵,或两个向量之间的混合运算:

注意,上图最后一个示例是对称的逐元素乘法。使用矩阵乘法@可以计算非对称线性代数外积,两个矩阵互换位置后计算内积:

行向量与列向量

根据前文可知,在2维数组中,行向量和列向量被区别对待。通常NumPy会尽可能使用单一类型的1维数组(例如,2维数组a的第j列a[:, j]是1维数组)。默认情况下,一维数组在2维操作中被视为行向量,因此,将矩阵乘行向量时,使用形状(n,)或(1,n)的向量结果一致。有多种方法可以从一维数组中得到列向量,但并不包括transpose:

使用newaxis更新数组形状和索引可以将1维数组转化为2维列向量:

其中,-1表示在reshape是该维度自动决定,方括号中的None等同于np.newaxis,表示在指定位置添加一个空轴。

因此,NumPy中共有三种类型的向量:1维数组,2维行向量和2维列向量。以下是两两类型转换图:

根据广播规则,一维数组被隐式解释为二维行向量,因此通常不必在这两个数组之间进行转换,对应图中阴影化区域。

严格来说,除一维外的所有数组的大小都是一个向量(如a.shape == [1,1,1,5,1,1]),因此numpy的输入类型是任意的,但上述三种最为常用。可以使用np.reshape将一维矢量转换为这种形式,使用np.squeeze可将其恢复。这两个功能都通过view发挥作用。

矩阵操作

矩阵的拼接有以下两种方式:

图示操作仅适用于矩阵堆叠或向量堆叠,而一维数组和矩阵的混合堆叠只有通过vstack才可实现,hstack会导致维度不匹配错误。因为前文提到将一维数组作为行向量,而不是列向量。为此,可以将其转换为行向量,或使用专门的column_stack函数执行此操作:

与stack对应的是split:

矩阵复制有两种方式:tile类似粘贴复制;repeat相当于分页打印。

delete可以删除特定的行或列:

相应插入操作为insert

与hstack一样,append函数无法自动转置1D数组,因此需要重新调整向量形状或添加维数,或者使用column_stack:

如果仅仅是向数组的边界添加常量值,pad函数是足够的:

Meshgrids

广播机制使得meshgrids变得容易。例如需要下图所示(但尺寸大得多)的矩阵:

上述两种方法由于使用了循环,因此都比较慢。MATLAB通过构建meshgrid处理这种问题。

meshgrid函数接受任意一组索引,通过mgrid切片和indices索引生成完整的索引范围,然后,fromfunction函数根据I和J实现运算。

在NumPy中有一种更好的方法,无需在内存中存储整个I和J矩阵(虽然meshgrid已足够优秀,仅存储对原始向量的引用),仅存储形状矢量,然后通过广播规实现其余内容的处理:


如果没有indexing ='ij'参数,那么meshgrid将更改参数的顺序,即J,I=np.meshgrid(j,i)——一种用于可视化3D绘图的 xy”模式(祥见该文档)。

除了在二维或三维网格上初始化函数外,网格还可以用于索引数组:

以上方法在稀疏网格中同样适用。

矩阵统计

就像sum函数,numpy提供了矩阵不同轴上的min/maxargmin/argmaxmean/median/percentilestd/var等函数。

np.amin等同于np.min,这样做同样是为了避免from numpy import *可能的歧义。

2维及更高维中的argmin和argmax函数分别返回最小和最大值的索引,通过unravel_index函数可以将其转换为二维坐标:

allany同样也可作用于特定维度:

矩阵排序

虽然在前文中,axis参数适用于不同函数,但在二维数组排序中影响较小:

你通常不需要上述这样的排序矩阵,axis不是key参数的替代。但好在NumPy提供了其他功能,这些功能允许按一列或几列进行排序:

1、a[a [:,0] .argsort()]表示按第一列对数组进行排序:

其中,argsort返回排序后的原始数组的索引数组。

可以重复使用该方法,但千万不要搞混:

a = a[a[:,2].argsort()]

a = a[a[:,1].argsort(kind='stable')]

a = a[a[:,0].argsort(kind='stable')]

2、函数lexsort可以像上述这样对所有列进行排序,但是它总是按行执行,并且排序的行是颠倒的(即从下到上),其用法如下:

a[np.lexsort(np.flipud(a[2,5].T))],首先按第2列排序,然后按第5列排序;a[np.lexsort(np.flipud(a.T))],从左到右依次排序各列。

其中,flipud沿上下方向翻转矩阵(沿axis = 0方向,与a [::-1,...]等效,其中...表示“其他所有维度”),注意区分它与fliplr,fliplr用于1维数组。

3、sort函数还有一个order参数,但该方法极不友好,不推荐学习。

4、在pandas中排序也是不错的选择,因为在pandas中操作位置确定,可读性好且不易出错:

- pd.DataFrame(a).sort_values(by=[2,5]).to_numpy(),先按第2列排序,再按第5列排序。

-pd.DataFrame(a).sort_values().to_numpy(),按从左到右的顺序对所有列进行排序。

3、3维及更高维数组

通过重塑1维向量或转换嵌套Python列表来创建3维数组时,索引分别对应(z,y,x)。索引z是平面编号,(y,x)坐标在该平面上移动:

通过上述索引顺序,可以方便的保留灰度图像,a[i]表示第i个图像。

但这样的索引顺序并不具有广泛性,例如在处理RGB图像时,通常使用(y,x,z)顺序:首先是两个像素坐标,然后才是颜色坐标(Matplotlib中的RGB,OpenCV中的BGR):

这样可以方便地定位特定像素,如a[i,j]给出像素(i,j)的RGB元组。

因此,几何形状的创建实际取决于你对域的约定:

显然,hstack,vstack或dstack之类的NumPy函数并不一定满足这些约定,其默认的索引顺序是(y,x,z),RGB图像顺序如下:

如果数据不是这样的布局,使用concatenate命令可以方便的堆叠图像,并通过axis参数提供索引号:


如果不考虑轴数,可以将数组转换hstack和相应形式:

这种转换非常方便,该过程只是混合索引的顺序重排,并没有实际的复制操作。

通过混合索引顺序可实现数组转置,掌握该方法将加深你对3维数据的了解。根据确定的轴顺序,转置数组平面的命令有所不同:对于通用数组,交换索引1和2,对于RGB图像交换0和1:

注意,transpose(a.T)的默认轴参数会颠倒索引顺序,这不同于上述述两种索引顺序。

广播机制同样适用多维数组,更多详细信息可参阅笔记“ NumPy中的广播”。

最后介绍einsum(Einstein summation)函数,这将使你在处理多维数组时避免很多Python循环,代码更为简洁:

该函数对重复索引的数组求和。在一般情况下,使用np.tensordot(a,b,axis=1)就可以,但在更复杂的情况下,einsum速度更快,读写更容易。

如果你想看看自己的NumPy水平到底如何,可以在GitHub上进行练习——例如100个NumPy练习

对于本文未介绍到的NumPy常用功能,欢迎各位读者通过reddihackernews给我留言,我将进一步完善本文!

参考

  1. Scott Sievert, NumPy GPU acceleration

  2. Jay Alammar, A Visual Intro to NumPy and Data Representation

  3. Big-O Cheat Sheet site

  4. Python Time Complexity wiki page

  5. NumPy Issue #14989, Reverse param in ordering functions

  6. NumPy Issue #2269, First nonzero element

  7. Numba library homepage

  8. The Floating-Point Guide, Comparison

  9. NumPy Issue #10161, numpy.isclose vs math.isclose

  10. 100 NumPy exercises on GitHub


AI研习社是AI学术青年和AI开发者技术交流的在线社区。我们与高校、学术机构和产业界合作,通过提供学习、实战和求职服务,为AI学术青年和开发者的交流互助和职业发展打造一站式平台,致力成为中国最大的科技创新人才聚集地。

如果,你也是位热爱分享的AI爱好者。欢迎与译站一起,学习新知,分享成长。


]]>
人工智能开发者 //www.xyschoolife.com/category/yanxishe/ld25AJQZJ30rDDf0.html#comments Thu, 28 Jan 2021 14:20:00 +0800
关于 A*、Dijkstra、BFS 寻路算法的可视化解释 //www.xyschoolife.com/category/yanxishe/kXYgvei8w3dBOAee.html 译者:AI研习社(季一帆

双语原文链接:Interactive pathfinding


点此链接进入交互演示页面:https://interactive-pathfinding.netlify.com/

广度优先搜索、Dijkstra和A*是图上的三种典型路径规划算法。它们都可用于图搜索,不同之处在于队列和启发式函数两个参数。

本项目探索并可视化不同算法如何根据选择参数进行图搜索。

算法的一般性原理如下:

将边界初始化为包含起始节点的队列。

当边界队列不为空时,从队列中“访问”并删除一个“当前”节点,同时将访问节点的每个邻居节点添加到队列,其成本是到达当前节点的成本加上从当前节点访问邻居的成本再加上邻居节点和目标节点的启发式函数值。其中,启发式函数是对两个节点的路径成本的估计。

存储访问路径(通常存储在cameFrom图中),以便后续重建路径。如果邻居节点已经在列表中,同时新路径的成本较低,那么更改其成本。

找到目标路径(提前退出)或列表为空时,停止算法。

BFS

使用先进先出队列实现BFS。这种队列会忽略路径中链接的开销,并根据跳数进行扩展,因此可以确保找到最短路径的跳数,而跳数相关的成本。启发式函数的选择是任意的,因为在这个过程中其并不起作用。

使用数组可实现先进先出,即将元素附加到末尾并从头删除。

BFS演示动图。注意边界节点(黄色)是如何在网格中扩展为正方形的。在这里,正方形是相同“跳距”的节点集。

Dijkstra

在图上使用优先级队列和始终返回0的启发式函数,便得到Dijkstra算法

相比于BFS,Dijkstra最大的不同在于考虑了成本。通过该算法,可以根据节点到节点的成本找到最短路径。

优先级队列使用数组实现,在每次插入新节点后对该数组进行排序。尽管实现优先级队列还有其他更高效的方式,但在我们的场景中,数组是足够快的,而且实现起来也简单。

Dijkstra展示动画,注意此时的边界是一个圆。

A*

为实现A*算法,需要传递一个实际启发式函数,例如两个节点之间的欧式距离。通过“节点成本”+“节点到目标节点的估算成本”对节点进行加权,通过优先搜索更大可能的节点加快搜索速度。

借助启发式方法,A*可以比Dijkstra或BFS更快地找到正确路径。

非允许的启发式函数

只有应用可允许启发式函数,A*才能找到最短路径,这也意味着算法永远不会高估实际路径长度。由于欧氏距离是两点之间的最短距离/路径,因此欧氏距离绝不会超出。

但如果将其乘以常数k>0会怎样呢?这样会高估距离,成为非允许的启发式函数。

k值越大,算法越容易到达目标,但同时准确性降低,导致生成的路径并非总是最短的。

算法实现

本项目通过Javascript实现,以便读者在Web上进行访问。另外,我使用react渲染UI,使用react-konva渲染图形。

路径发现是指接受队列类型和启发式函数,并返回另一个函数,即真实路径发现(称为currying)。

这样,用户每次更改设置后,都会使用确定参数创建一个新的路径发现函数,并将之用于图搜索。

为可视化路径发现的步骤,我使用javascript生成器,这意味着函数返回一个迭代器,而不仅仅是一个值。因此,访客在每一步都可以生成算法的整个状态,并将其保存到数组,然后通过页面顶部的滑块显示特定状态。


AI研习社是AI学术青年和AI开发者技术交流的在线社区。我们与高校、学术机构和产业界合作,通过提供学习、实战和求职服务,为AI学术青年和开发者的交流互助和职业发展打造一站式平台,致力成为中国最大的科技创新人才聚集地。

如果,你也是位热爱分享的AI爱好者。欢迎与译站一起,学习新知,分享成长。

]]>
人工智能开发者 //www.xyschoolife.com/category/yanxishe/kXYgvei8w3dBOAee.html#comments Wed, 27 Jan 2021 16:20:00 +0800
PyTorch 指南:17个技巧让你的深度学习模型训练变得飞快! //www.xyschoolife.com/category/yanxishe/AbXJ4JAcdoIT4nyA.html 译者:AI研习社(季一帆abceefdda

双语原文链接:Faster Deep Learning Training with PyTorch – a 2021 Guide


如果你正在 pytorch 中训练深度学习模型,那么如何能够加快模型训练速度呢?

在本文中,我会介绍一些改动最小、影响最大的在pytorch中加速深度学习模型的方法。对于每种方法,我会对其思路进行简要介绍,然后预估提升速度并讨论其限制。我会把我认为重要的部分强调介绍,并在每个部分展示一些实例。接下来我将假设你正在使用GPU训练模型,这些方法基本不需要导入其他的库,只需要再pytorch内进行更改即可。

以下是我根据预估的加速效果对不同方法的排序:

  1. 考虑使用其他的学习率调整计划

  2. 在DataLoader中使用多个辅助进程并页锁定内存

  3. 最大化batch大小

  4. 使用自动混合精度AMP

  5. 考虑不同的优化器

  6. 打开cudNN基准

  7. 当心CPU与GPU之间的数据传输

  8. 使用梯度/激活检查点

  9. 使用梯度累积

  10. 多GPU分布式训练

  11. 将梯度设置为None而不是0

  12. 使用.as_tensor()而不是.tensor()

  13. 只在需要的时候打开debugging模式

  14. 使用梯度裁剪

  15. 在BatchNorm之前忽略偏差

  16. 验证时关闭梯度计算

  17. 规范化输入和批处理 

1. 考虑使用其他的学习率调整计划

在训练中使用的学习率调整计划会极大影响收敛速率以及模型泛化能力。

Leslie N. Smith 提出了循环学习率和1Cycle  学习率方法,然后由 fast.ai 的 Jeremy Howard 和 Sylvain Gugger 推广了。总的来说,1Cycle  学习速率方法如下图所示:

art5_lr_schedule (1).png

在最好的情况下,与传统的学习率策略相比,这种策略可以实现巨大的加速—— Smith称之为“超级收敛”。例如,使用1Cycle策略,在ImageNet上减少了ResNet-56训练迭代数的10倍,就可以匹配原始论文的性能。该策略似乎在通用架构和优化器之间运行得很好。

PyTorch提供了 torch.optim.lr_scheduler.CyclicLR 和 torch.optim.lr_scheduler.OneCycleLR 两种方法实现该操作,请参阅相关文档。 

这两个方法的一个缺点是引入了许多额外的超参数。这篇文章仓库对如何查找好的超参数(包括上文提及的学习率)提供了详细概述和实现。

至于为什么要这样做?现今并不完全清楚,但一个可能的解释是:定期提高学习率有助于更快越过损失鞍点

2. 在DataLoader中使用多个辅助进程并页锁定内存

在使用 torch.utils.data.DataLoader时,令 num_workers > 0,而不是默认值 0,同时设置 pin_memory=True,而不是默认值 False。至于为什么这么做,这篇文章会给你答案。

根据上述方法,Szymon Micacz 在四个 worker 和页锁定内存的情况下,在单个epoch中实现了 2 倍加速。

根据经验,一般将进程数量设置为可用 GPU 数量的四倍,大于或小于这个值都会降低训练速度。但是要注意,增加num_workers会增加 CPU 内存消耗。

3.最大化batch大小

一直以来,人们对于调大batch没有定论。一般来说,在GPU内存允许的情况下增大batch将会增快训练速度,但同时还需要调整学习率等其他超参数。根据经验,batch大小加倍时,学习率也相应加倍。

OpenAI 的论文表明不同的batch大小收敛周期不同。Daniel Huynh用不同的batch大小进行了一些实验(使用上述1Cycle 策略),实验中他将 batch大小由64增加到512,实现了4倍加速。

然而也要注意,较大的batch会降低模型泛化能力,反之亦然。

4. 使用自动混合精度AMP

PyTorch1.6支持本地自动混合精度训练。与单精度 (FP32) 相比,一些运算在不损失准确率的情况下,使用半精度 (FP16)速度更快。AMP能够自动决定应该以哪种精度执行哪种运算,这样既可以加快训练速度,又减少了内存占用。

AMP的使用如下所示:

import torch# Creates once at the beginning of trainingscaler = torch.cuda.amp.GradScaler()for data, label in data_iter:
  optimizer.zero_grad()
  # Casts operations to mixed precision
  with torch.cuda.amp.autocast():
     loss = model(data)
  # Scales the loss, and calls backward()
  # to create scaled gradients
  scaler.scale(loss).backward()
  # Unscales gradients and calls
  # or skips optimizer.step()
  scaler.step(optimizer)
  # Updates the scale for next iteration
  scaler.update()

Huang及其同事在NVIDIA V100 GPU上对一些常用语言和视觉模型进行了基准测试,发现在FP32训练中使用AMP提高约2倍的训练速度,最高甚至达到5.5倍。

目前,只有CUDA支持上述方式,查看本文档了解更多信息。

5. 考虑不同的优化器

AdamW是由fast.ai提出的具有权重衰减(而非 L2 正则化)的Adam, PyTorch中通过torch.optim.AdamW实现。在误差和训练时间上,AdamW都优于Adam。查看此文章了解为什么权重衰减使得Adam产生更好效果。

Adam和AdamW都很适合前文提到的1Cycle策略。

此外,LARSLAMB等其他优化器也收到广泛关注。

NVIDA的APEX对Adam等常见优化器进行优化融合,相比PyTorch中的原始Adam,由于避免了GPU内存之间的多次传递,训练速度提升约 5%。

6. 打开cudNN基准

如果你的模型架构时固定的,同时输入大小保持不变,那么设置torch.backends.cudnn.benchmark = True可能会提升模型速度(帮助文档)。通过启用cudNN自动调节器,可以在cudNN中对多种计算卷积的方法进行基准测试,然后选择最快的方法。

至于提速效果,Szymon Migacz在前向卷积时提速70%,在同时向前和后向卷积时提升了27%。

注意,如果你想要根据上述方法最大化批大小,该自动调整可能会非常耗时。

7. 当心CPU与GPU之间的数据传输

通过tensor.cpu()可以将张量从GPU传输到CPU,反之使用tensor.cuda(),但这样的数据转化代价较高。 .item()和.numpy()的使用也是如此,建议使用.detach()。

如果要创建新的张量,使用关键字参数device=torch.device('cuda:0')将其直接分配给GPU。

最好使用.to(non_blocking=True)传输数据,确保传输后没有任何同步点即可。

另外Santosh Gupta的SpeedTorch也值得一试,尽管其加速与否尚不完全清除。

8.使用梯度/激活检查点

检查点通过将计算保存到内存来工作。检查点在反向传播算法过程中并不保存计算图的中间激活,而是在反向传播时重新计算,其可用于模型的任何部分。

具体来说,在前向传播中,function以torch.no_grad()方式运行,不存储任何中间激活。相反,前向传递将保存输入元组和function参数。在反向传播时,检索保存的输入和function,并再次对function进行正向传播,记录中间激活,并使用这些激活值计算梯度。

因此,对于特定的批处理大小,这可能会稍微增加运行时间,但会显着减少内存消耗。反过来,你可以进一步增加批处理大小,从而更好地利用GPU。

虽然检查点可以通过torch.utils.checkpoint方便实现,但仍需要里哦阿姐其思想与本质。Priya Goyal的教程很清晰的演示了检查点的一些关键思想,推荐阅读。


9.使用梯度累积

增加批处理大小的另一种方法是在调用Optimizer.step()之对多个.backward()传递梯度进行累积。

根据Hugging Face的Thomas Wolf发表的文章,可以按以下方式实现梯度累积:

model.zero_grad()                                   # Reset gradients tensors    for i, (inputs, labels) in enumerate(training_set):    
   predictions = model(inputs)                     # Forward pass    
   loss = loss_function(predictions, labels)       # Compute loss function    
   loss = loss / accumulation_steps                # Normalize our loss (if averaged)    
   loss.backward()                                 # Backward pass    
   if (i+1) % accumulation_steps == 0:             # Wait for several backward steps    
       optimizer.step()                            # Now we can do an optimizer step    
       model.zero_grad()                           # Reset gradients tensors    
   if (i+1) % evaluation_steps == 0:           # Evaluate the model when we...    
       evaluate_model()                        # ...have no gradients accumulated

该方法主要是为了规避GPU内存的限制,但对其他.backward()循环之间的取舍我并不清楚。fastai论坛上的讨论似乎表明它实际上是可以加速训练的,因此值得一试。详情查看GitHub托管的rawgradient_accumulation.py

10.多GPU分布式训练

通过分布式训练加快模型速度的一种简单的方法是使用torch.nn.DistributedDataParallel而不是torch.nn.DataParallel。这样,每个GPU将由专用的CPU内核驱动,从而避免了DataParallel的GIL问题。

强烈推荐阅读分布式训练相关文档了解更多信息:

PyTorch Distributed Overview — PyTorch Tutorials 1.7.0 documentation  

11.将梯度设置为None而不是0

设置.zero_grad(set_to_none=True)而不是.zero_grad()

这样内存分配器处理梯度而不是主动将其设置为0,这会产生该文档所示的适度加速,但不要抱有过大期望。

注意,这样做不会有任何副作用!阅读文档查看更多信息。

12.使用.as_tensor()而不是.tensor()

torch.tensor()本质是复制数据,因此,如果要转换numpy数组,使用torch.as_tensor()或torch.from_numpy()可以避免复制数据。

13.只在需要的时候打开debugging模式

Pytorch提供了许多调试工具,例如autograd.profilerautograd.grad_checkautograd.anomaly_detection。使用时一定要谨慎,这些调试工具显然会影响训练速度,因此在不需要时将其关闭。

14.使用梯度裁剪

为了避免RNN中的梯度爆炸,使用梯度裁剪gradient = min(gradient, threshold)可以起到加速收敛作用,这一方法已得到理论和实验的支持

Hugging Face的Transformer提供了将梯度裁剪和AMP等其他方法有效结合的清晰示例

在PyTorch中,也可使用torch.nn.utils.clip_grad_norm_(文档查阅)完成此操作。

虽然我尚不完全清楚哪种模型可以从梯度裁剪中受益,但毫无疑问的是,对于RNN、基于Transformer和ResNets结构的一系列优化器来说,该方法显然是起到一定作用的。

15.在BatchNorm之前忽略偏差

在BatchNormalization层之前关闭之前层的偏差时一种简单有效的方法。对于二维卷积层,可以通过将bias关键字设置为False实现,即torch.nn.Conv2d(..., bias=False, ...)。阅读该文档了解其原理。

与其他方法相比,该方法的速度提升是有的。

16. 验证时关闭梯度计算

在模型验证时令torch.no_grad()

17. 规范化输入和批处理 

也许你已经在这样做了,但还是要仔细检查,反复确认:

点击查看这样做的原因。

其他技巧:使用JIT实现逐点融合

如果要执行相邻逐点操作,可以使用PyTorch JIT将它们组合成一个FusionGroup,然后在单内核上启动,而不是像默认情况那样在多个内核上启动,同时还可以保存一些内存进行读写。

Szymon Migacz展示了如何使用@torch.jit.script装饰器融合GELU操作融合,如下:

@torch.jit.scriptdef fused_gelu(x):    return x * 0.5 * (1.0 + torch.erf(x / 1.41421))

相比于未融合版本,融合这些操作可以使fused_gelu的执行速度提高5倍。

查阅此文章获取更多使用Torchscript加速RNN的示例。

当然,你还可以在Reddit上与u/Patient_Atmosphere45交流讨论。

参考及其他资源

本文许多技巧参考自Szymon Migacz的演讲PyTorch文档

PyTorch Lightning的作者William Falcon在这两篇文章种介绍了关于加快训练的内容。同时,PyTorch Lightning已集成以上一些技巧与方法。

Hugging Face的作者Thomas Wolf也写了一系列文章介绍深度学习的加速-尤其是语言模型。

Sylvain GuggerJeremy Howard写了很多关于学习率AdamW的文章。

感谢Ben Hahn,Kevin Klein和Robin Vaaler对本文撰写提供的帮助!


AI研习社是AI学术青年和AI开发者技术交流的在线社区。我们与高校、学术机构和产业界合作,通过提供学习、实战和求职服务,为AI学术青年和开发者的交流互助和职业发展打造一站式平台,致力成为中国最大的科技创新人才聚集地。

如果,你也是位热爱分享的AI爱好者。欢迎与译站一起,学习新知,分享成长。

]]>
人工智能开发者 //www.xyschoolife.com/category/yanxishe/AbXJ4JAcdoIT4nyA.html#comments Tue, 26 Jan 2021 11:27:00 +0800
准备好了吗?GNN 图神经网络 2021 年的5大应用热点 //www.xyschoolife.com/category/yanxishe/J3XGGWkR7WZI2P1c.html 译者:AI研习社(季一帆

双语原文链接:Top Applications of Graph Neural Networks 2021



今年开始。图神经网络(Graph Neural Networks)成为研究者讨论的焦点,作为该领域的研究人员,我甚是欣慰。记得大概三年前,图神经网络那时还受到冷落,当我和研究GAN和Transformers的同行交流时,他们认为我的研究方向极其小众。到了现在,这个领域终于守得云开见月明。因此,我将在本文向大家介绍最近的GNNs应用热点。

推荐系统

在电子商务平台中,用户与产品的交互构成图结构,因此许多公司使用图神经网络进行产品推荐。典型的做法是对用户和商品的交互关系进行建模,然后通过某种负采样损失学习节点嵌入,并通过kNN实时推荐给用户相似产品。Uber Eats 公司很早就通过这样的方式进行产品推荐,具体而言,他们使用图神经网络 GraphSage 为用户推荐食品和餐厅。

在食品推荐中,由于地理位置的限制,使用的图结构比较小。在一些包含数10亿节点的大规模图上,同样也可以使用图神经网络。使用传统方法处理如此大规模的图是非常困难的,阿里巴巴公司在包含数十亿用户和产品的网络上研究图嵌入和GNN,最近他们提出的Aligraph,仅需要五分钟就可以构建具有400M节点的图。非常强大!此外,Aligraph还支持高效的分布式图存储,对采样过程进行了优化,同时内部集成了很多GNN模型。该框架已成功用于公司的多种产品推荐和个性化搜索任务。



AlibabaAmazon 以及其他很多电子商务平台使用GNN构建推荐系统

Pinterest 提出了 PinSage 模型,该模型使用个性化PageRank对邻域进行高效采样,并通过聚合邻域更新节点嵌入。后续模型 PinnerSage 进一步扩展了该框架来处理不同用户的多嵌入问题。受限篇幅,本文仅列出GNN在推荐系统的部分应用(其他案例还包括:Amazon在知识图谱中应用GNNFabula AI使用GNN检测假新闻等),但这些足以表明,如果用户互动的信息足够丰富,那么GNNs将显著推动推荐系统中进一步发展。

组合优化

金融、物流、能源、生命科学和硬件设计等多个领域都面临组合优化(CO)问题。这些问题多数可以通过图结构进行建模,因此,过去近一个世纪的研究工作都致力于从算法层面解决CO问题。然而,机器学习的发展为CO问题的解决提供了另外一种可能性。

Google Brain 团队将GNN成功用于硬件设计,如对Google TPU芯片块的功耗、面积和性能的优化。可以将计算机芯片视为由内存和逻辑部件组成的图,每个图由其部件的坐标和类型表示。电气工程师的工作就是,在遵守密度和布线拥塞限制的同时,确定每个组件的位置。Google Brain团队结合GNN和策略/值RL实现对电路芯片布局的设计与优化,其表现优于人工设计的硬件布局。


芯片布局与国际象棋、围棋的复杂度对比(图源

此外,还可以将机器学习(ML)模型集成到现有求解器中。Gasse et al.  提出了一种用于学习分支定界变量选择策略(混合整数线性程序MILP求解器的关键)的图网,通过该方式能够最小化求解器的运行时间。同时论文表明,该方法既能保证推理时间,又能保证决策质量。

在DeepMind和Google的最新工作中,图网被用于MILP求解器的两个关键子任务:联合变量分配和目标值定界。在Google生产包和规划系统大规模数据集上,他们的神经网络方法比现有求解器快2–10倍。更多内容请查阅相关综述

计算机视觉

由于世界上所有物体都是密切联系的,因此可以将GNN用于物体图像。通过场景图可以感知图像,即一组物体出现在同一场景中,那么它们之间存在联系。场景图已用在图像检,理解和推理,字幕生成,视觉问答以及图像生成等任务,从而大大提高模型的性能。

Facebook的一项研究表明,根据经典CV数据集COCO中的物体形状、位置和大小创建场景图,然后使用GNN对图中物体进行嵌入,进而结合CNN生成物体的遮罩,边框和外。最终,通过GNN / CNN可以在用户指定节点(确定节点的相对位置和大小)生成物体图像。


使用场景图生成图像。用户可以将物体放置在画布的任何位置,图像也会产生相应变动(如将红色的“河流”从中间移到右下角,那么图像中生成的河流也移到右下角)

对于CV的经典任务——两个相关图像的匹配,之前的方法仅能通过人工实现。但现在,3D图形公司Magic Leap开发出名为SuperGlue的GNN架构,该架构可在实时视频中执行图形匹配,以完成3D重建、位置识别、本地化和制图(SLAM)等任务。SuperGlue由一个基于注意力的GNN组成,GNN学习图像关键点的表示,然后在最佳传输层对这些关键点表示进行匹配。模型可以在GPU上实现实时匹配,还能方便地集成到现有SLAM系统中。关于图形与计算机视觉的更多研究和应用,参见以下综述文章

物理/化学

根据粒子或分子之间的相互作用构建图,然后使用GNN预测系统属性已逐渐成为生命科学中的重要研究方法。Facebook和CMU合作的Open Catalyst项目致力于找到新的方法来存储可再生能源,例如太阳能或风能。可能的方案之一是通过化学反应将这种能量转换成其他燃料,如氢气。然而,这需要发现新的、更高效的催化剂来加速化学反应,且已知的DFT方法成本极高。Open Catalyst项目开源了大规模催化剂数据集、DFT弛豫和GNN基准方法,希望找到新的、高效的、低成本催化剂分子。


吸附质(小连接分子)和催化剂表面的初始状态和松弛状态。为了找到吸附质-催化剂对的松弛状态,需要进行高昂的DFT模拟,而且要花费好几天时间。Zitnick et al. 2020

DeepMind的研究人员还使用GNN来模拟复杂粒子系统(例如水或沙子)的动力学过程。通过逐步预测每个粒子的相对运动,可以合理重建整个系统的动力学,了解控制运动的基本规律。这可用于了解玻璃化转变——固态理论中最有趣的未决问题之一。此外,使用GNN不仅可以模拟过渡中的动力学,而且可以更好地了解粒子之间如何根据距离和时间产生相互影响。

此外,美国的物理实验室的Fermilab致力于应用GNNs对CERN大型强子对撞机(LHC)的结果进行分析,希望能够对数百万图像进行处理,发现并选择与新粒子相关的图像。他们的任务是将GNN部署在FPGA,并将其与数据采集器集成在一起,这样可以在全球范围内远程运行GNN。有关GNNs在粒子物理学中的更多应用,参见以下综述文章

药物研发

制药行业竞争激烈,头部公司每年都会投入数十亿美元来开研发新药。在生物学中,图可以表示不同尺度上的相互作用,如在分子水平,图的边缘可以是分子中原子之间的键或蛋白质中氨基酸残基之间的相互作用;在更大的尺度上,图可以表示更复杂的结构(例如蛋白质,mRNA或代谢物)之间的相互作用。不同层次尺度中的图可用于目标识别,分子特性预测,高通量筛选,新型药物设计,蛋白质工程和药物再利用等。


应用GNN进行药物研发的时间流,Gaudelet et al., 2020

麻省理工学院的研究人员及其合作者在Cell(2020)上发表的文章表明,GNN有助于药物研发。他们训练了名为Chemprop的深层GNN模型来预测分子是否具有抗生素特性,即对大肠杆菌的生长抑制作用。在使用FDA批准的药物库中的约2500个分子对其进行训练后,Chemprop被应用于更大的数据集,该数据集为包含Halicin分子的Drug Repurposing Hub,并根据《2001:太空漫游》电影中的HAL9000对其重命名。

需要说明的是,由于Halicin分子结构与已知的抗生素相差很大,因此先前的工作仅对该分子进行研究。但是,体内和体外临床实验表明,Halicin是一种广谱抗生素。相比NN模型进行的广泛基准测试,应用GNN发现Halicin更加显示了GNN强大的学习表征能力。除此之外,Chemprop架构也值得关注:不同于多数GNN模型,Chemprop有5层和1600隐藏层维数,远超其他GNN参数。以上介绍不过是GNN在新药发现中的冰山一角,想要了解更多信息,请查阅该综述博客

致谢

感谢Michael Bronstein,PetarVeličković,Andreas Loukas,Chaitanya Joshi,Vladimir Ivashkin,Boris Knyazev等人的反馈与建议。


AI研习社是AI学术青年和AI开发者技术交流的在线社区。我们与高校、学术机构和产业界合作,通过提供学习、实战和求职服务,为AI学术青年和开发者的交流互助和职业发展打造一站式平台,致力成为中国最大的科技创新人才聚集地。

如果,你也是位热爱分享的AI爱好者。欢迎与译站一起,学习新知,分享成长。

]]>
人工智能开发者 //www.xyschoolife.com/category/yanxishe/J3XGGWkR7WZI2P1c.html#comments Mon, 25 Jan 2021 16:15:00 +0800
准备开始学习机器学习?有人帮你选出了 top 8 优质课程:CS229、 Stat 451…… //www.xyschoolife.com/category/yanxishe/yylV89EFswzRngJa.html 译者:AI研习社(小Y的彩笔

双语原文链接:Course Recommendations for Introductory Machine Learning


在你入门深度学习之前,我强烈建议你学几门机器学习的入门课程来掌握一些诸如聚类、回归、评估指标等基本概念。

1. 科尔辛基大学的 Elements of AI 

注:我已经学了许多线上的机器学习课程。我上一些课的本意是为了娱乐,不过总能学到一些新知识。“Elements of AI"这门课是我参加过的最易懂,免费且有趣的AI课程之一。他们增加了第二部分联系算法构建。

我建议观看第一部分,”Introduction to AI”。这部分介绍了诸如搜索,贝叶斯定理,最近邻居和神经网络等基础概念。并穿插着一些很棒的练习。在第一节课结束后,你会对这个领域有一个全局的高层次的认识。

第二部分(Building AI)也是免费的,但如果你想得到认证证书则需要付费。我想说这绝对是值得的!第二部分是关于一些基本算法的实现的(用Python),会让你理解像优化和贝叶斯定理这样的概念。

https___bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com_public_images_65770677-dede-42b0-9a3b-6ae5cb2c6e69_1600x910.png

2. 微软的 Create machine learning models 课程

注:聚类的章节讲的是真的棒!https___bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com_public_images_a70f1d00-bc93-4eed-9a27-79e4b382c5cf_1200x669.jpeg

3. 斯坦福大学 Andrew Ng 的 Stanford CS229: Machine Learning 课程

注:永远是我最喜欢的机器学习课程之一!

https___bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com_public_images_ff8bda0b-f0ea-4936-b5f0-c9951a562a48_1200x758.jpeg

4. 谷歌提供的 Machine Learning Crash Course 课程

注:这个课程一发布我就学了,并且被课程的的高质量所吸引。

https___bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com_public_images_362f7a6c-c2ad-4137-a624-2cf02ee50ef9_1200x626.jpeg

5. Jeremy Howard 的 Introduction to Machine Learning for Coders 课程

注:我看了一些 http://fast.ai 课程的视频,很快明白他们的课程为什么这么受欢迎。这里面介绍了非常实用的方法!

https___bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com_public_images_60825b7e-c035-4b88-a5f3-ae6e04c60d0f_1200x768.jpeg

6. Bloomberg ML edu 提供的 Foundations of Machine Learning 课程

注:如果你热爱数学和理论,你会喜欢这门课程的深度。

https___bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com_public_images_102641fd-9d60-4853-b591-e1ba88b8def3_1199x732.jpeg

7. 机器学习大学提供的 Tabular Data 课程

注: 这门课程用容易掌握的解释和机器学习的应用实例,从高层次了重要的机器学习话题。

https___bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com_public_images_f5183acb-fb7c-490a-afc1-bcfb989f794a_1200x687.jpeg

8. Sebastian Raschka 的 Stat 451: Intro to Machine Learning (Fall 2020) 课程

注:Aebastian 坚持在他的 YouTube 频道上发布很棒的机器学习内容,我真的超级感谢这些内容,非常易学!

https___bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com_public_images_a018c20f-6944-4018-9ae1-0d548b89925e_1199x793.jpeg当然还有许多其他课程,但我只能推荐一些我学过的。如果你找到其他好的课程欢迎要分享在评论区!如果你能分享你上课的经历以及你为什么喜欢它门或者觉得课程有用,那就太棒了。

一旦有新的有趣的课程出现,我将会保持更新这个列表。

其他小贴士:

  • 列出你觉得有趣或者有挑战的主题。

  • 在这些主题上做更多的调查

  • 练习编代码

  • 分享你的代码

  • 写笔记

  • 写下或者报告逆的有趣的写成果或者点子

  • 慢慢来

  • 参与机器学习论坛或讨论


AI研习社是AI学术青年和AI开发者技术交流的在线社区。我们与高校、学术机构和产业界合作,通过提供学习、实战和求职服务,为AI学术青年和开发者的交流互助和职业发展打造一站式平台,致力成为中国最大的科技创新人才聚集地。

如果,你也是位热爱分享的AI爱好者。欢迎与译站一起,学习新知,分享成长。

]]>
人工智能开发者 //www.xyschoolife.com/category/yanxishe/yylV89EFswzRngJa.html#comments Fri, 22 Jan 2021 11:21:00 +0800
人工智能和机器学习之间的区别,你真的清楚吗? //www.xyschoolife.com/category/yanxishe/Chlc6S2pbnrd6PNL.html 译者:AI研习社(听风1996

双语原文链接:Machine Learning (ML) vs. Artificial Intelligence (AI) — Crucial Differences


最近,一份关于那些声称在其产品和服务上使用人工智能[29] [30]的公司滥用人工智能的报告发布。根据Verge [29]的数据,40%声称使用人工智能的欧洲初创公司其实并没有使用这项技术。去年,TechTalks也意外发现了这样的滥用行为,一些公司声称使用机器学习和先进人工智能来收集和检查数千名用户的数据,以增强其产品和服务[2] [33]的用户体验。

遗憾的是,公众和媒对于什么是真正的人工智能 [44],以及到底什么是机器学习[18] ,仍然存在很多困惑。这些术语通常被用作同义词。在其他情况下,人工智能与机器学习是相对独立的、互相平行的领域发展进步,而另一些则利用这一趋势来有意炒作和博眼球(刺激),来增加销售量以及收入 [2] [31] [32] [45]。

下面我们来看看人工智能和机器学习之间的一些主要区别。

什么是机器学习?

什么是机器学习 | Tom M. Mitchell,Machine Learning,McGraw Hill,1997[18]

CMU计算机科学学院临时院长、卡内基梅隆大学(Carnegie Mellon University)教授、前机器学习系主任 Tom M. Mitchell 表示:

科学领域最好由它所研究的中心问题来界定。机器学习领域试图回答以下问题:
“我们怎样才能建立一个随着经验而自动改进的计算机系统,而支配所有学习过程的基本法则是什么?[1]

机器学习(ML)是人工智能的一个分支,正如计算机科学家和机器学习先驱 [19]Tom M.Mitchell所定义的:“机器学习是对计算机算法的研究,允许计算机程序通过经验自动改进。” [18] —ML是我们期望实现人工智能的方法之一。机器学习依赖于对大大小小的数据集进行研究,通过检查和比较数据来发现共同的模式并探索细微差别。

例如,如果您提供一个机器学习模型,其中包含许多您喜欢的歌曲,以及它们相应的音频统计数据(舞蹈性、乐器、节奏或流派)。它应该能够自动化(取决于所使用的有监督机器学习模型)并生成推荐系统 [43],以便在未来向您推荐您喜欢的音乐(以高概率),类似于Netflix、Spotify和其他公司所做的 [20] [21] [22]。

在一个简单的例子中,如果你加载了一个机器学习程序,其中有相当大的X射线图片数据集以及它们的描述(症状、需要考虑的项目和其他),它应该有能力在以后协助(或可能自动化)X射线图片的数据分析。机器学习模型会查看不同数据集中的每一张图片,并在具有可比指征标签的图片中找到共同的模式。此外,(假设我们对图像使用可能的ML算法)当你用新的图片加载模型时,它会将其参数与之前收集的例子进行比较,以揭示图片中包含它先前分析过的任何指征的可能性。

监督学习(分类/回归)|无监督学习(聚类)|Credits: Western Digital [13]

我们前面示例中的机器学习类型,称为“监督学习”,其中监督学习算法尝试对目标预测输出和输入特征之间的关系和依赖关系建模,以便我们可以根据这些关系预测新数据的输出值,它已经从以前的数据集 [15] 中学习到了反馈。

无监督学习是机器学习的另一种类别,是一类主要用于模式检测和描述性建模的机器学习算法。这些算法在数据上没有输出类别或标签(模型使用未标记的数据进行训练)。

  

强化学习 | Credits: Types of ML Algorithms you Should Know by David Fumo [3]

强化学习是第三种流行的机器学习类型,其目的是利用从与环境的交互中收集到的观察结果来采取行动,以最大限度地提高回报或降低风险。在这种情况下,强化学习算法(称为agent)通过迭代不断地从环境中学习。强化学习的一个很好的例子是电脑达到了超人的状态,并在电脑游戏中打败了人类[3]

机器学习可以让人眼花缭乱,尤其是它的高级子分支,即深度学习和各种类型的神经网络。无论如何,它是 "神奇 "的(计算学习理论) [16],不管公众有时是否有观察其内部运作的问题。虽然有些人倾向于将深度学习和神经网络与人脑的工作方式进行比较,但两者之间存在着本质的区别 [2[4] [46]。

什么是人工智能(AI)?

卡耐基梅隆大学计算机科学学院教授兼院长 Andrew Moore讲解的人工智能全景图|Youtube [14]

另一方面,人工智能的范围很广。根据卡耐基梅隆大学计算机科学学院前院长Andrew Moore [6] [36] [47]的说法,"人工智能是一门科学和工程,它让计算机以一种直到最近我们还认为需要人类智能的方式运行。"

这是一个用一句话来定义人工智能的好方法;然而,它仍然显示出这个领域是多么广泛和模糊。50年前,下棋程序被认为是人工智能的一种形式 [34],因为博弈论和游戏策略是只有人脑才能完成的能力。如今,象棋游戏是枯燥而陈旧的,因为它几乎是每个计算机操作系统(OS)的一部分 [35];因此,"直到最近 "是随着时间的推移而发展的东西 [36]。

CMU的助理教授和研究员 Zachary Lipton在Approximately Correct [7]上阐明,AI这个术语 "是一个理想的,是一个动态的目标,一种基于那些人类拥有但机器没有的能力"。AI还包括相当程度的我们所知道的技术进步。机器学习只是其中之一。之前的人工智能作品利用了不同的技术。例如,1997年击败世界国际象棋冠军的人工智能 "深蓝 "使用了一种叫做树搜索算法 [8]的方法来评估每一个回合的数百万步 [2] [37] [52] [53]。

使用深度优先搜索解决八皇后难题的示例 | 人工智能简介 | . how2Examples

正如我们今天所知道的那样,人工智能的象征是以Google Home、Siri和Alexa为代表的人机交互小工具,以Netflix、亚马逊和YouTube为代表的机器学习驱动的视频推荐系统。这些技术进步正逐步成为我们日常生活中不可或缺的一部分。它们是智能助手,提升了我们作为人类和专业人士的能力--使我们更有效率。

与机器学习相比,人工智能是一个动态的目标 [51],它的定义会随着其相关技术进步的进一步发展而改变[7]。可能在几十年内,今天的人工智能创新进展应该被认为是乏味的,就像现在的翻盖手机对我们来说一样。

为什么科技公司倾向于将AI和ML交替使用?

  "... ...我们想要的是一台能从经验中学习的机器" ~ Alan Turing

"人工智能 "一词是在1956年由Allen Newell和Herbert A. Simon等一批研究人员提出的[9]。从那时起,人工智能的产业经历了许多波动。在早期的几十年里,围绕着这个行业进行了大量的炒作,许多科学家都一致认为人类水平的人工智能指日可待。然而,未兑现的论断引起了行业与公众的普遍不满,并导致了人工智能的寒潮,这一时期,对该领域的资金和兴趣大大消退 [2] [38] [39] [48]。

后来,各组织试图将自己的工作与人工智能这个术语分开,人工智能已经成为无事实根据的炒作的同义词,并利用不同的名称来指代他们的工作。例如,IBM将 "深蓝 "描述为一台超级计算机,并明确表示它没有使用人工智能 [10],而它却使用了人工智能 [23]。

在此期间,各种其他术语,如大数据、预测分析和机器学习,开始受到关注和普及[40]。2012年,机器学习、深度学习和神经网络取得了长足的进步,并在越来越多的领域得到应用。各机构突然开始使用“机器学习”和“深度学习”来宣传他们的产品[41]。

深度学习开始解决那些基于经典规则编程无法完成的任务。早期的语音和人脸识别、图像分类、自然语言处理等领域突飞猛进 [2] [24] [49],2019年3月,三位最受认可的深度学习先驱获得了图灵奖,他们的贡献和突破使深度神经网络成为当今计算的关键组成部分[42]。

因此,从这个势头来看,我们看到了人工智能的回归。对于那些习惯于使用各种限制的老式软件人来说,深度学习的效果几乎就像 "魔法" [16] 一样[16]。尤其是由于神经网络和深度学习进入的一小部分领域被认为是计算机的禁区,而如今,机器学习和深度学习的工程师都能获得高薪,甚至在非营利组织工作,这就足以说明了这个领域的热度 [50[11].。

来源 | 推特 | GPT-2更好的语言模型及其含义,Open AI

可悲的是,这一点媒体公司往往在没有进行深刻考察的情况下就进行报道,并且经常配合人工智能文章中的水晶球(译者注:神奇的事情)和其他超自然描描述。这样的欺骗性行为有助于那些公司围绕他们的产品产生炒作[27]。然而,在以后的日子里,由于未能达到预期,这些机构不得不雇佣他人来弥补他们所谓的人工智能[12]。最终,他们可能会为了短期利益而导致该领域的不信任,并引发另一个人工智能的冬天寒潮[2] [28]。

资源

机器学习导论|Matt Gormley|卡耐基梅隆大学计算机科学学院|

http://www.cs.cmu.edu/~mgormley/courses/10601/

AI for Everyone | Andrew Ng | Coursera |

https://www.coursera.org/learn/ai-for-everyone

Machine Learning Crash Course | Google | 

https://developers.google.com/machine-learning/crash-course/

机器学习介绍 | Udacity | 

https://www.udacity.com/course/intro-to-machine-learning–ud120

机器学习培训|亚马逊网络服务|

https://aws.amazon.com/training/learning-paths/machine-learning/

机器学习简介|Coursera|

https://www.coursera.org/learn/machine-learning

参考文献:

[1] The Discipline of Machine learning | Tom M. Mitchell | http://www.cs.cmu.edu/~tom/pubs/MachineLearning.pdf

[2] Why the difference between AI and machine learning matters | Ben Dickson | TechTalks | https://bdtechtalks.com/2018/10/08/artificial-intelligence-vs-machine-learning/

[3] Types of Machine Learning Algorithms You Should Know | David Fumo | Towards Data Science | https://towardsdatascience.com/types-of-machine-learning-algorithms-you-should-know-953a08248861

[4] Watch our AI system play against five of the world’s top Dota 2 Professionals | Open AI | https://openai.com/five/

[5] Differences between Neural Networks and Deep Learning | Quora | https://www.quora.com/What-is-the-difference-between-Neural-Networks-and-Deep-Learning

[6] What Machine Learning Can and Cannot Do | WSJ | https://blogs.wsj.com/cio/2018/07/27/what-machine-learning-can-and-cannot-do/

[7] Carnegie Mellon Dean of Computer Science on the Future of AI | Forbes | https://www.forbes.com/sites/peterhigh/2017/10/30/carnegie-mellon-dean-of-computer-science-on-the-future-of-ai

[8] From AI to Ml to AI: On Swirling Nomenclature & Slurried Thought | Zachary C. Lipton | Approximately Correct | http://approximatelycorrect.com/2018/06/05/ai-ml-ai-swirling-nomenclature-slurried-thought/

[9] Tree Search Algorithms | Introduction to AI | http://how2examples.com/artificial-intelligence/tree-search

[10] Reinventing Education Based on Data and What Works, Since 1955 | Carnegie Mellon University | https://www.cmu.edu/simon/what-is-simon/history.html

[11] Does Deep-Blue use AI? | Richard E. Korf | University of California | https://www.aaai.org/Papers/Workshops/1997/WS-97-04/WS97-04-001.pdf

[12] Artificial Intelligence: Salaries Heading Skyward | Stacy Stanford | Machine Learning Memoirs | https://medium.com/mlmemoirs/artificial-intelligence-salaries-heading-skyward-e41b2a7bba7d

[13] The rise of ‘pseudo-AI’: how tech firms quietly use humans to do bots’ work | The Guardian | https://www.theguardian.com/technology/2018/jul/06/artificial-intelligence-ai-humans-bots-tech-companies

[14] Simplify Machine Learning Pipeline Analysis with Object Storage | Western Digital | https://blog.westerndigital.com/machine-learning-pipeline-object-storage/

[15] Dr. Andrew Moore Opening Keynote | Artificial Intelligence and Global Security Initiative | https://youtu.be/r-zXI-DltT8

[16] The 50 Best Public Datasets for Machine Learning | Stacy Stanford | https://medium.com/datadriveninvestor/the-50-best-public-datasets-for-machine-learning-d80e9f030279

[17] Computational Learning Theory | ACL | http://www.learningtheory.org/

[18] Machine Learning Definition | Tom M. Mitchell| McGraw-Hill Science/Engineering/Math; (March 1, 1997), Page 1 | http://www.cs.cmu.edu/afs/cs.cmu.edu/user/mitchell/ftp/mlbook.html

[19] For pioneering contributions and leadership in the methods and applications of machine learning. | “Prof. Tom M. Mitchell.” National Academy of Engineering. Retrieved October 2, 2011.

[20] Recommender System | Wikipedia | https://en.wikipedia.org/wiki/Recommender_system

[21] Spotify’s “This Is” playlists: the ultimate song analysis for 50 mainstream artists | James Le | https://towardsdatascience.com/spotifys-this-is-playlists-the-ultimate-song-analysis-for-50-mainstream-artists-c569e41f8118

[22] How recommender systems make their suggestions | Bibblio | https://medium.com/the-graph/how-recommender-systems-make-their-suggestions-da6658029b76

[23] Deep Blue | Science Direct Assets | https://www.sciencedirect.com/science/article/pii/S0004370201001291

[24] 4 great leaps machine learning made in 2015 | Sergar Yegulalp | https://www.infoworld.com/article/3017250/4-great-leaps-machine-learning-made-in-2015.html

[25] Limitations of Deep Learning in AI Research | Roberto Iriondo | Towards Data Science | https://towardsdatascience.com/limitations-of-deep-learning-in-ai-research-5eed166a4205

[26] Forty percent of ‘AI startups’ in Europe don’t use AI, claims report | The Verge | https://www.theverge.com/2019/3/5/18251326/ai-startups-europe-fake-40-percent-mmc-report

[27] This smart toothbrush claims to have its very own ‘embedded AI’ | The Verge | https://www.theverge.com/circuitbreaker/2017/1/4/14164206/smart-toothbrush-ara-ai-kolibree

[28] The Coming AI Autumn | Jeffrey P. Bigham | http://jeffreybigham.com/blog/2019/the-coming-ai-autumnn.html

[29] Forty percent of ‘AI startups’ in Europe don’t use AI, claims report | The Verge | https://www.theverge.com/2019/3/5/18251326/ai-startups-europe-fake-40-percent-mmc-report

[30] The State of AI: Divergence | MMC Ventures | https://www.mmcventures.com/wp-content/uploads/2019/02/The-State-of-AI-2019-Divergence.pdf

[31] Top Sales & Marketing Priorities for 2019: AI and Big Data, Revealed by Survey of 600+ Sales Professionals | Business Wire | https://www.businesswire.com/news/home/20190129005560/en/Top-Sales-Marketing-Priorities-2019-AI-Big

[32] Artificial Intelligence Beats the Hype With Stunning Growth | Forbes | https://www.forbes.com/sites/jonmarkman/2019/02/26/artificial-intelligence-beats-the-hype-with-stunning-growth/#4e8507391f15

[33] Misuse of AI can destroy customer loyalty: here’s how to get it right | Compare the Cloud | https://www.comparethecloud.net/articles/misuse-of-ai-can-destroy-customer-loyalty-heres-how-to-get-it-right/

[34] Timeline of Artificial Intelligence | Wikipedia | https://en.wikipedia.org/wiki/Timeline_of_artificial_intelligence#1950s

[35] Computer Chess | Wikipedia | https://en.wikipedia.org/wiki/Computer_chess

[36] Artificial Intelligence at Carnegie Mellon University |Machine Learning Department at Carnegie Mellon University | https://www.youtube.com/watch?v=HH-FPH0vpVE

[37] Search Control Methods in Deep Blue | Semantic Scholar | https://pdfs.semanticscholar.org/211d/7268093b4dfce8201e8da321201c6cd349ef.pdf

[38] Is Winter Coming? | University of California, Berkeley | https://pha.berkeley.edu/2018/12/01/is-winter-coming-artificial-intelligence-in-healthcare/

[39] AI Winter | Wikipedia | https://en.wikipedia.org/wiki/AI_winter

[40] A Very Short History of Data Science | Forbes | 


AI研习社是AI学术青年和AI开发者技术交流的在线社区。我们与高校、学术机构和产业界合作,通过提供学习、实战和求职服务,为AI学术青年和开发者的交流互助和职业发展打造一站式平台,致力成为中国最大的科技创新人才聚集地。

如果,你也是位热爱分享的AI爱好者。欢迎与译站一起,学习新知,分享成长。


]]>
人工智能开发者 //www.xyschoolife.com/category/yanxishe/Chlc6S2pbnrd6PNL.html#comments Thu, 21 Jan 2021 15:07:00 +0800
让审稿人更感兴趣的论文标题和摘要如何撰写?简洁、精确、周密是关键 //www.xyschoolife.com/category/yanxishe/EacXsIWMBeS85lCE.html 译者:AI研习社(FIONAbiubiu

双语原文链接:Writing the title and abstract for a research paper: Being concise, precise, and meticulous is the key


介绍

本文旨在为原始研究论文起草合适的“标题”和合适的“摘要”。因为“标题”和“摘要”是“初始曝光”或是一个研究文章的“脸面”,它们需要被正确地,准确地,谨慎地,精心地起草,并且消耗的时间和精力。[ 12345678910 ]通常,这些起草之后是完备的手稿。[ 234591011]大多数读者只读论文的标题和摘要,很少“有兴趣的人”(特别是,如果论文对他们有用)将继续阅读全文[ 12]。“目标刊物”关于风格和文字的数量允许的标题和摘要的指令(该杂志为此笔者正在写)是必须遵守的。[ 24578912]标题和摘要都是研究论文中最重要的部分,对于编辑(决定是否对论文进行进一步的审查),对于审稿人(使论文有初步印象)和对于读者(因为这些可能是可用的论文的唯一可以免费获得的部分,因此,广泛地读取)。[ 4812 ]对于新手来说,浏览几本著名期刊(以及它们的目标期刊)的标题和摘要可能是值得的,以了解更多关于标题和摘要的措辞和风格,以及特定期刊的目的和范围[ 57913 ]

标题

我们在小标题下对标题的重要性、类型、制图和核对信息的详细信息进行了讨论。

标题的重要性

当读者浏览通过的轴颈问题(硬拷贝或在网站上)的内容表中,标题是“第一细节”或所读取的纸张的“脸面”。[ 23456,,13 ]因此,它必须简单,直接,准确,适当,具体,功能,有趣,有吸引力/吸引人,简洁/简短,精确/集中,明确,令人难忘,引人入胜,内容丰富(足以鼓励读者进一步阅读),独特,上口,而且它不应该误导。[ 123456912]它应该有“刚好够用方式”,引起读者的兴趣和好奇心,使读者然后研究摘要,然后(如果还有兴趣)的去阅读全文。[ 12413 ]期刊网站,电子数据库和搜索引擎使用标题和摘要中的单词(“关键字”)在搜索过程中检索特定论文;因此,在由读者一直强调访问论文中这些字的重要性。[ 34561214]此类重要的单词(或关键字)应根据本文的上下文以适当的重要性顺序排列,并应放置在标题的开头(而不是标题的后半部分,因为某些搜索引擎例如Google只显示标题的前六至七个字)。[ 3512 ]有巧思的的、有趣的或有智慧的标题,虽然最初很吸引人,但忙碌的读者可能会错过或误读,而且很短的标题可能会因为读者用索引和分类论文的基本科学词汇(“关键词”)搜索而错过。[ 1349]而且,令人惊讶或者热闹标题可能不会被读者重视,并且较少引用。[ 415 ]过长或复杂标题可能不够吸引读者。[ 39 ]在起草正文和摘要之后起草标题可能是个好主意。[ 2345 ]

标题类型

标题可以是描述性的、陈述性的或疑问性的。它们也可以分为名词性标题、复合标题或全句标题。

描述性或中性标题

这包含了研究主题的基本要素,即患者/受试者、设计、干预、比较/控制和结果,但并未揭示主要结果或结论,[3,4,12,16] 这样的标题可以让读者以公正的态度和开放的心态来解释研究论文的发现。[3] 这些标题还提供了有关文章内容的完整信息,有几个关键字(从而提高了文章在搜索引擎中的可见性),并且增加了被阅读和(其后)被引用的机会。[4]因此,这样的描述性标题通常会让人对论文有一个大致的了解。[4,16]

声明性标题

这个标题在标题本身陈述了研究的主要发现;它减少了读者的好奇心,可能指向作者的偏见,因此最好避免。[3,4,12,16]

疑问性标题

在标题中有一个查询语句或研究问题。[3,4,16]虽然标题中的查询语句有耸人听闻的主题,下载量更多(但引用较少),但它可能会分散读者的注意力,最好还是避免用于研究文章(但有时可以用于评论文章)。[3,6,16,17]

从句子结构的角度来看,标题可以是名词性的(只抓住研究的主题),复合的(带有副标题以提供额外的相关信息,如上下文、设计、地点/国家、时间方面、样本量、重要性和挑衅性的或文学性的;例如,见本综述的标题),或完整的句子标题(更长,表示结果的确定程度更高)。[4,6,9,16] 根据文章类型、关键信息和作者的偏好或判断,可以使用这些结构中的任何一种。[4]

起草合适的标题

可以遵循一个逐步的过程来起草适当的标题。作者应该用大约三句话来描述论文,避免使用结果,并确保这些句子包含描述论文主要内容和主题的重要科学词汇/关键词。[1,4,6,12] 然后作者应该将这些句子连接起来形成一个句子,缩短长度(通过删除多余的词或形容词或短语),最后编辑标题(这样起草)以使其更准确、简洁(约10-15个单词)和精确。[1,3,4,5,9] 一些期刊要求将研究设计包括在标题中,并且可以(使用冒号)放在主要标题之后。[2,3,4,14] 标题应尽量包含受动者Patients,干预 Interventions、比较 Comparisons 和结果Outcome(PICO)。[3] 研究位置可包括在标题中(如果绝对必要),即如果受动者特征(如研究人群、社会经济状况或文化习俗)预计会因国家(或研究地点)的不同而有所不同,并对可能的结果产生影响。[3,6]长标题可能会很枯燥,显得不集中,而很短的标题可能不能代表文章的内容;因此,为了确保书名能够解释原稿的主题和内容,需要适当的篇幅。[4,5,9] 书名中应避免使用缩写词(标准或常用解释的缩写词除外,如HIV、AIDS、DNA、RNA、CDC、FDA、ECG和EEG)或首字母缩写词,因为不熟悉它们的读者可能会跳过这样一篇文章,而不标准的缩写可能会给文章的索引带来问题。[3,4,5,6,9,12] 此外,标题中过多的术语或化学公式可能会使读者感到困惑,从而使读者可能会跳过这篇文章。[4,9] 标题中也应避免使用各种参数的数值(说明研究期间或样本量)(除非认为非常必要)。[4]在最终确定标题之前,征求公正同事的意见是值得的。[4,5,6] 因此,在制定标题时需要考虑多个因素(有时有点冲突或对比),因此不应匆忙完成。[4,6]许多期刊要求作者起草一个“短标题”或“流水标题”,以便在打印的论文的页眉或页脚中打印。[3,12] 这是一个最多40-50个字符的主标题的缩写版本,可能有标准的缩写,帮助读者浏览论文。[3,12,14]

好标题清单

Table 1给出了为研究论文起草好标题的清单/有用提示[1,2,3,4,5,6,12Table 2 列出了本文作者在其早期研究论文中使用的一些标题,并对标题的适当性进行了评论。作为一个单独的练习,读者在阅读了相应的摘要和全文后,可以试着即兴创作标题(进一步)。

表1

一篇研究论文起草一个好标题的Checklist/有用的提示

标题必须简单直接
标题应该是有趣的和有用的
标题应该是具体的,准确的,和功能性的(与基本的科学“关键字”索引)
标题应该简洁、准确,并且应该包括论文的主题
不应误导或歪曲事实
不能太长或太短(或晦涩)
标题应该避免使用异想天开或不严肃的话 
它应该避免使用非标准的缩写和不必要的缩写(或技术术语)
标题应该是SPICED,也就是说,它应该包括设置Setting,人口Population,干预Intervention,条件Condition,终点End-point和设计Design
只有在增加标题的科学价值时,才应提及研究位置和样本量
重要的术语/关键字应放在标题的开头
描述性标题优先于陈述性或疑问性标题
作者应遵守目标期刊规定的字数和其他说明

Table2

本文作者在其早期出版物中使用的一些标题及其适当性的评论

 标题注释/对标题内容的注释 
 比较儿科死亡率风险III、儿科死亡率指数2和儿科死亡率指数3在预测儿科重症监护病房死亡率方面的得分 长标题(28字)抓住了主题;提到了研究地点
 三级转诊中心儿科重症监护病房抗菌药物应用前瞻性研究 用最合适的字数抓住主题;提及研究地点
儿科重症监护病房呼吸机相关性肺炎的研究
 可以删除“研究”一词
 变应性鼻炎和哮喘患儿的临床特征、共病率和健康相关生活质量 最合适字数;人口和干预措施
 苯星青霉素预防小儿风湿热(RF)/风湿性心脏病(RHD)的依从性研究。 最好在标题的开头使用“符合性”这个重要的词,而不是在结尾。缩写RF和RHD可以删除,因为标题中已经提到了相应的完整形式
 PRISM(儿科死亡率风险)评分和PIM(儿科死亡率指数)评分在三级护理中的表现儿科ICU。 使用缩写,“ICU”是一个常用的缩写,因此可以使用。可以删除缩写PRISM和PIM,因为标题本身已经使用了相应的完整表格
 医护人员对职业暴露中预防血源性病毒感染传播的认识题目略长(18个字);主题捕捉得很好 
 肺动脉瓣孤立性感染性心内膜炎:对9例病例的尸检分析 副标题用于传达更多细节,如“尸检”(即尸检分析)和“9”(即病例数)
 肺总静脉闭锁-一种罕见的先天性异常 副标题,用于传达论文的重要性/罕见的情况
 儿科重症监护病房幸存者的心理后果:被忽视的结果 副标题用来传达论文的重要性,使标题更有趣
 风湿热和风湿性心脏病:印度550例患者的临床资料 病例数(550)由于是一个大系列而得到强调;标题中提到了国家(印度)——风湿热和风湿性心脏病患者的临床资料是否因国家而异?可能是的,因为临床特征取决于社会经济和文化背景
 HIV感染的神经系统表现 简称;缩写“HIV”可以被允许,因为它是一个常用的缩写
 Krabbe病-临床概况 非常简短的标题(只有四个字)-可能会错过索引所需的基本关键字
  孟买儿童破伤风病例分析 
 标题中提到的城市(孟买)-人们需要思考标题中是否需要它

摘要

我们在副标题下对摘要的重要性、类型、起草和检查表进行讨论。

摘要的重要性

摘要是对全文的总结或概要,也需要有与题目相似的特点。它需要简单、直接、具体、实用、清晰、公正、诚实、简洁、精确、自给自足、完整、全面、学术性、平衡,并且不应误导。[1,2,3,7,8,9,10,11,13,17]写摘要就是摘录和总结(AB–绝对absolutely,STR–直截了当straightforward,ACT–实际actual数据的呈现和解释)。[17] 标题和摘要是研究论文的唯一部分,读者通常可以在期刊网站、搜索引擎和许多摘要机构/数据库中免费获得,鉴于全文可能会收取每次浏览的费用或下载pdf的费用。[1,2,3,7,8,10,11,13,14] 摘要是手稿的独立部分(也就是说,在不阅读全文的情况下可以很好地理解),编辑使用这个部分来决定文章的命运并选择适当的审稿人。[2,7,10,12,13] 即使是审稿人,在他们同意审稿之前,最初也只提供标题和摘要。[7,13]这是手稿第二常见的阅读部分,因此,它应该准确地反映论文正文的内容,从而成为整篇文章的“真正的预告片”。[2,7,11]只有当读者发现摘要有趣并且与他们的实践相关时,他们才会阅读整篇论文;否则,如果摘要不引人注意,他们可能会跳过论文。[7,8,9,10,13] 作者摘要需要突出稿件的卖点,成功地吸引读者阅读全文,[3,7] 标题和摘要应使用正文所有部分的关键词(关键术语/重要词语)来构建。[12] 摘要也用于将研究论文提交给会议,以供考虑发表(如口头论文或海报)。[9,13,17]语法和排版错误反映了论文的质量,摘要可能表明作者的粗心/随意态度,因此应始终避免。[9]

摘要类型

摘要可以是结构化的,也可以是非结构化的。它们也可以分为描述性或信息性摘要。

结构化和非结构化摘要

大多数期刊都遵循结构化摘要,信息量更大,并包括需要撰写摘要的特定副标题/子章节。[1,7,8,9,10,11,13,17,18]这些副标题通常包括背景/背景、目标、设计、背景、参与者、干预措施、主要结果指标、结果,和结论。[1] 一些期刊坚持IMRAD标准格式的摘要结构,副标题将包括引言/背景 Introduction/Background、方法,Methods、结果Results和(而不是讨论Discussion)结论。[1,2,7,8,9,10,11,12,13,17,18]结构化摘要更加详细、信息量大、易于阅读、回忆和同行评审,因此,它们是首选;然而,它们占用更多的空间,并且可能具有与非结构化摘要相同的局限处。[7,9,18]结构化摘要(可能)更好地被评论家和读者理解。无论如何,摘要类型和结构化摘要副标题的选择取决于特定的期刊风格,而不是作者的意愿。[7,10,12] 单独的副标题对于报道元分析、教育研究、质量改进工作、综述或案例研究可能是必要的。[1] 临床试验摘要需要包括CONSORT(报告试验的综合标准Consolidated Standards Of Reporting Trials)指南中提到的基本项目。[7,9,14,19]对于各种其他类型的研究,包括观察性研究和诊断准确性研究,也有类似的指南。[20,21]上述指南的有用资源可访问www.equator-network.org(提高卫生研究的质量和透明度)。非结构化(或非结构化)摘要是自由流动的,没有预定义的副标题,通常用于(通常)不描述原始研究的论文。[1,7,9,10]

四点结构摘要:该摘要包含以下要素,需要就每个副标题下的内容/事项进行适当平衡:[9]

背景和/或目标:这说明了为什么开展这项工作,通常只用几句话就可以完成。[3,7,8,9,10,12,13]假设/研究问题和主要目标也在这个副标题下陈述。[3,7,8,9,10,12,13]

方法:本小节是最长的,说明了所做的工作,并给出了研究设计、设置、参与者、盲法、样本量、抽样方法、干预、持续时间和随访、研究工具、主要结果测量、评估参数以及如何评估或分析结果的基本细节。[3,7,8,9,10,12,13,14,17]

结果/观察结果/发现:该副标题说明了发现的内容,较长,难以起草,需要提及重要细节,包括研究参与者人数、分析结果(主要和次要目标),并包括实际数据(数字、平均值、中位数、标准差、P值,95%置信区间、效应大小、相对风险、优势比等。[3,7,8,9,10,12,13,14,17]

摘要类型

摘要可以是结构化的,也可以是非结构化的。它们也可以分为描述性或信息性摘要。

结构化和非结构化摘要

大多数期刊都遵循结构化摘要,信息量更大,并包括需要撰写摘要的特定副标题/子章节。[1,7,8,9,10,11,13,17,18]这些副标题通常包括背景/背景、目标、设计、背景、参与者、干预措施、主要结果指标、结果,和结论。[1] 一些期刊坚持IMRAD标准格式的摘要结构,副标题将包括引言/背景 Introduction/Background、方法,Methods、结果Results和(而不是讨论Discussion)结论。[1,2,7,8,9,10,11,12,13,17,18]结构化摘要更加详细、信息量大、易于阅读、回忆和同行评审,因此,它们是首选;然而,它们占用更多的空间,并且可能具有与非结构化摘要相同的局限处。[7,9,18]结构化摘要(可能)更好地被评论家和读者理解。无论如何,摘要类型和结构化摘要副标题的选择取决于特定的期刊风格,而不是作者的意愿。[7,10,12] 单独的副标题对于报道元分析、教育研究、质量改进工作、综述或案例研究可能是必要的。[1] 临床试验摘要需要包括CONSORT(报告试验的综合标准Consolidated Standards Of Reporting Trials)指南中提到的基本项目。[7,9,14,19]对于各种其他类型的研究,包括观察性研究和诊断准确性研究,也有类似的指南。[20,21]上述指南的有用资源可访问www.equator-network.org(提高卫生研究的质量和透明度)。非结构化(或非结构化)摘要是自由流动的,没有预定义的副标题,通常用于(通常)不描述原始研究的论文。[1,7,9,10]

结论:考虑到对研究问题/假设和结果的解释(不过度解释研究结果),应在此处陈述带回家的信息(论文的“那么什么”和其他重要/重要的发现),并可能包括作者对研究含义的观点。[3,7,8,9,10,12,13,14,17]

八点结构摘要:这有以下八个副标题-目标、研究设计、研究设置、参与者/患者、方法/干预、结果测量、结果和结论[3,9,18]特定期刊给作者的说明说明说明了他们是使用四点摘要还是八点摘要或变体其中[3,14]

描述性和信息性摘要

描述性摘要很短(75-150字),只描述论文所包含的内容,不提供更多细节;读者必须阅读全文才能了解其内容,很少用于原创研究论文。[7,10]这些摘要用于案例报告、评论、观点等。[7,10]信息性摘要(可能是结构化或非结构化(如上所述)对文章内容进行完整详细的总结,真实反映所做的实际研究。[7,10]

编写合适的摘要

重要的是要严格遵守撰写摘要和论文的期刊对作者的指示(格式、字数限制、字体大小/样式和副标题)。[7,8,9,10,13] 大多数期刊允许200-300字的摘要,明智的做法是限制自己的字数。[1,2,3,7,8,9,10,11,12,13,22] 虽然有些作者倾向于先起草摘要,然后再写论文的主要文本,但建议在最后起草摘要,以保持与论文的主要文本的准确性和一致性(因此,一方面保持与标题的简单链接/对齐,另一方面保持与正文的引言部分的简单链接/对齐)[2,7,9,10,11] 作者应检查目的期刊允许的副标题(结构化摘要),使用短语而不是句子来起草摘要内容,避免被动语态。[1,7,9,12]接下来,作者需要去掉多余的词,并编辑摘要(广泛)到正确的字数允许(每个字在摘要中都很重要!)。[7,8,9,10,13]]重要的是确保论文的关键信息、重点和新颖性不受损害;研究的基本原理和结论的基础清楚;摘要与论文的主要文本一致。[1,2,3,7,9,11,12,13,14,17,22] 这一点在提交论文的修订版时尤其重要(在处理了评审员的意见后进行了修改),因为论文的主要(修订)文本中所做的更改也需要反映在(修订)摘要中。[2,10,12,14,22]摘要中应避免缩写,除非按照惯例接受或修改标准;不应在摘要中引用参考文献、表格或数字。[7,9,10,11,13] 最好不要匆忙地写摘要,让不含偏见的同事对摘要的内容发表意见;如果可能的话,还可以对全文(非正式的同行评审)也进行评审。[1,7,8,9,11,17] 适当的“关键词”(三到十个字)(或短语)应在摘要之后,最好从美国国家医学图书馆U.S. National Library of Medicine的医学主题词(MeSH )列表中选择(https://meshb.nlm.nih.gov/search)和用于索引目的。[2,3,11,12] 这些关键字需要与主标题中的单词不同(自动使用标题单词)可以是标题中使用的术语/短语的变体,也可以是摘要和正文中的词语。[3,12] ICMJE(国际医学期刊编辑委员会International Committee of Medical Journal Editors;http://www.icmje.org/)还建议在摘要末尾公布临床试验注册号。[7,14]

好的摘要清单

表 3 给出了为一篇研究论文准备好摘要的清单/有用提示。[1,2,3,7,8,9,10,11,12,13,14,17,22]

表3

为研究论文准备好摘要的检查表/有用提示

 摘要应该有简单的语言和短语(而不是句子)
 摘要应该是信息丰富,有凝聚力,并坚持结构(副标题)所提供的目标期刊。结构化摘要优于非结构化摘要
 摘要应该是独立的、独立的/完整的
 摘要应该简洁,有趣,公正,诚实,平衡,精确
 摘要不应该是误导性的或误传的;它应该与论文的主要内容一致(特别是在修订之后)
 摘要应该充分利用期刊允许的全部字数,使主要论文的大部分实际科学事实都用摘要来表示
 摘要应该突出地包含关键信息
 摘要应该遵循目标期刊指定的风格和字数(通常约250字)
 摘要应该避免使用非标准的缩写,并且(如果可能的话)避免使用被动语态
 作者应在摘要下方列出适当的“关键字”(关键字用于索引目的)

结束语

本文对标题和摘要的重要性和类型作了详细的论述。它还试图为起草一篇研究论文的适当标题和完整摘要提供有用的提示。希望这篇综述能对作者的医学写作生涯有所帮助。

参考文献

1. Moss F. Titles, abstracts, and authors. In: Hall GM, editor. How to Write a Paper, rd ed. 3rd ed. New Delhi: Byword Viva Publishers Private Limited; 2004. pp. 42–50. [Google Scholar]

2. Tullu MS, Karande S. Writing a model research paper: A roadmap. J Postgrad Med. 2017;63:143–6. [PMC free article] [PubMed] [Google Scholar]

3. Dewan P, Gupta P. Writing the title, abstract and introduction: Looks matter! Indian Pediatr. 2016;53:235–41. [PubMed] [Google Scholar]

4. Bavdekar SB. Formulating the right title for a research article. J Assoc Physicians India. 2016;64:53–6. [PubMed] [Google Scholar]

5. Annesley TM. The title says it all. Clin Chem. 2010;56:357–60. [PubMed] [Google Scholar]

6. Caramelli B. The title: Herald of scientific communication. Rev Assoc Med Bras. 2011;57:353. [PubMed] [Google Scholar]

7. Bavdekar SB, Gogtay NJ. Writing an abstract for a research manuscript: Providing an honest, succinct and complete summary. J Assoc Physicians India. 2015;63:64–7. [PubMed] [Google Scholar]

8. Anstey A. Writing style: Abstract thoughts. Br J Dermatol. 2014;171:205–6. [PubMed] [Google Scholar]

9. Papanas N, Georgiadis GS, Maltezos E, Lazarides MK. Writing a research abstract: Eloquence in miniature. Int Angiol. 2012;31:297–302. [PubMed] [Google Scholar]

10. Annesley TM. The abstract and the elevator talk: A tale of two summaries. Clin Chem. 2010;56:521–4. [PubMed] [Google Scholar]

11. Caramelli B. Abstract – The trailer of scientific communication. Rev Assoc Med Bras. 2011;57:593. [PubMed] [Google Scholar]

12. Cals JWL, Kotz D. Effective writing and publishing scientific papers, part II: Title and abstract. J Clin Epidemiol. 2013;66:585. [PubMed] [Google Scholar]

13. Andrade C. How to write a good abstract for a scientific paper or conference presentation. Indian J Psychiatry. 2011;53:172–5. [PMC free article] [PubMed] [Google Scholar]

14. Recommendations for the conduct, reporting, editing and publication of scholarly work in medical journals. Updated December 2017. [Last accessed on 2018 Oct 22]. Available from: http://www.icmje.org/icmje.recommendations.pdf .

15. Sagi I, Yechiam E. Amusing titles in scientific journals and article citation. J Inform Sci. 2008;34:680–7. [Google Scholar]

16. Jamali HR, Nikzad M. Article title type and its relation with the number of downloads and citations. Scientometrics. 2011;88:653–61. [Google Scholar]

17. Alexandrov AV, Hennerici MG. Writing good abstracts. Cerebrovasc Dis. 2007;23:256–9. [PubMed] [Google Scholar]

18. Hartley J. Current findings from research on structured abstracts: An update. J Med Lib Assoc. 2014;102:146–8. [PMC free article] [PubMed] [Google Scholar]

19. Schulz KF, Altman DG, Moher D. for the CONSORT group. CONSORT 2010 statement: Updated guidelines for reporting parallel group randomized trials. Ann Int Med. 2010;152:726–32. [PubMed] [Google Scholar]

20. von Elm E, Altman DG, Egger M, Pocock SJ, Gotzsche PC, Vandenbroucke JP. for the STROBE initiative. The strengthening the reporting of observational studies in epidemiology (STROBE) statement: Guidelines for reporting observational studies. Lancet. 2007;370:1453–7. [PubMed] [Google Scholar]

21. Bossuyt PM, Reitsma JB, Bruns DE, Gatsonis CA, Glasziou PP, Irwig LM, et al. for the STARD steering group. Towards complete and accurate reporting of studies of diagnostic accuracy: The STARD initiative. BMJ. 2003;326:41–4. [PMC free article] [PubMed] [Google Scholar]

22. Tullu MS, Karande S. Success in publishing: Selecting an appropriate journal and braving the peer-review process. J Postgrad Med. 2018;64:1–4. [PMC free article] [PubMed] [Google Scholar]


AI研习社是AI学术青年和AI开发者技术交流的在线社区。我们与高校、学术机构和产业界合作,通过提供学习、实战和求职服务,为AI学术青年和开发者的交流互助和职业发展打造一站式平台,致力成为中国最大的科技创新人才聚集地。

如果,你也是位热爱分享的AI爱好者。欢迎与译站一起,学习新知,分享成长。

]]>
人工智能开发者 //www.xyschoolife.com/category/yanxishe/EacXsIWMBeS85lCE.html#comments Wed, 20 Jan 2021 10:35:00 +0800
通过机器学习识别“迪士尼在逃公主”,程序员宠女的正确打开方式! //www.xyschoolife.com/category/yanxishe/7S6vitrjEOUKtK2v.html 译者:AI研习社(FIONAbiubiu成语风

双语原文链接:Princess Finder using React, ml5.js, and Teachable Machine Learning


到了庆祝的时候了!我们刚刚送走了圣诞老人。现在正等待新年的钟声敲响。所以我想到建立一个很酷的东西(至少我的七岁小公主会觉得)同时学一点机器学习。所以我们要做一个什么?

我借用的我女儿所有迪士尼公主人偶来建立一个机器学习模型,这个应用取名为“Princess Finder”,可以通过摄像头将这些人偶的公主信息都识别出来。本文中我们将会学到这背后的一些知识以及扩展它们的可能性。

The Princess Finder

该 Princess Finder 应用是使用以下内容构建的:

  • The Teachable Machine:如何简单,快速地创建models可直接在应用程序或网站中使用的机器学习?可教学机器允许您将train计算机与图像,声音和姿势一起使用。我们使用迪士尼公主创建了一个模型,以便我们可以Image Classification在应用程序中使用它来执行。

  • ml5.js:这是使用您的Web浏览器进行的Web机器学习。它使用Web浏览器的内置图形处理单元(GPU)进行快速计算。我们可以像使用,可以用API如imageClassifier(model),classify等来进行图像分类。

  • React:这是一个用于构建用户界面的JavaScript库。我们可以ml5.js在React应用程序中使用它,只需安装并将其作为依赖项导入即可。

这是应用程序显示的截图,有93%的概率表明,这个娃娃是Jasmine(茉莉公主),它有明显的金戒指标记。

鉴于我根本不像迪士尼公主(甚至没有洋娃娃)。因此,我自己的图像已正确分类,说No Dolls。

这是一个很棒的简单演示。

几个术语

如果您是机器学习的新手,您可能会发现其中一些术语有些不知所措。最好是从更高维的角度了解它们的含义以了解用法。

您可以从此处阅读有关这些和其他机器学习术语的更多信息。

我们的Princess Finder应用程序使用Supervised Machine learning,我们有trained将model有很多examples的公主的照片。每个示例数据还包含一个label,用于通过名称标识特定的公主。

Teachable Machine

我们可以使用Teachable Machine用户界面通过几个简单的步骤来创建ML模型。首先,浏览到此链接。(需要VPN)您可以选择图像,声音或姿势项目。在我们的例子中,它将是一个图像项目。

接下来,我们需要通过选择示例(图像和标签)来定义分类。我们可以使用网络摄像头拍摄照片,也可以上传图像。

加载示例后,我们便开始培训。这将为我们创建一个模型。

训练完成后,您可以使用实时数据测试模型。满意后,您可以导出模型以在应用程序中使用它。

最后,我们可以下载模型以在我们的应用程序中使用它。您可以选择将模型上传到云中,以使用URL进行使用。您也可以将项目保存到Google Drive。

如果您有兴趣使用或扩展我创建的模型,则可以下载并将其导入“可教机器”界面。

使用ml5.js和React的用户界面

现在我们有了一个模型。我们将使用该ml5.js库导入模型,并使用实时流对图像进行分类。我最熟悉的是React。您可以使用任何UI库,框架或原始JavaScript。我已经使用create-react-app启动应用程序的骨架并在一分钟内运行。

安装ml5.js依赖项

# Or, npm install ml5 
yarn add ml5

将模型解压缩public到项目文件夹下。我们可以model在公共目录下创建一个名为的文件夹,然后提取文件。

使用ml5.js库来加载模型。我们将使用该imageClassifier方法来传递模型文件。此方法调用返回一个分类器对象,我们将在一段时间内使用该对象对实时图像进行分类。还要注意,一旦成功加载模型,我们将初始化网络摄像头设备,以便我们可以从实时流中收集图像。

useEffect(() => {    
   classifier = ml5.imageClassifier("./model/model.json", () => {      
       navigator.mediaDevices        
           .getUserMedia({ video: true, audio: false })        
           .then((stream) => {          
               videoRef.current.srcObject = stream;          
               videoRef.current.play();          
               setLoaded(true);        
            });    
       });  
    }, []);

我们还需要在render函数中定义一个视频组件

<video      
    ref={videoRef}      
    style={{ transform: "scale(-1, 1)" }}      
    width="200"      
    height="150" />

接下来,我们在分类器上调用classify()方法以获取结果。该results是所有比赛的目标参数标签的数组。

classifier.classify(videoRef.current, (error, results) => {   
    if (error) {      
        console.error(error);      
        return;   
    }   
    setResult(results); 
});

我们应该classify在指定的时间间隔内使用方法调用。您可以使用一个称为React的React Hook,useInterval进行相同操作。结果数组可能看起来像这样,

请从此处找到App.js文件的完整代码。就是这样,您现在可以使用此result数组提供您想要的任何UI表示形式。在我们的例子中,我们在两个React组件中使用了这个结果数组,

1.列出公主并突出显示最匹配的那个

<Princess data={result} /

2.显示仪表图以指示匹配的置信度。

<Chart data={result[0]} /

Princess组件循环遍历结果数组,并使用一些CSS样式突出显示它们,并呈现它们。

import React from "react";
const Princess = (props) => {  
   const mostMatched = props.data[0];  
   const allLabels = props.data.map((elem) => elem.label);  
   const sortedLabels = allLabels.sort((a, b) => a.localeCompare(b));  
       return (    
           <>      
               <ul className="princes">        
                   {sortedLabels.map((label) => (          
                       <li key={label}>            
                       <span>              
                       <img                
                           className={`img ${                  
                               label === mostMatched.label ? "selected" : null                
                       }`}                
                   src={                  
                       label === "No Dolls"                    
                           ? "./images/No.png"                    
                           : `./images/${label}.png`                
                   }                
                   alt={label}              
                   />              
                   <p className="name">{label}</p>            
                </span>          
              </li>        
            ))}      
         </ul>    
       </>  
      );
   };
export default Princess;

图表组件就是这样

import React from "react";
import GaugeChart from "react-gauge-chart";
const Chart = (props) => {  
   const data = props.data;  
   const label = data.label;  
   const confidence = parseFloat(data.confidence.toFixed(2));  
   return (    
       <div>      
           <h3>Classification Confidence: {label}</h3>        
           <GaugeChart        
               id="gauge-chart3"        
               nrOfLevels={3}        
               colors={["#FF5F6D", "#FFC371", "rgb(26 202 26)"]}        
               arcWidth={0.3}        
               percent={confidence}      
           />    
       </div>  
   );
};
export default Chart;

就是这样。请从GitHub存储库中找到完整的源代码。如果您喜欢这项工作,请随时给项目加星号(⭐)。

https://github.com/atapas/princess-finder


AI研习社是AI学术青年和AI开发者技术交流的在线社区。我们与高校、学术机构和产业界合作,通过提供学习、实战和求职服务,为AI学术青年和开发者的交流互助和职业发展打造一站式平台,致力成为中国最大的科技创新人才聚集地。

如果,你也是位热爱分享的AI爱好者。欢迎与译站一起,学习新知,分享成长。

]]>
人工智能开发者 //www.xyschoolife.com/category/yanxishe/7S6vitrjEOUKtK2v.html#comments Mon, 18 Jan 2021 16:39:00 +0800
「新奇」假设!Adam 或许不是最佳的深度学习优化器 //www.xyschoolife.com/category/yanxishe/87RId9P1hSIfDJDE.html 译者:AI研习社(Born alone°

双语原文链接:NEURAL NETWORKS (MAYBE) EVOLVED TO MAKE ADAM THE BEST OPTIMIZER


免责声明:这篇文章和我平时的有些不同。事实上,我不会证明任何东西,我只是简单地解释一下我关于深度神经网络优化的一些猜想。和我平时的帖子不同,我写的东西完全有可能是错的。  

我已经从实践和经验的角度研究在线和随机优化有一段时间了。所以,当Adam (Kingma and Ba, 2015)被提出时,我已经在这个领域了。 

这篇论文还可以,但算不上突破,就今天的标准而言更是如此。事实上,这个理论是薄弱的:对于一种应该处理非凸函数随机优化的算法给出了 regret guarantee。这些实验也很弱:在这些日子里,同样的实验肯定会遭到拒绝。晚些时候人们还在证明中发现了一个错误以及该算法不收敛于某些一维随机凸函数的事实。尽管如此,现在 Adam 被认为是优化算法之王。让我明确一点:众所周知, Adam 不会总实现最佳性能, 但大多数时候,人们认为可以利用 Adam 的默认参数在处理某个深度学习问题上实现至少次优的性能。换句话说,Adam 现在被认为是深度学习的默认优化器。那么,Adam 背后成功的秘密是什么? 

多年来,人们发表了大量的论文试图解释 Adam 和它的表现,太多了,不能一一列举。从“适应学习率”(适应到什么?没有人确切地知道……)到动量,到几乎标度不变性 ,它的神秘配方的每一个方面都被检查过。然而,这些分析都没有给我们关于其性能的最终答案。很明显,这些成分中的大多数对任何函数的优化过程都是有益的,但仍然不清楚为什么这个确切的组合而不是另一个组合使它成为最好的算法。混合物的平衡是如此的微妙以至于修正不收敛问题所需的小更改被认为比 Adam 表现稍差。

Adam 的名声也伴随着强烈的情感:阅读 r/MachineLearning on Reddit 上的帖子就足以看出人们对捍卫他们最喜欢的优化器的热情。这种热情你可以在宗教、体育和政治中看到。 

然而,这一切的可能性有多大?我是说,Adam 是最佳优化算法的可能性有多大?几年前,在一个如此年轻的领域,我们达到深度学习优化的顶峰的可能性有多大?它的惊人表现还有其他的解释吗?  

我有一个假设,但在解释之前,我们必须简单谈谈深度学习社区。

在谈话中,Olivier Bousquet 将深度学习社区描述为一个巨人 genetic algorithm:这个社区的研究人员正在以一种半随机的方式探索各种算法和架构的空间。在大型实验中一直有效的东西被保留,无效的被丢弃。请注意,这个过程似乎与论文的接受和拒绝无关:这个社区是如此的庞大和活跃,关于被拒绝论文的好想法仍然会被保存下来,并在几个月内转化为最佳实践,参见举例  (Loshchilov and Hutter, 2019)。类似地,发表的论文中的观点被成百上千的人复制,他们无情地丢弃那些不会复制的东西。这个过程创造了许多启发式,在实验中始终产生良好的结果,这里的重点是“始终如一”。事实上,尽管是一种基于非凸公式的方法,深度学习方法的性能证明是非常可靠的。(需要注意的是,深度学习社区对“名人”也有很大的偏好,所以并不是所有的想法都能得到同等程度的关注……)

那么,这个巨大的遗传算法和亚当之间有什么联系?嗯,仔细观察深度学习社区的创建过程,我注意到一个模式:通常人们尝试新的架构,保持优化算法不变,大多数时候选择的算法是 Adam。如上所述,这是因为 Adam是默认的优化器。

所以,我的假设是:Adam 是一个非常好的神经网络架构的优化算法,我们几年前就有了,人们不断地发展新的架构,让 Adam 在上面工作。因此,我们可能不会看到许多 Adam 不工作的架构,因为这些想法被过早地抛弃了!这样的想法需要同时设计一个新的架构和一个新的优化器,这将是一个非常困难的任务。换句话说,社区只进化了一组参数(架构、初始化策略、超参数搜索算法等),大部分时间优化器都固定在 Adam 身上。  

现在,我相信很多人不会相信这个假设,我相信他们会列出各种具体的问题,在这些问题中 Adam 不是最好的算法,在这些问题中  随机梯度下降 动量是最好的,以此类推。然而,我想指出两件事:1)我并不是在这里描述自然规律,而是简单地描述社区的一种趋势,它可能会影响某些架构和优化器的共同进化;事实上,我有一些证据来支持这一说法。

如果我说的是真的,我们可以预期 Adam 在深度神经网络方面会非常出色而在其他方面则会非常差。这确实发生了!例如,众所周知,Adam在非深度神经网络的简单凸和非凸问题上表现很差,参见下面的实验(Vaswani et al., 2019):

似乎当我们远离深度神经网络的特定设置,以及它们对初始化的特定选择、特定权重的比例、特定的损失函数等,Adam 就失去了它的自适应能力,它神奇的默认学习率必须再次调整。请注意,您总是可以将线性预测器写成单层神经网络,但 Adam 在这种情况下也不太好用。因此,在深度学习中,所有特定的架构选择可能已经进化到让 Adam 工作得越来越好,而上述简单的问题并没有任何让 Adam 发光的好特性。

总的来说,Adam 可能是最好的优化器,因为深度学习社区可能只在架构/优化器的联合搜索空间中探索一小块区域。如果这是真的,对于一个脱离凸方法的社区来说,这将是一个讽刺,因为他们只关注可能的机器学习算法的一个狭窄区域,它就像  Yann LeCun “写道:“在路灯下寻找丢失的车钥匙,却发现钥匙丢在了别的地方。” 

AI研习社是AI学术青年和AI开发者技术交流的在线社区。我们与高校、学术机构和产业界合作,通过提供学习、实战和求职服务,为AI学术青年和开发者的交流互助和职业发展打造一站式平台,致力成为中国最大的科技创新人才聚集地。

如果,你也是位热爱分享的AI爱好者。欢迎与译站一起,学习新知,分享成长。

]]>
人工智能开发者 //www.xyschoolife.com/category/yanxishe/87RId9P1hSIfDJDE.html#comments Fri, 15 Jan 2021 11:42:00 +0800
如何选择你的研究生院?斩获CMU、斯坦福大学等名校博士offer的大神分享 //www.xyschoolife.com/category/yanxishe/PdE841JGUtoRx1pz.html 译者:AI研习社(季一帆Danielan

双语原文链接:How to Pick Your Grad School


如果你正在阅读这篇文章,那么你大概率已经走完了研究生学校漫长而艰难的申请之旅。你成功地从众多申请者中脱颖而出,这样的胜利是你过去的付出所应得得。但是你应该怎么决定最终上哪一所学校呢?如果每所学校看上去都有自己独特的优势,你怎样才能做出正确合适得决定呢?这篇文章就聚焦于这些问题。如果你是计算机专业学生并且专攻于机器学习,并且特别是美国的自然语言处理领域,那么这篇文章对你简直再合适不过,当然这里面大部分的内容对于任何国家任何领域的研究都同样有效。

做出最合适自己的研究生学校选择是艰难而又迷惑的。我们生活在一个高度竞争的时代,现在即使本科生也要去追求像发表论文数量的指标以便为自己的研究生申请打下基础。这种高度功利的看法可能对你的研究生申请有优势,并且这在你读完研进入工业界或者学术界仍然很重要。但是,获得博士学位是一个漫长的历程,基于这种视角选择你的研究生学校可能会让你更容易产生倦怠,梦想破灭的想法以及不满的情绪。

我会在这篇文章中详细探讨以上这种功利的想法,但是我也会为你提供其它三种思路希望能帮你做出一个均衡的选择。这个决定不仅引导你在学术上的成功同时也让你的生活更加丰富,充实,满足。基于这所有四种决策角度的决定会比你从单一角度的选择好得多,这四种决策是:事业视角,身份视角,稳定性视角和变动性视角。

事业视角是最直接的,做好该方面的权衡将帮助你获得博士学位并获得成果事业。

身份视角则有些不同,此时重心不再是职业选择,而是取决于你想成为什么样的人,以及你要如何实现这一身份。社会环境对人的发展会产生很大的影响:我们总是受到周围人和文化的强烈影响,甚至你不曾相识的朋友的朋友也会影响你是诚实还是欺骗,是自私还是无私,是博爱还是剥削。如果你选择的学校是以“以论文和引用量衡量一个人的价值”,那么这种价值观会潜移默化的融入你。想明白你是否想成为这样的人?因此,选择学校,也就是在以某种方式定义和约束你的为人。

稳定性视角是说,仅仅选择“正确的”学校是不够的,还要考虑其他更为重要的选择,比如在艰苦的博士求学中取得成功所需的稳定性。我们,个人是存在基本幸福感的,即使是那些让你痛苦或是让你快乐的事件,其影响也会在两年内消失,我们总是回到幸福基线。但有些事情是非常稳定的,一个友好的社交环境会让你始终感到被支持,而不是一个人被抛弃,提供这样的人性化需求将使你5年的博士生涯变得轻松。反之,若进入一个关系疏远、冷淡的小型课题组,你的博士生涯将充满不确定性、孤独和压力。

可变性视角是选择学校的另一个因素,即学校对你人生丰富性的影响。获取你是以牺牲某种选择为代价才读博的,也许是忽略了工作以外的激情,忽略了朋友、伴侣或家人,忽略了自我发展,忽略了从事心理、身体或精神健康的工作,或者忽略了其他对你很重要的东西。然后,你从职业角度出发选择了一所合适的学校,但在该学校你只能放弃那些重要的东西。你有想过吗,这样什么时候是个头?一旦获得了出色的博士学位,你将再一次激烈的竞争助理教授职位,然后是任职期,一直工作到成为领域的佼佼者。这样的人生道路没有错,但被工作、被事业持续剥削,你自己的人生呢?我听说,行将就木的人最常见的遗憾是:“我希望我有勇气过自己真实的生活,而不是别人期望我过的生活”和“我希望自己没有那么努力”。如果他们在做出选择时明白这些道理,是不是就可以少些遗憾呢。所以,多花些时间和精力进行进一步的探索,收集必要的信息,做出更好的选择免得将来后悔。

目录

  • 职业视角:成功学的选择

  •     导师

  •     导师研究方向的匹配度

  •     教导风格:手把手/放养

  •     导师的价值观,优势和劣势

  •         一丝不苟 vs. 随性而为

  •         自由裁量权和组内凝聚力

  •         研究进展

  •         交流

  •         优势与不足

  •         自我反思是决定的关键

  •     导师的关心程度

  •         用心培养

  •         漠不关心

  •     同行,博士后和研究团队

  •         同行

  •         研究团队

  •         博士后和高年级博士生

  •         其他

  •     学校名称和资源

  •         累积优势

  •         经历失败和逆境对成功至关重要

  •     学校位置

  •     其他因素

  • 身份视角:你想成为什么样的人?

  •     我在参观日的经历

  •     我在华盛顿大学的经历

  • 稳定性视角:除了学校,更重要的是什么?

  • 可变性视角:探索更多的可能性

职业视角:视野成功的选择

职业视角是多数人首先会考虑的因素,这直接关系到你的学业成就和之后的人生轨迹,因此根据这些因素来选择合适的学校是理所当然的。接下来我们将对这些因素进行介绍,以下因素根据我认为的重要程度依次排列。

导师

在选择学校的时候,寻找合适的导师可能是最关键的任务。存在这样一个观点,你的学术成就如何,很大程度上取决于你的导师而不是学校。,不夸张地说,碰上一个倒霉老师,你的学术生涯将充满痛苦,无聊,压力,并很可能浇灭你的学术热情。一个合适的导师将帮助你提高工作效率,保持健康,促进研究。什么样的老师是好老师?这个问题因人而异,没有固定答案,有些导师适合你,但不一定适合其他人,反之亦然。以下将列出一些条件帮助你找到适合你的导师,但是说到底,最终的选择还是取决于你自己来不来电。这跟约会有点像,不管说的怎么合适,但真正见面之后,没感觉就是没感觉。

另外需要注意的就是,你要有若干候选心仪导师,只有一个是不够的。这就使本来已经很复杂的过程变得更加复杂,即使如此,避免在一根树上吊死是很有必要的。由于种种原因,你可能无法于最心仪的导师达成一致,因此如果可能的话,你最好有一个替代选择。一旦未能与首选导师达成一致,你就要即使联系该导师。这样,进一步可以看有没有联合培养的机会,互补的两个导师也许会是更好的选择。

以下关于导师选择的因素并无先后顺序。

导师研究领域的匹配度

很多学生并不十分理解导师的作用,他们只是觉得应该找一个跟自己想要从事研究相关的导师。这个想法是有一定道理的,但实际上,该想法可能并没有太大的帮助。据了解,大约66%的人在二年级的时候就已经完全改变了他们的研究方向,甚至许多是在第一年。如果再往后看的话,这个比例可能更高。虽然他们大多数人仍然从事相关子领域(机器人/NLP/CV)的研究,但具体研究内容已经不一样了。比如:

  • 多语言解析 -> 多模态模型 -> 机器翻译

  • 问答 -> 对话-> 强化学习  -> 语义解析

  • NLP架构 -> 机器翻译 -> 模型效率

  • 人体姿势识别 -> sim2real

  • 问答 -> 模型效率 -> 可解释性->模型效率

从以上这些转变可以看到,由于个人的研究兴趣经常发生变化,因此在选择导师时,不需要过多关注导师的研究方向。对于导师来说也是如此,他们可能改变他们的研究兴趣,然后开始一个新的研究领域。以学生相比,导师的研究范围和精力显然更多,他们可能会同时对许多不同的研究方向感兴趣。此外,虽然新晋教授为了获得任期可能会专注于某一个研究方向,但是对于终身教授来说,他们的研究方向会非常灵活,甚至其研究兴趣会受到学生兴趣的显著影响。现在越来越多的高级教授非常乐意开辟一个全新的研究方向,这样的变化值得关注--这可能也是非手把手教导导师的优势。在下一部分,我会对此进行讨论。

尽管你和你导师的研究方向并不总是完全一致的,但如果有一些重叠那是极好的。另外最好可以询问一下导师的长期研究愿景,但要注意,这样的计划一般并不充实,而且会根据研究领域的变化而迅速变化(例如BERT)。值得一提的是,你一定要考虑导师的价值观,因为这些东西是不会随时间而变化的。通过这些,你可以看出他们喜欢做哪种类型的研究--之后的部分会对此展开讨论。

教导风格:手把手教导 vs 非手把手教导

导师们的执教风格一般可以分为手把手教导和非手把手教导。那么具体是什么意思呢?

一般来说,在非手把手教导的导师组里,你完成所有工作之后,老师只会对你的研究成果提供一些反馈;但是对于手把手教导的老师,他们可能还会具体的指导你或协助你完成工作。

更具体的说,手把手教导的老师可能会帮助你提供许多研究细节。例如,交流研究思想,探讨研究问题,帮助你定义这些思想或问题,提供论文的主要内容架构以及在项目研究中哪些是重要的部分,而且会经常与你对研究进行讨论,总结阶段成果,及时发现可能的问题或错误并提供反馈,以防止研究走向岔路,甚至有的老师还会特意准备文稿或幻灯片来详细进行指导。以上这些就是典型的手把手教导方式。

经验丰富的导师还可以为你提供更详细的研究细节:研究思路的可行性和影响力,讨论不同的研究观点,分析研究结果并以文稿和幻灯片的形式进行细致的展示与探讨。与非手把手教导的方式相比,你会与导师有更多的互动,导师也能够为你提供更多的帮助。

但实际上并没有完全的手把手教导或非手把手教导的的导师。一般情况下,老师会同时拥有着两方面的特征,例如一些老师一般会实行非手把手的教导,但实际上他们也会想参与到学生的研究中,甚至为学生的论文写作提供详细的指导。通常,导师会根据每个学生的具体情况对教导方式做出一些调整,在学生有良好基础的研究领域进行深入细致的指导。与学生进行交谈,从而了解应该在哪些领域进行手把手的教导,哪些领域则不需要手把手的教导,这对于学生培养大有裨益。具体包括:学术方法(发现问题,分析问题、论文写作);技术领域(代码方案、软件框架)以及研究领域(机器翻译、问答)等。因此对于学生,不是单纯的评定导师是手把手教导还是非手把手教导方式,而是应该具体到某些领域,比如在论文中老师是否会进行详细的指导?在你的弱势领域,或是需要学习的领域会详细指导的非手把手式教导的导师有何不可呢?

如果你缺乏研究经验,能接受各种条条框框和deadline,不确定自己的研究主题,那么找到一个手把手教导的导师对你很有帮助。如果你想要更多的自由和独立性,并且乐意通过失败和逆境学习到更多的知识,那么非手把手教导的导师是适合你的——这样,你的博士学位大部分都取决于你自己,这非常困难,但同时也会让你成为一名更好的独立研究员。总之,如果导师能够提供的帮助不是很多,从长远来看,这对你来说可能是件好事。虽然短期来说困难重重,尤其是第一年或是邻近一些重要日期(例如会议截止日期)。

通常来说,非手把手教导的导师级别会更高一些,而且他们能为你的实习或是未来的发展提供更多的帮助。此外,他们还能够将一些新想法以及一些古老想法(年轻导师并不熟悉)给联系起来。这些老师一般会有一个大的实验室,其中包括博士后和很多高年级博士生,他们也可以为你提供一些帮助和建议。

手把手教导的老师可以为你提供许多详细指导和帮助,在理想情况下,你可以在博士毕业后再逐步提高独立性。然而接受了这样的教导,你可能会变得像你导师一样,因为手把手教导的老师可能会潜移默化的影响你。这也许是好事,也许是坏事,完全取决于你之后想从事什么。如果你老师的研究视野很有见地,在工业界和学术界极受欢迎,那么你的优势极大;如果存在很多类似的研究,那么你可能就会变得无足轻重。

导师价值观,优势和劣势

人们经常会忽视导师究竟关心什么的,但实际上,导师的价值观很可能决定这个老师是不是适合你,而且这还决定了研究组内的氛围及环境。那么为什么价值观这么重要呢?

正如前文所说,研究兴趣会不时的发生变化,但是价值观的稳定对于研究是极重要的。在研究兴趣上存在一些差异问题不大(如机器翻译和问答),但价值观上存在差异则很可能产生冲突(如高估或低估某一问题)。一般来说,我们对于价值观也抱有同其他关系一样的态度:尽可能分享更多的价值观,使得不同优劣势的价值观进行互补、相辅相成,那么学术关系中的价值观是什么样呢?

一丝不苟vs随性而为

学术价值观的一个根本区别就是,导师是一丝不苟还是随性而为的类型。前一种导师看重系统的调研、合理的假设/证据,以及准确的主张和理论,而后一种导师则认为,坚持严格的计划会减慢进度。前一种导师强调科学方法和谨慎态度,追求学术文献和成果;后一种导师首要关注结果的影响以及实用性。只要有用,都是可以接受的。另外,这样的导师一般不会特别要求精准的想法,因为他们认为,那些尚未实现的或是潜力的可能性更加重要,当然了,他们也喜欢展示自己的成果,如“这个方法特别酷,而且结果令人惊讶”。

总得来说,没有哪一种要比另一种更加优秀,或者是不如另外一种。在科学领域中同时需要这两种角色,最好能够批判性地接受不同的方式以及成果。

同前文一样,这两种类型也不是绝对的。也许某个老师是随性而为类型的,但是如果有人滥用/不使用统计数据,或是脱离理论得天马行空得想法,他们也会感到非常生气。

自由裁量权和组内凝聚力

导师是否重视你的自由裁量权,尊重你的隐私和自主性?如果这样的话,你和导师之间是坦率真诚的,但相应得,你对其他学生的工作以及他们的研究进展了解甚少,这会使你感觉在组内被孤立。相反的,如果导师会向你介绍组内其他同学的项目和进展,那么你可以轻易融入其他同学,与他们交流,增进小组的协作能力。你们团结一致、相互支持,就像家人一样。但这样也会带来一些问题,比如你一旦发生了什么,那么其他人很快都会知道,因此你会小心谨慎的衡量自己的言行,这让你的生活充满无形压力,甚至导致一种封闭、虚伪的文化——你会习惯性的讲道:我很好,一切顺利,不需要帮助。

幸福感与研究进展

导师关注你个人幸福感甚于关注你的研究,或是相反?关注你幸福感的导师在一对一的会议中,不仅谈论研究,还会确保你的工作和生活保持平衡。他们把学生的心理健康和精神状态放在首位,甚至过度呵护的老师还会在你压力较大时劝你放松,避免过度劳累和焦虑。这样的老师虽然使你的研究工作轻松快活,但却可能因此拖累项目,阻止研究进度,而这会使你产生沮丧或挫败感。

如果你需要一些鞭策来提高效率,那么注重研究进展的导师可能非常适合你。但如果推动过多或是你不喜欢被鞭策的话,这样老师可能会让你压力山大,产生不好的精神状态。

交流

你的导师是会直接的尖锐地进行批评,还是间接的温和地进行暗示?如果是第一种老师,他会大声的告诉你你的项目或是想法有多么糟透,对于学生而言,这会打击学生地信息和热情,需要强大的心里素质来接受。但换一个角度,你不需要在这个想法上浪费更多的时间,可以去选择一个新的方向从而取得进步。所以,如果你心理素质优秀,吸收了解老师的建议,那么你可以迅速调整自己的想法并进行实践。总之,这样的导师会给你提供很好的反馈,让你知道你的想法到底有没有意义,另外,一旦导师认同了你的想法,强烈的骄傲感便会油然而生,这对你后续工作的顺利开展意义重大。

注重间接沟通的老师只会暗示你存在一些问题,但是你却不知道究竟是什么问题,或是由于什么原因引起的。这样,你的项目可能会拖延一段时间,影响研究进度,而且未来充满不确定性。但是,这样的交流方式不会对你造成心理上的伤害。这还表明,你的导师是一个谦虚有礼的知识分子——即他们不是高高在上,而是愿意承认自己可能是错的,可以坦率地与你进行交流,以共同探索真理。这是一种非常令人钦佩的品质,许多知识分子对此评价甚高,这种品质会默默对你产生影响。另外,长远的看,经过间接沟通,你学会更多的独立思考,这此时你将来成为一名更好的研究人员。

优势与不足

如前文所示,除了价值观之外,还需要考虑你和你导师的优势和不足,如何进行互补,这对于协作来说至关重要。例如,你可能擅长动手,在实践中获得结果以决定研究的方向和进展,但却不擅长发现问题和产生思路。在这种情况下,与你互补的老师能够弥补你的不足,帮你在这一方面取得进步,协作合作来完成一些具有挑战性的项目。但是如果你和导师在某一方面均不擅长,那么你们可能因此忽略研究中的一些问题。优秀的导师能够认识到你的优势与不足,并针对性的进行指导。

自我反思是决策的关键

为了解你与潜在导师之间的价值观,或是优势与不足间的关系,最好花一些时间认真的自我反思,以了解自己是谁,自己该如何选择导师和学校。这样你可以对号入座,根据以上这些条件来进行选择,同时这还有助于你向那些你期望但不具备的价值和优势方向发展。

你可以考虑这些问题:是否能够接受直接、尖锐的批评?你对个人隐私的重视程度?能接受的坦诚公开的尺度?更倾向于一丝不苟还是随性而为?是否具有合作意识,增强团队凝聚力?你的上进心有多强烈?你是否需要日期或他人来鞭策你,以使你保持动力?在压力下你会做的更好吗?在生活与工作中,你需要怎样的平衡?

导师对学生的关心程度

用心培养

导师肯用心培养肯定是好的。即使是那些随性而为的导师,能够经常找你开会讨论学术总归是好的,哪怕不一定有很多结果。如果你的导师在创业,或是在校外一些公司工作,或是有很多学生,那么这样的学术会议大概会非常少,因为种种原因,他们经常会取消或推迟讨论会,甚至在你需要的时候也没办法召开。当然了,这不仅说明你们导师的日常公务繁忙,还体现了他们对你并不太用心。对于一些老师来说,学生会议是神圣的,必须按时召开,但也有一些老师过于频繁的召开学生会议,即使一些会议并没有什么意义。

漠不关心

另外,一定要关注导师是不是对学生培养心不在焉。因为有一些导师甚至可能忘掉你的研究项目,你得一遍又一遍的跟他们解释,所以哪怕老师能力再强,如果他不关注学生培养,那么你会非常困难,很难取得学术成果。但是也可以这么考虑,导师对你心不在焉,这就逼迫你自己独立的去完成学术研究,在这个过程中,你培养了更强的学术能力,将来可能成为一名更优秀的研究人员。值得一提的是,准确把握研究要点,提出关键信息并在会议上简洁明了的向其他人介绍明白,这是一种非常有价值的能力。当然还有另外一个极端,老师不仅在会议上与你讨论项目研究,甚至在会议以外的时间,他们也花大量时间思考你的项目,这对你来说非常友好,你能得到更好的反馈以及老师的看法见解,从而改善研究项目,但另一方面,这也可能使你对导师产生更多的依赖,不利于能力培养和未来发展。

同行,博士后和研究团队

同行

同事和研究团队是考虑学校时第二重要的因素,其重要程度不弱于对导师的选择。至于研究兴趣,与之前讨论相似,同事们的研究兴趣也会随着时间而发生变化,但一般都会在相关领域。因此,虽然你可以与某些同学进行长期合作,但更可能的是,他们只是你进行思想交流的同伴,在这些交流中获得启发与反馈。

随着时间的推移,总体利益和价值观念等也会持续发展。在你访问的时候,你会认识一些同伴,可能包括组内的研究人员,虽然很难在短时间内详细了解他们,如果你觉得与他们合拍的话,那么你就可以选择这所学校。因为如果有一位朋友能够在你困难时为你提供帮助,并且激励你成长,这对你攻读博士学位以及以后的发展非常重要。

研究团队

不只是一个个同事,你还应该在选择学校时统一考虑导师的研究团队。研究团队的动态非常直观的显示了他们都规范以及价值观,在一定程度上极大地受到导师的影响。因此你可以根据之前的一些方法来评估研究团队的价值与期望。

另外,在选择研究团队时,你还应该关注团队的多样性以及团队能力,这关乎研究团队成功与否?研究表明,如果能够将具有不同背景观点和经验的人聚集在一起,并且让他们之间团结融洽,进行友好合作与公平竞争,那么整个小组的工作会令人满意。

对于富有创造力的工作来说,多样性尤其重要,因为这样可以避免一些固定思维。如果团队中有一些独立的、开放的研究人员,对于一种新的研究方法A,可能会有如下对话:

人员1:A方法真是太棒了,在任务C上的表现出色,如果将它和方法B融合在一起进行任务D,也许会有出乎意料的结果!

人员2:不错,这样这个想法太棒了。

人员1:行动吧!

如果研究团队中是一些死板的、老套的研究人员,那么会有不同的结果。

人员1:根据文献,我们知道任务C的标准偏差很高,因此我认为方法A的置信区间与方法x重叠。所以方法A的结果并不比方法X要更好。根据卡姆剃刀原理,我认为没有理由扩展方法A。

人员2:我认为其性能差异主要是由于初始化的不同造成的,而不是方法A决定的。通过初始化减小hessian特征值的相对差异,可以进行更快的训练,至于训练周期的差异则是没有意义的。因此我并不认为方法A更好,应该在相同的初始化条件下,或者是进行网格搜索以选择最恰当的学习率和训练次数,然后进行比较。

这就是独立开放与死板学究的明显对比,其他情况也是如此,例如有一些人习惯直接了当的批评某些想法,那么他们之间的互动将会非常激烈,因此研究团队无法产生好的想法,因为这样的谈论实在是身心俱疲。也许一群活跃认真的人才能在这之中取得平衡,保持思想严谨又不失创新活跃。

此外,还有其他一些极端对比,例如理论与应用:生命是短暂的,但证据永恒vs问,你提出了有史以来最重要的理论,但是并不会对人类生活产生任何影响,那么有什么意义呢?定量与定性:如果无法衡量,那么就无法证明其存在vs难道要衡量你与爱人之间的分数吗?

当然,很少有人会如此极端,但是人们还是会有一些认同倾向的。在研究团队中,如果能够将这些不同观点以及不同因素综合考量,那么就可以防止集体思考的偏差与极端。

博士后与高年级博士生

上文已经提到,组内的博士后以及高年级研究生也会对你的选择产生一些影响。如果导师的组内有一些博士后,或者是有一些能够为新生提供帮助的高年级博士生,这对双方来说都有益:你可以获得更多的实践经验,而他们则可以在你的帮助下完成一些成果,然后只是下一份工作。如果你的导师是随性而为类型的,那么组内有高年级博士生和博士后对你尤其重要,在这种情况下,你既可以保持独立性,又能够得到组内人员的帮助与建议。

其他

其他重要因素还包括,团队对新想法的分享与讨论(例会讨论什么)以及学生之间的协作(共同发表文献),这样才是一个优秀的研究团队。协作程度也很好的体现了群体凝聚力,这也关乎“稳定性观点”,我会在后文进一步讨论组内氛围的重要性。

学校名称与资源

累积优势

要根据学校声望做出理性的选择,你一定要了解这对你究竟有什么用。

学校名称是累积优势的表现,根据这可以很好地显示学校当前地位。累积优势是指,如果你在生活中有更多的特权,那么你就有更多的资源(金钱,受过教育的父母,指导,良好的同伴,空闲时间,课外活动,广泛的社交网络)去做更有意义的事,从而得到更好的发展,而这进一步又给你带来更多的资源(更好的学校,更好的工作,更好的人际关系)做到更好,进而产生更多的资源(更广泛的社交网络,协作,补助金,资金)来做甚至更好(诺贝尔奖,菲尔兹奖章,独角兽创业公司),如此良性循环。

在教育资源中,优势资源的分配始终是高度不平等的,排名靠前的学校最具有生产力,也会获得更多的资源。据统计,美国有1/3的人口拥有本科学历,而有博士学位的仅有2%,排名前20的学校的本科生仅占0.2%,终身职位的仅有0.06%,但是0.0006%的人发表了41%的论文。与此同时,在一些顶级学校中,获得博士学位的人员中有73%是那些排名前20学校的本科生,而排名前18学校则培养了50%的教授。只要经过一些简单的分析,我们就可以发现,如果你在排名前18的学校获得了学士学位,那么你更可能获得博士学位,甚至成为一名教授。另外,假设排名前18的学校中的那50%的教授是平均分配的,这就意味着所有学校中1/36的教授是来自前18名学校。

因此,如果你在排名前20的学校攻读博士学位,那么你当上教授的概率从百分之0.06%升至2.8%,虽然这个概率依然比较低,约等于骰子同时置出两个六的可能性,但却已经高出普通学校约五十倍。因此选择一所更富盛名的学校,这将大大增加你的成功机会。类似的,你也可以根据学校声望和学校排名做出其他的选择。当然了,仅仅根据学校排名做出选择并不完全可靠,前文我们提到的其他因素,如出色的导师、出色的同事、很好的研究团队、学校文化等等,这些对于成功来说也是必要的。

失败与逆境是走向成功的必经之路

虽然听起来不合理,但却是事实:长期特权也会有可能给你带来一些危害。失败和逆境对于个人的成长非常重要,心理学发现:要在生活中取得成功,你需要失败,又不能经常失败。可以这样理解,如果一直享有特权的话,那么你无法学会面对挫折,如果总是面临逆境的话,那么你会自暴自弃,偶尔的失败则会有效的鞭策你,让你更好的成长。因此,特权不是越多越好,这会消磨你的冒险精神、增大对失败的恐惧;而偶尔的失败会让你更有韧性,因为在这种情况下,你知道逆境是正常的、是暂时的,学会去征服困难。

如果你在排名前20的学校中就读,那么你可能就像前文描述的那样,在很短的时间内发表许多一流论文。但这种环境也会滋生“安全思维”,即研究一些容易发表的风险较低的项目,而不是去对一些困难的、可能导致失败的项目进行探索。因此,这些学校虽然提供了特权和资源,但长期来看有可能阻止你创造力和更伟大的成功。总之,你要成为一个非完美主义者,要学会接受失败,享受失败,在失败中获得成长。

社会中有这样一种说法:失败的创业往往是走向成功的必要条件。加入初创公司将逼迫你成为更熟练的工程师,而加入大型科技公司只会让你陷入停滞——你只是机器中的一个齿轮。

学校位置

在这一部分我不会做过多的说明,因为在之后的“稳定性和可变性”部分我将会重点介绍这些因素。因此,在这里你可以先预先考虑一下这些问题:一些大学校园及城市会为你提供一些机会做你熟悉的事情,这些事情会让你扎根并保持稳定,以度过博士阶段的艰难历程(稳定性);另外,不同的城市和校园还会提供不同的活动以及体验(可变性),这有助于你探索自己、发现新事物,让你成为一个更充实,更富朝气的人。

这个因素因人而异,可能微不足道,但也可能比之前的那些因素更为重要,因此这值得你深入思考。在后续部分我们会展开进一步的讨论。

其他因素

还有其他一些我认为不是非常重要的因素,例如住房,生活费用,津贴以及薪水等。一所学校可能比另一所学校花更多的钱或者是花更少的钱,但结果都是一样的——你不会因此而变得富有或是贫穷,这对你的生活也不会产生太大的影响,因为无论在哪个学校,你都是像在家里一样。也有一些大学你可以进行实验室兼职,虽然可以赚到一些钱,但随之而来的也包括一些额外的负担。

学校文化和研究团队的文化也很有意义,但这些与潜在导师、同事和研究团队的价值观紧密相关。另外,这些文化涉及“身份视角”,将在下文展开讨论。

身份视角:你想成为什么样的人?

在确定一所学校后,你所处的环境与交往的人将对你产生积极的影响。进一步考虑身份视角,你想要成为什么样的人?在职业视角中,我们关注的是“我期望获得多少成功”,但身份视角则重点关注“我想成为那样的人吗”?

根据个人的角色期望来选择学校是非常主观的,因此我并不认为有哪些具体的方法可以帮你进行选择。我只想要跟你谈一谈我的经历,以及这些经历如何影响了我。在学校访谈期间,我收集了很多资料,观察人们的表现,同时我还体验了实习互动等获得更真实的体验。我相信,考虑身份视角能让你更准确的了解你自己以及可能成为的人。

我的访问日经历

从不同学校的学生中,我体验到不同的经历,但是有一所学校让我感觉很不友好。在他们学校中,那些学生经常会问我在哪里学习,如果我回答的不是他们期望的大学,他们就会直接转身去与那些学校的学生进行交流。有时,他们会跟直接根据我佩戴的学校徽章(Università della Svizzera italiana)来决定是否忽略掉我。还有一次在访问时,有人看到我徽章上面的本科大学-开放大学,他对我说:“你有这样的一个机会进行交流真是你的荣幸”。我没有理他,我相信这些学校存在友好的人,但我遇到的15个同学都是肤浅的,不懂得尊重别人。我想成为这样一个自负、肤浅而粗鲁的人吗?不,一点也不。

在另外一所学校,我经历了最疏远、孤立的访问体验。来自精英大学的人们形成了小团体,不允许其他人加入。我根据航班时刻表安排的住宿并没有支付,同时我觉得其他人还嘲笑我对食物的喜爱。我与潜在导师的会面也很糟糕,因为他让我和另外一个同学同时进行访问,这发生了不止一次,甚至还有一位潜在导师不在学校,在那之后也没有同我联系。我感觉那所学校中的许多人都非常虚伪,他们充满悲伤和压力,但是却戴了一副虚伪的“幸福”面具。我想成为这样一个虚伪的人吗?我想这样隐瞒痛苦,假面“幸福”吗?不,一点也不。

我在华盛顿大学的经历

在华盛顿大学的访问也之前形成鲜明对比,我觉得每个访问的人都很满意。这至少表明该学校的人是有思想的,而且关注社会问题。最令我震惊的发生在一个研究团队:一个访问者提出了博士期间的心理健康和压力问题,该小组详细对此进行介绍,讨论了他们如何应对该问题以及学校为此提供的一些心理健康资源。同时,学校中大多数学生都很诚实、开放、互帮互助。他们还明确指出,在工作以外的时间对他们来说非常重要。对我而言,另外一件非常重要的事情是西雅图的人们都很友好,这与我在纽约的感觉完全不同,那里的人们仿佛充满紧张与烦躁,但是西雅图却充满友善与温和。例如,公车司机充满耐心而且极其负责,在人们从后门下车时,也会大声对司机说声谢谢。在他们脸上,你看到他们不仅仅是为了遵守社会规范,而是他们内心就是如此。因此,我是否想成为一个诚实开放的学生?成为一个乐于奋斗,团结友爱的学生?享受工作以外的生活以及对人充满友善呢?是的,我想这样。

你可能认为,根据人们是否感谢公交司机来选择学校是很愚蠢的,但并非如此。自从我加入华盛顿大学以来,我一直对公交车司机充满尊敬。这让我更加友善,也让我对周围同事的工作充满感激。因此,我写了这篇文章,希望能够对你有所帮助。当然,如果我选择的是另外一所学校,那么这篇文章可能介绍的就是一些很酷的创业理念,甚至我只会将更多的时间花在研究上,而不会分享博客。了解你自己很重要,正是在华盛顿大学,我看到了我想成为的人。

但是从另外一个角度看的话,我们也会有一些不同的理解。也许那些精英学校里的人不关注我,只是因为他们要将宝贵的时间花费到重要的人身上,而华盛顿大学则显得有些天真,他们试图让所有人充满幸福,但这显然是不可能的。

不同的人对此会有不同的看法,比如我有一个好朋友,他们国家人民都非常率真,这体现了一种诚实的素质,但是直言不讳却并非华盛顿大学的文化,那样的话在这里很可能会产生误会。

稳定性视角:除了学校,更重要的是什么?

研究生的学习与培养从来不是一件容易的事情,根据定义,博士学位的最终目的是让学生获得独立探索、面对未知并产生新知识的能力。这就需要许多自我激励,从失败中成长以及刻苦努力。在以前我经常听到博士学位非常困难,那时候我还不相信,但现在我知道这意味着什么。这不仅对我来说是很艰难的,相信对于大多数同龄人也是如此,因此你需要坚持一些东西,帮助自己应对并享受这个过程。

稳定性观点认为一些因素会随着个人发展而变化,但其他一些因素则随着时间的推移趋于稳定,并长期为你提供韧性和勇气。因此,稳定性观点强调,优先考虑那些能帮助你度过研究生阶段的因素。研究表明,人际关系是最重要以及最稳定的幸福来源,因此在选择学校时,考虑社会环境至关重要。

通常在研究生学校中,社会环境包括一些部门,办公室,学生组织,研究小组,例行会议,社交活动等。然而,大多数研究团队是很少参加社会活动的,这有助于学校管理。

我想去伦敦大学学院的原因有,我认识那里的人们,他们非常友好,而且乐于助人,Sebastian Riedel是一位非常优秀的导师,充满智慧,与他一起工作是一件非常快乐的事情。但除此之外,我想加入ucl的另一个重要原因是他们每天的午餐。

在那里,人们会直接在办公室用餐。有的人会下楼去买一些食物,还有一些人干脆直接带来一些食物,然后我们围坐在桌子周围,边吃边聊起我们的日常生活以及一些遇到的问题和研究思路,甚至还会讨论一些政治和新闻。这给人的感觉真的就像一个家庭,人们互相照顾。通过这种方式,午餐之后我会充满精力与激情去出色完成工作。如果我知道我能够在某个学校获得这样的体验,那么这一定会够促使我考虑该学校。

在华盛顿大学的办公室也让我感到非常满意。随着办公桌的增加,越来越多的NLP人员搬到了我们的办公室,现在我们一起建立了一个NLP办事处,我们在这里研究问题,交流想法,相互支持,互相帮助。我的身边充满这些友好、卓越的同事,这也是我选择华盛顿大学的另一个原因。

办公环境、小组会议以及社交午餐等因素都可能使你在博士学位期间保持稳定,克服精神上的困难,因此,这些因素都能成为你选择某一所学校而放弃另外一所学校的原因。

除了社会环境以外,还有许多根据个人原因选择学校,但我们不会对此进行过多讨论。对于每个人来说这完全不一样,我仅仅提供以下示例供你参考。

对我个人来说,斯坦福大学是最好的选择之一,不仅因为斯坦福大学在学术上成绩斐然,导师优秀卓越,而且斯坦福周围的自行车道也非常吸引我。我是一个狂热的溜冰者,这项运动将给我带来心理上的稳定,使我保持良好的精神状态与心理健康。它带给我的喜悦和自由会帮我度过人生的至暗阶段。如果你也是溜冰者,那么斯坦福周围的自行车道绝对是你的梦想,那里光滑平坦,天气适宜。我能够想象自己凌晨五点起床,在空无一人的校园中溜冰,这是多么让人兴奋。

另外,考虑亲戚、家人和朋友也是重要的。大多数人攻读博士也是为了满足他们的期望,如果你能够将自己对学习的热爱以及对伴侣的依赖很好的结合,那么这对你的发展是非常有益。因此,如果能够和伴侣上同一所学校,这会是你选择这所学校的一个重要原因。但你还要考虑到,攻读博士期间会带给人很大的心理压力,这有可能会影响你们之间的恋人关系。根据我和身边小伙伴的经验,一段恋爱关系很难维持到博士结束。攻读博士学位是对恋爱的一个重大考验:异地恋、新文化、长时间的工作、低薪水、经常夜里加班以及截止日期之前的重大压力,这些都会让你感觉沮丧,焦虑不安,这不是理想的恋爱状态。尤其是在博士第一年,你会感觉到这种压力对你的人际关系的影响。另一方面,一旦想到与伴侣或家人团聚,这带给你很大的动力,推动你进一步的研究。总之,攻读博士学位非常具有挑战性,那些重要的人的支持与鼓励会让你会好过一些。

可变性视角:探索更多的可能性

稳定性观点是指根据能够让你保持稳定的某些因素选择学校,以便全力而为。可变性观点则是根据可能性来选择学校,这将使你成为一个蓬勃发展的、更完整的自己。可能性是指你不确定这些因素是否对你很重要,但是你的直觉告诉你,你需要尝试这些事情。在这些学校中,你可以探索自己尚未开发的部分,发展自己的兴趣,这些将进一步扩展你人生的广度和深度,成长为一个更成熟的人。在缺乏可变性的学校,你会感觉到生活仿佛停下来了,因为你一直在重复生活。

这不仅关乎一些学习经验,而且关乎美好记忆。也许有一天,时光流逝,你的生活以及幸福感也归于平淡,但那些美好的记忆将永远存在,那是你一生的财富。当然,这些美好记忆不会是你在图书馆学习,不是你为了科研做艰苦奋斗,这些记忆将属于你的一些特殊时刻。在这些记忆里,你会感觉到情感的价值。难道这些美好记忆会是你周末努力工作以便在下一个会议截止日期之前提交论文吗?或者是周末空旷无人的学校里,你的导师在晚上10点提醒你,截止日期是凌晨4点,要注意提交最终的论文?

不。卓越的学术成就固然重要,但生活不止如此。

你可能已经在疯狂的竞争环境中经历了这一切,所有这些都是为了走上更高的阶梯:从博士到博士后,从研究人员到助理教授,从教授到大师。你可以永不停歇的转动仓鼠的轮子,但是当轮子一遍遍的转动,你会发现,自己从未经历过别人称之为“生活”的生活。

也许你也曾想学习弹吉他,或者是到体育馆里面进行运动锻炼,但是你意识到离研究截止日期只剩三个月了,由于时间紧张,你更愿意花一些时间在研究上;也许你很喜欢和其他人一起创作戏剧,但是你却无法在学习和创作之间保持平衡;也许你热衷于写博客来分享自己的学习经验,但是一想准备周一与导师的会面,那么你很可能放弃周末的博客;也许你想丰富自己的社交活动,邀请同事一起出去玩耍,但是你发现所有的同事都在为了下一个截止日期努力奋斗,他们没有时间陪你一起。如果你发现自己陷入了这样的境地,那么是时候做出一些改变了。

另外,学校不仅应该提供各种各样的可能性,而且鼓励学生去勇敢探索。如果你在世界上最好的城市,并且周围充满各色人等,但是你的导师和同事希望你周末加班,长时间工作,甚至在非工作时间还要麻烦你,你很难去扩展丰富自己。多样性不仅意味着学校有能够提供更多的机会以及丰富的选择,而且还要支持你进行探索。研究经验与美好记忆的可变性是考量因素,但你一定要搞清楚在研究团队中有多少自由度。

可变性到底有多大意义呢?以我的硕士阶段为例,我在本科时就被机器学习和深度学习所吸引,认为这是我一生想要从事的事情。我也知道如果我想得到更好的发展,我需要有一定的研究经历,然而由于我学习的是在线课程,实践经验非常少,加上我缺乏经验,无法与其他人合作研究,因此我决定辞职投入全职学习,并且在在线学习过程中自主进行研究。这不是一件容易的事情,到处都是死胡同和失败,但是我不想放弃,我想要成功。我逼迫自己不懈工作,专注于研究多个GPU并行化问题。在那几个月里,我几乎没有和任何人进行交流,最终我成功了,在ICLR2016发表了研究成果。这是一项重大的成功,但我也为此付出了巨大的代价,当我的同伴们获得不同的生活经验,社交经验,他们了解自己以及想要成为怎样的人时,我只是刚刚学会如何进行研究,并沦为一个奇怪的,孤立的隐士。更重要的是,我所有的博士申请都被拒绝了,只能攻读硕士学位。

但我不满足做一个硕士,因为我认为在硕士阶段不会学到更多。我已经学会了数学,计算机科学以及机器学习等知识,硕士学位只不过是纸上谈兵,我不会获得更多的实践经验。

然后我考虑了可变性观点。

从可变性的角度来看,做硕士是一个很好的机会,在这个过程中我可以搞明白我不懂的事情,增加自己的社会和生活经验。由于我已经获得了足够的知识,因此我在课堂上并没有放入过多的注意力,而专注于课外的实践以及生活。正是这个过程,我成为了现在的我。

最终,我选择了卢加诺大学攻读硕士学位。学校的上课方式为小班上课,我能够结识到所有人,同时,由于硕士学位是高度国际化的,我们班上的人都来自不同的国家。和他们聚在一起,我增加了自己的社交能力与社会经验。在这个过程中,也对自己有更深的了解,我发现我不喜欢逛酒吧,在那里,他们会告诉我他们上次喝醉时的状况和所作所为,或是分享他们的假期有多么美好,但我不感兴趣。后来我与两个同学一起组织了每周一次的哲学之夜,讨论哲学,神经科学,心理学,深度学习,博弈论,意识改变以及他们之间的联系,我很喜欢这项活动,在这里我找到了自己的归属。

业余时间我开始写博客文章。例如,计算的未来以及其与大脑和深度学习的关系,我还在英伟达撰写guest博客文章,我会经常性的通过文章来分享我的想法。本文就是我在一个早上写的,虽然本文并没有太多实践,但我认为这是我最好的文章之一


卢加诺一个公园湖泊

我还经常进行轮滑,沿着着卢加诺的公园和湖泊进行直排轮滑是一种独特的体验。永远记得那天清晨,在这个空旷的小镇,山上薄雾弥漫,湖水波澜不惊,滑道旁美丽的花朵伴我滑行。


我朋友拍的照片,我记得当时我正在他的阳台上烧烤,谈论如何从心理学和计算机科学的角度看待生活中的重要问题。

另外,我还利用课外时间在美国Microsoft Research和伦敦UCL实习,在这个过程中积累了许多研究经验。这些对我的发展成长非常宝贵,在我博士学位申请中起到很大的作用。


我和父亲在卢加诺附近的一条小径上徒步旅行-这是我一生的宝贵财富。

我遇到了很多来自不同国家的,文化差异很大的人;到访过位于两大洲的四个不同国家;学会了如何与人相处;了解了自己在这个世界上的定位。在那些活动中,我享受快乐,丰富了自己的生活,这是将伴随我一生的珍贵回忆。以上所有这些都属于可变性观点的考量。如果我不去勇敢探索不同的体验和生活,坚持唯论文论,我将错过多么精彩的人生。因此,通过选择学校,你可以选择自己的人生,成为更好的人。


AI研习社是AI学术青年和AI开发者技术交流的在线社区。我们与高校、学术机构和产业界合作,通过提供学习、实战和求职服务,为AI学术青年和开发者的交流互助和职业发展打造一站式平台,致力成为中国最大的科技创新人才聚集地。

如果,你也是位热爱分享的AI爱好者。欢迎与译站一起,学习新知,分享成长。

]]>
人工智能开发者 //www.xyschoolife.com/category/yanxishe/PdE841JGUtoRx1pz.html#comments Tue, 12 Jan 2021 18:24:00 +0800
探索神经网络规模下限,MNIST-1D数据集迈出了第一步 //www.xyschoolife.com/category/yanxishe/O5h3yBR0NVMgbea7.html 译者:AI研习社(听风1996

双语原文链接:Scaling down Deep Learning


不管是按什么样的科学标准,人类基因组项目都是巨大的:它涉及数十亿美元的资金,数十家机构以及超过十多年的快速研究进展。但这仅仅是冰山一角。早在项目开始之前,科学家们就在全力整理人类遗传学这门复杂的科学。而大多数时候,他们研究的不是人类。遗传学的基础性发现都集中在如豌豆、霉菌、果蝇和小鼠等非常简单的生物体上,时至今日,生物学家为了节省时间、精力和金钱,将这些更简单的生物体作为遗传学的 "最小工作范例"。一个精心设计的果蝇实验,如Feany和Bender(2000),可以让我们学到关于人类的令人叹为观止的东西。

与果蝇相似的是深度学习中所使用的是MNIST数据集。大量的深度学习创新工作,包括dropAdam卷积网络生成式对抗网络变分自编码器,都从MNIST实验开始。一旦这些创新在小型实验中证明了自己的能力,科学家们就找到了将它们扩展到更大、更有影响力的应用。

果蝇和MNIST的关键优势在于它们可以极大地加快探索性研究的迭代周期。以果蝇为例,果蝇的生命周期只有几天,其营养需求可以忽略不计。这比哺乳动物,尤其是人类更容易与之合作。对于MNIST而言,训练一个强大的分类器只需要几十行代码,不到一分钟的时间,耗电量可忽略不计。这与最先进的视觉,文本和游戏模型形成鲜明对比,后者可能需要花费数月甚至数十万美元的电力资料来训练模型。  

然而,尽管MNIST具有历史意义,但它有三个显著的缺点。首先,它在区分线性、非线性和平移不变性的模型方面做得很差。例如,logistic、MLP和CNN基准在它身上获得94、99+和99+%的准确率。这就很难衡量CNN的空间先验的贡献,也很难判断不同正则化方案的相对有效性。其次,对于一个玩具(译者注:极小)数据集来说,它有些大。每个输入例子都是一个784维的向量,因此当执行超参搜索或调试元学习循环需要不小的计算量。第三,MNIST很难被改写。理想的小型数据集应该是程序化生成的,这样研究人员就可以轻易地改变背景噪声、平移性和分辨率等参数。

为了解决这些缺点,我们提出了MNIST-1D数据集。它是MNIST的一个极简化、低内存和低计算量的替代方案,专为探索性深度学习研究而设计,其中能够快速迭代是我们优先考虑的要求。训练实例小了20倍,但它们仍能更好地评估1)线性和非线性分类器之间的差异,以及2)是否具有空间归纳偏差(例如平移不变性)的模型。虽然数据集是程序自动化生成的,但仍可以类比到现实世界中的数字分类。   

构建MNIST-1D数据集。与MNIST一样,分类器的目标是确定输入中存在哪个数字。与MNIST不同的是,每个例子都是一个一维的点序列。为了生成一个示例,我们从一个数字模板开始,然后随机对其进行填充、平移和转换。

在MNIST-1D数据集上可视化常见模型的性能。该数据集根据它们是否使用非线性特征(逻辑回归vs. MLP)或是否存在空间归纳偏差(MLP vs. CNN)将它们清晰地分开。人类做得最好。最好可以放大来观察上图结果。

使用案例

在本节中,我们将探讨MNIST-1D如何用于研究核心 "深度学习科学 "现象的几个例子。

寻找彩票。深度学习模型的参数比真正所需参数的多十倍甚至百倍是很正常的。这种过度参数化有助于训练,但会增加计算开销。一种解决方案是在训练过程中逐步修剪模型中的权重,使最终的网络只是其原始大小的一小部分。虽然这种方法可行,但传统观点认为,稀疏网络从头开始训练效果不好。Frankle & Carbin(2019)最近的工作挑战了这种传统观点。作者报告称,在更大的网络发现了稀疏的子网络,这些网络的训练精度相当甚至更高。这些 "彩票 "子网络可以通过一个简单的迭代程序得到:训练一个网络,修剪最小的权重, 然后将其余的权重倒回其原始初始化并重新训练。      

自从原始论文发表以来,大量的工作都试图解释这一现象,然后将其用于在更大的数据集和模型上。然而,很少有工作试图找出这种影响的“最小工作实例”,以便对其进行更仔细的研究。下图显示了MNIST-1D数据集不仅会使之成为可能,而且使我们能够通过精心控制的实验,阐明彩票成功的一些原因。与许多后续实验不同的是,这个实验只花了研究人员两天的时间就制作完成了。有兴趣的读者也可以在浏览器中仅需几分钟内便可复现这些结果。  


  

查询和分析 lottery tickets。在a-b)中,我们隔离了该效应下的一个 "最小可行示例 "。 Morcos et al (2019) 最近的工作表明, lottery tickets可以在数据集之间转移。我们想确认空间归纳偏差是否在其中起到了作用。因此,我们进行了一系列实验:在c)中,我们绘制了92%稀疏 lottery tickets的渐近性能。在d)中,我们将数据集中所有的1D信号反转,有效地保留了空间结构,但改变了各个数据点的位置。这类似于将图像倒转过来。在这种消融作用下, lottery tickets继续保持不败。

接下来,在e)中,我们对1D信号的索引进行了置换,从而有效地从数据集中去除空间结构。这种消融对 lottery tickets性能的损伤明显更大,说明 lottery tickets中的部分性能可以归结为空间归纳偏差。最后,在f)中,我们保持lottery tickets的稀疏性结构,但用不同的随机种子初始化其权重。与Frankle & Carbin(2019)中报告的结果相反,我们看到我们的 lottery tickets继续优于众多基线模型,与我们的假设一致,即 lottery tickets背后具有空间归纳偏差。在g)中,我们通过测量模型第一层中未掩膜的权重彼此相邻的频率来验证我们的假设。lottery tickets的相邻权重比随机预测的要多很多,这意味着局部连接结构更容易引起空间偏差。

您还可以可视化通过随机和 lottery tickets修剪选择的实际掩膜:VISUALIZE MASKS

观察深度双重下降。神经网络的另一个有趣的属性是 "双重下降 "现象。这句话指的是一种训练机制,其中更多的数据、模型参数量或梯度更新步骤实际上会降低模型的测试精度1 2 3 4。从直觉上看,在监督学习的过程中,有一个阈值插值,在这个阈值下,由模型和优化算法组成的学习过程刚好可以勉强适合整个训练集。在这个阈值上,实际上只有一个模型能够拟合数据,而这个模型对标签的噪声和模型化非常敏感。

这种效应存在几个性质,比如什么因素会影响它的宽度和位置,在深度模型的背景下没有得到很好的理解。我们认为MNIST-1D数据集是探索这些属性的好工具。事实上,经过研究人员几个小时的努力,我们能够重现双下降模式。下图显示了我们对一个全连接的网络和卷积模型的结果。我们还观察到了一个细微的差别,这是我们在以前的工作中没有看到提到的:当使用均方误差损失时,插值阈值位于n∗Kn∗K模型参数,其中nn是训练样本的数量,KK是模型输出数量。但是当使用负对数似然损失时,插值阈值取决于神经网络模型参数-而不依赖于模型输出的数量。这是一个有趣的实验观察,可以解释在这类任务中使用对数似然损失比MSE损失的一些优势。你可以在这里重现这些结果。

  

观察深度双重下降。MNIST-1D是确定深度模型的插值阈值的良好环境。这个阈值在全连接模型中相当容易预测,但对于其他模型,如CNNs、RNNs和Transformers,则不太容易预测。在这里,我们看到CNN在相同的插值阈值下有一个双下降峰值,但效果却不那么明显。

基于梯度的元学习。元学习的目标是 "学会如何学习"。一个模型通过有两个层次的优化来实现:第一个是快速的内循环,对应传统的学习目标;第二个是相对慢一些的外循环,更新学习过程的 "元 "属性。元学习最简单的例子之一是基于梯度的超参数优化。这个概念是由 Bengio (2000) 提出的,然后由 Maclaurin et al. (2015)扩展到深度学习模型。其基本思想是实现一个完全可分的神经网络训练循环,然后在整个过程中进行反向传播,以优化学习率和权重衰减等超参数。

元学习是一个很有前景的课题,但它很却难扩展。首先,元学习算法需要消耗大量的时间和计算。其次,实现往往会变得复杂,因为有两倍多的超参数(每个优化级别都有一组),而且大多数深度学习框架并没有为元学习专门设置。这对在MNIST-1D等小规模数据集上调试和迭代元学习算法提出了特别高的要求。例如,实现和调试下图所示的基于梯度的超参数优化学习率只花了几个小时。你可以在这里重现这些结果。

  

元学习的学习率:看第三个图,最佳学习率似乎是0.6。与许多基于梯度的元学习实现不同,我们的实现需要几秒钟的时间来运行,只占用几十行代码。这使得研究人员可以在扩大规模之前对新颖的想法进行迭代。

激活函数的元学习。在实现了基于梯度的元学习的 "最小工作示例 "后,我们意识到它可以被扩展到一个简单而新颖的应用中:激活函数的元学习。再花上几个小时的研究时间,我们就能用第二个神经网络对分类器的激活函数进行参数化,然后使用元梯度学习权重。如下图所示,我们学习的激活函数大幅优于ReLU, Elu5, 和Swish6等基线非线性。你可以在这里复现这些结果。

元学习得到一个激活函数。从一个ELU形状开始,我们使用基于梯度的元学习来寻找在MNIST-1D数据集上训练的神经网络的最佳激活函数。激活函数本身由第二个(元)神经网络进行参数化。请注意,上图中ELU基线(红色)被tanh基线(蓝色)所遮挡。

我们将这个激活函数转移到在MNIST和CIFAR-10图像上训练的卷积模型上,发现它达到了中等的性能。特别是在优化的早期,它的训练损耗很低,这也是MNIST-1D 训练的目标。不过,当我们按最终测试损失对非线性进行排名时,它的性能达到了包中的中等水平。我们怀疑,在更大的模型和数据集上运行相同的元学习算法会进一步完善我们的激活函数,让它至少能匹配人为设计的最佳激活函数。不过,我们还是把这个问题留给以后的工作吧。

测量深度网络的空间先验。深度学习的成功很大一部分源于 "深度先验",其中包括硬编码的平移不变性(如卷积滤波器)、巧妙的架构选择(如自注意力层)和良好条件下的优化场景(如批量归一化)。这些先决条件中的原则是卷积的平移不变性。这个数据集的一个主要动机是构建一个小型问题,可以有效地量化一个模型的空间先验。本篇文章的第二张图说明了MNIST-1D确实可以做到这一点。我们可以想象,其他更适度的空间先验的模型将位于MLP和CNN基准之间的连续空间中的某个位置。在这里可以复现出这些结果。

池化方法的基准测试。我们最后的一个案例研究是从一个具体问题开始的。池化和采样效率之间的关系是什么?我们没有发现有证据表明池化使模型的采样效率提高或降低,但这似乎是一个需要了解的重要关系。考虑到这一点,我们用不同的池化方法和训练集大小来训练模型,发现虽然池化在低维数据中往往是有效的,但在高维数据体系中并没有太大的区别。我们并不完全理解这种效果,但假设池化是一种普通的架构先验,在低数据体系中聊胜于无,但在高维数据体系中却最终限制了模型的表达。同样的道理,max-pooling在低维数据体系中也可能有一个好的架构先验,但在高维数据体系中开始删除信息--因此与L2 pooling相比表现更差。在这里可以复现出这些结果。

  

通用池化方法的基准测试。我们发现,在低维数据体系下,池化有助于性能,而在高维数据体系下则阻碍了性能。虽然我们并不完全理解这种结果,我们假设池化是一种普通的架构先决条件,在低维数据体系下聊胜于无,但在高数据制度下就会变得过度限制。

何时缩放规模

这篇文章并不是反对大规模机器学习研究的。这种研究已经一次又一次地证明了它的价值,并且已经成为ML研究生态系统中最令人兴奋的方面之一。相反,这篇文章支持小规模的机器学习研究。神经网络在规模或性能方面没有问题,但它们在可解释性、可重复性和迭代速度方面确实存在问题。我们认为精心控制的小规模实验是解决这些问题的好方法。

事实上,小规模研究是对大规模研究的补充。在生物学领域,果蝇遗传学帮助指导了人类基因组计划,我们认为小规模的研究应该始终着眼于如何成功地扩大规模。例如,这篇文章中报告的几项研究结果已经到了应该进行大规模研究的地步。我们想证明,大规模 lottery tickets也能学习空间归纳偏差,并证明他们发展局部连接的证据。我们还想尝试在更大的模型上学习一个激活函数,希望找到一个在通用性上优于ReLU和Swish的激活函数。

我们应该强调的是,我们现在只是准备在受控环境下隔离和理解这些结果,然后再进行扩展。我们认为,只有在相关的因果机制被分离和理解之后,扩大系统的规模才是一个好主意。

其他的小型数据集

这项工作的核心灵感来自于对MNIST数据集的崇拜和迷恋。虽然它有一些明显的缺陷--我们已经解决了其中的一些问题--但它也有许多讨人喜欢的品质和被低估的优点:它简单、直观,为探索创造性的新想法提供了完美的沙盘。

我们的工作也与Rawal等人(2020)的Synthetic Petri Dish在哲学上有相似之处。它与我们这项工作是同时发表的,作者对生物学进行了类似的引用,以激励使用小型合成数据集进行探索性研究。他们的工作与我们的不同之处在于,他们使用元学习来获得他们的数据集,而我们的数据集是由人工构建的。Synthetic Petri Dish的目的是加速神经架构搜索,而我们的数据集的目的是加速 "深度学习的科学 "问题。

还有很多其他小规模的数据集,通常用于研究 "深度学习的科学 "问题。CIFAR-10数据集中的样本数是MNIST的4倍,但训练样本的总数量是一样的。CIFAR-10在区分MLP和CNN架构,以及各种CNN架构(如vanilla CNNs与ResNets)方面做得更好。FashionMNIST数据集与MNIST大小相同,但(区分)难度会更大一些。最后一个选择是Scikit-learn的数据集:有几十个选择,有些是人工合成的,有些是真实的。但要把真实世界类比到比如说数字分类,是不可能的,人们往往可以用简单的线性或基于内核的方法在这些数据集上做得很好。

结束语

为了探索神经网络规模的极限,有一种违反直觉的可能性是,为了探索神经网络的规模有多大的极限,我们可能首先需要探索神经网络的规模到底有多小的极限。以保留其行为在规模上的细微差别来缩放模型大小和数据集,会使研究人员能够快速迭代基础和创新的想法。这种快速迭代周期是获得关于如何将逐渐复杂的归纳偏差纳入我们的模型的见解的最佳方式。然后,我们可以跨空间尺度迁移这些归纳偏差,以显着提高大规模模型的采样效率和泛化特性。我们认为不怎么起眼的MNIST-1D数据集是朝着这个方向迈出的第一步。

脚注

  1. Trunk, Gerard V. “A problem of dimensionality: A simple example.” IEEE Transactions on pattern analysis and machine intelligence 3 (1979): 306-307. 

  2. Belkin, Mikhail, et al. “Reconciling modern machine-learning practice and the classical bias–variance trade-off.” Proceedings of the National Academy of Sciences 116.32 (2019): 15849-15854. 

  3. Spigler, Stefano, et al. “A jamming transition from under-to over-parametrization affects loss landscape and generalization.” arXiv preprint arXiv:1810.09665 (2018). 

  4. Nakkiran, Preetum, et al. “Deep double descent: Where bigger models and more data hurt.” arXiv preprint arXiv:1912.02292 (2019). 

  5. Clevert, Djork-Arné, Thomas Unterthiner, and Sepp Hochreiter. Fast and accurate deep network learning by exponential linear units (elus). ICLR 2016. 

  6. Ramachandran, Prajit, Barret Zoph, and Quoc V. Le. Searching for activation functions. (2017). 


AI研习社是AI学术青年和AI开发者技术交流的在线社区。我们与高校、学术机构和产业界合作,通过提供学习、实战和求职服务,为AI学术青年和开发者的交流互助和职业发展打造一站式平台,致力成为中国最大的科技创新人才聚集地。

如果,你也是位热爱分享的AI爱好者。欢迎与译站一起,学习新知,分享成长。

]]>
人工智能开发者 //www.xyschoolife.com/category/yanxishe/O5h3yBR0NVMgbea7.html#comments Tue, 12 Jan 2021 14:22:00 +0800
终极版AlphaGo,DeepMind新算法MuZero作者解读 //www.xyschoolife.com/category/yanxishe/HyuzCst1W6wlvVuE.html 译者:AI研习社(季一帆

双语原文链接:MuZero Intuition


为庆祝Muzero论文在Nature上的发表,我特意写了这篇文章对MuZero算法进行详细介绍,希望本人能让你对该算法有一个直观的了解。更多详细信息请阅读原文

MuZero是令人振奋的一大步,该算法摆脱了对游戏规则或环境动力学的知识依赖,可以自行学习环境模型并进行规划。即使如此,MuZero仍能够实现AlphaZero的全部功能——这显示出其在许多实际问题的应用可能性!

所有一切不过是统计

MuZero是一种机器学习算法,因此自然要先了解它是如何使用神经网络的。简单来说,该算法使用了AlphaGo和AlphaZero的策略网络和值网络:


策略和值的直观含义如下:

  • 策略p(s,a)表示在状态s时所有可能的动作a分布,据此可以估计最优的动作。类比人类玩家,该策略相当于快速浏览游戏时拟采取的可能动作。

  • 值v(s)估计在当前状态s下获胜的可能性,即通过对所有的未来可能性进行加权平均,确定当前玩家的获胜概率。

这两个网络任何一个都非常强大:只根据策略网络,能够轻易预测每一步的动作,最终得到良好结果;只依赖值网络,始终选择值最高的动作。但是,将这两个估计结合起来可以得到更好的结果。

取胜之路

与AlphaGo和AlphaZero相似,MuZero也使用蒙特卡洛树搜索方法(MCTS)汇总神经网络预测并选择适合当前环境的动作。

MCTS是一种迭代的,最佳优先的树搜索过程。最佳优先意味着搜索树的扩展依赖于搜索树的值估计。与经典方法(如广度优先或深度优先)相比,最佳优先搜索利用启发式估计(如神经网络),这使其在很大的搜索空间中也可以找到有效的解决方案。

MCTS具有三个主要阶段:模拟,扩展和反向传播。通过重复执行这些阶段,MCTS根据节点可能的动作序列逐步构建搜索树。在该树中,每个节点表示未来状态,而节点间的边缘表示从一个状态到下一个状态的动作。

在深入研究之前,首先对该搜索树及逆行介绍,包括MuZero做出的神经网络预测:


圆圈表示树节点,对应环境状态;线表示从一个状态到下一个状态的动作;根节点为当前环境状态,即围棋面板状态。后续章节我们会详细介绍预测和动力学函数。

模拟:从树的根节点出发(图顶部的淡蓝色圆圈),即环境或游戏的当前位置。在每个节点(状态s),使用评分函数U(s,a)比较不同的动作a,并选择最优动作。MuZero中使用的评分函数是将先前的估计p(s,a)与v(s')的值结合起来,即


其中c是比例因子,随着值估计准确性的增加,减少先验的影响。

每选择一个动作,我们都会增加其相关的访问计数n(s,a),以用于UCB比例因子c以及之后的动作选择。

模拟沿着树向下进行,直到尚未扩展的叶子。此时,应用神经网络评估节点,并将评估结果(优先级和值估计)存储在节点中。

扩展:一旦节点达到估计量值后,将其标记为“扩展”,意味着可以将子级添加到节点,以便进行更深入的搜索。在MuZero中,扩展阈值为1,即每个节点在首次评估后都会立即扩展。在进行更深入的搜索之前,较高的扩展阈值可用于收集更可靠的统计信息。

反向传播:最后,将神经网络的值估计传播回搜索树,每个节点都在其下保存所有值估计的连续均值,这使得UCB公式可以随着时间的推移做出越来越准确的决策,从而确保MCTS收敛到最优动作。

中间奖励

细心的读者可能已经注意到,上图还包括r的预测。某一情况(如棋盘游戏)在完全结束后提供反馈(获胜/失败结果),这样可以通过值估计进行建模。但在另外一些情况下,会存在频繁的反馈,即每次从一种状态转换到另一种状态后,都会得到回报r。

只需对UCB公式进行简单修改,就可以通过神经网络预测直接对奖励进行建模,并将其用于搜索。


其中,r(s,a)是指在状态s时执行动作a后观察到的奖励,而折扣因子γ是指对未来奖励的关注程度。

由于总体奖励可以时任意量级的,因此在将其与先验奖励组合之前,我们将奖励/值估计归一化为区间[0,1]:


其中,q_min和q_max分别是整个搜索树中观察到的最小和最大r(s,a)+γ⋅v(s')估计。

过程生成

重复执行以下过程可实现上述MCTS:

  • 在当前环境状态下进行搜索;

  • 根据搜索的统计信息π_t选择一个动作a_(t+1);

  • 根据该动作更新环境,得到新的状态s_(t+1)和奖励u(t+1);

  • 重复上述过程。

动作的选择可以是贪心的(选择访问次数最多的动作),也可以是探索性的:通过一定的温度t控制探索程度,并对与访问次数n(s,a)成比例的动作a进行采样:


当t = 0时,等效贪婪采样;当t = inf时,等效均匀采样。

训练

现在,我们已经学会了运行MCTS来选择动作,并与环境互动生成过程,接下来就可以训练MuZero模型了。

首先,从数据集中采样一条轨迹和一个位置,然后根据该轨迹运行MuZero模型:

可以看到,MuZero算法由以下三部分组成:

  • 表示函数h将一组观察值(棋盘)映射到神经网络的隐藏状态s;

  • 动态函数g根据动作a_(t + 1)将状态s_t映射到下一个状态s_(t + 1),同时估算在此过程的回报r_t,这样模型就能够不断向前扩展;

  • 预测函数f根据状态s_t对策略p_t和值v_t进行估计,应用UCB公式并将其汇入MCTS过程。

根据轨迹选择用于网络输入的观测值和动作。相应地,策略、值和奖励的预测目标是在生成存储的轨迹。

从下图可以看到过程生成(B)与训练(C)之间的一致性:


具体问言,MuZero估计量的训练损失为:

  • 策略:MCTS访问统计信息与预测函数的策略logit之间的交叉熵;

  • :N个奖励的折扣和+搜索值/目标网络估计值与预测函数的值之间的交叉熵或均方误差;

  • 奖励:轨迹观测奖励与动态函数估计之间的交叉熵。

重分析

在了解了MuZero的核心思想后,接下来我们将介绍重分析技术,这将显著提高模型对大量数据的搜索效率。

在一般训练过程中,通过与环境的相互作用,我们会生成许多轨迹,并将其存储在重播缓冲区用于训练。那么,我们可以从该数据中获得更多信息吗?

很难。由于需要与环境交互,我们无法更改存储数据的状态、动作或奖励。在《黑客帝国》中可能做到,但在现实世界中则不可能。

幸运的是,我们并不需要这样。只要使用更新的、改进标签的现有输入,就足以继续学习。考虑到MuZero模型和MCTS,我们做出如下改进:

保持轨迹(观测、动作和奖励)不变,重新运行MCTS,就可以生成新的搜索统计信息,从而提供策略和值预测的新目标。

我们知道,在与环境直接交互过程中,使用改进网络进行搜索会获得更好的统计信息。与之相似,在已有轨迹上使用改进网络重新搜索也会获得更好的统计信息,从而可以使用相同的轨迹数据重复改进。

重分析适用于MuZero训练,一般训练循环如下:


设置两组异步通信任务:

  • 一个学习者接收最新轨迹,将最新轨迹保存在重播缓冲区,并根据这些轨迹进行上述训练;

  • 多个行动者定期从学习者那里获取最新的网络检查点,并使用MCTS中的网络选择动作,与环境进行交互生成轨迹。

为实现重分析,引入两个新任务:

  • 重分析缓冲区,用于接收参与者生成的所有轨迹并保留最新轨迹;

  • 多个重分析行动者从重分析缓冲区采样存储的轨迹,使用学习者的最新网络检查点重新运行MCTS,并将生成的轨迹和更新的统计信息发送给学习者。

由于学习者无法区分新轨迹和重分析的轨迹,这使得新轨迹与重分析轨迹的比例更改变得简单。

MuZero命名含义

MuZero的命名基于AlphaZero,其中Zero表示是在没有模仿人类数据的情况下进行训练的,Mu取代Alpha表示使用学习模型进行规划。

更研究一些,Mu还有其他丰富的含义:

  • ,日语中读作mu,表示“梦”的意思, 就像MuZero通过学习的模型来想象未来状况一样;

  • 希腊字母μ(发音为mu)也可以表示学习的模型;

  • , 日语发音为mu,表示“无、没有”,这强调从头学习的概念:不仅无需模仿人类数据,甚至不需提供规则。

结语

希望本文对MuZero的介绍对你有所启发!

如果想了解更多细节,可以阅读原文,还可以查看我在NeurIPSposter以及在ICAPS上发表的关于MuZero的演讲。

最后,分享给你一些其他研究人员的文章,博客和GitHub项目:

  1. 为简单起见,在MuZero中仅使用单个网络进行预测。

  2. 根据Rémi Coulom在2006年发表的Efficient Selectivity and Backup Operators in Monte-Carlo Tree Search,MCTS为解决围棋问题提供可能。具体而言,MCTS中的“蒙特卡洛”指在围棋比赛中的随机模拟数,通过计算每次随机移动得获胜概率从而选择合适位置。

  3. MuZero中使用的比例因子为∑bn(s,b)√1+n(s,a)⋅(c1+log(∑bn(s,b)+c2+1c2)),其中n(s,a)表示从状态s到动作a的访问次数,常数c1和c2分别为1.25和19652,它们决定先验对于值估计得重要性。请注意,当c2远大于n时,c2的确切值不再重要,对数项此时为0。在这种情况下,公式简化为c1⋅∑bn(s,b)√1+n(s,a)c1。

  4. 就像AlphaGo之前的许多Go程序使用的随机卷展,随机评估函数有一定作用。但如果评估函数是确定性的(如标准神经网络),那么对同一节点多次评估没什么意义。

  5. 在棋盘游戏中,折扣因子γ为1,TD步数趋于无限,因此,这仅适用于对蒙特卡洛奖励(游戏获胜者)的预测。

  6. 在运行MuZero时,无需单独对行动者进行重分析:由于只有一组行动者,在每次行动之前决定是与环境交互生成新轨迹还是对存储轨迹进行重分析。


AI研习社是AI学术青年和AI开发者技术交流的在线社区。我们与高校、学术机构和产业界合作,通过提供学习、实战和求职服务,为AI学术青年和开发者的交流互助和职业发展打造一站式平台,致力成为中国最大的科技创新人才聚集地。

如果,你也是位热爱分享的AI爱好者。欢迎与译站一起,学习新知,分享成长。

]]>
人工智能开发者 //www.xyschoolife.com/category/yanxishe/HyuzCst1W6wlvVuE.html#comments Thu, 07 Jan 2021 11:21:00 +0800
在数据科学领域中,你需要多少数学知识? //www.xyschoolife.com/category/yanxishe/rKcGrP2mxj2kxqWh.html 译者:AI研习社(话左

双语原文链接:How Much Math do you need in Data Science?


Benjamin O. Tayo.提供图片

I. 引言

如果你有心学习数据科学,那么你一定会在脑海中想过下面的问题:

没有或者只有很少的数学知识,我能做一个数据科学家吗?

数据科学必需的数学工具有哪些?

有很多优秀的包可用于建立预测模型或者数据可视化。其中最常用的用于描述和预测分析的一些包有:

  • Ggplot2

  • Matplotlib

  • Seaborn

  • Scikit-learn

  • Caret

  • TensorFlow

  • PyTorch

  • Keras

多亏了这些包,任何人都可以建立起一个模型或者实现数据可视化。然而, 坚实的数学基础对于修改你的模型让你的模型性能更好更加可靠来说是十分必要的。建立模型是一回事,解释模型得出可用于数据驱动的决策的有意义的结论又是另一回事。用这些包之前,理解每个包中的数学原理是很重要的。因为这样你才不是简单地只是把这些包作为一个黑盒来使用。

II. 案例学习:建立多重回归模型

假设我们要建立一个多重回归模型。在此之前,我们需要问一下自己下面的这些问题:

我的数据集有多大?

我的特征变量和目标变量是什么?

什么预测特征与目标变量关联性最大?

什么特征是重要的?

我需要量化特征值吗?

我的数据集应该如何分成训练集和测试集?

什么是主成分分析(PCA)

我应该用PCA移除多余特征吗?

我要如何评估我的模型?用R2,MSE还是MAE?

我应该如何提升模型预测的能力?

我应该使用正则化的回归模型吗?

什么是回归系数?

什么是截距?

我应该使用诸如K近邻回归或者支持向量回归这种非参数回归模型吗?

我的模型中有哪些超参数,如何对其进行微调以获得性能最佳的模型?

没有良好的数学背景,你就无法解决上面提到的问题。 最重要的是,在数据科学和机器学习中,数学技能与编程技能同等重要。 因此,作为有志于数据科学的人,你必须花时间研究数据科学和机器学习的理论和数学基础。 你构建可应用于实际问题的可靠而有效的模型的能力取决于您的数学基础。

现在我们来聊聊数据科学还有机器学习所必需的一些数学工具。

III. 数据科学与机器学习必需的数学工具

1. 统计与概率

统计与概率学可用于特征的可视化,数据预处理,特征转换,数据插入,降维,特征工程,模型评估等。

这里是你需要熟悉的概念:均值,中位数,众数,标准差/方差, 相关系数和协方差矩阵,概率分布(二项,泊松,正太), p-值, 贝叶斯理论(精确性,召回率,阳性预测值,阴性预测值,混淆矩阵,ROC曲线), 中心极限定理, R_2值, 均方误差(MSE),A/B测试,蒙特卡洛模拟。

2. 多元微积分

大多数机器学习模型都是由带有许多特征或者预测因子的数据集建立的。因此,熟悉多元微积分对于建立机器学习模型及其重要。

这里是你需要熟悉的概念:多元函数;导数和梯度; 阶跃函数,Sigmoid函数, Logit函数, ReLU(整流线性单元)函数;损失函数;函数作图;函数最大最小值。

3. 线性代数

线性代数是机器学习中最重要的数学工具。 数据集通常都表示为矩阵。 线性代数常用于数据预处理,数据转换,降维和模型评估。

这里是你需要熟悉的概念:向量;向量的范数;矩阵;矩阵转置;矩阵的逆;矩阵的行列式;矩阵的迹;点积;特征值;特征向量

4. 优化方法

大多数机器学习算法通过最小化目标函数来建立预测模型,由此学习应用于测试数据的权重以获得预测的标签。

这里是你需要熟悉的概念:损失函数/目标函数;似然函数;误差函数;梯度下降算法及其衍生(如随机梯度下降)

IV. 总结与结论

总之,我们已经讨论了数据科学和机器学习所需的基本数学和理论技能。 有几门免费的在线课程可以教你数据科学和机器学习所必需的数学知识。 作为有志于数据科学的人,请记住,数据科学的理论基础对于构建高效且可靠的模型至关重要。 因此,您应该投入足够的时间来研究每种机器学习算法背后的数学理论。

V. 参考文献

初学者的线性回归基础

使用R实现主成分分析的数学原理

机器学习教程


AI研习社是AI学术青年和AI开发者技术交流的在线社区。我们与高校、学术机构和产业界合作,通过提供学习、实战和求职服务,为AI学术青年和开发者的交流互助和职业发展打造一站式平台,致力成为中国最大的科技创新人才聚集地。

如果,你也是位热爱分享的AI爱好者。欢迎与译站一起,学习新知,分享成长。

]]>
人工智能开发者 //www.xyschoolife.com/category/yanxishe/rKcGrP2mxj2kxqWh.html#comments Tue, 05 Jan 2021 15:15:00 +0800
2020 年度 AI 信息摘要 //www.xyschoolife.com/category/yanxishe/sZGRvsK7H6CkZqhe.html 译者:AI研习社(听风1996

双语原文链接:AI News in 2020: a Digest


概览

随着2020年(终于)接近尾声,现在是时候反思一下在这最奇异的一年里,人工智能发生了什么事情。上图是我们在过去一年中策划的 "Last Week in AI "时事通讯中文章标题中最常使用的词组。这反映了我们在2020年时事通讯中收录的大约的1000篇文章:

  

文章中的术语数量与时间的关系  

不出所料,"人工智能 "这个含糊但大家都熟知的术语仍然是文章标题中最常用的术语,"深度学习 "或 "神经网络 "等内容仍然比较罕见:

  

文章标题中的术语数量与时间的关系

再深挖一下,我们发现冠状病毒和人脸识别是今年最关注的话题,其次是偏见、换脸等话题:

  

文章标题中的术语数量与时间的关系

概述已经够多了--让我们逐月回顾一下我们在过去一年中策划的最重要的文章。如同我们的新闻通讯一样,这些文章将涉及到进展与商业、关注与讨论、分析与政策,在某些情况下还会涉及到该领域的专家意见与讨论。它们将按时间顺序呈现,并代表我们认为特别值得注意的精选。点击月份名称,可查看当月开始发布的完整通讯。

1月

2020年的开始,一切都很平静,大家都在讨论对未来人工智能的期待,还有一些文章讨论了人脸识别和偏见的问题,这些问题将成为全年的一个趋势。

2月

2月份有更多关于人工智能负面影响的讨论,其中一些文章着重强调了为善用AI所做的努力,以及开始将AI与冠状病毒大流行相关联:

3月

三月是一个重要的月份,有三个故事引人注目。首先是 Starsky Robotics公司的倒闭,这是一家致力于自动驾驶卡车的有前途的初创公司。在一篇详细的博客文章中,这位创始人讨论了自动驾驶行业在技术、安全和经济方面面临的巨大挑战。

其次是Clearview AI的宣传,它违反了许多道德和法律规范,在互联网上搜集人脸照片,为其面部识别系统提供动力,使其客户,从执法部门到零售连锁店,都能搜索到任何有人脸照片的人。

最后是大量关于Covid-19大爆发的报道,以及人工智能/机器人技术可以(和不可以)发挥的作用。

4月

4月延续了许多以Covid-19为中心的故事,但也有一些与人工智能发展的伦理相关的例外:

5月

5月和4月很像,很多人关注Covid-19,还有一些关于道德、工作和进步的故事:

6月

本月,乔治·弗洛伊德被杀后发生了大规模抗议活动,导致许多人重新审视美国警方在人工智能领域的行为。这通常意味着质疑警方使用面部识别技术以及部署的人工智能算法中固有的偏见。正是在这种背景下,亚马逊(Amazon)和IBM等公司暂停向执法部门销售面部识别软件,许多细微的对话也随之而来。

其他消息包括:

7月

这个月,随着OpenAI公司公布了其私有化测试的结果,围绕着OpenAI的GPT-3 — 一个非常庞大且灵活的语言模型的热度开始飙升。虽然GPT-3论文在5月份发表,但直到现在人们才开始意识到其潜在的应用范围,从编写代码到翻译法律术语,以及它的局限性和被滥用的可能性。

其他新闻包括:

8月

接下来,关于GPT-3的讨论越来越多,人们对面部识别、偏见和工作的关注也越来越多。关于冠状病毒的讨论大多已经减少了。

9月

人们对人工智能的偏见、面部识别和其他问题的担忧在本月真正凸显出来,一些关于进展的讨论也夹杂其中。

10月

十月是一个更加积极的月份,关于人工智能的进步和应用的报道很多,而关于其消极方面的报道很少。

11月

这个月和上个月很相像,围绕伦理和人工智能问题的讨论仍在继续,以及各种相关的进展,足以显示这个领域的发展速度有多快。

12月

本月,又一项令人印象深刻的人工智能开发被学术界和新闻界吹捧为一项突破。DeepMind的AlphaFold 2在两年一度的蛋白质结构预测竞赛中取得了重大进展,以巨大优势击败了竞争对手和之前的AlphaFold 1。尽管许多专家都认为蛋白质折叠尚未被“解决”,并对该算法的即时应用抱有毫无根据的乐观态度,但毫无疑问,AlphaFold 2和类似系统将对未来的生物学产生重大影响。

在人工智能领域,另一条大新闻是谷歌解雇了人工智能伦理前沿研究员蒂姆尼特•格布鲁(Timnit Gebru),原因是人们对她最近的工作存在分歧,这些工作突显了人们对人工智能语言模型的偏见和担忧。这在该领域引发了一系列尖锐的讨论,从种族的角色、人工智能缺乏多样性,以及行业实验室的企业审查。

其他新闻:


AI研习社是AI学术青年和AI开发者技术交流的在线社区。我们与高校、学术机构和产业界合作,通过提供学习、实战和求职服务,为AI学术青年和开发者的交流互助和职业发展打造一站式平台,致力成为中国最大的科技创新人才聚集地。

如果,你也是位热爱分享的AI爱好者。欢迎与译站一起,学习新知,分享成长。

]]>
人工智能开发者 //www.xyschoolife.com/category/yanxishe/sZGRvsK7H6CkZqhe.html#comments Mon, 04 Jan 2021 15:07:00 +0800
2020 年度译文榜单 //www.xyschoolife.com/category/yanxishe/gxMonxfqCqgyJW6I.html

炫彩时尚公众号推图@凡科快图.jpg


桌上的日历只剩下最后几页,一年又这样步入了尾声。在这特殊的一年,我们经历了太多太多,这些好事坏事终将成为过往。译站都更新了哪些关于 AI 的有趣文章呢?

在此之际,为大家奉上 2020 年度译文榜单:


1. ECCV 2020 亮点摘要

2. ACL 2020 亮点摘要

3. Twitter团队最新研究:快速高效的可扩展图神经网络SIGN

4. 深度学习和机器学习的线性代数入门

5. 重磅 | 对比了2000台笔电后,Towards AI 选出了最适合搞机器学习、数据科学和深度学习的笔记本电脑!

6. 【GCN】图卷积网络(GCN)入门详解

7. 斯坦福大学 | 人工智能本科4年课程清单

8. 告别RNN,迎接TCN

9. 蒙特卡洛模拟(Python)深入教程

10. 最强通用棋类AI,AlphaZero强化学习算法解读

11. 强化学习算法DeepCube,机器自行解决复杂魔方问题

12. 2020 年 4 个最值得推荐的 VS Code 插件

13. GitHub十大热门Python项目

14. 微型机器学习:下一次AI革命

15. 深度学习未来发展的三种学习范式:混合学习、成分学习和简化学习

16. 数学之美:贝叶斯优化


1. ECCV 2020 亮点摘要

u=1564386874,1521249854&fm=26&gp=0.png

译者:季一帆Champagne Jin

内容摘要:ECCV 2020 堪称“史上最难ECCV”,有效投稿5025,一共有1361篇论文入选,录取率仅为27%。其中 Oral 104篇,Spotlight 161篇,Poster 1096篇。 包括了曾引起广泛影响的Facebook新式目标检测算法 End-to-End Object Detection with Transformers (DETR )为Oral。为了让读者可以从中了解会议总体趋势。因此,本文会对这次会议进行概括,并列出一些作者自己觉得有趣、重要的论文。 


2. ACL 2020 亮点摘要

一份值得收藏的ACL 2020参会笔记:重要论文与NLP领域的发展趋势解读

译者:唐里、张超726、情报理论与实践、Danielan

内容摘要:今年的国际自然语言处理领域顶级学术会议“国际计算语言学协会年会”(ACL 2020)共收到 3429 篇投稿论文,投稿数量创下新高。论文有从基础任务到高级任务发展的趋势,收到交稿量最多的方向分别是通过机器学习处理自然语言,对话和交互系统,机器翻译,信息提取和自然语言处理的应用及生成。作者将根据本次参与会议的心得体会,在本文中讨论行业总体趋势。


3. Twitter团队最新研究:快速高效的可扩展图神经网络SIGN

1609292317(1).png

译者:季一帆、何月莹

内容摘要:迄今为止,阻碍图神经网络在行业应用中被广泛采用的挑战之一是难以将其缩放到大型图(例如Twitter跟随图)。 节点之间的相互依赖性使损失函数分解成单个节点的贡献具有挑战性。 在这篇文章中,我们描述了Twitter开发的一种简单的图神经网络架构,该架构可以处理大量的图。 


4. 深度学习和机器学习的线性代数入门

译者:季一帆

内容摘要:机器学习和深度学习是建立在数学概念之上的,掌握理解数学知识对于算法构建和数据处理有极大帮助。线性代数的研究包括向量及其操作。在机器学习中,各处可见线性代数的背影,如线性回归,独热编码,主成分分析PCA,推荐系统中的矩阵分解。深度学习更甚,其完全基于线性代数和微积分。梯度下降,随机梯度下降等优化方法也建立在此之上。


5. 重磅 | 对比了2000台笔电后,Towards AI 选出了最适合搞机器学习、数据科学和深度学习的笔记本电脑!

1_uslR7oo6jjIr1xCD2I3ktg (1).png

译者:听风1996、Icarus、

内容摘要:过去一年中,Towards AI的编辑团队研究了2,000多台笔记本电脑,并选择了他们认为适合机器学习,数据科学和深度学习的最佳笔记本电脑。如果您正在寻找好的设备,那么这里是您的正确选择!


6. 【GCN】图卷积网络(GCN)入门详解

1609292379(1).png

译者:听风1996、大表哥

内容摘要:GCN是一种卷积神经网络,它可以直接在图上工作,并利用图的结构信息。 GCN的基本思路:对于每个子系统,我们从它的所有邻居例程处获取其特征信息,当然也包括它自身的特征。在本文中,我们先直观的了解一下它的工作原理,然后再深入了解它背后的数学原理。 


7. 斯坦福大学 | 人工智能本科4年课程清单

译者:明明知道、jiazhenbin、娄门人家

内容摘要:你也许通过Coursera在线课程就能获得某些人工智能领域的知识,但在实际应用中培养对这些概念的深层理解更为重要。本文旨在为四年制人工智能本科学位的学习给出一个完整的课程规划。 


8. 告别RNN,迎接TCN

1609292419(1).png

译者:听风1996、君思、小哲

内容摘要:从TCNs在股票趋势预测中的应用可以看出,通过结合新闻事件和知识图谱,TCNs可以明显优于规范的RNNs。 循环神经网络在序列建模中享有的优势可能在很大程度上是历史发展遗留的问题。直到近期,在引入诸如扩张卷积和残余连接等架构元素之前,卷积架构确实比较薄弱。最近的学术研究表明,在这些元素的作用下,简单的卷积架构在不同的序列建模任务中比LSTMs等递归架构更有效。由于TCNs的清晰度和简单性相当高,卷积网络应该被视为序列建模的天然起点和强大工具。


9. 蒙特卡洛模拟(Python)深入教程

译者:大表哥、wiige

内容摘要:蒙特卡罗方法是一种使用随机数和概率来解决复杂问题的技术,使我们能够看到决策的所有可能结果,并评估风险影响,从而在不确定的情况下更好地做出决策。就像任何预测模型一样 模拟结果只有我们的估计值才是好的,蒙特卡洛模拟只代表概率而不是确定性。在本文中,我们将通过五个不同的例子来理解蒙特卡罗模拟方法。 


10. 最强通用棋类AI,AlphaZero强化学习算法解读

111111.jpeg

译者:Champagne Jin

内容摘要:在本篇博文中,你将会了解并实现AlphaZero,一个能够在双方零和博弈的棋盘游戏中战胜世界冠军的强化学习算法 ,它以绝对的优势战胜了多名围棋以及国际象棋冠军。作者将带你使用AlphaZero来解决一个益智小游戏(Dots and Boxes)并将其部署成一个纯JavaScript构建的Web应用。


11. 强化学习算法DeepCube,机器自行解决复杂魔方问题


1609292457(1).png

译者:季一帆

内容摘要:在本文中,作者将详细介绍将RL应用于组合优化领域的最新研究工作。本文对UCI(加利福尼亚大学欧文分校)的研究人员发表的论文“Solving the Rubik’s Cube Without Human Knowledge”进行解读。除了论文解读之外,还使用PyTorch复现论文,通过训练模型和流程解读实验,对论文方法进行改进。


12. 2020 年 4 个最值得推荐的 VS Code 插件

译者:苏珊•克尔莱、Icarus、

内容摘要:使用 VS Code 编写文档是种新颖的体验,但同时也会减慢速度,并使界面混乱。在2020年底,作者卸载了40多个不必要的扩展,留下了这4个最有用的扩展:TabNine、Vim、Spotify 和 Markdown All in One。


13. GitHub十大热门Python项目

译者:Icarus、

内容摘要:GitHub显然是绝大多数在线代码的家园。Python作为一种神奇而又通用的编程语言,已经被成千上万的开发者用来构建各种有趣而有用的项目。在下面的部分,我们将尝试涵盖GitHub上一些使用Python构建的最佳项目。


14. 微型机器学习:下一次AI革命

译者:听风1996

内容摘要:虽然GPT-3和Turing-LG取得的成绩值得称赞,当然也自然导致了一些业内人士对人工智能行业日益增长的碳足迹提出了批评。不过,这也有助于激发人工智能学界对更加节能计算的兴趣,比如更高效的算法、数据表示和计算。微型机器学习(tinyML)是机器学习和嵌入式物联网(IoT)设备的交叉领域。该领域是一门新兴的工程学科,有可能给许多行业带来革命性的变化。 


15. 深度学习未来发展的三种学习范式:混合学习、成分学习和简化学习

Image for post

译者:小哲

内容摘要:深度学习是一个很大的领域,其核心是一个神经网络的算法, 神经网络的尺寸由数百万甚至数十亿个不断改变的参数决定。似乎每隔几天就有大量的新方法提出。然而,一般来说,现在的深度学习算法可以分为三个基础的学习范式。每一种学习方法和信念都为提高当前深度学习的能力和范围提供了巨大的潜力和兴趣。


16. 数学之美:贝叶斯优化

译者:季一帆、Icarus、

内容摘要:问题定义:给定函数f(x),该函数计算成本高、甚至可能不是解析表达式,同时假定函数导数未知。你的任务:找到函数得全局最小值。这无疑是一项艰巨的任务,比机器学习中的其他优化问题还要困难。但贝叶斯优化提供了一个优雅的框架可用于来解决上述定义的问题,并且能够在尽可能少的步骤中找到全局最小值。 


AI研习社是AI学术青年和AI开发者技术交流的在线社区。我们与高校、学术机构和产业界合作,通过提供学习、实战和求职服务,为AI学术青年和开发者的交流互助和职业发展打造一站式平台,致力成为中国最大的科技创新人才聚集地。

如果,你也是位热爱分享的AI爱好者。欢迎与译站一起,学习新知,分享成长。

]]>
人工智能开发者 //www.xyschoolife.com/category/yanxishe/gxMonxfqCqgyJW6I.html#comments Wed, 30 Dec 2020 14:26:00 +0800
【重磅整理】ECCV 2020 亮点摘要 //www.xyschoolife.com/category/yanxishe/4aolHsHuZUE54rMt.html 译者:AI研习社(Champagne Jin季一帆

双语原文链接:ECCV 2020: Some Highlights


2020年欧洲计算机视觉会议(ECCV)于8月23日至28日在线举行。本次会议共接收1360篇论文,包括104场orals,160场spotlights以及1096篇posters,共进行有45场workshops和16场tutorials。就像其他ML和CV会议一样,大量论文无法完全了解。因此就本次会议,进行了类似CVPR2020 post 的总结,以便读者可以从中了解会议总体趋势。因此,本文会对这次会议进行概括,并列出一些我觉得有趣、重要的论文。

首先,会议相关的链接包括:

免责声明:本文仅代表个人观点,并不代表ECCV 2020论文及主题。欢迎任何反馈!

整体统计概况

本节中提供的统计数据摘自官方的Opening&Awards演示文稿。




可以看到,与2018年会议相比,论文提交量增加了超过一倍,与CVPR 2020的论文数量相当。随之相应,审稿人数和涉及领域也相应增加。


不出所料,大多数接受论文集中于深度学习、识别、检测和理解相关主题。同时可以发现,研究人员对诸如无监督学习的标签有效方法和低视野等领域的兴趣显著增加,同样的结果在CVPR2020中也有所体现。


对研究机构进行统计,其结果与今年的ICML相似:排名第一的Google有180位作者,其次是香港中文大学的140位作者,第三是北京大学的110位作者。

后续章节我们将基于研究主题简要介绍一些论文。

识别,检测,分割以及姿态估计

End-to-End Object Detection with transformers (论文地址)

目标检测的任务即在给定图像中对可见物体进行定位并分类。目前广泛使用的目标检测框架都含有一系列预先定义的方框(也就是称作 anchors 或是 region proposals 的几何先验框),各个框中的图像内容将由网络进行分类,在这之后,还会进一步回归来对边界框做调整,最后,交由后处理去除重复的检测结果。然而,由于引入了后处理,整个网络并不能像其他计算机视觉任务一样进行端到端的训练。而在这篇文章中,作者们提出了一个新的目标检测框架,叫做 DETR (DEtection TRansformer) ,这是一个可完全端到端训练的网络模型,且无需任何几何先验知识。下图是 DETR 与 Faster R-CNN 计算流程的对比(该图是从作者们的展示文稿中获取的),强调了 DETR 整体的自然性。


DETR 是基于编码-解码的 Transformer 结构构造的。整个模型包含三大组件:卷积神经网络特征提取器,编码器,以及解码器。一张给定图像会先经过特征提取器以获取图像特征。接着,使用不同频率的sin函数生成的位置编码信息会加到图像特征上以维护图像的二维结构信息。得到的新特征会经过 Transformer 的编码器来整合特征信息并将不同的目标分开来。到了解码阶段,目标查询向量会与编码向量一同经过解码器并产生最终的输出特征向量。这些查询向量是一组固定的可学习的嵌入向量(embedding),刚开始随机初始化,在训练过程中进行优化,评测阶段则保持不变,而查询向量的数量也决定了该检测器能够检测的目标数量上界。最终,输出的特征向量会经过一个共享的全连接层来预测每个查询对应的类别与边界框。为了计算损失并训练该模型,作者使用了 匈牙利算法 将输出与标注一一匹配。


MutualNet: Adaptive Convnet via Mutual Learning from Network Width and Resolution (论文地址)

传统神经网络只有在计算资源足够的情况下才能够使用,如果计算资源无法满足,模型就无法使用。然而,这就使得实际应用中模型的使用颇为受限。比方说,如果模型要在手机上进行前向推理,计算资源会随手机负载以及电量而变化。一个简单的解决方案就是在设备端保存多个不同大小尺寸的模型,并在不同计算资源情况下使用对应的模型。但是如此一来就会占据大量内存空间,并且也无法做到适用于不同的计算资源。近期类似于 S-Net 与 US-Net 的网络在训练期间采样不同大小的子网络,使得网络在部署阶段可以调整为不同的网络宽度(也就是通道数量)。但是在非常有限的计算资源下,这类网络的性能显著下降。


这篇论文则借助于不同尺寸的网络与输入图像,以寻求准确度与计算效率的平衡。如上图所示,在一次训练迭代过程中,会采样四个子网络,其中一个是完整的网络,还有三个具有不同宽度的子网络。完整的网络使用原始大小的图像数据与标签进行交叉熵损失训练,其余三个则随机输入不同尺度的图像(原始图像或是尺度下采样后的图像),并使用他们的输出与完整网络的输出之间的KL散度进行监督训练(也就是蒸馏损失)。这样一来,每个子网络就能够学会适应不同网络尺寸与输入大小的多尺度表达。在部署过程中,对于一个给定的资源约束场景,即可选择最优的网络尺寸与输入大小组合用于推理。

Gradient Centralization: A New Optimization Technique for Deep Neural Networks (论文地址)

在神经网络优化过程中使用类似于均值与方差这样的二阶统计数据来对网络激活值或是权重做形式标准化已然成为神经网络训练过程中极为重要的一环,例如常用的 BatchNorm 和 weight norm。相较于使用额外的归一化模块作用于激活值或是权重,梯度中心化(Gradient Centralization,简称GC)直接作用于梯度,使得梯度向量的均值为0,该操作可以平滑并加速神经网络的训练过程,甚至提升模型的泛化性能。


给定计算得到的梯度,GC首先如上图所示计算梯度向量的均值,接着减去对应的均值。数学形式上,对于一个权重向量 Wi,其对应的梯度为∇Wi(i=1,2,…,N),则GC操作可定义为:



Smooth-AP: Smoothing the Path Towards Large-Scale Image Retrieval (论文地址)

图像检索旨在一个图像集合中检索与查询图像相同类别的图像数据。与分类任务不同,图像检索任务中,测试图像的类别在训练过程中都已经见到过了,测试图像的类别可能会很少见,但是我们仍需在图像集合中找到与之相似的图像,这也就是一个开集问题。图像检索的一般流程包括使用CNN特征提取器对检索图像、以及整个图像集合提取其各自的嵌入向量,接着计算两两之间的余弦相似度,最后根据相似度进行排序。特征提取器的训练目标就是要达到良好的排序效果(即属于同一类别的图像相似度应尽可能高)。而网络的性能则是使用 Average Precision (AP) 来度量的,该指标计算每个正确检索结果的名次与其在整个图像集合中的名次之比并对其求和。计算一张给定图像的名次需要应用一个阈值化操作,该操作用到了海维赛德阶跃函数,使得其不可微分,所以我们无法直接使用最终排名来端到端地优化模型。


为了解决这个问题,论文作者们提出了使用一个温度参数控制的sigmoid函数来代替海维赛德阶跃函数,使得排序可微,并可作为损失函数来端到端地优化网络模型。相较于三元组损失函数,smooth-AP 损失函数优化的是一个排序损失,而三元组损失则是在间接地进行优化。

Hybrid Models for Open Set Recognition (论文地址)

现有的图像分类方法往往基于闭集假设,也就是说,训练集中涵盖了测试阶段可能出现的所有类别。但是这种假设很明显不现实,哪怕是像ImageNet这样拥有1000类物品的大规模数据集,也不可能包含现实世界中所有可能的类别。如此一来,自然地出现了开集分类,其试图通过假设测试阶段包含见过的以及没有见过的类别来解决这个问题。


在这篇论文中,作者们使用流模型来解决这个开集分类问题。流方法通过最大似然估计,以一种无监督训练的方式拟合训练样本的概率分布。因此,流模型可以用于估计每个样本的概率密度。当输入样本的概率密度很大的时候,那么其很有可能是一个已知样本,而离群点的概率密度则较小。之前的研究方法都是基于流模型搭建一个分类器,而该论文的作者们让分类器和流模型学习一个联合嵌入向量,因为仅仅由流模型学到的嵌入向量很可能不具有充足的判别特征,使得分类效果很差。如上图所示,在训练期间,图像会由一个编码器网络映射为一个隐特征,接着这个编码特征会同时被送入分类器与流模型中,分类器端使用交叉熵损失进行监督,流模型端则负责概率密度估计。整个网络架构是可端到端训练的。在测试阶段,每张图像的 logP(x) 都会由前传得到,并与训练集样本的最低 logP(x) 进行比较。如果其值大于该阈值,则送入分类器判断其具体类别,否则就视为未见过的样本。

(译者注:有关 Flow-based Models ,可以参看李宏毅的讲解视频,非常有趣。)

Conditional Convolutions for Instance Segmentation (论文地址)

实例分割仍旧是计算机视觉领域颇具挑战性的任务之一,它需要对给定图像中每个可见目标打上一个逐像素的掩膜(mask)以及一个类别标签。主流方法就是大名鼎鼎的 Mask R-CNN ,它包含两个步骤,第一步是用目标检测器 Faster R-CNN 来生成每个实例的边界框,接着,对于每个检测到的实例,使用 ROI Align 将感兴趣区域从输出特征图中裁剪出来并缩放为同一分辨率大小,接着,将其送入一个掩膜头网络(mask head),该网络是一个小型全卷积网络,用以预测分割掩膜。然而,本论文作者指出了该架构的以下缺陷:(1) ROI Align 很可能会引入不相关的特征信息,如背景或是其他实例;(2) 缩放操作限制了实例分割的分辨率;(3) 掩膜头网络需要堆叠多个 3x3 卷积来产生足够大的感受野以生成掩膜,这极大得增加了掩膜头的计算量。


在本篇论文中,作者们提出了使用语义分割网络中的 FCN 来进行实例分割。为了进行有效的实例分割,FCN 需要两种信息,一是表观信息用于目标分类,二是位置信息用于区分同一类别的不同目标。该论文提出的网络结构名为 CondInst (用于实例分割的条件卷积),是基于 CondConv 以及 HyperNetworks 构建而成的。对于每个实例,一个子网络会根绝每个实例所在的中心区域生成掩膜 FCN 头网络的权重,用于预估给定实例的掩膜。具体来收,如上图所示,该网络中,在特征图的多个不同尺度下包含多个掩膜头。每个头网络在预定义的位置处预测给定实例的类别,并生成掩膜 FCN 头网络的权重。接着,就由各个头网络使用对应的参数进行掩膜预估。

Multitask Learning Strengthens Adversarial Robustness (论文地址)

深度神经网络的一大主要缺陷就在于它们对于对抗攻击来说异常脆弱,在输入图像中引入极为微小且不可见的扰动就会导致完全错误的输出,甚至输入的表观肉眼看来几乎完全一致。近些年,研究人员已从多个层面深入探讨神经网络的对抗鲁棒性,从输入数据(例如使用无标签数据以及对抗训练)到模型本身(使用正则化,例如 Parseval Networks),但是网络模型的输出还未被用于提升模型鲁棒性。在这篇论文中,作者们研究了拥有多个输出的多任务学习模型在对抗鲁棒性上的效果。鉴于越来越多的机器学习应用需要模型能够同时一次性完成多个任务,这样的设置在实际任务中是有用的。


使用有界p范式球攻击方式,即对于一个给定输入样本,在给定半径的p范式球内找到对抗扰动。接着,将计算得到的总损失变化视作网络的脆弱度。作者们展示了双任务训练下网络鲁棒性的提升(两个任务可从以下任务中随机选择:分割、深度估计、法向量估计、reshading、输入重建、2D或3D关键点预测等等)。在单任务攻击(即根据其中一个输出计算的扰动)以及多任务攻击(即根据所有输出计算的对应扰动中的最大扰动)下可以看到网络的鲁棒性提升。作者同时在理论上证明了这样的多任务鲁棒性仅在多个任务具有相关性的情况下可以达到。

Dynamic Group Convolution for Accelerating Convolutional Neural Networks (论文地址)

分组卷积首次出现还要追溯到AlexNet,当时分组的目的是为了加速训练,之后,这一技术被应用于轻量级CNN网络设计中,如 MobileNet和 ShuffleNet 。分组卷积将卷积层的输入和输出沿着通道维等量切分为多个部分(或者说是组),接着对每个组单独做卷积操作。因此,若是切分为 G 组,那么运算量也就减少了 G 倍。然而,该篇论文的作者们指出现有的分组卷积有两个主要缺陷:(1) 现有分组卷积稀疏化了神经网络的连接,致使卷积操作的特征提取于表达能力明显弱化;(2) 现有分组卷积对输入通道做固定的分组操作,忽视了各个输入之间的相关性。


为了适应性地选择最相关的输入通道构成组并保持原始网络的完整结构,作者们提出了动态组卷积(DGC)。DGC包含两个头网络,每个头网络根据输入为每个通道生成一个显著性分数。分数较低的通道会被移除。接着,对余下的特征层进行普通卷积并得到输出。最后,各个头网络的输出会在通道为级联起来并随机调换通道位置。

Disentangled Non-local Neural Networks (论文地址)

Non-local 模块使用注意力机制,对长距离像素之间的依存关系进行建模,并已经广泛应用于诸多计算机视觉任务,例如目标检测、语义分割以及视频动作识别。


在本篇论文中,作者们试图进一步解析 non-local 模块,发现其局限性,并提出了一个升级版本。首先,作者们将像素 i (也就是所谓的 key 像素)与像素 j (也就是所谓的 query 像素)之间的相似度计算为两项之和,其中一项是成对项,形式上就是一个白化后的点积结果,描述了 query 像素与 key 像素之间的关系,另一项则是一个一元项,表征了给定的 key 像素对哪个 query 像素影响最大。接着,为了搞清楚每一项的作用,他们分别只用其中一项进行训练,并发现成对项负责类别信息,一元项负责边界信息。然而,通过对 non-local 模块的梯度进行分析,作者们发现当上述两项结合起来应用于注意力操作时,他们的梯度相乘了。这也就导致,如果其中一项的梯度为0,那么另一个项不为0的梯度对网络的训练也起不到作用了。为了解决这个问题,作者们提出了一个 non-local 模块的分解版,使得这两项能够分开来优化。

Hard negative examples are hard, but useful (论文地址)

深度度量学习旨在优化一个嵌入函数,使得经过该函数映射后语义相似的图像会处在高维空间中相对较近的位置,而语义不相似的图像则使其映射后的距离较远。一种较为常用的学习该映射的方法是根据图像的三元组定义一个损失函数,这个三元组包含一张锚图像,一张与锚图像同一类别的正样本图像,以及一张与锚图像不同类别的负样本图像。接着,在优化过程中,模型会在锚图像与负样本图像的距离小于锚图像与正样本图像的距离时给予惩罚。然而,在优化期间,大多数候选三元组都已然达到了标准,即锚图像与正样本的距离小于其与负样本的距离,这也就使得这些三元组对训练几乎起不到太大作用,很冗余。另一方面,使用最困难的负样本进行优化又会导致在训练初期陷入局部最优。这是由于在这种情况下,根据余弦相似度(即归一化特征向量的点积结果)计算得到的锚-负样本的相似度比锚-正样本的相似度大很多。


作者们展示了三元组损失的标准实现中使用困难样本挖掘的问题所在。具体来说,(1) 在梯度计算中,如果归一化不被考虑的话,大部分梯度会丢失掉;(2) 如果两张不同类别的图像在嵌入空间中的距离非常接近,那么损失的梯度很可能将其拉得更近而非将其分得更开。为了解决这个问题,作者们不再像原始三元组损失那样尽可能地将锚-正样本对拉得更近以便将其更加紧密地聚类,相反,作者们会避开更新锚-正样本对的损失梯度,也就使得某一类的实例构成的聚类不会过于紧致。这个方法仅仅集中于直接将困难负样本拉离锚图像。

Volumetric Transformer Networks (论文地址)

卷积神经网络(CNN)成功的一个关键因素就在于其学习语义目标各个部件判别性特征表达的能力。然而,CNN仍旧缺乏处理不同空间变换的能力,例如尺度、视点以及类内变化。近期的一些方法,例如 spatial transformer networks (STNs) 试图通过先对空间分布不同的特征图变形,使其变为标准形式来抑制图像的空间变换,接着,再对这些标准化后的特征做分类。但是这样的方法对所有的特征通道做相同的变形操作,却没有考虑到各个特征通道会表征不同的语义组件,将其变换为标准形式也就需要不同的空间变换操作。


为了解决这个问题,该篇论文引入了 Volumetric transformer network (VTN),如上图所示,一个可学习的模块会对每个通道的每个像素位置预测一个形变变换,用于将中间的 CNN 特征变换为一个空间位置无关的标准形式。VTN是一个编码器-解码器结构的网络,其中的网络模块用于在不同的特征图通道之间传递信息,以估计不同语义组件之间的依赖关系。

Faster AutoAugment: Learning Augmentation Strategies Using Backpropagation (论文地址)

数据增广(DA)已然变成了深度学习方法中极为重要且不可或缺的一部分,而近期的一些研究工作表明搜索算法得到的数据增广策略(例如 AutoAugmentFast AutoAugment 以及 RandAugment)优于标准的增强增广方法。这类算法预先定义好所有可能的数据变换集合,比如几何变换(如旋转)或是色彩增强变换(如负感化),旨在找到最优的数据增广参数,比如增广的幅度、数据增广的概率以及不同数据增广手段的组合数量,如下方左图所示。最优策略是由一个双优化循环学习得到的,以便使得一个使用给定策略训练的卷积神经网络的验证误差最小。然而,这样的优化方法颇具弊端,可能的数据增广策略搜索空间过于庞大,需要复杂的搜索方法,而且单次数据增广策略的优化就需要网络做完整训练。为了解决这个问题,这篇论文的作者提出了使用基于梯度优化的原始图像与增广图像密度匹配优化策略。


通过将数据增广视作一种填充原始数据缺失点的方法,该算法的目标是利用对抗学习来最小化增广数据的和原始数据之间的分布距离。为了能够学习最优的增广策略,数据增广流程需要对增广参数可微。对于使用给定增广方法的概率,作者们使用一个由伯努利分布采样得到的随机变量来表示,并使用 Gumbel trick 进行优化,增广的强度通过直接估计来近似,增广方法的组合则使用one-hot向量的组合来学习。


其他论文

半监督学习,无监督学习,迁移学习,表征学习以及小样本学习

Big Transfer (Bit): General Visual Representation (论文地址)

在本篇论文中, 作者们回顾了迁移学习的简单范式:首先在一个大规模标记数据集(例如 JFT-300M 以及 ImageNet-21k)上进行预训练,接着在目标任务上精调预训练权重,从而减少目标任务的数据需求量以及优化时间。作者们提出的迁移学习框架称为 BiT (Big Transfer),并且包含大量构建有效模型的必需组件,使其能够借助于大规模数据集学习到通用的、可迁移的特征表达。

在预训练(上游)阶段,BiT 包含以下几点:

  • 对于非常庞大的数据集,由于 Batch Normalization (BN) 含有训练集的统计数据,使得测试阶段存在训练/测试不一致的问题,训练损失虽然被正确回传并优化,然而验证损失则很不稳定。同时,BN 对批量大小很敏感。为了解决这个问题,BiT 转而使用 Group Norm 以及  Weight Norm

  • 像 ResNet50 这样的小模型并不会从大规模数据集上获益,因此模型需要与数据集的大小匹配。

对于(下游)目标任务,BiT 提出以下几点:

  • 使用 SGD 优化器,无需层冻结、dropout、L2正则化或任何梯度适应  。别忘了把最后的预测层的权重初始化为0。

  • 无需将所有输入缩放为同一大小,如 224 。在训练期间,输入图像会随机缩放并剪切为一个正方形,并随机水平翻转。在测试阶段,图像则会放缩为同一固定大小。

  • 尽管对于数据量充足的大规模数据集预训练来说,mixup 并没有多大用处,但是 BiT 发现 mixup 正则化对下游任务里中等大小的数据集训练非常有用。

Learning Visual Representations with Caption Annotations (论文地址)

在大规模标注数据集上训练深度模型不仅能够让手头的任务获得优良表现,也能使得模型学到对于下游任务非常有用的特征表达。然而,我们是否可以在不使用如此昂贵且细粒度的标注数据的情况下获得类似的特征表达能力呢?本篇论文研究了使用带噪声标注(在本篇论文中是图像的文字说明)进行弱监督预训练。


目标是用有限对图像与说明文字来学习视觉表达,那么如何制定训练目标,来使得图像和它们的说明文字之间产生有效的联系呢?参考 BERT 模型随机掩盖 15% 的输入字符,让模型根据 transformer 模型的编码器输出重建整个句子,该方法也随机对图像的文字说明进行掩码操作。其提出的方法称作 image-conditioned masked language modeling (ICMLM),其中图像信息用于重建被掩码的字符以及对应的说明文字。为了达到这个目的,作者们提出了两个多模结构,(1) ICMLM tfm,使用一个卷积神经网络对原始图像进行编码得到图像特征,接着,经过BERT处理的被掩码的图像说明、原始图像说明以及图像特征被级联起来并通过一个 transformer 编码器,最终输出一个多模嵌入特征用于预估被掩码的字符。(2) ICMLM att+fc,先计算图像说明与图像之间的相似度,接着经过一个成对注意力模块来整合图像与文字说明之间的信息。得到的特征会经过池化后再过一个全连接层来预测被掩码的字符。

Memory-augmented Dense Predictive Coding for Video Representation Learning (论文地址)

近期在自监督图像表征学习领域的进步在下游任务中展现出了令人印象深刻的效果。尽管视频的多模表征学习多有发展,然而不使用其他任何类似于文本与语音的模态信息,仅仅使用视频流进行自监督学习还未有所发展。尽管视频的时域信息为自监督地训练一个根据过去帧预测未来帧的模型提供了充足的监督信号,这个任务仍旧颇具难度,因为真正的未来是不确定的,给定一个时间步长,未来的状态是有多种可能的(举个例子,当现在的动作是“打高尔夫”,那么下一帧所在的位置可能是手,也有可能是高尔夫俱乐部)。


本文将对比学习与存储模块结合使用,以解决未来帧的预测问题。为了减少不确定性,该模型会在特征级别上预测未来,并使用对比损失进行训练以避免过度约束。为了处理多种假设,一个存储模块用于同时推断多个未来状态。给定一组连续帧,2d-3d CNN编码器(即f)产生上下文特征,而GRU(即g)整合所有过去的信息,将其用于从共享存储模块中选择插槽。 接着,将所选存储插槽的凸组合构成预测的未来状态。然后,使用对比损失将预测的未来状态与未来状态的真实特征向量进行比较。 对于下游任务,将g产生的特征池化,然后送给分类器处理。

SCAN: Learning to Classify Images without Labels (论文地址)

要将未标记的输入图像分组为语义上有意义的聚类,我们要做到仅使用视觉相似性来解决该问题。 先前的工作要么是(1)使用自监督的方法学习丰富的特征,然后对特征应用 K-means 来聚类,但这很容易导致性能退化,或者就是(2)端到端的聚类方法,这些方法要么利用 CNN 进行深度聚类,要么基于互信息最大化。但是,生成的聚类结果在很大程度上取决于初始化,并且很可能会被低级特征主导。


为了解决先前工作中发现的问题,本文提出了包含两大步骤的 SCAN(采用最近邻方法的语义聚类)。第一步,通过前置任务学习特征表示,然后生成初始聚类,SCAN 基于特征相似度而不是应用 K-means 来挖掘每个图像的最近邻。  第二步,将语义上有意义的最近邻用作先验,以训练模型将每个图像及其对应的邻居分为一类。模型通过损失函数来优化,该函数会在 softmax 之后最大化输出向量的点积,从而迫使网络产生一致且有判别度的(one-hot 向量)预测。

GATCluster: Self-Supervised Gaussian-Attention Network for Image Clustering (论文地址)

聚类是根据样本相似度将数据进行集群划分。传统的方法使用手工特征和特定领域的距离函数来度量相似度,但这种手工特征的表现非常有限。随后的工作将深度表示和聚类算法结合起来,但是当输入数据很复杂时,深度聚类的性能仍然会受到影响。一个有效的聚类,在特征层面必须同时包含高层判别性特征并获取对象语义信息。在聚类步骤上,必须避免使用将样本分配到单个或少数几个集群的算法,并且聚类需要高效地应用于大尺寸图像。
本文提出了 GATCluster ,它不需要进一步的后处理就可以直接输出语义聚类标签,其中学习到的特征是一个 one-hot 编码向量,以避免弱解。在平移不变性、可分离性最大化、熵分析和注意力映射约束下,GATCluster采用四种自学习任务进行无监督训练。

Associative Alignment for Few-shot Image Classification (论文地址)

小样本图像分类的目标是在训练样本很少的情况下,生成一个能够学习识别新的图像类的模型。一种流行的方法是元学习,它从包含基本类别的大量标记数据中提取公共知识,并用于训练模型。在之后训练该模型时仅用几个样本就可以从新的概念中对图像进行分类。元目标是找到一组好的初始权重集合,这些权重在训练学习新的概念时迅速收敛。有趣的是,最近的研究表明,不使用元学习的标准迁移学习——特征提取器首先在基本类别上进行预训练,然后在新的几个类别上对预训练网络进行微调,其性能与更复杂的元学习策略不相上下。然而,在微调过程中,为了避免过拟合,特征提取器对部分层的权重冻结会阻碍性能。


本文提出了一个含有两个步骤的方法来解决这个问题。第一步,利用特征提取器为新样本生成特征。然后在嵌入空间中使用相似性度量将每个样本的特征映射到其中一个基类。第二步是关联对齐,其中特征提取器被微调,使得新图像的嵌入向量更接近其对应的基础图像的嵌入向量。这既可以通过中心对齐来完成的,其中每个基类的中心和新类别之间的距离减小,也可以使用对抗性对齐,其中鉴别器迫使特征提取器在嵌入空间中对齐基础图像和新样本。

其他论文

三维计算机视觉以及机器人学

NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis (论文地址)

从2D图像合成3D视图是一个具有挑战性的问题,尤其是在稀疏地采样了输入2D图像的情况下。该任务先拍摄3D场景的2D图像集合(具有可选的相机姿势及其内参),接着用这些数据训练一个模型,然后使用训练后的模型,我们就可以渲染3D场景中未拍摄过的新2D视图。一种成功的方法是基于体素的表示法,该表示方法使用离散的网格表示3D场景。使用3D CNN可以预测3D体素中对应的RGB-alpha网格值。但是,由于这种基于体素的方法复杂度与空间分辨率成三次比,难以优化并且无法平滑地对场景表面进行参数化,因此它们的存储效率不高。计算机视觉社区的最新趋势是使用全连接神经网络将给定的3D场景表示为连续函数。因此,神经网络本身就是3D场景的压缩表示,使用2D图像集对其进行训练,然后用于渲染新的视图。但是,现有方法仍无法与基于体素的方法相匹敌。


NeRF(neural radiance fields)使用9层和256个通道的全连接网络将场景表示为连续的5D函数,其输入是单个连续5D坐标,即3D空间位置(x,y,z)和视角方向(θ,ϕ),其输出为RGB颜色和不透明度(输出密度)。为了合成给定的视图,渲染过程包括沿相机光心所在直线查询5D坐标,并使用经典的体素渲染技术将输出的颜色和密度投影到图像中。由于体素渲染是可以可微分的,因此优化表示所需的唯一输入就是已知影机姿势参数的一组图像。这样,NeRF能够有效地优化,以渲染具有复杂几何形状和外观的场景的逼真视图,并且在渲染图像和真实图像之间具有简单的重建损失,论文证明其结果优于先前的神经渲染和视图合成研究工作。

Towards Streaming Perception (论文地址)

诸如自动驾驶汽车之类的实际应用需要类似于人类的快速反应,通常为200毫秒。 在这种情况下,需要使用低延迟算法来确保安全运行。 但是,即使经常研究计算机视觉算法的延迟,也仅主要在离线环境中进行了研究。 在线视觉感知会带来完全不同的延迟需求。 因为到了算法完成处理特定图像帧的时间(例如200毫秒后),周围的环境就已经发生了变化,如下图所示。 这迫使感知需要预测未来,这是人类视觉的基本属性(例如,当棒球运动员击中快球时)。


为了开发更好的基准以反映现实情况,并使现有方法之间的比较更加容易。本文介绍了流感知的目标,即实时在线感知,并提出了一种新的元基准,该基准系统性地任何图像理解任务转换为流图像理解任务。该基准基于以下要点提出:流感知需要在任何时刻都了解世界的状态。因此,当新帧到达时,流算法必须报告世界的状态,即使它们尚未处理前一帧,也迫使它们考虑在进行计算时忽略的流数据量。具体来说,当比较模型的输出和真实标签时,使用时间而不是输入索引来进行对齐,因此,在处理相应的输入之前,模型需要在时间步t上给出正确的预测,即验证模型是否正确地将取Δt作为输入并处理,它只能使用t-Δt之前的数据来预测在时间t时刻对应于输入的输出。

Teaching Cameras to Feel: Estimating Tactile Physical Properties of Surfaces From Images (论文地址)

人在很小的时候就能够形成一个心理模型,基于与不同物品互动时的体验,将对物体的感知与其对应的触觉进行映射。当与新对象交互时,具有这种心理模型的自主智能体会是一个非常有价值的工具,特别是当一个简单的对象类别没有足够的信息来准确估计其触觉物理特性时。


为了更直接地模拟这样一个心理模型,本文提出的模型会直接估计物体的物理属性,使得物体的属性数据可被直接利用。首先,作者构建了一个表面图像序列和触觉特性测量数据集(数据集大小400+)。之所以对单个目标构建图像序列,是由于在估计表面特性时,人们常常无意识地移动头部来获取表面的多个视图,因此捕捉到的图像序列包含每个材料表面多个视角得到的图像。然后,他们提出了一个跨模态的框架来学习视觉线索到触觉特性的复杂映射。该模型的训练目标是在给定视觉信息的情况下,生成精确的触觉特性估计值。视觉和触觉信息通过各自单独的编码器网络嵌入到共享的隐空间中。然后,生成器网络从嵌入视觉矢量中估计触觉特性值。鉴别器网络学习预测触觉-视觉对是真实的还是合成的。在推理过程中,使用编码器-生成器对来推断输入图像的触觉特性。


Convolutional Occupancy Networks (论文地址)

三维重建是计算机视觉的一个重要问题,有着广泛的应用。对于理想的三维几何图形表示,我们需要能够,a)编码复杂的几何和任意的拓扑,b)放缩到大型场景,c)封装局部和全局信息,以及d)在内存和计算方面易于处理。然而,现有的三维重建表示法并不能满足所有这些要求。尽管最近的隐式神经表示在三维重建中表现出了令人印象深刻的性能,但由于使用简单的全连接网络结构,不允许在观测值中整合局部信息或引入诸如平移等变项的归纳偏置,因此存在一定的局限性。


Convolutional Occupancy Networks 使用卷积编码器和隐式占用解码器来合并归纳偏差并在三维空间中实现结构化推理。从而可以对单个对象进行更细粒度的隐式三维重建,能够放缩到大型室内场景,并能很好地从合成数据推广到真实数据。


其他论文

图像与视频合成

Transforming and Projecting Images into Class-conditional Generative Networks (论文地址)

GAN 能够生成多种多样不同类别的图像。例如,BigGAN,一个类条件生成对抗网络,给定一个噪声向量 z 和一个类别嵌入向量 c ,该模型能够生成对应类别的一张新图像。然后我们就可以通过编辑噪声向量生成的隐变量以及类别嵌入向量操纵生成的图像。但这个过程可以反过来吗?也就是说,给定一张输入图像,我们能否找到与该图像最匹配的潜在变量 z 和类别嵌入向量 c 呢?这个问题仍然颇具挑战性,因为许多输入图像不能由 GAN 生成。另外,目标函数具有许多局部极小值,搜索算法容易陷入此类区域。


为了解决这些问题,本文提出了 pix2latent 算法,主要包含两大创新点:估计输入图像的尺度变换,以及使用非局部搜索算法来寻找更好的解。如上图所示,在给定输入图像的情况下,pix2potent 首先找到最佳仿射变换,使得变换后的输入更可能由 GAN 生成,然后使用提出的 BasicCMA 优化方法将图像投影到隐空间中。接着对获得的隐变量进行编辑,并将其投影回图像空间,得到编辑后的图像,最后再用初始仿射变换的逆运算对其进行逆变换得到最终的生成图像。

Contrastive Learning for Unpaired Image-to-Image Translation (论文地址)

给定两组不同属性和模式的图像对训练集,例如马和斑马的图像对,非配对图像到图像的转换的目的是学习两种图像模式之间的变换函数,例如将马转换为斑马,反之亦然,这一过程中保留了诸如姿态或大小等敏感信息而无需确保两种图像模式之间的一一匹配。现有的方法如 CycleGAN 迫使模型能够将转换后的图像变换回原始图像。但是这样的方法假设模型能够学到一个双射变换,这通常含有过多限制,因为一个给定的变换后的图像可能有多种样式的源图像。理想的损失应该在不同样式下保持不变,但要能够做到区分敏感信息。


Contrastive Unpaired Translation (CUT) 就是要学习这种嵌入空间。除了标准的 GAN 损失,其中生成器要训练生成足够真实的转换图像,而鉴别器试图区分转换图像和真实图像。还要增加一个额外的损失,用来迫使网络对输入图像与转换图像的对应图像块生成相似的嵌入向量。该损失在优化时采用对比损失,即拉近两个对应图像块嵌入向量的距离,同时拉远给定图像块和随机抽样图像块嵌入之间的距离(只使用同一输入图像的内部区块,其他图像的区块会降低性能)。

Rewriting a Deep Generative Model (论文地址)

GAN 能够对数据分布中丰富的语义和物理规则进行建模,但是到目前为止,我们仍旧搞不明白这些规则是如何在网络中编码的,也无从知晓如何改变某个规则。本篇论文则引入了一个新的问题:操纵由深度生成网络模型编码的特定规则。也就是说,给定一个生成模型,其目的是调整其权重,使调整后的模型遵循新的规则,生成遵循新规则集的图像,如下图所示。


通过将网络中的每一层视为一个关联性存储器(该存储器将潜在生成规则存储为隐藏特征上的一组键值关系),我们就可以通过定义一个受到约束的优化来修改模型,这个受约束优化在关联性存储器中添加或编辑一个特定规则,同时尽可能保留模型中现有的语义关系。论文直接通过度量和操纵模型的内部结构来实现这一点,而不需要任何新的训练数据。

Learning Stereo from Single Images (论文地址)

给定两张对应的图像,视差匹配的目标是估计每个像素对应的位置从第一张图像的视角到第二个视角之间的每像素水平位移(即视差)。虽然全监督方法可以得到很好的结果,但是一对视察图像之间的精确真实视差往往很难获得。一种可能的替代方法是使用合成数据进行训练,然后使用有限数量的实际标记数据进行微调。但是如果没有充足的真实数据来进行微调,这样的模型在实际应用中还是无法得到很好的视差估计效果。


该文提出了一种新颖的、全自动的视差估计训练流程,通过使用图像深度估计网络,该方法可以由已知深度信息的非结构化单幅图像生成视差估计训练数据,这样就无需人工合成数据或真实视差图像对即可进行训练。首先,利用深度视差,通过前向形变操作将给定的左输入图像转换为合成的右图像。然后,利用视差图像对,对视差估计网络进行有监督的训练,从而得到一个泛化的模型。

What makes fake images detectable? Understanding properties that generalize (论文地址)

虽然 GAN 生成图像的质量已经达到了令人颇感惊异的水平,但是经过训练的用于检测假图像的深层网络仍然可以识别这些生成图像中的细微伪影,并且鉴别真假图像的网络还在不同数据集和不同方法训练得到的许多 GAN 模型中找到了相同的伪影。本文旨在可视化和理解哪些部分在各类模型之间是共有的,并且容易在不同的场景中都呈现出来并被检测出。


由于全局面部结构在不同的生成器和数据集之间可能会有所不同,因此相较而言,生成图像的局部面片更加确定且更可能产生冗余的伪影。为此,使用一个基于区块的全卷积分类器来关注局部区块而不是全局结构。然后,可以使用分类器来可视化和分类在各种测试数据集中最能指示真实或虚假图像的区块。另外,可以对生成的图像进行操作以夸大假图像的特征属性。

其他论文

视觉与语言(V&L)

Connecting Vision and Language with Localized Narratives (论文地址)

将视觉和语言联系起来的一种常用方法是使用图像标题,其中每个图像都与人类所写的文本标题配对,但这种图像与文字的联系仅限于完整的图像尺度,其中的文本描述了整个图像。为了改进这种弱关联,有人就将图片标题的特定部分和图像中的目标框联系起来。但是,这种关联仍然非常稀疏,大多数对象和单词都没有对应的目标框,而且标注过程可能会非常昂贵耗时。


本文提出了一种新的有效的多模态图像标注形式,称之为定位叙事。定位叙述是通过要求标注者用他们的声音描述一个图像,同时将鼠标悬停在他们描述的图像区域上而生成的。例如,如上图所示,标注者在说“woman”时,会用鼠标表示其所在的空间范围,从而为这个名词提供了视觉基础。接着,他们把鼠标从女人身上移到气球上,沿着气球的绳子,说“holding”,这就为这种动词关系提供了直接的视觉基础。他们还描述了“clear blue sky”和“light blue jeans”等属性。由于语音与鼠标指针同步,因此可以确定描述中每个单词对应的图像位置。这为每个单词提供了以鼠标跟踪片段形式的密集视觉特征。这一丰富的标注方法具有多种形式(图像、文本、语音和位置),可用于文本到图像生成、视觉问答和语音驱动的环境导航等不同的任务。或者为了对任务进行更精细的控制,比如对图像的特定部分进行说明,视力不好的人可以通过将手指悬停在图像上来获得特定部分的描述。

UNITER: UNiversal Image-TExt Representation Learning (论文地址)

视觉与语言(V&L)任务,如视觉问答(VQA)都依赖于多模态联合嵌入来弥合图像和文本中视觉线索与文本线索之间的语义鸿沟。但是这种表示通常是为特定的任务定制的,并且需要特定的网络体系架构。为了学习可用于所有 V&L 下游任务的通用联合嵌入,本文介绍了一种大规模联合多模态嵌入预训练模型 UNITER ,如下图所示。基于 transformer 模型,UNITER 接受了4个任务的预训练:基于图像的蒙版语言建模(MLM),即使用图像和文本特征来恢复随机蒙版的单词;以文本为条件的蒙版区域建模(MRM),即重构给定图像的某些区域;图像文本匹配(ITM),即预测图像和文本实例是否配对;以及单词区域对齐(WRA),即学习最佳变换找到单词和图像之间的最佳对齐。要在下游任务上使用 UNITER ,首先要将其重新构造为分类任务,然后可以在网络输出的[CLS]特征后添加分类器并使用交叉熵损失进行训练。


Learning to Learn Words from Visual Scenes (论文地址)

视觉和语言任务(V&L)的标准方法是学习一个共同的嵌入空间,但这种方法效率低下,往往需要上百万个例子来学习,对语言的自然构成结构泛化较差,所学嵌入在推理时无法适应新单词。因此,本文提出让网络学习得到单词嵌入的过程,而非学习单词嵌入。


该模型基于 transformer 结构,在每一次迭代中,模型接收一个图像语言对,然后元学习一个策略来从中获取词表示。这就使得我们能够在推理时获得新单词的表示,并且能够更鲁棒地推广到新的描述任务中。具体来说,每一个任务都被定义为一个语言习得任务,其中包含训练样本和测试样本,可通过测试样本来对由训练样本中习得的语言进行评估。例如,在上图中,模型需要从训练样本中获取单词“chair”,这个单词以前从未见过。元训练在前向传递中完成,并使得模型指向训练示例中正确的单词“chair”,整个模型的训练使用匹配损失来完成。经过多种场景与任务的训练,该模型在推理过程中能够很快地适应新的任务。

其他论文

结语

遗憾的是,论文的数量使得整个摘要工作既困难又费时。所以对于其余的论文,我将简单地列出一些我所遇到的论文标题,如果读者对这些主题感兴趣可自行深入研究。


AI研习社是AI学术青年和AI开发者技术交流的在线社区。我们与高校、学术机构和产业界合作,通过提供学习、实战和求职服务,为AI学术青年和开发者的交流互助和职业发展打造一站式平台,致力成为中国最大的科技创新人才聚集地。

如果,你也是位热爱分享的AI爱好者。欢迎与译站一起,学习新知,分享成长。

]]>
人工智能开发者 //www.xyschoolife.com/category/yanxishe/4aolHsHuZUE54rMt.html#comments Mon, 28 Dec 2020 18:24:00 +0800
跟着吴恩达老师学习机器学习,Python笔记分享! //www.xyschoolife.com/category/yanxishe/x2ShVEvncHSwlhRz.html 译者:AI研习社(成语风

双语原文链接:A Full-Length Machine Learning Course in Python for Free


吴恩达在斯坦福大学讲授的机器学习课程堪称Coursera上最具人气的课程。我之前试听了好几门别的机器学习课程但我觉得他的在拆解概念使之变得易于理解方面做得最好。

但是我想说这里有一个问题,那就是这门课程的所有作业和演示都是用Matlab做的。我是一个Python使用者而且我不想学Matlab.因此我只在课上学习概念然后自己用Python实现这些算法

我用自己的方式解释所有的算法(以我能做到的最简洁的水平)然后演示之前几篇文章的几乎所有算法开发过程。我觉得我可以把它们全部总结到一页纸的篇幅,这样可以让学的人更容易跟上一点。有时这点点帮助会起很大的作用。

如果你想要听吴恩达的机器学习课程,你是可以免费旁听完整课程想多少次就多少次的。

我们开始吧!

线性回归

最简单的机器学习算法。此算法是基于一个高中讲的很基本的直线公式:

Y = AX + B

没忘吧?忘了也无所谓。这是一个很简单的公式。这是解释为什么这个简单公式可以被用来做预测的完整文章。

纯手撸python线性回归算法:逐步版

上面这篇文章只在单个变量的数据集上有用。但是在现实生活中绝大多数数据集有多个变量。使用同一个简单公式你可以开发出多变量的算法。

python多元线性回归算法逐步演示

多项式回归

这个是线性回归的姊妹。但是多项式回归能够更精准地找出输入变量和输出变量之间的关系,甚至是在这个关系不是线性的时候、

手撸python多项式回归

对数回归(罗吉斯回归)

对数回归是在线性回归基础上开发的。他也用到了同一个简单的直线方程。这就是一个广泛使用的、强大的、流行的机器学习算法了。这可以用来预测分类变量。以下文章逐步解释了对数回归用于二分类问题的开发过程。

完整手撸python对数回归算法:逐步版

基于二分类的概念,我们就可以开发出用于多分类任务的对数回归。同时,Python有一些优化函数可以让你快速完成计算。在下文中我从这两个思路出发完成了一个数字识别数据集的多分类任务。

手撸python多分类算法项目实战:逐步版

神经网络

神经网络如今变得越来越流行。你都读到这篇文章了,我猜你肯定听说过它。

一个神经网络在更复杂的数据集上解决的快得多。这也涉及了同一个直线方程但是这个算法的开发要比前几个要复杂的多。如果你听了吴恩达的课,你应该已经了解了这些概念。不然,我会尽量细地拆解这个概念。希望能帮到你:

完整手撕python神经网络算法

学习曲线

如果你把全部的时间了开发算法上但是它却不按你设想的那样去解决问题怎么办。你该怎么修好它?首先你需要找到问题出在哪里。是算法有错,还是数据不足以训练模型还是你需要更多特征?看起来问题好多哦是不是?但如果你不首先解决问题在哪,然后朝着正确的方向前进,你将会浪费无数时间。以下是如何找出问题的帮助:

如果你的ML算法表现不佳

另一方面如果数据集偏斜太厉害,那又是另一个挑战。比如你试图解决一个分类问题,95%是阳性结果只有5%是阴性结果。这么一搞你就算是瞎猜所有的预测是阳性你也有95%的准确率。另一方面,如果这个ML算法看起来有90%准确率那可真是够低效的吧?连瞎猜都比它准。下文就是几个处理这种问题的点子:

精确率,召回率,F度量概念全解

K均值聚类

最老牌的流行无监督学习算法。这个算法不想前面几个一样做出预测。他只是基于数据内部的相似性进行归类。这更像是试图更有效地理解当前的数据。然后当算法收到新数据的时候,基于它的特性,它会决定这个新数据被归类到哪一个簇。本算法还有别的重要应用。他可以用来给图片降维。

为啥我们要给图片降维?

你想啊,当我们需要输入大量图片进入算法来训练一个图片分类模型的时候。超高分辨率的图片会输入沉重的负担并且拖慢整个训练过程(认出这是什么图哪需要这么高分辨率!)。这种情况下一个维度更低的图片就可以让我们更快处理完。这只是举一个例子。你或许可以想见很多同样原因的别的用途。

下文是一个开发K均值聚类算法的完整教程,以及如何使用这个算法来给图片降维。

完整手撕python K均值聚类算法

异常检测

这又是一个机器学习核心任务。用于信用卡欺诈检测,制造缺陷品检测,甚至是癌细胞检测。用高斯分布(正态分布)办法或者简单到一个概率公式就可以搞定。下文是一个完整的逐步指导文章:用高斯分布的概念来开发异常检测算法

完整手撕python异常检测算法:逐步指导

如果你需要小小复习一下高斯分布法,看这篇文:

单元和多元高斯分布:清晰理解带图示

推荐系统

推荐系统无处不在。如果你在1688买了什么东西,它就会给你推荐一些你可能会喜欢的别的产品。B站也会给你推荐你可能会喜欢的视频,QQ会给你推荐你可能认识的人。你看是不是到处都有。

吴恩达的课程教你如何用那在线性回归里面用的同一个直线方程开发一个推荐系统。这就是逐步演示怎么开发一个电影推荐系统的算法

完整手撕python推荐系统:逐步版

结语

希望这些文章能帮到一些人机器学习起步,最好的学习办法是跟着做,绝大多数算法都是基于一个非常简单的公式。我看到有人讲机器学习或者人工智能需要很重度的编程知识或者困难的数学,这倒未必。用简单的代码,基础数学和统计学知识你就可以做到很多事了。同时不停地提高你的编程水平从而胜任更复杂的任务。

如果你对机器学习感兴趣就花一点时间,在这上面花点功夫。


AI研习社是AI学术青年和AI开发者技术交流的在线社区。我们与高校、学术机构和产业界合作,通过提供学习、实战和求职服务,为AI学术青年和开发者的交流互助和职业发展打造一站式平台,致力成为中国最大的科技创新人才聚集地。

如果,你也是位热爱分享的AI爱好者。欢迎与译站一起,学习新知,分享成长。

]]>
人工智能开发者 //www.xyschoolife.com/category/yanxishe/x2ShVEvncHSwlhRz.html#comments Sat, 26 Dec 2020 09:16:00 +0800
孤立森林:大数据背景下的最佳异常检测算法 //www.xyschoolife.com/category/yanxishe/sAcS8FsU2EwCSRAi.html 译者:AI研习社(porchy

双语原文链接:Isolation Forest is the best Anomaly Detection Algorithm for Big Data Right Now


孤立森林或者"iForest"是一个优美动人,简洁优雅的算法,只需少量参数就可以检测出异常点。原始论文中只包含了最基本的数学,因而对于广大群众而言是通俗易懂的。在这篇文章中,我会总结这个算法,以及其历史,并分享我实现的代码来解释为什么iForest是现在针对大数据而言最好的异常检测算法。

为什么iForest是现在处理大数据最好的异常检测算法

总结来说,它在同类算法中有最好的表现。iForest在多种数据集上的ROC表现和精确度都比大多数其他的异常检测算法要好。我从Python Outlier Detection package的作者们那里取得了基准数据,并在Excel中逐行使用绿-红梯度的条件格式化。用深绿色来标识那些在这个数据集上有最好的表现的算法,并用深红色来标识那些表现得最差的:


绿色表示""而红色表示""。我们看到IForest在很多的数据集以及总体的角度上是领先的,正如平均值,中位数,标准差的颜色所表示。图源:作者。数据源:https://pyod.readthedocs.io/en/latest/benchmark.html

我们看到IForest在很多的数据集上以及总体上的表现是领先的,正如我计算出来的平均值,中位数,标准差的颜色所表示的一样。从precision@N(最重要的N项指标的准确度)的表现来看iForest也能得出同样的优秀结果。

图源:author.Data

源:https://pyod.readthedocs.io/en/latest/benchmark.html

可扩展性。iForest以它表现出来的性能为标准而言是最快的算法。可以预料到的是,PCA和基于频数直方图的异常点检测算法(HBOS)在所有的数据集上都有更快的速度。

k近邻算法(KNN)则要慢得多并且随着数据量变多它会变得越来越慢。

我已经成功地在一个包含一亿个样本和三十六个特征的数据集上构建出孤立森林,在一个集群环境中这需要几分钟。而这是我认为sklearnKNN算法没办法做到的。


图源:author.Data

源:https://pyod.readthedocs.io/en/latest/benchmark.html

算法要点/总结

我通过下面的综述来非常简洁地总结原来有10页内容的论文:

  1. 大多数其他异常检测(OD)算法尝试去建立"正常"数据的范围,从而把不属于这个正常范畴的个体标注为不正常。iForest则直接通过利用异常点的隐含特质来把他们分隔开:他们在协变量集上会拥有不寻常的值。

  2. 现有的方法由于计算成本的原因只能被用在低维数据或者小数据集上。一个恰当的例子是:你会在大数据上使用sklearn.neighbor.KNeighborsClassifier吗?

  3. 此外,iForest只需要很少的常量和很低的内存需求。也就是说,低开销。特别地:外部节点的数量是n,因为每个观测数据,n,都会被孤立。内部节点的总数显然是n-1,从而总体节点数会是2n-1。因此,我们可以理解为什么需要的内存是有界的,而且随着样本数量n线性增加。

孤立树节点的定义: T 或是一个没有子节点的叶子节点,或者是一个经过检验的内部节点,并拥有两个子节点(Tl,Tr)。我们通过递归地进行下述过程来构造一棵iTree:随机选择一项特征q和一个分割值p来划分X,直到发生下列情形之一为止:(i)树到达了限制的高度,(ii)所有样本被孤立成一个只有他们自己的外部节点,或者(iii)所有数据的所有特征都有相同的值。

路径长度:一个样本x的路径长度h(x)指的是从iTree的根节点走到叶子节点所经历的边的数量。E(h(x))是一组孤立树的h(x)的平均值。从这个路径长度的平均值,我们可以通过公式E(h(x)):s(x, n) = 2^[^[− E(h(x)) / c(n)]来得到一个异常分数s(x,n)。基本上,s和E(h(x))之间存在一个单调的关系。(想知道细节的话请查阅文末的附录,有一张图描述了他们之间的关系)。这里我不会讨论c(n),因为对于任意给定的静态数据集而言它是一个常数。

用户只需要设置两个变量:孤立树的数量和训练单棵树的子采样大小。作者通过对用高斯分布生成的数据做实验来展示了只需要少量的几棵树和少量的子采样数量就可以使平均路径长度很快地收敛。

小的子采样数量(抽样的抽样)解决了swampingmasking问题。造成这两个问题的原因是输入的数据量对于异常检测这个问题来说太大了。Swamping是指由于某个"正常"的样本点被异常点所包围而被错误地标注为"异常"masking则是相反的情况。也就是说,如果构建一个树的样本中有很多异常点,一个正常的数据点反而会看起来很异常。 作者使用乳房x线照相的数据来作为这个现象的一个例子。

小的子采样数量使得每一棵孤立树都具有独特性,因为每一次子采样都包含一组不同的异常点或者甚至没有异常点。

iForest不依赖距离或者密度的测量来识别异常点,因此它计算成本低廉且有较快的速度。这引出了下一个议题。

线性的时间复杂度,On)。不正规地说,这意味着运行时间随着输入大小的增加最多只会线性增加。这是一个非常好的性质:


算法历程

见多识广的读者应该知道一个优秀的新想法出现与它的广泛应用之间可能会有数十年之久的间隔。例如,逻辑函数在1845年被发现,在1922年被重新发现(更多信息可参考)而到如今才被数据科学家频繁地用于逻辑回归。在最近几十年,一个新想法和它被广泛应用的间隔时间已经变得更短了,但这仍然需要一段相对较为漫长的时间。iForest最先在2008年公开,但直到2018年后期才出现了可行的商业应用。 这是其时间线:

12/2008 -iForest的原始论文发布(论文)

07/2009 -iForest的作者们最后一次修改其代码实现(代码)

10/2018 -h2o小组实现了Python版和R版的iForest(代码)

01/2019 -PyOD在Python上发布了异常检测工具包(代码,论文)

08/2019 -Linkedln 工程小组发布了 iForest的Spark/Scala版本实现(代码,通讯稿)

代码实现

由于这篇文章是关于大数据的,我采用了AWS的集群环境。这里省略的大部分的脚手架(软件质量保证和测试之类的代码)的代码。如果在配置AWS集群环境中需要帮助,可以参考我的文章:如何为SparkSQL搭建高效的AWS

EMR集群和Jupyter Notebooks

我发现iForest能很轻易且快捷地处理750万行,36个特征的数据,只需几分钟就完成计算。

Pythonh2o):


import h2o # h2o automated data cleaning well for my datasetimport pkg_resources################################################################### print packages + versions for debugging/future reproducibility ###################################################################dists = [d for d in pkg_resources.working_set] # Filter out distributions you don't care about and use.dists.reverse()
dists################################################################### initialize h2o cluster and load data##################################################################h2o.init() # import pyarrow.parquet as pq # allow loading of parquet filesimport s3fs                  # for working in AWS s3s3 = s3fs.S3FileSystem()df = pq.ParquetDataset('s3a://datascience-us-east-1/anyoung/2_processedData/stack_parquetFiles', filesystem=s3).read_pandas().to_pandas()# check input data loaded correctly; pretty print .shapeprint('(' + '; '.join(map('{:,.0f}'.format, 
                          df.shape)) + ')')# if you need to sample datadf_samp_5M = df.sample(n=5000000, frac=None, replace=False, weights=None, random_state=123, axis=None)# convert Pandas DataFrame object to h2o DataFrame objecthf = h2o.H2OFrame(df)# drop primary key columnhf = hf.drop('referenceID', axis = 1) # referenceID causes errors in subsequent code# you can omit rows with nas for a first passhf_clean = hf.na_omit()# pretty print .shape with thousands comma separatorprint('(' + '; '.join(map('{:,.0f}'.format, 
                          hf.shape)) + ')')from h2o.estimators import H2OIsolationForestEstimatorfrom h2o.estimators import H2OIsolationForestEstimator
fullX = ['v1', 
         'v2', 
         'v3'        ]# split h2o DataFrame into 80/20 train/testtrain_hf, valid_hf = hf.split_frame(ratios=[.8], seed=123)# specify iForest estimator modelsisolation_model_fullX = H2OIsolationForestEstimator(model_id = "isolation_forest_fullX.hex", seed = 123)
isolation_model_fullX_cv = H2OIsolationForestEstimator(model_id = "isolation_forest_fullX_cv.hex", seed = 123)# train iForest modelsisolation_model_fullX.train(training_frame = hf, x = fullX)
isolation_model_fullX_cv.train(training_frame = train_hf, x = fullX)# save models (haven't figured out how to load from s3 w/o permission issues yet)modelfile = isolation_model_fullX.download_mojo(path="~/", get_genmodel_jar=True)print("Model saved to " + modelfile)# predict modelspredictions_fullX = isolation_model_fullX.predict(hf)# visualize resultspredictions_fullX["mean_length"].hist()



如果你使用iForest来验证你的带标签数据,你可以通过比较数据集中的正常数据的分布,异常数据的分布,以及原来数据集的分布来进行进一步推理。例如,你可以查看原本数据集中不同的特征组合,像这样:


N = df.count()
df[['v1', 'v2', 'id']].groupby(['v1', 'v2']).count() / N
df[['v1', 'v3', 'id']].groupby(['v1', 'v3']).count() / N
...


并与使用iForest得出的正常/异常数据集进行比较。正如下面所展示的这样:


################################################################### column bind predictions from iForest to the original h2o DataFrame##################################################################hf_X_y_fullX = hf.cbind(predictions_fullX)################################################################### Slice using a boolean mask. The output dataset will include rows # with column value meeting condition##################################################################mask = hf_X_y_fullX["label"] == 0hf_X_y_fullX_0 = hf_X_y_fullX[mask,:]
mask = hf_X_y_fullX["label"] == 1hf_X_y_fullX_1 = hf_X_y_fullX[mask,:]################################################################### Filter to only include records that are clearly normal##################################################################hf_X_y_fullX_ml7 = hf_X_y_fullX[hf_X_y_fullX['mean_length'] >= 7]
hf_X_y_fullX_0_ml7 = hf_X_y_fullX_1[hf_X_y_fullX_0['mean_length'] >= 7]
hf_X_y_fullX_1_ml7 = hf_X_y_fullX_3[hf_X_y_fullX_1['mean_length'] >= 7]################################################################### Convert to Pandas DataFrame for easier counting/familiarity##################################################################hf_X_y_fullX_ml7_df = h2o.as_list(hf_X_y_fullX_ml7, use_pandas = True)
hf_X_y_fullX_0_ml7_df = h2o.as_list(hf_X_y_fullX_0_ml7, use_pandas = True)
hf_X_y_fullX_1_ml7_df = h2o.as_list(hf_X_y_fullX_1_ml7, use_pandas = True)################################################################### Look at counts by combinations of variable levels for inference##################################################################hf_X_y_fullX_ml7_df[['v1', 'v2', 'id']].groupby(['v1', 'v2']).count()
hf_X_y_fullX_0_ml7_df = h2o.as_list(hf_X_y_fullX_0_ml7, use_pandas = True)...# Repeat above for anomalous records:################################################################### Filter to only include records that are clearly anomalous##################################################################hf_X_y_fullX_ml3 = hf_X_y_fullX[hf_X_y_fullX['mean_length'] < 3]
hf_X_y_fullX_0_ml3 = hf_X_y_fullX_1[hf_X_y_fullX_0['mean_length'] < 3]
hf_X_y_fullX_1_ml3 = hf_X_y_fullX_3[hf_X_y_fullX_1['mean_length'] < 3]################################################################### Convert to Pandas DataFrame for easier counting/familiarity##################################################################hf_X_y_fullX_ml3_df = h2o.as_list(hf_X_y_fullX_ml3, use_pandas = True)
hf_X_y_fullX_0_ml3_df = h2o.as_list(hf_X_y_fullX_0_ml3, use_pandas = True)
hf_X_y_fullX_1_ml3_df = h2o.as_list(hf_X_y_fullX_1_ml3, use_pandas = True)


我完整地实现了上面的代码并把我的数据输出到Excel中,很快就可以得到如下的一些累积分布函数:

图源:作者自己的作品。绿线表示标识为1的数据,即正常样本红线

代表的是标识为0的样本,被认为有可能是异常的。


参考文献

  • F. T. Liu, K. M. Ting, and Z.-H. Zhou.孤立森林. 在:第八届IEEE数据挖掘国际会议的期间(ICDM' 08),Pisa,Italy,2008,pp.413-422.[代码]这篇文章在IEEE ICDM'08荣获了最佳理论/算法论文奖的第二名

  • Zhao, Y., Nasrullah, Z. and Li, Z., 2019. PyOD:一个可量化的异常检测Python工具箱.Journal of machine learning research (JMLR) , 20(96),pp.1-7.


AI研习社是AI学术青年和AI开发者技术交流的在线社区。我们与高校、学术机构和产业界合作,通过提供学习、实战和求职服务,为AI学术青年和开发者的交流互助和职业发展打造一站式平台,致力成为中国最大的科技创新人才聚集地。

如果,你也是位热爱分享的AI爱好者。欢迎与译站一起,学习新知,分享成长。

]]>
人工智能开发者 //www.xyschoolife.com/category/yanxishe/sAcS8FsU2EwCSRAi.html#comments Wed, 23 Dec 2020 15:01:00 +0800
因果推理“三问”:是什么?为什么需要?如何使用? //www.xyschoolife.com/category/yanxishe/dCV09bFAx0q8JC0i.html 译者:AI研习社(听风1996

双语原文链接:Causal Inference: What, Why, and How


作为一名经济学博士,我致力于寻找某些变量之间的因果关系,用来完成我的论文。因果关系强大到可以让人们有足够的信心去做决策、防止损失、求解最优解等。在本文中,我将讨论什么是因果关系,为什么需要发现因果关系,以及进行因果推理的常用技巧。

1. 什么是因果关系?

因果关系描述的是两个变量之间的关系,即一个变量如何诱发另一个变量的发生。它比相关关系要强得多,因为相关关系只是描述两个变量之间的共同运动模式。通过绘制散点图,可以很容易地观察到两个连续变量的相关性。对于分类变量,我们可以绘制柱状图来观察其关系。要知道两个连续变量之间的确切相关性,我们可以使用皮尔逊相关公式。皮尔逊(Pearson)的相关性介于-1和1之间,绝对值越大表示相关性越强。正相关意味着两个变量在同一方向共同运动,反之亦然。

但对于因果关系,要把握的关系就要复杂得多。为了知道变量A是否引起了变量B的发生,即干预A是否引起了结果B,我们需要保持所有其他变量不变,以隔离和量化干预的效果。我们需要控制的其他变量称为混杂变量,即与干预和结果都相关的变量:

有关混淆变量的例子

在上图中,我举了一个混淆变量,其中年龄与戒烟率和致死率都是正相关的。年龄越大,死亡率越高,但吸烟率越低。如果我们在估计吸烟对死亡率的影响时没有控制年龄,我们可能会观察到吸烟会减少死亡率这样荒谬结果。我们不能在这里得出因果关系,因为我们没有控制所有混杂变量。关于这个例子的更多细节,你可以阅读我讨论 "辛普森悖论 "的文章:

所谓的“辛普森悖论”

在得出因果效应的结论时,我们需要记住的另一个因素是选择偏差。为了隔离治疗效果,我们需要确保治疗组单位是在人群中随机选择的。这样,我们在治疗后观察到的差异不是因为其他因素,而是因为治疗。举个例子,当一家超市想估计提供优惠券对提高整体销售额的影响时。如果超市只把优惠券传递给在店里购物的顾客(干预组),发现他们比没有收到优惠券的顾客(对照组)购买了更多的商品,那么市场由于选择偏差而无法在此处得出因果关系。没有将顾客随机选择到治疗组中。他们之所以在这里,是因为他们在超市购物,这表明与对照组相比,即使没有优惠券,他们也更可能从超市购买商品。比较来自治疗组和对照组的结果变量在这里将毫无意义。    

为什么要估计因果关系?

得到因果关系是如此复杂的,何必还要呢?我们为什么不直接使用相关性呢?我们知道相关性在进行预测时是有用的。如果我们知道变量A与变量B有很强的相关性,那么知道变量A的值就可以帮助我们预测变量B的值。在业务环境中,我们可以利用相关性来预测给哪些客户群体做促销,这样我们就可以根据客户过去的行为和其他客户特征来提高转化率。但是,即使是最准确的预测模型,也不能得出结论,当你观察到客户转化率提高了,就是因为促销。我们需要设计实验或进行准实验研究,才能得出因果关系并量化干预效果。在这个例子中,因果推理可以告诉你,提供促销活动是否增加了客户转化率,以及增加了多少。因此,与相关性相比,因果关系能给决策者更多的指导和信心。

如何进行因果推断?

1、不同的干预效应

估计因果效应与估计你的利益结果变量的干预效应是一样的。根据具体的研究或业务问题,可以选择不同的治疗效果进行估计。假设Y是结果变量,其中Y⁰是没有干预的结果,Y¹是有干预的结果。T为虚拟变量,表示单位i是在干预组(T=1)还是对照组(T=0):  

  • 平均干预效应(ATE): 

平均而言,干预组和对照组之间的结果变量有何不同?  

 

 平均干预效应

  • 平均干预效应(ATT):

平均而言,干预组中的单位在接受和不接受干预的情况下,结果变量的差异是什么?

平均干预效果 

在这里,E(Y¹|T=1)是干预组单位的预期结果,它是可观察的。然而,E(Y⁰|T=1)是不可观察的,因为它是假设的。一个单位只能有Y⁰和Y¹这两种结果中的一种,这取决于这个单位所在的组别。如果这个单位已经接受了干预,我们可以观察Y¹,并使用不同的技术来估计Y⁰这个反事实变量。我将在后面讨论不同的技术。

  • 条件平均干预效应(CATE):

  

条件平均干预效果 

条件平均干预效果是应用某些条件x来估计ATE。在某些情况下,干预会对不同的子组产生不同的影响,并且ATE可以为零,因为这些效果被抵消了。CATE可以用于估计子组之间的异质效应。 

  • 个体干预效应(ITE)

个体干预效果

个体干预效应与CATE相同,应用的条件是单位是单位 i。

2,假设

如上所述,在声明因果关系之前,需要采取许多措施。在进行因果推断时,请记住以下假设: 

  • 无选择偏差:每个单位都有同等可能被分配到干预组。

  • 在估计干预效果时,没有未控制的混淆变量。

  • 结果变量Y是可观察的,它可以用来估计干预后的干预效果。

  • SUTVA:稳定单位处理值假设。这个假设有两个方面。对于实验中的任何单位: 

1、单位i接受干预不会影响其他单位的结果,即无网络效应。
2、如果单位i在干预组中,其接受的干预与干预组中的所有其他单位一样,即只有一个种干预类型。

3、工作流程

因果推理最大的挑战是,我们只能观察到每个单位i的Y¹或Y⁰,我们永远无法完美测量每个单位i的干预效果,为了应对这个问题,我们需要为干预组找到完美的对照组,使两组之间唯一的区别就是干预。这可以通过运行随机化实验或在随机化不切实际的情况下寻找匹配的干预组和对照组(准实验)来实现。以下是我认为有用的工作流程:

随机对照试验(RCT)

如果总能随机分出干预组和对照组,生活就会轻松很多! 随机分配干预后,我们可以分别估计治疗组和对照组的结果变量,其差异就是平均治疗效果(ATE)。由于单位是随机选入干预组的,所以干预组和对照组的单位之间唯一的区别就是是否接受过干预。因此,结果变量的差异就是干预的效果。但是,有时由于网络效应或技术问题,无法将干预组和对照组随机化。或者把用户分成两组成本太高。例如,在估计促销活动的效果时,如果将部分用户排除在促销活动之外,会对用户的满意度产生负面影响。在这种情况下,我们可以进行准实验,也就是不依赖随机分配的实验。

差异(DID):

DID通常是在对照组和干预组之间存在已存在差异时使用的。但是,我们认为干预组和对照组的结果变量增长趋势没有显著差异(平行趋势假设)。也就是说,按照下表的定义,两组在结果变量上的差异在治疗前后是相同的,d_post=d_pre:

干预组的结果差异为d_t,定义为Y(1,1)-Y(1,0),对照组的结果差异为d_c,定义为Y(0,1)-Y(0,0)。d_t和d_c之间的差值为DID,即干预效果,如下图所示。

DID = d_t-d_c=(Y(1,1)-Y(1,0))-(Y(0,1)-Y(0,0))  
平行趋势假设是一个很强的假设,当违背这个假设的时候,DID估计就会出现偏差。

匹配

尽管不可能进行随机实验,但我们可以找到完美匹配的干预组,在不进行干预的情况下量化结果变量。我们可以根据interests特征构建一个人工对照组。例如,我们可以在一个城市给予促销活动,并与其他没有促销活动的城市进行结果变量的比较。这些城市除了促销活动外,其他因素都是相似的。这就像一个横向比较。

我们可以使用的另一种方法是时间序列比较,这叫做switch-back检验。例如,我们可以选择一个城市,在一周内给出促销活动,然后将结果变量与最近一段时间没有促销活动的这个城市进行比较。差异将是促销的效果。

这些技术在面对网络效应时相当有用。使用横向比较或时间序列比较,我们不需要把一个市场分成不同的群体。因此,我们不需要担心同一市场中群体之间的溢出效应。在对整个市场进行比较时,必须确保对照组和干预组市场之间的唯一差异是干预。

内生性

当独立变量X(干预)与回归中的误差项相关,从而使估计结果(干预对结果变量Y的影响)产生偏差时,就会产生内生性。引起内生性的方式有三种:

  • 遗漏变量:
    当我们没有将混淆变量作为控制变量纳入回归,或无法量化混淆变量时。例如,如果我们想估计教育(干预)对未来收入(结果变量)的影响,就需要在回归中加入一个称为 "能力 "的混淆变量。作为一个混淆变量,"能力 "会增加接受高等教育的机会,增加获得高收入的机会。但是,由于我们无法轻易地量化 "能力",所以很难将其纳入回归中。简单地用 "学历 "对 "收入 "进行回归,会使处理效果出现偏差。如果我们能够量化混淆变量,我们就可以将它们全部纳入回归中。如果不能,我们需要使用回归不连续或工具变量来进行随意推断。我将在后面讨论它们。
    如果我们可以量化混杂变量,则可以将它们全部包含在回归中。如果不是,我们需要使用回归不连续性或工具变量来进行因果推断。稍后再讨论。  

  • 反向因果关系:
    当X可以影响Y,Y也可以影响X时,就存在反向因果关系。例如,如果我们在超市给在这家超市购物的顾客发放优惠券。优惠券会增加收到优惠券的顾客的销售额,这些顾客会更多的出现在超市,也更有可能收到更多的优惠券。循环下去。在应对这个问题的时候,我们需要在中间引入一些随机化。比如,我们并不是给所有出现在超市的顾客发放优惠券,而是随机选择一些顾客发放优惠券,并估算出差异。引入一定程度的随机化会减少估计的偏差。

  • 选择偏差:
    如上所述,如果具有某些特征的单位更容易被选入干预组,那么我们就面临选择偏差。我们观察到的结果变量的差异不仅是由干预引起的,也是由于组间其他预先存在的差异。如果我们相信治疗组和对照组有平行的趋势,即它们之间的差异不会因为治疗或时间而改变,我们可以使用DID来估计治疗效果。否则,我们可以寻求其他解决方案。

处理内生性问题总是很麻烦。除了包括所有混淆变量和引入一些随机化外,回归不连续和工具变量是解决内生性问题的另外两种方法。 

1、回归不连续

回归不连续是在一个分界点测量干预效果。用一个例子会更容易理解。假设我们想估计发放奖学金对学生成绩的影响。简单地估计有奖学金和没有奖学金的学生之间的成绩差异,会因为内生性而使估计结果出现偏差。获得奖学金的学生即使没有奖学金,也更有可能获得更好的成绩。如果我们有一个给奖学金的临接点,我们可以利用回归不连续来估计奖学金的效应。例如,如果我们给成绩高于80分的学生发放奖学金,那么我们就可以估计成绩接近80分的学生的成绩差异。这背后的直觉是,在影响成绩的其他特征方面,得到79分的学生很可能与得到81分的学生相似。对于成绩在79到81之间的学生来说,被分配到干预组(有奖学金)和对照组(没有奖学金)是大致随机的。因此,我们只能看这个子人群的成绩差异来估计治疗效果。更多详情请查看维基百科页面

2、工具变量

工具变量指的是与自变量X高度相关,但与因变量Y不直接相关的变量,它们的关系就像下图。

  工具变量

由于工具变量与结果变量并不直接相关,如果改变工具变量引起结果变量的变化,那一定是干预变量的原因。例如,在估计教育对未来收入的影响时,常用的工具变量是父母的教育水平。父母的教育水平与孩子的教育水平高度相关,而与孩子的收入并不直接相关。为具体的研究问题寻找工具变量是很困难的,它需要对相关文献和领域知识有充分的了解。在得到工具变量后,我们可以用2SLS回归来检验这个工具变量是否好用,如果好用,处理效果如何。详情请参考维基百科页面

这些就是因果推理的what、why和how。希望本文可以帮助你总结基本概念和技术,感谢您的阅读。


AI研习社是AI学术青年和AI开发者技术交流的在线社区。我们与高校、学术机构和产业界合作,通过提供学习、实战和求职服务,为AI学术青年和开发者的交流互助和职业发展打造一站式平台,致力成为中国最大的科技创新人才聚集地。

如果,你也是位热爱分享的AI爱好者。欢迎与译站一起,学习新知,分享成长。

]]>
人工智能开发者 //www.xyschoolife.com/category/yanxishe/dCV09bFAx0q8JC0i.html#comments Wed, 23 Dec 2020 14:28:00 +0800
进化决策树:当机器学习从生物学中汲取灵感时 //www.xyschoolife.com/category/yanxishe/QK5TwIlM279gHvla.html 译者:AI研习社(精神小高

双语原文链接:Evolutionary Decision Trees: When Machine Learning draws its Inspiration from Biology


随着时间的推移,我们对生物学(或生命科学)的了解大大增加,它已成为许多工程师解决挑战性问题并产生发明创造的的重要灵感来源。

以日本的高速列车“新干线”为例,它是世界上最快的火车之一,时速超过300公里/小时。 在设计过程中,工程师遇到了巨大的难题:火车前部空气的位移所产生的噪音,其幅度大到可能破坏某些隧道的结构。

他们以一个出乎意料的方式找到了这个问题的解法:翠鸟。这种鸟的喙部细长,使之在潜入水中捕食时能够少溅水花。

因此,通过模仿这种鸟的形象重新设计列车,工程师不仅解决了最初的问题,而且还将列车的耗电量减少了15%,速度提高了10%。

 

 

图1-日本的高速铁路,新干线,来源

生物学知识也可以成为机器学习中灵感的来源。

内容

本文重点关注的一个例子是进化决策树。

这类分类器使用进化算法来构建鲁棒性更强,性能更好的决策树。进化算法依赖于生物进化启发的机制。

  • 决策树是什么?

  • 如何根据进化算法搭建决策树?

  • 与其它分类器相比,进化决策树的表现如何?

数据集

为了说明本文中提及的概念,我将使用航空公司乘客满意度的调查结果数据集。有关此数据集的更多信息,请参见此处

其目的是预测顾客对航空公司的服务的满意度。这样的研究对公司的决策至关重要。它不仅可以使提供商品或服务的公司知晓其产品在哪些方面需要改进,而且可以使公司知道应该改进到什么程度以及改进的紧要程度

事不宜迟,让我们从复习关于决策树的基础知识开始吧。

1. 什么是决策树?

决策树是一种分类器,其分类流程可表示为树形图。模型在训练过程中根据数据的特征推断出简单的决策规则,并依此对数据点进行分类。

下图展示了一个决策树的例子。这是使用Scikit Learn决策树模块在航空公司乘客满意度的调查结果数据集上进行训练的结果。


图2-决策树示例

决策树表明网上值机服务是商务旅行中乘客满意度的重要因素,乘客在能简单高效地在网上办理登机手续时更可能感到满意。另外,舱内wifi的信号质量也十分重要。

决策树由于具有许多优点而被广泛用于分类任务:

  • 它的推理过程与人类相似,易于理解和解释;

  • 它能处理数值数据和分类数据;

  • 它通过分层分解能更充分地利用变量。

大多数用于推导决策树的算法都使用自上而下的递归划分“贪心”策略。 

源集(source set)代表了树的根节点。源集是根据特定规则划分为各个子集(子节点)的。在每次划分出的子集上重复该划分过程,直到某个节点下的子集中的目标变量的值全部相同,或者划分过程不再使预测结果的值增加。

用于在节点和划分中确定生成测试的最佳方法的量化指标是因算法而异的。最常见的指标是信息量(或熵)和基尼杂质量。它们度量的是杂质度,当节点的所有样本属于同一类别时,这类指标的值为0;当节点的样本的类别呈均一分布(即,该节点取到某一类别的概率为常数)时,这类指标的值取到最大值。更多相关信息参见本文

但是,此类指标有两个主要缺点:

1.可能取到次优解;

2.可能生成过于复杂的决策树,以至于在训练数据中泛化效果不好,导致过拟合。

目前已有几种方法可用于克服这些问题:

  • 剪枝:首先,构建一颗完整的决策树,即每片叶子中的所有实例都属于同一类。然后删除“不重要”的节点或子树,以减小树的大小。

  • 组合树:构建不同的树,并通过特定规则(一般是投票计数)选择最终的分类结果。值得注意的是,这会导致决策树的可解释性降低。

因此,有必要探索生成树模型的其它方法。最近,进化算法(Evolutionary Algorithms, EA)获得了极大的关注。进化算法在所有可能的解法中进行强大的全局搜索,而不仅仅是本地搜索。结果,与贪心策略相比,进化算法更可能把属性交互处理得更好。

进化算法的具体工作方式见下。  

2. 怎样用进化算法构造决策树?

进化算法是搜索启发式方法,其机理源自自然中的生物进化过程。

在这个范式中,群体中的每个“个体”代表给定问题的一种候选解法。每个个体的适合度代表这种解法的质量。这样,随机初始化的第一个群体会朝着搜索空间中更好的区域进化。在每一代中,选择过程使得适合度较高(原文为“适合度较低”,疑有误)的个体具有较高的繁殖概率。

此外,还会对群体进行特定的由遗传学启发的操作,例如重组,两个个体的信息在混合后才会传给他们的后代;以及突变,对个体进行微小的随机改变。对这一过程进行迭代,直到达到某一终止条件。然后选择最适个体为答案。

基于进化算法的决策树是通用方法的一种有意思的替代品,因为:

  • 随机搜索法能有效避免自上而下的递归划分“贪心”策略可能找到的局部最优解。

  • 对决策树的解释与整体法相反。

  • 不仅仅是优化单一指标,它可以将不同的目标集成在适合度中。

2.1 群体的初始化

在进化决策树中,一个个体代表的是一棵决策树。初始群体由随机生成的树组成。

随机树可以按以下步骤生成:

在根节点和两个子节点后,算法以预设概率p决定每个子节点是否继续划分或成为终点。

  • 如果继续划分该子节点,算法会随机选择一些性质和阈值作为划分的标准。

  • 如果该子节点成为终点(叶节点),就给它随机分配一个类别标签。

2.2 适合度

分类器的目标是在输入未标记的新数据时能获得最高预测准确度。此外,决策树分类器还需要控制树的最终尺寸。因为树的尺寸小会导致欠拟合,而树的结构太复杂会导致过拟合。

因此,在定义适合度时需要在这两项之间取得平衡:

适合度 = α1 f1 + α2 f2

其中:

  • f1是在训练集上的准确度;

  • f2是对个体的尺寸(树的深度)所设置的惩罚项;

  • α1 和 α2 是待指定的参数。  

2.3. 选择过程

有多种方法可以选择用于创建下一代树的亲本。最常见的是以下几种:

  • 基于适应度按比例选择,或轮盘赌式选择:按适合度对群体排序,然后依次为每个个体赋予选择概率。

  • 淘汰制选择:先从群体中随机选出一些个体,再从选出的集合中取适合度最高的个体作为亲本。

  • 精英制选择:直接把适合度最高的个体用到下一代。这种方法能保留每代最成功的个体。

2.4 重组

获得重组子代的过程需要使亲本两两配对。

首先,选择两个个体作为亲本。然后在两棵树中各随机选一个节点。用第二棵树中选择的子树代替第一棵树中选中的子树,获得子代。

图3-重组

2.5 突变

突变指的是一个群体的部分个体中的随机的小选择。突变是遗传多样性的保证,这意味着遗传算法能搜索到更大的范围。

对决策树而言,突变可以通过随机更改属性或者细分随机选的节点来实现。

图4-突变

2.6 终止条件

如果最优秀的个体的适合度在给定数量的世代中没有上升,就可以认为算法已经收敛了。

为了在收敛得很慢时节约计算时间,这个世代数目是预先设定的参数。

3. 跟其它分类器比,进化决策树的表现如何?

进化决策树看起来很好,但跟常规机器学习算法相比,它的表现又如何?

3.1 一个简单的实验

为了评价分类器的效率,我搭建了一个决策树,并在航空公司乘客满意度调查结果数据集上进行训练。

目标是找出能导致乘客满意度升高的因素。 这样就需要一个简单而抗干扰的模型来解释导致乘客感到满意(或不满意)的途径。

 照片来自这个网站,这位摄影师

关于数据集

这个数据集很大,囊括了多于10万条航线。

  • 含有关于乘客及其行程的事实信息:乘客的性别,年龄,客户类型(是否有惯性),旅行类型(个人或商务旅行),航班舱位(商务,环保,极环保 )和飞行距离。

  • 还包含乘客对以下服务的满意度:舱内wifi,出发/到达时间(是否合宜),网上预订(是否方便),登机口位置,餐饮,网上值机,座椅舒适度,舱内娱乐,登机服务,座椅腿部空间 ,行李服务,值机服务,舱内服务,整洁度。

数据标签是乘客的满意度,包括“满意”,“中立”和“不满意”。

方法

我使用的计算步骤可简要归纳如下:

1. 数据预处理:将类别变量转换为指示变量。将数据集随机划分为训练集和测试集。

2. 建模和测试:训练每个模型在训练子集上考虑条件,在验证子集上进行衡量。

3. 比较各模型的表现。

我选择将进化决策树(EDT)方法与基于简单的树的,基于决策树(DT)的和基于随机森林(RF)的模型进行比较。限制树的深度小于(等于?)3。 我还将EDT的群体大小和RF的评价器数量设置为10,以便于在合理的计算时间内以一致的方式比较它们。

结果

结果如下:

图5-“满意”以及“中立或不满意”的乘客的数量

表1-DT模型的分类报告

表2-RF模型的分类报告

 

表3-EDT模型的分类报告

图6-3个模型的ROC曲线和曲线下面积

在这种参数设置下,EDT的表现和另外两种机器学习算法很接近。

然而,EDT的优势在于它能提供这样一棵决策树:

  • 可以呈现多颗决策树聚集的位点(与RF模型相比),并且

  • 具有鲁棒性(与简单DT模型相比),因为它是一群树中表现最好的那颗。

在训练过程中,将最大深度设为2,获得的EDT群体中表现最好的决策树可以表征为如下形式:


图7(原文为“图5”,疑有误)-EDT中最佳决策树的示意图


3.2 对EDF方法的一个更泛化的实验验证

上述实验肯定不足以评估进化决策树跟其它机器学习算法相比时的性能和可靠性。

因为只用了一个数据集,因此没有考虑到所有可能性,例如标签的类别数量,特征数量和观测数量的影响等。

在[2]中,作者使用真实的UCI数据集对EDT方法与其他机器学习方法的性能进行了比较。

这篇文章的发现如下。

关于数据集

下表简要介绍了所用的数据集:

表4-数据集的性质

如你所见,数据集在观测次数,特征个数和类别个数这几个方面的差别很大。

最困难的数据集肯定是第一个数据集,因为它有很多类别,而观察次数较少。

方法

以下是与更‘经典’的机器学习算法相比时,作者用来评估EDT模型表现的方法的主要信息:

  • EDT模型已使用以下超参数进行了训练:世代数为500,群体大小为400,重组/变异的概率分别为0.6 / 0.4,选择方法为随机统一的精英制选择。

  • 使用5x2交叉验证来测量模型的表现。

结果

表5-模型的正确率取决于所用的数据集

  1. 基于树的算法几乎总是优于其它机器学习算法。 可以解释为决策树本身更能选择出最重要的特征。 此外,基于规则的模型更适合用于特定的数据集,尤其是难以对目标与特征间的关系建模时。

  2. 鲍鱼数据集上的结果都很差:因为有28个类别,而且观测次数很少(只有210次)。 但是,EDT模型以最高的准确率脱颖而出。 这表明它能有效地处理困难的数据集并避免过拟合。

值得注意的是,EDT模型使用的是默认参数。 调整参数能带来更好的表现。

引用

[1] R. Barros et al., A Survey of Evolutionary Algorithms for Decision Tree Induction2011

[2] D. Jankowski et al., Evolutionary Algorithm for Decision Tree Induction, 2016

[3] S. Cha, Constructing Binary Decision Trees using Genetic Algorithms, 2008

[4] D. Carvalho et al., A Hybrid Decision Tree/Genetic Algorithm Method for Data Mining, 2003

[5] Wikipedia, Traveling salesman problem

[6] Wikipedia, Genetic Algorithm


AI研习社是AI学术青年和AI开发者技术交流的在线社区。我们与高校、学术机构和产业界合作,通过提供学习、实战和求职服务,为AI学术青年和开发者的交流互助和职业发展打造一站式平台,致力成为中国最大的科技创新人才聚集地。

如果,你也是位热爱分享的AI爱好者。欢迎与译站一起,学习新知,分享成长。

]]>
人工智能开发者 //www.xyschoolife.com/category/yanxishe/QK5TwIlM279gHvla.html#comments Tue, 22 Dec 2020 10:28:00 +0800
Compute Goes Brrr:重温强化学习之父Sutton关于AI的70年惨痛教训 //www.xyschoolife.com/category/yanxishe/wE92tQ1MU92BOfDM.html 译者:AI研习社(Key

双语原文链接:Compute Goes Brrr: Revisiting Sutton’s Bitter Lesson for Artificial Intelligence


回顾理查德·萨顿关于AI的惨痛教训

就在不久前的过去,在一个与我们今天相差无几的世界上,在达特茅斯学院,有这样一个雄心勃勃的项目,志在弥合人类与机器智能之间的鸿沟。那是1956年。虽然达特茅斯夏季人工智能研究项目并不是第一个对思考机器的潜力提出设想的研究项目,但它的确为这个领域取了一个公认的名字(“人工智能”),并建立了由具有影响力的研究者们所组成的一座“万神殿”。在约翰·麦卡锡、马文·闵斯基、克劳德·香农与纳撒尼尔·罗切斯特共同撰写的提案中,作者们的目标虽然仍不成熟,但他们的雄心壮志,即使今天看来也足够奇妙有趣。

(我们)将致力于探索如何让机器使用语言,形成归纳和概念,解决现在只有人类可以涉足的各种问题,并进行自我改良。我们认为,如果一个经过精心挑选的科学家团队在一起工作一个夏天,就可以在其中的一个或多个问题上取得重大进展。——《达特茅斯夏季人工智能研究项目提案》,1955年

最初的人工智能

从那时起到现在,关于人工智能的研究,经历过车水马龙的盛况,也不乏门可罗雀的冷落。在1956年,盛行的方法包括元胞自动机、控制论(cybernetics)、信息论。随着时间的流逝,专家系统、形式推理、连接主义等方法也轮番亮相,各领风骚。

今日,AI的复兴源于连接主义一脉相承的最新成果——深度学习。尽管一些新思想的确也在这个领域造成了相当大的冲击(仅举几例:注意力机制、残差连接、批量归一化),大部分关于建立和训练深度神经网络的思想,早在上世纪八九十年代就已经被提出。然而今天,AI与AI相关的技术所扮演的角色,却并不是任何在之前的“AI之春”中活跃的研究者所想象的那个样子。例如,几乎没有人能预见到,广告科技(adtech)和算法驱动的新闻供稿的盛行与社会反响。我也很确信,他们中的很多人会为今天的社会如此缺少仿真机器人而感到失望。

约翰·麦卡锡,达特茅斯提案的共同作者,以及“人工智能”一词的发明者。图源

约翰·麦卡锡曾经抱怨过,落实到现实世界的AI技术,总是会变得不那么吸引人,并会逐渐失去“AI”的名字。不过,这并非我们今天所见的现象——也许我们要归咎于风险投资和政府基金,因为是它们鼓励大家去做了截然相反的事情。伦敦风险投资公司MMC的一份调查显示,在2019年的欧洲,高达40%自称的AI创业公司实际上并不将AI作为它们业务的核心构成部分。

深度学习与AI研究之间的区别

深度学习时代与之前那些AI研究的那些暖春期之间的区别,似乎可以被归结为摩尔定律的S形曲线。许多人将“ImageNet时刻”视为今天AI/ML复兴的起点——一个名叫AlexNet的模型,以压倒性优势赢得了2012年ImageNet大规模视觉识别挑战赛(ILSVRC)。AlexNet的结构,与在它20多年前就被提出的LeNet-5并没有很大的差别。

拥有5个卷积层的AlexNet,比拥有3个的LeNet要稍大一些。它总共有8层,而LeNet有7层(其中2层是池化层)。而其中的重大突破,则在于图形处理单元(GPU)以并行处理的方式实现最基础的神经网络运算(卷积与矩阵乘法),以及由李飞飞和她在斯坦福大学的实验室所整理的、兼具规模和质量的ImageNet数据集

硬件加速的惨痛教训

硬件加速的存在,在今天的深度学习从业者看来已经是理所当然。它是诸如PytorchTensorFlowJAX等热门深度学习库不可缺少的部分。深度学习研究者队伍的壮大,和面向AI/ML的商业需求的日益增长,构建了一个协同反馈的循环,从而推动了良好的硬件支持的形成。而当基于FPGA、ASIC甚至是光子或量子芯片的新型硬件加速器逐渐为人们所用,各类热门学习库的软件支持也自然紧随其后。

ML硬件加速器与其赋予AI研究的更多算力所带来的冲击,被理查德·萨顿简洁地概括在了一篇相(臭)当(名)出(昭)名(著)的短文《惨痛的教训》中。文中,萨顿——这位曾(共同)撰写过强化学习教科书的人物——却声称AI研究者们所付出的所有勤奋努力和聪明才华,对于整个大框架几乎没有起到任何推动作用。根据萨顿的说法,当前AI进步的主要驱动者,是日益提升的算力被用于实现我们既有的简单的学习和搜索算法的结果,而其中包含的硬编码的人类知识只是所需的最低水平。而萨顿认为,基于AI的方法应该是尽可能普适的方法,诸如无约束搜索和学习。

不出所料地,许多研究者都对萨顿所说的这个教训有着截然不同的观点。毕竟,他们中的许多人都将毕生心血投入到关于AI的各种技巧和理论基础的研究上,以期推动AI发展的进程。许多AI研究者并不局限于探索如何达到最先进的指标,而是希望学习所谓智能的本质,或更抽象地说,人类在整个宇宙中所扮演的角色。萨顿的表述似乎在支持这样一个令人失望的结论,即:对理论神经科学、数学、认知心理学等学科的探索,对于推动AI的发展是毫无帮助的。

来自gwern.net的一张梗图。以及另一张

关于“惨痛教训”的多方质疑

对萨顿的这篇短文,值得关注的一些批评包括了机器人学家罗德尼·布鲁克斯的《更好的一课(译注:原文标题为“A Better Lesson”,与萨顿的标题“A Bitter Lesson”仅一字之差),牛津大学计算机科学教授西蒙·怀特森的一串推文,以及Shopify的数据科学家凯瑟琳·贝利的一篇博客。贝利反驳道,虽然萨顿对现代AI领域中那些仅局限于追求指标的课题的论断也许是对的,但这样的短视却完全没有抓住关键。AI研究的终极目标,应该是从可利用的角度去理解智能,而不是对每个特定的指标优化问题都从头训练出一个新模型——这需要付出极大的金钱和精力。贝利认为,现代的机器学习从业者,常常会误将指标当作目标;研究者们之所以要造出超越人类的下棋机器或围棋机器人,不是为了他们自己,而是因为这些工作对于人类智能的某些方面,可能是至关重要的例证。

布鲁克斯和怀特森则反驳道,萨顿所提及的所有“不涉及人类先验”的例子,实际上都是大量人类智慧的结晶。例如,如果没有卷积层的平移不变性,那么很难想象,深度神经网络可以表现得像今天的残差网络(ResNet)一样好。我们也可以发现当前网络仍具有的很多不足,例如不满足旋转不变性或颜色不变性。此外,网络结构和训练细节也十分依赖人类的直觉和智慧。虽然比起人类工程师手动设计的模型,自动化的神经结构搜索(NAS)有时可以找到更好的网络结构,但NAS算法最初的搜索范围,也是从所有的可能性里大大缩减后得到的——而缩小搜索范围,一直是人类设计者所管辖的领域。

怀特森反驳道,搭建机器学习系统的人类智慧对解决复杂问题而言是必需,而不是阻碍。

对“惨痛教训”发声的批评人士中,也包括不少对深度学习整体都存有怀疑的研究者。深度学习依旧维持着令人印象深刻的庞大规模,投入算力的开支不断膨胀,关于其能源消耗影响环境的担忧也日益加重。而且,没人能够保证,在未来的某个时刻,深度学习不会撞到一堵难以逾越的南墙——也许很快了。

距离边际收益无法再承受额外的支出,还有多久?深度学习的进步让人吃惊的原因之一,在于模型本身是很难被人们理解的;一个模型的表现,是从具有数以万亿计的参数所构成的复杂系统中突然出现的产物。要预测或分析它们到底能做到什么地步,相当困难。

也许我们所有人都应该认真记住符号人工智能(GOFAI)的经典,由斯图尔格·罗素和彼得·诺维格合著的《人工智能:一种现代方法》里的一课。在书中临近最后一章的结尾,我们发现了以下的警告:在关于AI的研究中,我们偏爱的方法——对我们来说是深度学习——也许就像:

“…爬一棵树就想登上月亮。人们可以一直稳步攀升,直到树顶。”——《人工智能:一种现代方法》,斯图尔格·罗素,彼得·诺维格

作者们在这里换了一种方式表述了休伯特·德雷福斯在1992年所著的《计算机不能做什么》中的一个比喻,而这常常会回到那个月球旅行的树栖策略的比喻。尽管许多原始的智人曾经尝试过这个方法,但实际上,要登上月亮,首先要从树上下来,然后开始为太空计划扎扎实实地做准备。

结果不言自明

尽管这些批评听起来颇有说服力,但它们留给别人的印象,也只比酸葡萄稍微好一点。当学术界还在被知识分子们无法满足的“更多算力”的呼声拖后腿的时候,大型私人研究机构的研究者们马不停蹄地在各种项目里登上头条。而他们在工程上花费的心血,基本上都直接投入到了规模化当中。

而在这方面最臭名昭著的,莫过于OpenAI。

OpenAI在去年从非盈利组织转变为有限合伙企业,而它的核心人员从未掩饰过他们对于海量算力的偏爱。其创始人格雷格·布罗克曼与伊尔亚‧苏茨克维,与许多蓬勃成长的公司里的科技人士一样,正是理查德·萨顿的“惨痛教训”所形容的那样的人。OpenAI为冲刺里程碑所需的大量训练任务,促使相应的基础工程建设成为一大亮点。

OpenAI Five打败了(人类)Dota2世界冠军队伍OG,而它“仅仅”只用了45,000年——即每天进行大约250年的游戏——来进行学习。在10个实时月内,它始终维持着800pefaflop/s-days(pfs-day)的算力。(译注:1pfs-day指一天内可进行约10的20次方次加法或乘法运算)如果以世界最先进的性能功耗比,每瓦特进行170亿次运算来计算,其能量消耗甚至超过1.1吉瓦时,即一个正常美国家庭92年的总用电量。

OpenAI的另一个高规格、高消耗的项目,则是他们的Dactyl,Shadow机器灵巧手项目。该项目的高光时刻,是机器手可以灵巧地解出魔方(虽然选择解法的步骤是由一个确定的求解器完成的)。这一解魔方的项目,是建立在大约13,000年的模拟器经验之上的。此外,DeepMind与之相当的AlphaStar(44天,384块TPU训练12个智能体,模拟进行了数千年的游戏)或AlphaGo系列(AlphaGo Zero:约1800pfs-day)等项目,也需要在计算资源上投入大量开支。

但结果也会对不上

但在“惨痛教训”所描述的潮流以外,也存在着这样一个鲜明的反例:训练游戏智能体的AlphaGo系列,在取得更好的表现的同时,实际上所需的算力反而更少AlphaGo系列的确是个很有趣的例子,因为它无法融入“惨痛教训”所提出的框架之内。没错,这个项目一开始确实调用了压倒性的高性能计算资源用于训练:AlphaGo使用了176块GPU,并会在测试阶段消耗4万瓦特的能量。但从AlphaGo到MuZero之间的每一次更新换代,无论在训练阶段还是实际演示阶段,都消耗了更少的能量以及算力。

实际上,在AlphaGo Zero对阵“鳕鱼”——前深度学习时代最先进的下棋引擎——的时候,它的搜索次数比起StockFish要少得多,也要有针对性得多。虽然AlphGo Zero使用了蒙特卡罗树搜索,但为其“引路”的价值函数却是由一个深度神经网络所确定的。而“鳕鱼”所用的Alpha-beta剪枝搜索法,则有着更广的搜索范围:在每个回合中,“鳕鱼”所考虑的棋盘走位大概是AlphaGo Zero的400倍。

“惨痛教训”应该比针对性方法表现更佳吗?

你应该还记得,无约束搜索是萨顿曾列举的一个普适方法的例子。而如果我们全盘接受“惨痛教训”,那么它的表现应该比一个搜索范围更窄的针对性方法要来得更好。然而在AlphaGo系列的例子里,我们却发现:在每次更新换代(AlphaGo, AlphaGo Zero, AlphaZero, MuZero)之后,新方法比旧方法大体上都表现得更优秀,然而它们的学习和搜索都是更有针对性的。在Muzero中,原先用于搜索的基准真实游戏模拟器,被换成了名字以Alpha开头的所有前辈们。它们都有着一个学习好的深度模型,用于表示游戏状态、游戏的动态数据,并进行预测。

设计一个学习好的游戏模型,所需的人力远超最初的AlphaGo。然而,Muzero却拓展出了更通用的学习能力,在57个Atari游戏上都达到了当前最先进的表现,而之前的那些Alpha模型只学习了象棋、将棋和围棋。Muzero在每个搜索节点上所用的运算量比AlphaZero小了20%,并且也归功于硬件设施的改进,在训练过程中节省了4到5倍的TPU。

(被AlphaGo Zero打败后)被腌制晾干的鳕鱼─.─||图源为公共领域。

由Deepmind研发的AlphaGo系列游戏机器人,是深度强化学习发展进程中的一个格外精妙的案例。而如果说,AlphaGo的研究队伍能成功地在降低计算需求的同时,还持续实现性能和通用学习能力的提升,这不就直接反驳了“惨痛教训”吗?

若是如此,它又为人们对通用智能的探索展示了什么呢?根据许多人的说法,强化学习是实现通用人工智能(AGI)的一个出色的候选方案,因为它与人和动物面向奖励的学习模式相近。不过,也有其他形式的智能,同样被一部分人认为是通用人工智能的先驱的候选者。

语言模型:大规模模型的王者

萨顿的文章受到新一轮的重视(最近KDNuggets甚至将它列为一篇顶级文章)的一大原因,是OpenAI万众瞩目的GPT-3语言模型和应用程序接口(API)的发布。GPT-3是一个参数多达1750亿的Transformer,以略超10倍的数量,打破了之前由微软的Turing-NLG保持的语言模型规模的记录。GPT-3也比那个“危险得不能发布”的GPT-2大了100倍以上。

GPT-3的发布,是OpenAI的测试版API公告中的一个核心部分。这个API基本允许实验人员使用GPT-3模型(但不能对参数进行微调),并调节一些可以操纵推理过程的超参数。可以理解,那些足够幸运地用上了这个API的测试版用户,抱着极大的激情打开了GPT-3——而结果也是令人印象深刻的。实验人员开发了基于文本的游戏、用户界面的生成器、假博客,以及其他许多对这个大型模型的创新性应用。GPT-3的表现比GPT-2有显著性的提高,而其间唯一的主要区别,就是规模。

语言模型规模逐渐扩大的趋势,早在这些巨大的GPT出现之前就存在,并且也不局限于OpenAI的研究。但直到《你只需要注意力》一文引入了第一个Transformer,这一趋势才真正开始快速发展。在不知不觉间,Transformer的参数量已经平稳增长到数以百亿计。假如在一年多之后,就有人提出一个上万亿参数的Transformer,那我也不会感到惊讶。Transformer看起来十分适合拓展到更大的规模,而它的结构也并不局限于面向文本的自然语言处理。Transformer已经被应用于强化学习化学反应预测、生成音乐图片等领域。关于Transformer模型所用的注意力机制的可视化解释,参见此处

按当前的模型增长速度计算,不出数年,就会有人训练出一个参数量堪比一个人类大脑中的所有神经元突触数量(约100万亿)的模型。科幻作品充斥着这样的例子:只要具有足够大的规模和复杂度,机器就能获得自我意识和通用智能。这会是Transformer不断增长的终点吗?

关于AI未来的答案,介于两个极端之间

(图片文字:只有杰出的研究科学家才会以极端的方式行事!)

巨大的Transformer自然有着令人印象深刻的表现,而这一随着规模而递进的发展趋势,也符合“惨痛教训”所述。然而,将所有关于AI的工作都归为关于规模化的工作,是既不得体也不能令人满意的。此外,随之而来的能源需求也引起了人们的担忧。云端训练,将许多大实验室的研究者与低效的训练过程相隔离。但在一间小办公室或小公寓里运行深度学习实验的人们,则会身陷热浪之中。这热浪从他们的工作台背后不断冒出,一直提醒着他们(这训练是多么消耗能量)。

Steve Jurvetson修改的理查德·萨顿的肖像

(图片文字:结束了,学者们,我有算力!)

以超参数搜索和架构搜索训练一个庞大的NLP Transformer的碳排放量,可以轻易超过一个小型研究队伍的所有成员进行所有其他活动所产生的总排放量。

我们知道,智能体是可以在持续以20瓦特(以及额外用于机体运转的80瓦特)运行的“硬件”上运行的。如果你对此抱有怀疑,那么你应该在自己的双耳之间找到这一存在的证据。而与之相反的是,用于训练OpenAI Five的能量消耗,却比一个人类玩家活一辈子所需的热量还要多,足以支撑他90年的寿命。

一个细心的观察者会指出,一个人类大脑所需的20瓦特的能量消耗,并不代表整个学习算法的总消耗。然而,它的架构和运行规则,也是一个运行长达40亿年的漫长的黑箱优化过程——其名为“进化”——所得到的结果。如果将所有人类祖先的全部能量消耗一并加总,也许人类和机器游戏玩家之间的对比可以显得更有意义些。即便如此,在模型架构和训练算法上的一切进步,与纯粹的通用随机搜索仍然相差甚远。但在机器智能上由人类驱动的进步,当然比动物界之中智能的进化要快得多。

所以,“惨痛教训”是对是错?

一个显然的,但也许对绝对主义者不够友好的答案是:既不是这边,也不是那边。注意力机制、卷积层、乘法循环连接以及其他许多大模型中常见的机制,都是人类智慧的结晶。换句话说,它们是令人类思想推动学习任务运行得更好的前提,也对我们目前所见的一系列规模化的进步至关重要。故意忽略这些发明,一味地维护摩尔定律和“惨痛教训”的话,便与纯粹依靠手动编码的专家知识一样短视。

一个设计错误的优化过程,即使运行到宇宙的终结,也解不出一个问题。在享受规模化所带来的红利时,一定要将这一课铭记于心。

(图片文字:你低估了我的算法!)


AI研习社是AI学术青年和AI开发者技术交流的在线社区。我们与高校、学术机构和产业界合作,通过提供学习、实战和求职服务,为AI学术青年和开发者的交流互助和职业发展打造一站式平台,致力成为中国最大的科技创新人才聚集地。

如果,你也是位热爱分享的AI爱好者。欢迎与译站一起,学习新知,分享成长。


]]>
人工智能开发者 //www.xyschoolife.com/category/yanxishe/wE92tQ1MU92BOfDM.html#comments Fri, 18 Dec 2020 18:26:00 +0800
数据太多而无法使用?快试试这个Kaggle大数据集高效访问教程 //www.xyschoolife.com/category/yanxishe/cx6MZchwO7zpQE3s.html 译者:AI研习社(季一帆

双语原文链接:Tutorial on reading large datasets


大规模数据集


对数据科学家和Kaggler来说,数据永远不嫌多。

我敢肯定,你在解决某些问题时,一定报怨过没有足够的数据,但偶尔也会抱怨数据量太多难以处理。本文探讨的问题就是对超大规模数据集的处理。

在数据过多的情况下,最常见的解决方案是根据RAM采样适量数据,但这却浪费了未使用的数据,甚至可能导致信息缺失问题。针对这些问题,研究人员提出多种不同的非子采样方法。需要注意的时,某一方法是无法解决所有问题的,因此在不同情况下要根据具体需求选择恰当的解决方案。

本文将对一些相关技术进行描述和总结。由于Riiid! Answer Correctness Prediction数据集由10列,超1亿行的数据组成,在Kaggle Notebook中使用pd.read_csv方法读取会导致内存不足,因此本文将该数据集做为典型示例。

不同安装包读取数据的方式有所不同,Notebook中可用方法包括(默认为Pandas,按字母表排序):

除了从csv文件读取数据外,还可以将数据集转换为占有更少磁盘空间、更少内存、读取速度快的其他格式。Notebook可处理的文件类型包括(默认csv,按字母表排序):

请注意,在实际操作中不单单是读取数据这么简单,还要同时考虑数据的下游任务和应用流程,综合衡量以确定读取方法。本文对此不做过多介绍,读者可自行查阅相关资料。

同时,你还会发现,对于不同数据集或不同环境,最有效的方法往往是不同的,也就是所,没有哪一种方法就是万能的。

后续会陆续添加新的数据读取方法。

方法

我们首先使用Notebook默认的pandas方法,如前文所述,这样的读取因内存不足失败。

import pandas as pd
import dask.dataframe as dd

# confirming the default pandas doesn't work (running thebelow code should result in a memory error)
# data = pd.read_csv("../input/riiid-test-answer-prediction/train.csv")

Pandas介绍


Pandas是最常用的数据集读取方法,也是Kaggle的默认方法。Pandas功能丰富、使用灵活,可以很好的读取和处理数据。

使用pandas读取大型数据集的挑战之一是其保守性,同时推断数据集列的数据类型会导致pandas dataframe占用大量非必要内存。因此,在数据读取时,可以基于先验知识或样品检查预定义列数据的最佳数据类型,避免内存损耗。

RiiiD竞赛官方提供的数据集读取方法就是如此。

帮助文档: https://pandas.pydata.org/docs/

%%time
dtypes = {
   "row_id": "int64",
   "timestamp": "int64",
   "user_id": "int32",
   "content_id": "int16",
   "content_type_id": "boolean",
   "task_container_id": "int16",
   "user_answer": "int8",
   "answered_correctly": "int8",
   "prior_question_elapsed_time": "float32",
   "prior_question_had_explanation": "boolean"}
data = pd.read_csv("../input/riiid-test-answer-prediction/train.csv", dtype=dtypes)
print("Train size:", data.shape)
Train size: (101230332, 10)
CPU times: user 8min 11s, sys: 10.8 s, total: 8min 22s
Wall time: 8min 22s
data.head()


Dask介绍


Dask提供并行处理框架对pandas工作流进行扩展,其与Spark具有诸多相似之处。

帮助文档:https://docs.dask.org/en/latest/

%%time
dtypes = {
   "row_id": "int64",
   "timestamp": "int64",
   "user_id": "int32",
   "content_id": "int16",
   "content_type_id": "boolean",
   "task_container_id": "int16",
   "user_answer": "int8",
   "answered_correctly": "int8",
   "prior_question_elapsed_time": "float32",
   "prior_question_had_explanation": "boolean"}
data = dd.read_csv("../input/riiid-test-answer-prediction/train.csv", dtype=dtypes).compute()
print("Train size:", data.shape)
Train size: (101230332, 10)
CPU times: user 9min 24s, sys: 28.8 s, total: 9min 52s

Wall time: 7min 41s

data.head()




Datatable介绍


受R语言data.table的启发,python中提出Datatable,该包可快速读取大型数据集,一般要比pandas快得多。值得注意的是,该包专门用于处理表格数据集,能够快速读取大规模的表格数据集。

帮助文档:https://datatable.readthedocs.io/en/latest/index.html

# datatable installation with internet
# !pip install datatable==0.11.0 > /dev/null

# datatable installation without internet!
pip install ../input/python-datatable/datatable-0.11.0-cp37-cp37m-manylinux2010_x86_64.whl > /dev/null

import datatable as dt
%%time
data = dt.fread("../input/riiid-test-answer-prediction/train.csv")
print("Train size:", data.shape)Train size: (101230332, 10)
CPU times: user 52.5 s, sys: 18.4 s, total: 1min 10s
Wall time: 20.5 sdata.head()



10*10

Rapids介绍


Rapids提供了在GPU上处理数据的方法。通过将机器学习模型转移到GPU,Rapids可以在一个或多个GPU上构建端到端的数据解决方案。

帮助文档:https://docs.rapids.ai/

# rapids installation (make sure to turn on GPU)
import sys
!cp ../input/rapids/rapids.0.15.0 /opt/conda/envs/rapids.tar.gz
!cd /opt/conda/envs/ && tar -xzvf rapids.tar.gz > /dev/null
sys.path = ["/opt/conda/envs/rapids/lib/python3.7/site-packages"] + sys.path
sys.path = ["/opt/conda/envs/rapids/lib/python3.7"] + sys.path
sys.path = ["/opt/conda/envs/rapids/lib"] + sys.path

import cudf
%%time
data = cudf.read_csv("../input/riiid-test-answer-prediction/train.csv")
print("Train size:", data.shape)
Train size: (101230332, 10)
CPU times: user 4.58 s, sys: 3.31 s, total: 7.89 s

Wall time: 30.7 s

data.head()



文件格式

通常,我们会将数据集存储为容易读取、读取速度快或存储容量较小的格式。数据集存储有各种不同的格式,但不是每一种都可以被处理,因此接下来,我们将介绍如何将这些数据集转换为不同的格式。

# data = dt.fread("../input/riiid-test-answer-prediction/train.csv").to_pandas()

# writing dataset as csv
# data.to_csv("riiid_train.csv", index=False)

# writing dataset as hdf5
# data.to_hdf("riiid_train.h5", "riiid_train")

# writing dataset as feather
# data.to_feather("riiid_train.feather")

# writing dataset as parquet
# data.to_parquet("riiid_train.parquet")

# writing dataset as pickle
# data.to_pickle("riiid_train.pkl.gzip")

# writing dataset as jay
# dt.Frame(data).to_jay("riiid_train.jay")

数据集的所有格式可从此处获取,不包括竞赛组提供的原始csv数据。

csv格式

大多数Kaggle数据集都提供了csv格式文件。该格式几乎成为数据集的标准格式,而且所有方法都支持从csv读取数据。

更多相关信息见: https://en.wikipedia.org/wiki/Comma-separated_values

%%time
dtypes = {
   "row_id": "int64",
   "timestamp": "int64",
   "user_id": "int32",
   "content_id": "int16",
   "content_type_id": "boolean",
   "task_container_id": "int16",
   "user_answer": "int8",
   "answered_correctly": "int8",
   "prior_question_elapsed_time": "float32",
   "prior_question_had_explanation": "boolean"}
data = pd.read_csv("../input/riiid-test-answer-prediction/train.csv", dtype=dtypes)
print("Train size:", data.shape)
Train size: (101230332, 10)
CPU times: user 8min 36s, sys: 11.3 s, total: 8min 48s
Wall time: 8min 49s

feather格式

以feature(二进制)格式存储数据对于pandas极其友好,该格式提供了更快的读取速度。

了解更多信息:https://arrow.apache.org/docs/python/feather.html

%%time
data = pd.read_feather("../input/riiid-train-data-multiple-formats/riiid_train.feather")
print("Train size:", data.shape)
Train size: (101230332, 10)
CPU times: user 2.59 s, sys: 8.91 s, total: 11.5 s
Wall time: 5.19 s

hdf5格式

HDF5是用于存储、管理和处理大规模数据和复杂数据的高性能数据管理组件。

了解更多信息:https://www.hdfgroup.org/solutions/hdf5

%%time
data = pd.read_hdf("../input/riiid-train-data-multiple-formats/riiid_train.h5", "riiid_train")
print("Train size:", data.shape)
Train size: (101230332, 10)
CPU times: user 8.16 s, sys: 10.7 s, total: 18.9 s
Wall time: 19.8 s

jay格式

Datatable支持.jay(二进制)格式,其在读取jay格式数据时速度快得超乎想象。从下面的示例可以看到,该方法读取整个riiid数据集用时甚至不到1秒!

了解更多信息:https://datatable.readthedocs.io/en/latest/api/frame/to_jay.html

%%time
data = dt.fread("../input/riiid-train-data-multiple-formats/riiid_train.jay")
print("Train size:", data.shape)
Train size: (101230332, 10)
CPU times: user 4.88 ms, sys: 7.35 ms, total: 12.2 ms
Wall time: 38 ms

parquet格式

在Hadoop生态系统中,parquet是tabular的主要文件格式,同时还支持Spark。经过近年的发展,该数据格式更加成熟,高效易用,pandas目前也支持了该数据格式。

%%time
data = pd.read_parquet("../input/riiid-train-data-multiple-formats/riiid_train.parquet")
print("Train size:", data.shape)
Train size: (101230332, 10)
CPU times: user 29.9 s, sys: 20.5 s, total: 50.4 s
Wall time: 27.3 s

pickle格式

Python对象可以以pickle格式存储,pandas内置支持pickle对象的读取和写入。

了解更多信息:https://docs.python.org/3/library/pickle.html

%%time
data = pd.read_pickle("../input/riiid-train-data-multiple-formats/riiid_train.pkl.gzip")
print("Train size:", data.shape)
Train size: (101230332, 10)
CPU times: user 5.65 s, sys: 7.08 s, total: 12.7 s
Wall time: 15 s

不同方法各有千秋


每种方法都有自己的优缺点,例如:

  • Pandas在处理大规模数据时对RAM的需求增加

  • Dask有时很慢,尤其是在无法并行化的情况下

  • Datatable没有丰富的数据处理功能

  • Rapids只适用于GPU

因此,希望读者掌握不同的方法,并根据实际需求选择最恰当的方法。我始终相信,研究不是技术驱动的,技术方法只是手段,要有好主意、新想法、改进技术才能推动数据科学的研究与发展。

在经过大量研究后,我确信不同数据集具有不同的适用方法,因此要多尝试,千万不要试图一招半式闯江湖。

在不断更新的开源软件包和活跃的社区支持下,数据科学必将持续蓬勃发展。


AI研习社是AI学术青年和AI开发者技术交流的在线社区。我们与高校、学术机构和产业界合作,通过提供学习、实战和求职服务,为AI学术青年和开发者的交流互助和职业发展打造一站式平台,致力成为中国最大的科技创新人才聚集地。

如果,你也是位热爱分享的AI爱好者。欢迎与译站一起,学习新知,分享成长。

]]>
人工智能开发者 //www.xyschoolife.com/category/yanxishe/cx6MZchwO7zpQE3s.html#comments Thu, 17 Dec 2020 16:51:00 +0800
关于深度学习、NLP和计算机视觉的30个顶级Python库 //www.xyschoolife.com/category/yanxishe/W00n4Q8Y41qd4MQb.html 译者:AI研习社(话左)

双语原文链接:Top Python Libraries for Deep Learning, Natural Language Processing & Computer Vision


请注意,下面的图示由Gregory Piatetsky绘制,每个库都有其类别,按星标和贡献者对其进行绘制,符号大小则以该库在Github上的提交次数的对数表示。


图1:深度学习,自然语言处理和计算机视觉的顶级Python

按星级和贡献者数量绘制;按提交数的对数表示相对大小

那么事不宜迟 ,下面就是由KDnuggets员工精心挑选的30个可用于深度学习,自然语言处理和计算机视觉顶级Python库。

深度学习

1. TensorFlow

星标:149000,提交数:97741,贡献者:754

TensorFlow是针对机器学习的端对端开源平台。它具备综合灵活的工具、库和社区资源,可以帮助研究者推动先进的机器学习技术的发展以及开发者更轻松地开发和发布由机器学习支持的应用。

2. Keras

星标:50000,提交数:5349,贡献者:864  

Keras是由python编写的机器学习API,其运行在机器学习的顶级平台TensorFlow上。

3. PyTorch

星标:43200,提交数:30696,贡献者:1619  

使用Python实现的张量和动态神经网络,并带有强大的GPU加速。

4. fastai

星标:19800,提交数:1450,贡献者:607  

通过利用当下最佳的技术实践,fastai极快地简化了训练过程也加速了神经网络。

5. PyTorch Lightning

星标:9600,提交数:3594,贡献者:317  

针对高性能AI研究的封装轻量版PyTorch。可缩小你的模型,而不是提供小的样板。

6. JAX

星标:10000,提交数:5708,贡献者:221  

Python+NumPy程序的组合变换:区分、向量化、在GPU/TPU上的JIT等等。

7. MXNet

星标:19100,提交数:11387,贡献者:839  

带有动态和突变感知的数据流管理调度程序的轻量、便捷、灵活的分布式/移动机器学习库:支持Python、R、Julia、Scala、Go、JavaScript等等。

8. Ignite

星标:3100,提交数:747,贡献者:112  

可灵活透明地训练评估PyTorch神经网络的高级别库。

自然语言处理

9. FastText

星标:21700,提交数:379,贡献者:47

fastText是一个可高效学习单词表意和句子分类的库。

10. spaCy

星标:17400,提交数:11628,贡献者:482  

使用Python和Cython实现的工业级自然语言处理库(NLP)

11. gensim

星标:11200,提交数:4024,贡献者:361

gensim通过使用大型语料库进行主题建模、文档索引和相似性检索。目标受众是自然语言处理(NLP)和信息检索(IR)社区

12. NLTK

星标:9300,提交数:13990,贡献者:319

NLTK——自然语言工具箱——是一整套针对自然语言处理研究和开发的开源Python模块、数据集和教程

13. Datasets(Huggingface)

星标:4300,提交数:568,贡献者:64

用于自然语言处理的使用PyTorch,TensorFlow,NumPy和Pandas工具的快速,高效,开放式数据集和评估指标

 14. Tokenizers(Huggingface)

星标:3800,提交数:1252,贡献者:30

  针对研究和生产的快速顶级的分词器

15. Transformers(Huggingface)

星标:3500,提交数:5480,贡献者:585

Transformers:针对Pytorch和TensorFlow 2.0 的顶级自然语言处理库  

16. Stanza

星标:4800,提交数:1514,贡献者:19

针对很多人类语言的正式标准NLP Python库  

17. TextBlob

星标:7300,提交数:542,贡献者:24

简单,Python风格,文本处理-情感分析,词性标记,名词短语提取,翻译等等。  

18. PyTorch-NLP

星标:1800,提交数:442,贡献者:15

用于PyTorch自然语言处理(NLP)的基础实用工具

19. Textacy

星标:1500,提交数:1324,贡献者:23 

用于执行各种自然语言处理(NLP)任务的Python库,构建在一个高性能spaCy库之上。  

20. Finetune

星标:626,提交数:1405,贡献者:13   

Finetune是一个库,它允许用户利用最新的预训练NLP模型来执行各种下游任务。 

21. TextHero

星标:1900,提交数:266,贡献者:17   

文本预处理、表示和可视化,从零到精通。

22. Spark NLP

星标:1700,提交数:4363,贡献者:50   

Spark NLP是建立在Apache Spark ML之上的自然语言处理库。  

23. GluonNLP

星标:2200,提交数:712,贡献者:72   

GluonNLP这个工具包,可简化文本预处理,数据集加载和神经模型构建,以帮助您加快对自然语言处理(NLP)的研究。

计算机视觉

24. Pillow

星标:7800,提交数:10799,贡献者:303

Pillow是个对用户十分友好的PIL分支。PIL是Python图像库

25. OpenCV

星标:49600,提交数:29453,贡献者:1234  

开源计算机视觉库

26. scikit-image

星标:4000,提交数:12352,贡献者:403  

用Python做图像处理

27. Mahotas

星标:644,提交数:1273,贡献者:25  

Mahotas是个包含了最快的计算机视觉算法(所有算法用C++实现保证运行速度)的库,针对numpy数组运行

28. Simple-CV

星标:2400,提交数:2625,贡献者:69  

SimpleCV是一个针对开源机器视觉的架构,使用了OpenCV和Python编程语言。

29. GluonCV

星标:4300,提交数:774,贡献者:101 

GluonCV提供了计算机视觉中最先进(SOTA)的深度学习模型。

30. Torchvision

星标:7500,提交数:1286,贡献者:334  

Torchvision包包含了流行的数据集、模型架构和计算机视觉中常用的图像转换方法。

AI研习社是AI学术青年和AI开发者技术交流的在线社区。我们与高校、学术机构和产业界合作,通过提供学习、实战和求职服务,为AI学术青年和开发者的交流互助和职业发展打造一站式平台,致力成为中国最大的科技创新人才聚集地。

如果,你也是位热爱分享的AI爱好者。欢迎与译站一起,学习新知,分享成长。

]]>
人工智能开发者 //www.xyschoolife.com/category/yanxishe/W00n4Q8Y41qd4MQb.html#comments Tue, 15 Dec 2020 15:11:00 +0800
数据分析 | 最适合学习英语的Netflix电影和电视剧有哪些? //www.xyschoolife.com/category/yanxishe/qvdWvzqLE45O01DM.html 译者:AI研习社(明明知道Icarus、求求你了救救孩子

双语原文链接:The Best Netflix Movies & Series to Learn English According to Data Science


截至2020年,Netflix上约有3712部电影和1845部电视节目。如果你正在学习英语,可供选择的内容很多,但你可能没那么多时间去看完。因此,我用数据科学技能来分析Netflix上前1500部电影和电视节目的剧本。经过大量的处理,我找到了Netflix上最好的英语学习内容。这样做的目的是为了给你提供很多好的选择,让你可以找到你喜欢的电影或电视节目,同时对学习英语也有好处,而不是强迫你看不喜欢的电视节目,因为你的老师和朋友坚持'它有助于大家学习英语'。

为了找到Netflix上最好的电影和电视节目,我比较了台本对话中使用的词汇。让我们找到哪些是最好的电视节目和电影。 

Netflix上词汇最简单的电视节目

Netflix上的美国和英国电视节目都是为母语为英语的人制作的。这就是为什么如果英语不是你的母语,你在理解某些场景中的对话时可能会遇到一些困难。我根据词汇量的难易程度对Netflix目录上的500个一流电视节目(223部Netflix原创节目)进行了排名。

《老友记》词汇简单,被认为是学习英语最好的电视节目之一。然而,这部电视剧在Netflix目录中只排在第78位,这意味着还有77部电视剧和《老友记》一样好——甚至更好!-可以在Netflix上学习英语并享受乐趣。例如,根据我的调查结果,电视剧《去他*的世界》(排名13)或《13个原因》(排名40)在其剧集中的词汇量甚至更简单。

你可以在下面的框中搜索电视节目名。你会发现他们的排名和词汇覆盖率。排名前十的电视节目在整个Netflix剧集列表中词汇最简单。

  

如果你正在寻找适合你英语水平的电视节目,那么我有一个好消息要告诉你, 我对所有节目的英语词汇量水平进行了排名(初级、中级、高级)。最靠右的节目在每个级别上使用的词汇量更多。覆盖率越高,你就越容易理解电视剧中的情节。

按词汇覆盖率排名的Netflix剧集

每个级别代表1000个最常见的英语单词。所有的电影都有所有级别的排名。1级代表 "初级水平",3级代表 "中级水平"。一集的覆盖率越高,越容易理解其词汇量。

黄色代表Lvl 1

红色代表Lvl 1+2

蓝色代表Lvl 1+2+3

图: Frank Andrade 来源: 用Datawrapper创建的电视学习语言

这些是在Netflix目录中发现的电视节目。可能有些你喜欢的电视节目不在Netflix上,但不要担心,我已经分析了其中一些电视节目,如《权力的游戏》《辛普森一家》。此外,Netflix目录在你的国家可能略有不同。这就是为什么我只列出了一个最有可能在全球范围内提供的Netflix原著。

Learn English with Game of Thrones: The Best Episodes

以下是学习英语的十大Netflix原创节目

  1. 妖灵(Jinn)

  2. 爱情起床号(Good Morning Call)

  3. 鱼妖怪谈(Tidelands)

  4. Easy  

  5. 黑色夏天(Black Summer) 

  6. 夏日时光 (Summertime)

  7. Baby  

  8. 上层男孩(Top Boy)

  9. 血统(Bloodline)

  10. 去他*的世界(The End Of The F*ing World) 

按词汇覆盖率排名的Netflix电影

如果你比较喜欢看电影,那么Netflix也有很好的电影来学习英语。我把Netflix上最受欢迎的950部电影(173部Netflix原创电影)按照词汇量的难度进行了排名。排名前100的热门电影有《蒙上你的眼 》(30)、《蜘蛛侠:平行宇宙》(84)和《当幸福来敲门》(81)。

通过下面的方框播放,看看还有哪些电影排在前100名。你还可以发现你喜欢的电影的排名和词汇覆盖率。

  

你可以在下面找到适合你英语水平的电影。最右边的电影有更多的初级、中级和高级词汇。但这些都是在 Netflix 目录中找到的排名靠前的电影,你不会在 Netflix 上找到像《哈利波特》、《阿凡达》、《玩具总动员》这样的电影,但如果你还想看这类电影,你应该看看我的另一篇文章,我分析了3000部最受欢迎的电影。你可以在这里找到它。

Netflix 的电影排行榜(根据词汇量)

每一级代表 1000 个最常见的英语单词。所有的电影都按等级排列。第 1 级代表“初级水平”,第 3 级代表“中级水平”。一集节目的收视率越高,词汇就越容易理解。

  

我还列出了 Netflix 在世界范围内最可能提供的原创电影列表,以防 Netflix 的目录在你的国家不一样。

以下是Netflix十大最适合学英语的原创电影:

  1. In The Tall Grass (2019)-在高草中

  2. A Secret Love (2020)-隐秘的爱

  3. Under The Riccione Sun (2020)

  4. Dangerous Lies (2020)-危险的谎言

  5. Bird Box (2018)-蒙上你的眼

  6. Who Would You Take To A Deserted Island (2019)

  7. Earthquake Bird (2019)

  8. Love Wedding Repeat (2020)

  9. Paddleton (2019)

  10. 6 Balloons (2018)-六个气球

在向英语学习者展示 Netflix 上最好的内容之前,让我们比较一下最好的和可能最差的内容,仅针对词汇量难度来说。

Netflix 词汇最易懂和最难懂的原创剧

以下图片显示了排名前十和后十的网飞原创电影在英语词汇难度上的差别。正如你所看到的,在过去的 10 年中,使用的词汇更加困难。例如,你只需要知道最常见的 1000 个英语单词就能理解电影《 蒙上你的眼 》中 94,5% 的单词,但你需要至少3000个单词来涵盖电影《Spelling The Dream 》中 94.5% 的对话。这额外的 2000 个单词可能就是你不懂的原因——即使你的英语水平已经很高了!

数据集

为了进行分析,我使用了 3 个主要数据集,它们由文本、Netflix 目录和 Netflix 原创列表组成。我在谷歌上搜索,直到我找到了大量用于分析的转录本。我用目录来匹配 Netflix 上的字幕。你可以在 Kaggle 上找到 Netflix 的目录数据集。从 2019 年开始,Netflix 上就可以看到它的内容,所以可能有些电影或电视节目现在还不能在 Netflix 上看到。最后,我在这里找到了一份截至 2020 年的 Netflix 原创剧集列表,这对分析很有帮助。

方法

我用 Python 做了所有这些分析,这是我准备数据的方式:

Tokenization:为了分析文字记录中的词汇,我将字符说的所有单词标记化。Python中有许多用于标记化的工具,但是我使用 CountVectorizer,因为它将收集的转录本转换为标记计数的数据格式,从而简化了分析。在分析了 3000 部电影的文章中,我进一步解释了 CountVectorizer 是如何工作的。

词形还原(Lemmatization)在标记化之后,我必须找到每个标记的基本形式。您可以通过使用象 lemmizing 这样的技术来实现这一点,您可以在 NLTK 库中找到这些技术。不过,我使用了类似的单词族列表,而且还根据单词出现的频率给出了每个单词的难度水平。到 2020 年,有 29 个单词家族列表,你可以在这里找到。这些列表是对与语言学和英语作为第二语言学习相关的研究论文进行评估的。

数据清理:我删除了在电影或片段中听不到的单词,比如场景描述和讲话者的名字。我还排除了对话中超过 3.5% 的单词与单词家族列表不匹配的抄本(它们可能是异常值或被破坏的数据)。
所有的代码都可以在 Github 上找到!

关于分析和结果

我用来对电视节目中的词汇进行分类的单词表,大部分都来自语料库。词汇水平是根据一个词在语料库中被发现的频率来确定的,即这些文本中最常见的词被标注为 1 级。尽管之前的研究已经证明了该列表是可靠的,但对于具有多种含义的单词,它并不那么准确。例如,单词 “draw” 在列表中被标记为第 1 级。之所以会出现这种情况,是因为这个词通常指“拍照”,但如果它的意思是“拿出武器来攻击某人”或“得出结论”,那么它就不属于第一级。

我花了几个星期的时间寻找、清理、处理数据,然后弄清楚得到的结果。然而,研究结果并不完美。关于电影的研究结果可能比电视节目更准确。电影的文字记录是独一无二的,但电视节目播出的剧集不同,这增加了每部电视节目的文字记录数量。这就是为什么我收集了每个节目 3 到 10 集的样本,以获得该电视节目平均每集涵盖的词汇。

总的来说,调查结果揭示了很多适合每个词汇水平的内容,但其中一些还是让我吃惊。比如,《行尸走肉》排在第 62 位,这让我很吃惊。我不是那个电视节目的粉丝,但我不认为一个有僵尸的虚构节目在对话中使用简单的词汇。在查看了文字记录后,我证实了《行尸走肉》中对词汇的需求在整集都有很多起伏。也就是说,有些情节可能比其他情节更难理解。


AI研习社是AI学术青年和AI开发者技术交流的在线社区。我们与高校、学术机构和产业界合作,通过提供学习、实战和求职服务,为AI学术青年和开发者的交流互助和职业发展打造一站式平台,致力成为中国最大的科技创新人才聚集地。

如果,你也是位热爱分享的AI爱好者。欢迎与译站一起,学习新知,分享成长。

]]>
人工智能开发者 //www.xyschoolife.com/category/yanxishe/qvdWvzqLE45O01DM.html#comments Sat, 12 Dec 2020 09:21:00 +0800
AI领域 | 改变游戏规则的十个突破性观点 //www.xyschoolife.com/category/yanxishe/HntehSgGPY9X4ZnS.html 译者:AI研习社(porchy一只白猫

双语原文链接:10 Game-changing AI Breakthroughs Worth Knowing About



从我的AI之旅开始,我发现了一些具有无穷潜力的想法和概念,它们在辉煌的历史上留下了自己的印记。

今天,我决定整理一些最有趣的想法和概念的清单(根据我自己的经验),这些想法和概念让我这些年来都坚持不懈。希望他们也能像激励我一样激励你。

因此,让我们从AI爱好者的“初恋”开始。 

1.神经网络-“来自仿生学的灵感”

每个使用统计模型(例如回归模型和所有模型)的新机器学习(Machin Learning,ML)开发人员,在首次学习人工神经网络(Artificial Neural Networks,ANN)时都经历了肾上腺素激增的过程;这是处在深度学习的门口。

这里,基本思想是通过编程来模仿生物神经元的工作,实现通用函数逼近

神经科学和计算机科学这两个领域的融合本身就是一个令人兴奋的想法。 我们将在以后进行详细探讨。

数学上,突触和连接如何浓缩为大规模的矩阵乘法; 神经元的放电与激活函数如何类似,如S函数(sigmoid); 大脑中的高级认知抽象和人工神经网络的黑匣子听起来如何既神秘又酷。 所有的这些给新的ML开发人员带来了希望,这是不可思议的。
图源:作者提供(Canva制作)

在这一点上,新手认为:“从根本上说,这种受生物启发的技术可以实现一切。 毕竟,大自然选择了执行流程的最佳、最有效的方式,难道不是吗?”

 只有在以后的课程中,他们才会学习ANN的部分启发方式,因此仍会有很大的局限性。

从理论上讲,一切听起来都不错,但他们不切实际的雄心勃勃的梦想就消失了,就像在错误配置的神经网络训练课程中的梯度一样(get到这个点了吗?哈哈)。

2.基因算法-“向达尔文问好”

基因算法是另外一类可以应用于计算机科学领域的受自然启发得到的算法。在这里你会找到与达尔文进化论有关所有的术语,有如-突变,繁衍,人口,交叉,适者生存等等。

这些进化算法背后的思想是遵循自然选择,只有最适应环境的个体才有机会繁衍后代。而为了在人口中增加一些多样性,最适应环境的个体所拥有的染色体每过一段时间就会随机地突变一次。

在这里,“个体”指的是给定问题的一个可能的答案

来看一下它的工作流

图源:来自于作者(使用Canva设计出来的)

简洁明了,不是吗?

这个看起来简单的算法在现实世界中可以应用在很多场景,例如-优化,递归神经网络的训练过程,某些问题解决任务的平行化,图像处理之类的。

尽管有这么多的可行方向,基因算法目前还没有任何实际成果。

3.自我编辑程序 -“需要小心的程序员”

作为基因算法应用的延续,这一个当然是最令人兴奋的,而它也值得拥有一个独立的小节。

想象存在一个AI程序可以修改它自身的源代码。它一次又一次地改进着自己,循环多次,直到它最终实现了自己的目标。

很多人相信,

自我改进/编辑代码+AGI=AI超级智慧

显然,要实现这个方法还存在有很多困难,但想一下2013年的这个实验:一个基因算法可以用Brainfuck(一种编程语言)来构造一个可以打印出“hello”的程序。

那个基因算法的源代码中没有写入任何的编程原则,只是一个朴素,古老的自然选择算法。在29分钟之内,它生成了这个-

+++><>.]]]]

当你在Brainfuck编译器中运行这段代码时,它会打印“hello”。这个实验成功了!

这证实了基因算法的威力,也展现出了在给予足够的时间和计算资源下它的能力。

4.神经常微分方程 -“螺旋层”

回到几年前,在4854份递交到NeurIPS的研究论文中,这篇名为“神经常微分方程”的论文脱颖而出,成为了最好的4篇论文之一。

它有什么了不起的呢?因为它确切地改变了我们对神经网络的看法。

传统意义上的神经网络拥有的层数是离散的,同时依赖于梯度下降和反向传播来进行优化(寻找全局最小值)。当我们增加层数时,我们的内存消耗也在增加,但我们不再需要那么做,理论上说。

我们可以从离散层模型转换成连续层模型-从而拥有无限层。

源:上面提到的研究论文

我们不需要事先确定层数。而是输入你想要的精确度然后看着以常数内存为代价的魔术发生。

根据这篇论文,这个方法在时间序列数据中(特别是不规则的时间序列数据)比传统的递归神经网络和残差网络的表现都要更好。

  源:上面提到的研究论文

利用这种新的技术,我们可以使用任何常微分方程求解器(OOE Solver),像是欧拉方法来取代梯度上升,使得整个过程更有效率。

而且正如你所知,时间序列数据无所不在-从证券市场的金融数据到医疗保健产业,因此一旦这项技术成熟它的应用将十分广泛。但它目前仍然有待发展。

希望它能往好的方向发展吧!

5.神经进化-“再一次地模仿自然”

神经进化是一个过去的想法,最早可以追溯到二十一世纪初期,由于最近在强化学习的领域中和著名的反向传播算法进行比较而显示出其前景和发展。比如在神经架构搜索,自动机器学习,超参数优化等领域。

用一句话来说,“神经进化是一项利用基因算法改进神经网络的技术”,不仅仅可以改进权重和参数,还能改进网络的(拓扑)结构(最新的研究)。

这是一场梯度下降优化算法和进化优化算法在训练神经网络模型上的战役。

源:https://blog.otoro.net

但我们为什么要使用它呢?

因为,在Uber最近的研究中(深度神经进化),他们发现这项技术比起反向传播可以使模型更快的收敛。在比较低端的PC上几天的计算时间可以缩短为几个小时。

如果你正在用梯度下降训练一个神经网络并卡在了像局部最优点或者梯度弥散的地方,那么神经进化可以帮你得到更好的结果。

你不需为这项替换付出。在每个神经网络被应用到的场所,这项技术都可以被用来优化并训练它们。

“两个脑袋比一个脑袋来的要好,不是因为有某个脑袋不容易出错,而是因为它们不太可能犯同一种错误。"-C.S Lewis

6.谷歌的AI孩子-”AI创造AI“

调整超参数是一项每个数据科学家都深恶痛绝的繁琐而又无聊的任务。由于神经网络实际上是一个黑盒子,我们无法明确地知道我们改变的超参数会如何影响一个网络的学习。

在2018年,谷歌在自动机器学习(AutoML)的世界中作出了一项突破,制作出了一个叫做NASNet的模型。这个物品识别模型拥有82.7%的准确率,比计算机视觉领域内的其他任何模型都要高1.2%,同时效率还要至少高出4%。

最重要的是,它是通过使用强化学习的方法,在另外一个AI的帮助下发展而成的。

  图源:谷歌研究院

“神经网络设计神经网络”。。。这确实是一个惊人的想法,你不这么认为吗?

在这里,它的家长AI叫做Controller network(控制者网络),它在数千次的迭代中逐步培养出其AI孩子。在每次迭代中,它计算出孩子的性能并使用这个信息来在下一次迭代中建造一个更好的模型。

这种创造性的思考方式推动了”学会学习“的概念(或者元学习),从而不论是从准确性还是效率都可以击败这个星球上任何人类所设计出来的神经网络。

想象一下在计算机视觉的领域之外它还能做什么。难怪这个概念激起了人们对于超级过载人工智慧最深的恐惧。

7. GANs-”神经网络 vs. 神经网络“

GAN是生成式对抗网络的简写,它们可以学会模仿任意的数据分布。

这是什么意思呢?

在GANs之前,机器学习算法专注于寻找输入和输出之间的关联。它们被叫做判别算法。例如,一个图像分类器可以区分苹果和橙子。

当你把一张照片输入到网络中时,它或返回0(我们让它指代苹果)或者返回1(指橙子)。你可以认为它在分配标签。它在内部创建了一个模型,确定了哪些特征对应了苹果,哪些特征对应了橙子,然后吐出一个带有一定概率的标签。。
然而。。。尽管它们在内部可能有办法用某种方式表示苹果和橙子从而对它们进行比较,但它们没有办法生成出苹果和橙子的图片。

这里就是GANs拿手的地方。一个GAN包含了两个网络-一个生成器和一个鉴别器。

沿用之前的例子,如果我们想要生成一张苹果的照片,那么我会使用一个解卷积网络来作为我的生成器以及一个卷积网络来作为我的鉴别器。

这个生成器一开始只会生成一张随机的噪声图像并试着让它看起来像是一个苹果。另一方面,鉴别器会试着鉴别出输入的图片是真实的还是伪造的(由生成器所生成)。

如果鉴别器可以正确地区分出图片,那么生成器就要努力改进自己去生成出更加真实的图片。同时鉴别器也努力提高自己的判别能力。这意味着,不管如何,改进都是不可避免的,问题只是它发生在鉴别器身上还是生成器身上而已。

这看起来有点像一种双重反馈循环。

GANs的复杂性使得它们难以训练,最近在英伟达发布的一篇研究论文中他们描述了一种方法,通过渐进地改进生成器和鉴别器来训练GANs。(有趣的说法!)。

关于GAN的机制我们说的足够多了,那么我们该如何使用它呢?

一些酷炫的GAN的应用:

  • 使面孔变老

  • 超高分辨率

  • 图像混合

  • 衣服转换

  • 3D物体生成,之类的。

更多信息可以参见这篇文章。

8.迁移学习-”使用预先训练好的网络“

从零开始训练一个神经网络是需要昂贵的计算成本,有时还会变得非常混乱。但试想一下我们可以从另外一个以前在其他数据集上已经训练好的网络中获取知识,并将其重新用在我们新的目标数据集的训练过程中。

这样子,我们可以加速在新的领域上进行学习的过程并且节省大量的计算能耗和资源。可以把它想成是一场起点比其他人要靠前的跑步比赛。

不要把你的时间浪费在重复造轮子上

显然,你不可以把这项技术用在两个毫不相关的领域上,但在一些领域上-自然语言处理和计算机视觉,使用已经训练好的网络是一种新的规范

  Source:https://www.topbots.com/

计算机视觉领域中,在物品侦测,物品识别,和图像分类任务中,人们会使用像VGG ConvNet,AlexNet,ResNet-50,InceptionV3,EfficientNet之类的已经预训练好的网络。特别是在任务刚开始的阶段。

即使是在像神经风格转移(NST)这样的任务上,你可以使用VGG19来迅速获取内在表示从而节省时间。

在如情感识别和语言翻译的NLP任务中,各类的不同词向量嵌入方法如斯坦福的GloVe(表示词汇的全局向量)或者谷歌的Word2Vec都是标配。

我不想提及那些最新的语言模型(那些大家伙)如谷歌的BERT,OpenAI的GPT-2(生成式预训练Transformer),和全能的GPT-3。他们都是在我们这些平民难以想象的海量的信息中训练出来的。他们几乎把整个网络作为他们的输入数据集并花费了数百万美元来进行训练。

从这一点而言,它看起来像是未来我们使用的预训练网络。

9.神经形态架构 -”次世代材料“

在看了那么多软件世界的进展之后,我们来关注一下硬件部分。

但在那之前,先来看一下这个荒谬的对比。。。

人类的脑子里平均有860亿个神经元和大约1千万亿突触。直观地说,你实际上可以通过解开你的脑子来到达月球(用400000千米长的神经纤维)。

如果你想要模拟你的脑子,你需要消耗大量的计算能源(1百亿亿次运算),这是在现有的技术水平上无法实现的。

即使是最强大的超级计算机也无法实现这么大的运算量,更别提我们的大脑仅仅需要20瓦的电力(比点燃一个灯泡还少)就可以做到这种程度。

为什么?因为”架构“

图源:https://randommathgenerator.com/

你知道吗,今天我们用到的每一台计算机都是基于一个有75年历史的架构,即冯诺依曼架构。在这个架构中,内存和处理器是相互分离的,这使得我们在执行大运算量的任务,如大型矩阵乘法,时存在着性能瓶颈。

这个冯诺依曼瓶颈的产生是因为我们执行一系列指令的时候传入输入和得到输出的过程是有顺序的。但在我们的脑子中,进行记忆和处理的单元本质上是同一个,这使得它可以用闪电般的速度处理巨量的数据同时只需要消耗极小量的能量。在这里,连接记忆和处理单元的就是记忆本身。

有一些公司例如IBM和Intel正尝试模拟一个像我们生物的脑子一样的架构。它最终会催生出一种新的计算方式,神经形态计算。

使用多块GPU和TPU的日子就要到头了。我真的迫不及待那一天的到来!

进展:IBM的真北芯片和Intel的神经形态芯片。

10.通用人工智能(AGI)-“我们的终极目标”

当你听到有人嘶喊到“总有一天,AI会把我们都杀光。”那么通用人工智能最有可能做出这样的事情。

为什么?

因为现在我们正在处理的是“弱人工智能”意思是我们现在的模型在它们的特定领域之外一无是处。但是,全球的科学家和研究人员都在致力于产生一种可以完成各类任务,或者能学会完成几乎任何给定任务的人工智能。

如果他们成功了,可以预测到的是,这会导致智慧爆炸,远超人类的智慧并最终催生出超级智能。

当这件事发生的时候,那个超级智能会变成一个拥有知觉,自我意识,以及更高的认知能力的存在。

源:https://www.theverge.com(实在忍不住放上这张照片)

之后会发生什么?只有天知道。

有一个专门的词来形容这种情况。Singularity是一个假设的时间点,到那个时候技术发展会变得不可控且不可逆,最终对人类文明产生不可预见的改变。-维基百科

我们不能简单地停止它的发展吗?不。

人工智能就像是今天的电能一样。我们对它拥有着重度依赖,停止它的发展就像是回到黑暗时代。此外,没有国家会停止它的发展因为有一种共同的心态-”即使我们不发展,他们也会“-就像我们制造具有大规模杀伤力的核武器时的心态。

埃隆马斯克的担心并非空穴来风。他是认真的。

总结

我觉得已经说出了一些制造一个完美AI的方法的要点。但谁在乎呢?除非我们有办法和他们共存。

我希望在Neuralink工作的人们能够在世界末日之前完成他们的人脑-机器接口。且埃隆马斯克设法在不把我们的脑子暴露给新世代黑客的情况下使用它。

为了一个乌托邦式的未来,我们可以暂时停止争论。最后我想说,我非常享受写这一篇文章,我希望你也能乐在其中。


AI研习社是AI学术青年和AI开发者技术交流的在线社区。我们与高校、学术机构和产业界合作,通过提供学习、实战和求职服务,为AI学术青年和开发者的交流互助和职业发展打造一站式平台,致力成为中国最大的科技创新人才聚集地。

如果,你也是位热爱分享的AI爱好者。欢迎与译站一起,学习新知,分享成长。

]]>
人工智能开发者 //www.xyschoolife.com/category/yanxishe/HntehSgGPY9X4ZnS.html#comments Fri, 11 Dec 2020 12:02:00 +0800
准备开始学习NLP,我该系统地看哪些书和课程? //www.xyschoolife.com/category/yanxishe/3Qo7f0tZK0xIhmvf.html 译者:AI研习社(听风1996姚晗

双语原文链接:My Recommendations for Getting Started with NLP


自2013年以来,我一直在研究自然语言处理(NLP),当时手动特征工程在机器学习领域非常流行。从那时起,我们已经走了很长一段路。我实际上是为我的博士专门研究信息检索和机器学习技术的,尤其是它们如何应用于社交计算和计算语言学,同时还开发了从大规模基于文本的数据中高效提取信息的方法。我很幸运有将经典机器学习应用于NLP的经验,并亲眼目睹了该领域深度学习的爆炸式增长。

许多学生一直在要求我为如何开始自然语言处理准备指南。这篇博客文章旨在根据研究,对该领域的了解和个人经验来帮助他人。尽管这不是直接指南,但我在此处共享的资源可以帮助您根据需要创建自己的NLP学习路径。这将是我多年来遇到的教育资源的结合。我将分享我在研究这些资源及其适用方面的经验。

这份清单无论如何都不是详尽无遗的,但是它应该提供一些选择,对于任何有兴趣开始使用NLP的人来说都是一个很好的起点。您实际上并不需要消耗所有内容。只需选择适合您当前需求的资源即可。例如,也许您已经有了一些理论基础,而您只需要获得开发生产中的NLP系统的最佳实践。在这种情况下,您可以直接跳至建议,以获取有关NLP技术的动手经验。我只是在介绍我个人学习过的内容,我敢肯定还有很多其他我想念的资源,如果有任何建议,请随时发表评论。

Speech and Language Processing

by Dan Jurafsky and James H. Martin

学习基础知识对于学习任何一门学科都是至关重要的。我是非常推崇这一点的,因为这对我来说很有效。我关注这本书已经有一段时间了,现在已经是第三版了。这本书所涉及的材料写得特别好,为NLP提供了一个很好的理论基础。对于任何想要开始学习NLP的人来说,这有可能是一个很好的起点。即使我已经读过这本书,我也会定期回顾它,因为它定期更新该领域的最新发展。如果你真的很喜欢这本书,你也会发现这些讲座很有用,因为它们确实涵盖了书中所涉及的很多基本主题。

Linguistic Fundamentals for Natural Language Processing: 100 Essentials from Morphology and Syntax

by Emily M. Bender

Emily Bender是我最喜欢的语言学研究者之一。她的工作对我所从事的研究产生了巨大的影响,使我能够采用更加严谨的方法来进行关于NLP研究。NLP深受语言学的影响,事实上,Emily 主张用语言学的规则来指导NLP的发展。她的书为NLP中使用的语言学概念进行了一个精彩的介绍。对于任何从事NLP的学生来说,这都是一本必读的书。

Linguistic Structure Prediction

by Noah A. Smith

本书主要介绍自然语言处理与机器学习之间的联系,涵盖了统计,基于计算方法建模语言结构。本书假定你已经对机器学习有一定的接触。如果你对机器学习不太熟悉,可以在这里查看我做的机器学习推荐列表。建议你至少要做一门机器学习的入门课程,才能最大限度地利用这本书。

https___bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com_public_images_c9193afd-19d6-47bd-a8cb-cd54d3e081c8_260x320.jpeg  

Introduction to Natural Language Processing

by Jacob Eisenstein

这是我最喜欢的NLP书籍之一,因为它专注于讨论语言学概念和应用。它涵盖了波束搜索、最大似然估计、矩阵因子化等方法。然后,它解释了如何利用这些方法来解决广泛的任务,如分类、词性标注、关系提取、语言建模等。这本书假定读者具备多元演算和线性代数等知识。这本书直接推荐的一本书是《机器学习数学》一书。与其他书相比,它是一本更高级的教科书,它确实需要对机器学习和数学概念有所了解。

Neural Network Methods in Natural Language Processing (Synthesis Lectures on Human Language Technologies)

by Yoav Goldberg

如果你刚刚开始学习NLP的旅程,你可能已经接触到NLP中更现代的方法,比如RNN和其他基于深度学习的模型。如果您正在寻找关于神经网络理论上的全面综述以及它们如何在NLP中使用,这本书就是为你准备的。在本书中找到的参考文献对我自己的研究起到了重要作用。

  

Modern Deep Learning Techniques Applied to Natural Language Processing

by Soujanya Poria and Elvis Saravia

关于NLP的现代方法,我还想推荐我和Soujanya Poria一起整理的这个开放资源。它会引导你了解NLP领域的一些最新发展,从单词嵌入到注意力机制再到强化学习。

CS224N: Natural Language Processing with Deep Learning | Winter 2019

by Christopher Manning and Abigail See

如果你最近刚开始接触NLP,你可能已经接触过这门流行的NLP课程。所有的讲座和幻灯片都是公开的,你可以在课程网站上找到它。这门课程非常注重NLP的深度学习方法,所以你会看到第一讲直接从词向量开始,然后过渡到卷积网络和transfomer等更高级的主题。如果你对经典的NLP方法感兴趣,你可能要看看开头提到的一本书。事实上,我强烈建议你这样做,因为它是对构建实际NLP系统在实践中有用的宝贵知识。

这样的理论知识很好,但是无论您是NLP研究人员还是工程师,都必须通过动手实践对其进行补充。我发现这些书对于在语言建模和基于文本的分类等主题上进行练习非常有用。

Natural Language Processing with PyTorch: Build Intelligent Language Applications Using Deep Learning

by Delip Rao and Brian McMahan

https___bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com_public_images_b6ce8dd7-9f30-40c4-adce-b831fa83f8b9_381x499.png  

尽管这本书是基于PyTorch的,但用深度学习构建语言应用的实践还是很不错的。此外,还有一些传统概念和方法的内容和代码,比如TF-IDF和语义,等等。如果你是一名PyTorch开发人员,你会发现本书很容易上手。

Natural Language Processing in Action

by Hobson Lane, Cole Howard, and Hannes Hapke

这是另一本特别的书,也是我最喜欢的一本书,可以让你对所有的NLP进行实战练习。这本书指导你如何从语料库建立第一个词汇,一直到建立一个聊天机器人。这本书中有很多代码示例,所以如果你喜欢敲代码,它可能很适合你。

Practical Natural Language Processing

by Sowmya Vajjala, Bodhisattwa Majumder, Anuj Gupta, and Harshit Surana

在NLP的动手实践,我非常喜欢今年出版的这本书。它涵盖了从NLP的各种实际应用到部署NLP系统的最佳实践等主题。尽管我对这本书只读了一半,但我还是不得不把它收录进来,因为有很多NLP工程师都想熟悉如何更有效地构建NLP系统,了解构建NLP系统所需的技术。

⭐️ 附录(奖励)
这里有一些其他资源和项目,可以帮助你保持对NLP领域的了解。

关于如何开始对NLP学习,我的建议就到这里了。重要的是,你要选择最适合自己的内容。我已经尝试为每个条目提供一些解释,希望能帮助你创建自己的学习路径。这些都是我遇到的最好的资源,我发现它们对扩展我的知识甚至教授这些概念非常有用,更不用说将它们应用于研究思路和构建从语义搜索引擎到情感分类器的NLP系统了。


AI研习社是AI学术青年和AI开发者技术交流的在线社区。我们与高校、学术机构和产业界合作,通过提供学习、实战和求职服务,为AI学术青年和开发者的交流互助和职业发展打造一站式平台,致力成为中国最大的科技创新人才聚集地。

如果,你也是位热爱分享的AI爱好者。欢迎与译站一起,学习新知,分享成长。

]]>
人工智能开发者 //www.xyschoolife.com/category/yanxishe/3Qo7f0tZK0xIhmvf.html#comments Thu, 10 Dec 2020 10:33:00 +0800
Twitter从Recsys 2020挑战中学到了什么 //www.xyschoolife.com/category/yanxishe/ucpstXPIuicnPDEF.html 译者:AI研习社(听风1996

双语原文链接:What Twitter learned from the Recsys 2020 Challenge


ecommender系统是现代社交网络和电子商务平台的重要组成部分。它们旨在最大限度地提高用户满意度以及其他重要的商业目标。与此同时,在以根据用户兴趣定制内容为目的来建立新模型基准测试时,缺乏供学界研究使用的大规模的公共社交网络数据集。而在过去的一年里,我们努力解决了这个问题。 

Twitter与RecSys会议展开合作以支持2020挑战赛。在两周的时间里,我们发布了一个包含推文和用户参与度组成的数据集,其中有1.6亿条公开推文用于训练,4000万条公开推文用于验证和测试。    

在这篇文章中,我们描述了数据集以及Nvidia、Learner和Wantely团队提交的三个获奖作品。我们试图对帮助获奖者取得成绩的选择做出一般性的结论,特别是:

以最快的实验速度用于特征选择和模型训练

  • 有利于泛化的对抗验证[1]

  • 上下文特征的使用

  • 在神经网络上使用决策树

我们希望这些研究结果对更广泛的研究界有用,并启发推荐系统的未来研究方向。

挑战赛的参与者被要求预测用户参与四种互动中任何一种互动的可能性:赞、回复、转发和引用tweet。我们根据以下两个指标对提交的作品进行评估:相对于我们所提供的简单基准方法的相对交叉熵(RCE),以及Precision-Recall曲线下的面积(PR-AUC)。

随时间的变化的训练、测试和验证数据集的表示

我们要特别注意(我们所使用的)维持数据集需与Twitter平台同步。数据集反映了平台上的变化,例如,当其中的一条推文被删除,有用户将其个人资料变为私有或完全删除。所以提交的数据就会被重新评估,排行榜也会根据重新计算的指标进行更新[2]。

数据集的特征表示。它们分为用户特征(针对作者和读者)、推文特征和参与度特征。

今年的挑战赛竞争尤为激烈,注册用户超过1000人。在整个挑战过程中,参赛者积极提交解决方案,并在挑战的第一阶段(根据提交指南)修改了他们的团队组成。最后阶段有20个竞争者,平均团队规模为4名成员。此外,各队总计设计了127种不同的方法,来尝试赢得挑战比赛。在整个挑战过程中,参赛者的活跃度很高,在最后几天,参赛者对提交的作品进行了改进,达到了做最优性能。最终的结果出现在排行榜上。

与之相伴的RecSys Challenge 2020研讨会收到了12篇论文,程序委员会对这些论文进行了审阅。其中9篇论文被接受。

数据集的特征表示。它们分为用户特征(针对作者和读者)、推文特征和参与度特征。

今年的挑战赛竞争尤为激烈,注册用户超过1000人。在整个挑战过程中,参赛者积极提交解决方案,并在挑战的第一阶段(根据提交指南)修改了他们的团队组成。最后阶段有20个竞争者,平均团队规模为4名成员。此外,各队总计设计了127种不同的方法,来尝试赢得挑战比赛。在整个挑战过程中,参赛者的活跃度很高,在最后几天,参赛者对提交的作品进行了改进,达到了做最优性能。最终的结果出现在排行榜上。

与之相伴的RecSys Challenge 2020研讨会收到了12篇论文,程序委员会对这些论文进行了审阅。其中9篇论文被接受。

第一名:英伟达

GPU Accelerated Feature Engineering and Training for Recommender Systems.

Nvidia的论文[3]描述了训练xgboost模型来预测每个交互事件。总体的关注点在于为该模型生成有用的特征。文章强调快速提取特征和模型训练是该方法成功的关键。本文在附录中提供了4种模型中每种模型的15个最有用的特征列表。

从数据集中快速提取特征并进行再训练是冠军和亚军的关键区别。特征工程流程和训练流程的运行时间都不到一分钟。除此之外,对不同的分类特征和特征组合采用目标编码(均值编码+加法平滑),包括这些组合的目标均值。作者还从推文的内容中创建了分类特征(如最受欢迎的两个词和最不受欢迎的两个词)。用于特征重要性评估和选择的对抗性验证 通过选择更通用的特征来防止过拟合。 采用基于树模型的集成方法用于生成最终模型。  

第二名:Learner

Predicting Twitter Engagement With Deep Language Models.

Learner[4]融合了深度学习与梯度提升决策树(GBDT),并专注于不同特征的创建。作者使用启发式方法设计了467个特征,并使用BERT和XLM-R生成了推文的文本表示(同时使用了目标Twitter文本以及最近参与的Twitter文本)。

该条目与其他条目的关键区别在于使用了预训练的自然语言处理(NLP)模型BERT和XLM-R,并进行了微调。第一层的微调是以无监督的方式进行的。接下来,将语言模型与其他特征结合以有监督的方式进行微调。。该模型是一个多层感知机(MLP),有四个头,每个头代表一种参与类。本文还引入注意力机制生成了用户过去十次互动的嵌入向量。以目标推文为关键,利用注意力机制对每个的嵌入向量进行组合。此外,还使用了启发式特征,如参与用户、推文创建者、推文特征和用户与创建者交互特征的不同表示。与其他条目一样,本文使用xgboost进行特征工程和选择,并将Yeo-Johnson transformation应用于分类特征和非标准化连续特征。  

第三名:Wantely

A Stacking Ensemble Model for Prediction of Multi-type Tweet Engagements. 

Wantely的投稿[5]提出了一种预测tweet参与度的两阶段方法。第一阶段的分类器是轻量级的,只使用在不同目标(Like、Retweet等)中通用的特征,并且具有相似的训练/测试精度。第二阶段分类器将轻量级分类器的输出与特定于目标的特征一起用作特征。  

上游的通用模型生成下游模型所需的特征。作者认为,通过这样的方式,每种参与类型的下游模型都可以从所有其他参与的数据中受益。除此之外,除此之外,如Nvidia条目所示,本文通过对抗性验证直接评估训练和测试数据集之间的特征分布差异,从而确定了哪些特征是可通用的。    

在所有提交的论文中,有许多相同的见解。我们重点介绍以下主题:

胜出模型中使用的有用特征—目标编码是王道。首先,目标编码(用目标变量的平均值替换分类变量)使问题变得更简单。它同时用于用户和作者id,因此编码了用户的平均参与率。其次,使用了大量特征交叉[6]。  

快速实验进行特征选择。快速检验许多假设的能力一直是数据科学竞赛中不可或缺的一部分,并再次证明在这一挑战中具有决定性作用。Nvidia团队能够在GPU上运行整个流程。这让他们只需2分18秒就能训练出一个模型(包括特征工程),而在CPU上则需花费数小时。

通过对抗性验证来应对过度拟合。比赛选手常用的一种技术是建立一个判别器来预测训练和测试/验证集之间的差异。根据模型选择特征时使用的重要性分数,通过去除最重要的特征,可以帮助模型更好地泛化。此技术有助于避免训练数据过拟合。

上下文特征的使用。今年的数据集和之前的数据集的一个重要区别是我们提供的上下文特征。在三篇获奖论文中,有两篇对基于上下文特征的BERT进行了复杂的使用。NLP中的深度学习方法已经证明了它对推荐系统的有用性,尽管我们认为在这个领域还有更多的改进空间。

决策树与深度学习。梯度增强决策树(GBDT)的一个显著优势是,无需对单个特征的尺度进行归一化和计算。这使得所有胜出论文的迭代速度更快。

在计算机视觉和NLP等领域,深度学习模型已经通过利用CNNs和transfomer展示了令人印象深刻的进展。基于这一挑战的结果,我们仍然不明白在推荐系统中什么构成良好的深度学习架构。我们呼吁研究界共同寻找推荐器系统的最佳深度学习架构。

我们也注意到,虽然我们只对提交的模型的性能进行了评估,但在生产系统中还有许多其他限制。对我们来说,延迟是一个大问题:模型需要在毫秒内对推文进行评分。在这种情况下,需要仔细检查集成方法的使用。集成中每一步的附加延迟都可能会导致它们对我们的目标来说太慢。

我们感谢所有参与者和我们的同事使这得一挑战成为可能。我们相信,发布大规模数据集将有助于解锁推荐系统领域的新进展。Twitter现在比以往任何时候都致力于帮助外部研究,并且最近为学术研究人员发布了新的API端口,以帮助促进进一步的探索和合作。  

[1] J. Pan et al. Adversarial validation approach to concept drift problem in user targeting automation systems at Uber (2020) arXiv:2004.03045. Introduces adversarial validation, a powerful technique used by several participants.

[2] L. Belli et al. Privacy-Aware Recommender Systems Challenge on Twitter’s Home Timeline (2020) arXiv:2004.13715 provides the details about the challenge and the dataset.

[3] B. Schifferer et al., GPU Accelerated Feature Engineering and Training for Recommender Systems (2020). Proc. Recommender Systems Challenge 2020. Nvidia’s submission, also described in their blog post.

[4] M. Volkovs et al., Predicting Twitter Engagement With Deep Language Models (2020). Proc. Recommender Systems Challenge 2020. Learner’s submission.

[5] S. Goda et al., A Stacking Ensemble Model for Prediction of Multi-Type Tweet Engagements (2020). Proc. Recommender Systems Challenge 2020. Wantely’s submission.

[6] The full list of features with importance for different objectives like Retweet/Reply is available in the appendix of the Nvidia paper.


AI研习社是AI学术青年和AI开发者技术交流的在线社区。我们与高校、学术机构和产业界合作,通过提供学习、实战和求职服务,为AI学术青年和开发者的交流互助和职业发展打造一站式平台,致力成为中国最大的科技创新人才聚集地。

如果,你也是位热爱分享的AI爱好者。欢迎与译站一起,学习新知,分享成长。

]]>
人工智能开发者 //www.xyschoolife.com/category/yanxishe/ucpstXPIuicnPDEF.html#comments Sun, 06 Dec 2020 09:06:00 +0800
本体和知识图谱之间的区别是什么? //www.xyschoolife.com/category/yanxishe/Q2XuoRqH4Kx47MUz.html 译者:AI研习社(洛克•麦金托小海绵

双语原文链接:What’s the Difference Between an Ontology and a Knowledge Graph?


随着语义应用程序成为业界越来越热门的话题,客户经常来EK询问有关本体和知识图谱的问题。具体来说,他们想知道两者之间的区别。本体和知识图谱是一回事吗?它们有何不同?两者之间是什么关系?

在这篇博客中,我将引导您了解本体和知识知识图谱,讲述它们之间的区别以及它们如何组织大量数据和信息。 

什么是本体? 

本体是语义数据模型,用于定义domain中事物的类型以及可用于描述它们的属性。本体是广义的数据模型,这意味着它们仅对具有某些属性的事物的一般类型进行建模,而并不包含有关我们domain中具体个体的信息。例如,本体论不能描述您的狗,斑点和它的所有个体特征,主要描述狗的一般概念,尝试描述大多数狗可能具有的特征。这样做可以使我们在将来用本体来描述其他狗。 

本体有三个主要组成部分,通常描述如下:

  • 类: 存在于数据中的不同类型的。

  • 关系:连接两个类的属性。

  • 属性:描述单个类的属性。

例如,假设我们有以下关于书籍、作者和出版商的信息:

首先,我们要标识类(数据中事物的唯一类型)。这个示例数据似乎捕获了关于书籍的信息,因此它是类的一个很好的候选项。具体来说,示例数据捕获了关于书籍的某些类型的内容,比如作家和出版商。再深入一点,我们可以看到我们的数据还捕获了关于出版商和作者的信息,比如他们的位置。这给我们留下了这个例子中的四个类:

  • 书籍

  • 作者

  • 出版商

  • 位置

下一步,我们需要标识关系和属性(为了简单,我们可以将关系和实体属性都视为属性)。使用我们在之前定义的类,我们可以查看数据并开始列出我们看到的每个类的所有属性。例如,在书籍类中,一些属性可能是:

  • 书籍有作者

  • 书籍有出版商

  • 书集是在一个日期出版的

  • 书籍之后有续集(其他书)

其中一些属性是连接两个类的关系。例如,关系属性“书籍有作者”是一个连接书籍类和作者类的关系。其他属性,像“书籍发布的日期”是实体属性,只描述一个类,而不是将两个类连接在一起。

需要注意的是,这些属性可能适用于任何给定的书籍,但它们不一定适用于每一本书。例如,很多书都没有续集。这在我们的本体中很好,因为我们只是想确保我们捕获了可能适用于许多(但不一定是所有)书籍的属性。

虽然上面的属性列表很容易阅读,但是重写这些属性以更清楚地定义我们的类和属性会有所帮助。例如,“书籍有作者”可以写成:

书→有作者→作者

尽管你可以包括更多的属性,这取决于你的用例,对于这个博客,我已经定义了以下属性:

  • 书→有作者→作者 

  • 书→有出版商→出版商

  • 书→出版于→出版日期

  • 书→后面是→书 

  • 出版商 →位于→位置

  • 位置→位于→位置

记住,我们的本体是一个通用的数据模型,这意味着我们不想在本体中包含关于特定书籍的信息。相反,我们希望创建一个可重用的框架,将来我们可以用它来描述其他书籍。

当我们结合类和关系时,我们能够以图的形式查看本体:

什么是知识图谱?

使用本体作为一个框架,我们可以添加关于个别书籍、作者、出版商和位置的真实数据来创建一个知识图谱。利用上面表中的信息和本体,我们可以创建每个本体关系的特定实例。比如,如果我们的本体中有这样的关系“书籍→有作者→作者”,这个关系的单个实例如下:

如果我们把我们拥有的关于《杀死一只知更鸟》这本书的所有信息加进去,我们可以看到知识图谱的开端:

如果我们对所有的数据都这么做,我们最终会得到一个使用本体对数据进行编码的图。通过使用知识图谱,我们可以将数据看作一个关系网络,而不是作为单独的表格在我们无法理解的数据点间绘制新的连接。具体来说,使用SPARQL,我们可以查询数据和使用推理功能(让知识图谱建立之前没有定义的连接)。

那么本体和知识图谱有什么不同呢?

正如你在上面例子中所看的,当你将本体(我们的数据模型)应用到一组单独的数据点(书籍、作者和出版商数据)时,那么就是创建了一个知识图谱。换句话说:

本体+数据=知识图谱


AI研习社是AI学术青年和AI开发者技术交流的在线社区。我们与高校、学术机构和产业界合作,通过提供学习、实战和求职服务,为AI学术青年和开发者的交流互助和职业发展打造一站式平台,致力成为中国最大的科技创新人才聚集地。

如果,你也是位热爱分享的AI爱好者。欢迎与译站一起,学习新知,分享成长。

]]>
人工智能开发者 //www.xyschoolife.com/category/yanxishe/Q2XuoRqH4Kx47MUz.html#comments Sat, 05 Dec 2020 09:54:00 +0800
2020全球NLP行业报告:NLP技术预算增长高达30% //www.xyschoolife.com/category/yanxishe/lp59xGal8Tdx3pwq.html 译者:AI研习社(Icarus、

双语原文链接:The State of Enterprise NLP in 2020


2020年对于公共卫生、职业生活、经济以及日常生活的几乎所有其他方面来说,都是独一无二的一年。虽然一些机会正在消失,另一些则正在转变其商业模式,罕见没有受到冲击的企业。尽管如此,还是有一些行业正在蓬勃发展,不仅仅是虚拟会议或医疗保健。

自然语言处理(NLP)就是其中一个领域。事实上,根据MarketsandMarkets™的研究,NLP市场规模预计将从2019年的102亿美元增长到2024年的264亿美元。使用用例在医疗保健环境中帮助患者和从业者,简化客户服务查询,甚至虚拟帮助购物者,有几个增长因素推动了NLP技术的增长。无论你是新手还是有经验的数据科学家,NLP都能帮助用户更快、更聪明、更准确地工作。

要想了解NLP在未来几年的发展状况,我们首先需要了解NLP现在的状况——从挑战、成功、最普遍的使用案例等方面。为此,John Snow实验室与Gradient Flow合作,最近发布了新的研究报告,探讨了NLP在不同行业、不同地域、不同应用水平的使用情况。知识就是力量,这项调查的目标是通过了解组织如何使用NLP技术,帮助IT领导者实现NLP的全部潜力。

这项全球调查询问了来自50多个国家的近600名受访者,全面了解了2020年NLP的采用和实施状况。下面的关键调查结果将有助于为行业树立一个基准,并预测我们在未来一年内NLP的发展方向。

NLP支出正在上升:尽管今年IT支出不景气,但有趣的是,NLP预算全面增加,报告的NLP技术预算比去年增加了10-30%。考虑到该调查是在全球COVID-19大流行的高峰期进行的,而当时全球的IT支出都在下降,这一点尤其重要(Gartner)。53%的受访者是技术领导者,他们表示他们的NLP预算与2019年相比至少增加了10%,其中31%的受访者表示他们的预算比前一年至少增加了30%。同样的趋势也适用于大公司(员工人数超过5000人的公司),其中61%的受访者表示2020年的预算会增加。

云计算的使用带来了挑战。77%的受访者表示,他们至少使用列出的四种NLP云服务中的一种——谷歌、AWS、Azure或IBM。尽管基于云的服务很受欢迎,但受访者认为成本是他们在使用NLP云服务时面临的主要挑战。此外,人们还担心可扩展性,因为许多NLP应用依赖于特定领域的语言使用,而云提供商在服务这些市场需求方面进展缓慢。尽管如此,53%的受访者表示至少使用了两大NLP库中的一个,即Spark NLP和spaCy,这是一个更准确和更具成本效益的选择,做出这个选择这并不奇怪。

准确性很重要,也很有挑战性。超过40%的受访者指出,准确性是他们评估NLP库的最重要标准。考虑到NLP在关键应用中的使用,如电子健康记录或在医疗环境中检测不良药物事件,这一点尤为重要。另一方面,准确性也是所有受访者最常提到的挑战。然而,当观察技术领导者时,这种情况略有改变。集成问题、语言支持和可扩展性与准确性并列成为紧迫的挑战。幸运的是,语言支持等领域正在大幅改善。谷歌和Facebook等公司正在发布150多种语言的预训练嵌入。而NLP库也在跟进。

分类和NER是主要用例。NLP最受欢迎的四个应用是文档分类、命名实体识别(NER)、情感分析和知识图谱。来自医疗保健领域的受访者认为,去识别是另一个常见的NLP用例。自动化的NLP曾经是一个极其人工和劳动密集型的过程,现在已经使这一负担大大减轻。NER和分类是医疗机构看到巨大价值的另外两个NLP用例。例如,这些应用可以帮助医疗专业人员快速、准确地识别患者的药物不良事件(ADE),改善医疗服务,减轻医疗系统的负担和成本。

数据来源。来自文件(如pdf、txt、docx等)和数据库的数据在NLP项目中使用的数据来源中名列前茅(61%)。从法律合同和新闻文章,到医疗记录和SEC文件,这些输入文件通常以PDF格式存储。虽然深度学习模型在过去几年中有所改进,但在从PDF中提取文本时,有许多困难和数据质量问题。有趣的是,仍在探索NLP的公司与那些在采用曲线上走得更远的公司在数据源上存在一些差异。处于探索阶段的受访者报告使用音频数据的比例(29% )高于那些更进一步的受访者(22%)。

根据NLP在过去一年中的增长轨迹,其势头很明显将持续到2021年。随着时间的推移和即将到来的技术增强,采用和使用案例如何发展将是有趣的。NLP有能力改变我们的工作方式,给予和接受医疗护理,购物,以及与客户服务的接口。虽然其中一些案例可能比其他案例更具影响力,但它们都将塑造我们更好的工作和生活方式。


AI研习社是AI学术青年和AI开发者技术交流的在线社区。我们与高校、学术机构和产业界合作,通过提供学习、实战和求职服务,为AI学术青年和开发者的交流互助和职业发展打造一站式平台,致力成为中国最大的科技创新人才聚集地。

如果,你也是位热爱分享的AI爱好者。欢迎与译站一起,学习新知,分享成长。

]]>
人工智能开发者 //www.xyschoolife.com/category/yanxishe/lp59xGal8Tdx3pwq.html#comments Fri, 04 Dec 2020 11:41:00 +0800
AI专家们推荐的“必读”论文 【Part 2】 //www.xyschoolife.com/category/yanxishe/yYRFRv18itJv5BqH.html 译者:AI研习社(季一帆

双语原文链接:‘Must-Read’ AI Papers Suggested by Experts - Pt 2


我们之前写了一篇文章,向大家推荐了一些AI必读论文,引起很好的反响。现在,我们推出了第二篇文章。这次推荐的论文依然是分量十足、诚意满满,各位推荐者都认为自己推荐的论文是AI人员必读的经典之作,不知各位读者怎么看。现在,我们来看看这次入选的是哪些论文吧!

不过在这之前,我还是向您推荐我们之前的那一篇文章,那篇文章也绝对值得一读。


推荐人:MILA博士研究员,Alexia Jolicoeur-Martineau

推荐论文1:f-GAN: Training Generative Neural Samplers using Variational Divergence Minimization (f-GAN: 使用变分散度最小化训练生成神经采样器)- Sebastian Nowozin et al.

https://arxiv.org/pdf/1711.04894.pdf

Alexia提出可以将若干分类器视为估计f散度,于是,GAN可以被解释为最小化估计和散度。在论文中,Microsoft Research的研究人员详细介绍了相关工作、论文方法和实验验证。阅读原文获取更多信息。

推荐论文2:Sobolev GAN - Youssef Mroueh et al.

https://arxiv.org/pdf/1711.04894.pdf 

本文将WGAN-GP中的梯度范数惩罚视为约束鉴别器,从而使其unit-ball具有梯度。论文的数学论证极其复杂,但我们只要记住,关键在于可以对鉴别器添加各种各样的约束。这些限制条件可以防止鉴别器过分严格。论文中的Table1非常重要,我曾数次翻阅该论文,只为查看Table1,该表显示了可用的各种不同约束。阅读原文获取更多信息。


推荐人:DeepMind高级研究员,Jane Wang

老实说,我并不会觉得有哪篇论文要比其他论文更重要,因为我认为所有论文都是相互依存的,而科学是协作的成果。但还是要说,就我个人而言,还是会更加偏爱一些论文的,从这些论文中我受益匪浅,但这并不是说其他论文不好。这只意味着,我个人比较喜欢以下两篇论文。

推荐论文1:Where Do Rewards Come From? (奖励从何而来?)- Satinder Singh et al.

https://all.cs.umass.edu/pubs/2009/singh_l_b_09.pdf 

本文提出了一种通用的奖励计算框架,在给定适应度函数和环境分布的情况下,该框架给出了最优奖励函数的概念。实验结果表明,在此最佳奖励函数中,传统的外在和内在行为概念均有体现。阅读原文了解更多信息。

推荐论文2:Building machines that learn and think like people (让机器向人类一样学习与思考)- Brenden Lake et al

https://www.cambridge.org/core/journals/behavioral-and-brain-sciences/article/building-machines-that-learn-and-think-like-people/A9535B1D745A0377E16C590E14B94993 

本文回顾了认知科学的进展,表明要想实现真正像人类一样学习和思考的机器,需要当前研究的创新性改进。具体来说,我们认为这样的机器应具有以下能力:1)建立可解释的、可理解的世界因果模型,而不仅仅是解决模式识别问题;2)在物理学和心理学层面进行学习,以支持和丰富机器所学知识;3)利用相关性以及学会学习使机器快速获取知识,并扩展到新的任务和情况。阅读原文了解更多信息。


推荐人:WinterLight Labs机器学习负责人,Jekaterina Novikova

推荐论文1:Attention Is All You Need (“笨蛋”,根本问题是注意力)- Ashish Vaswani et al.

https://arxiv.org/abs/1706.03762 

在NLP科学家于2017年提出"Attention is All You Need"之后,BERT或GPT-2 / 3等大型预训练语言模型如雨后春笋般出现。这些模型令人称奇的结果不仅引起了ML / NLP研究人员的强烈关注,在公众中也引起波澜。例如,2019年,OpenAI宣称GPT-2“太过危险而不能公开”,这说法简直让人抓狂,但事实是,GPT-2确实能够生成与真实新闻无法区分的假新闻。几周前发布的GPT-3甚至被称为“自比特币以来最大的新闻”。阅读原文了解更多信息。

推荐论文2:Climbing towards NLU: On Meaning, Form, and Understanding in the Age of Data (迈向NLU:关于数据时代的意义,形式和理解)- Emily M. Bender et al.

https://www.aclweb.org/anthology/2020.acl-main.463.pdf 

AI大热,但我希望向你泼点冷水,冷静下来好好看看2020年7月ACL会议的最佳主题论文-“迈向NLU:关于数据时代的意义,形式和理解”。作者认为,尽管现有模型(例如BERT或GPT)成果丰硕,但与人类相比,很难说它们是理解了语言及其含义。作者解释道,理解是人们在交流中,根据所说话语明白对话意图时发生的。这样,如果仅仅是语言文字,没有现实生活中的交互作用,则不可能学习和理解语言。换句话说,“从一定形式中是学习不到意义的”,这就是为什么即使巨大且复杂的语言模型也只是学习意义的“映射”,而不能了解意义本身。阅读原文了解更多信息。


推荐人:加拿大国家银行,AI科学首席顾问,Eric Charton

推荐论文1:The Computational Limits of Deep Learning (深度学习中的计算极限)- Johnson et al

https://arxiv.org/abs/2007.05558 

麻省理工学院和IBM Watson Lab发表的这篇论文对DL出版文献进行汇总分析,介绍了DL模型训练计算量的增加与其性能表现间的相关性。同时论文指出,随着计算能力的提高,模型性能改善呈放缓趋势。阅读原文了解更多信息。

推荐论文2:Survey on deep learning with class imbalance(关于类别不平衡的DL综述). Journal of Big Data, 6(1), 27.

https://link.springer.com/article/10.1186/s40537-019-0192-5 

该论文汇总介绍了不同DL算法是如何处理类别不平衡问题,该问题存在于信用建模、欺诈检测或医学检测/癌症检测等各种工业应用中。论文对不同方法进行比较分析,并着重介绍了各种方法处理类别不平衡数据的差异,为进一步的研究指明方向,阅读原文了解更多信息。


推荐人:NASA,机器学习主管,Anirudh Koul

也许几年后回头看,人们会发现2020年似乎是自我监督元年。自监督学习就是用非标注数据进行预训练,然后在有限标注的下游任务进行微调。仅在2020年6月之前,众多SOTA被先后打破,包括但不限于PIRL,SimCLR,InfoMin,MOCO,MOCOv2,BYOL,SwAV,SimCLRv2等众多自监督学习方法引起广泛关注。通过以下这个例子来感受一下这些方法究竟多么让人称奇吧。仅仅使用不带标签的ImageNet,然后用1%的标签进行微调,SimCLRv2模型就可以在ImageNet数据集上实现92.3%的Top-5准确性。很神奇吧,仅仅1%的标注就可以取得这样令人满意的结果。对于缺少标注数据的领域如医学、卫星等来说,自监督学习就是这些领域应用的福音。

推荐论文:A Simple Framework for Contrastive Learning of Visual Representations (一个简单的图像表示对比学习框架)- Ting Chen et al

https://www.aclweb.org/anthology/2020.acl-main.463.pdf  

优秀的论文不仅实验严密、结果出色,而且还能简介明了的向读者清晰的表达自己的关键思想。SimCLR就是如此,简洁明了,效果出色,这使其成为对比学习领域最值得阅读论文之一。研究表明,在特定数据集中,通过数据增强策略获得更好的图像表示,对于对比学习至关重要。希望更多研究者关注到SimCLR,在X射线、MRI、音频、卫星图等领域推动该方法进一步的研究与发展。


推荐人:摩根士丹利副总裁,NLP/ML研究员,Oana Frunza

Revealing the Dark Secrets of BERT (BERT探秘)- Olga Kovaleva et al.

https://arxiv.org/abs/1908.08593 

BERT Transformer结构极大推进了机器对文本数据的表示和理解能力,对于NLP的研究发展具有革命性的意义,可以说这就是NLP的“ImageNet”。Transformer架构的关键在于自我注意机制,“BERT揭秘”一文便对注意力的背后原理进行了探讨。

更准确地说,这项研究量化了注意力头捕获的语言信息,包括句法和语义关系等。此外,论文还进一步研究了自我注意模式的多样性及其对各种任务的影响。

该论文的研究聚焦于深层次理解强大的transformer架构,不仅利于推动该领域的进一步发展,而且有利于研究人员做出更明智的决策。也就是说,如果知道某些精简的小型体系结构会产生相似的性能,这就意味着在架构设计和空间占用方面有了更好的选择。

阅读原文了解更多信息。


推荐人:捷豹路虎,高级数据科学家,Tamanna Haque

推荐书籍:Deep Learning with R (R语言深度学习)- François Chollet et al.

本文从概念到实践对深度学习进行详细介绍,对于理解深度学习具有重要帮助。由于黑匣子性质,神经网络不仅训练成本高昂,而且不具可解释性。同时,最近数据保护法规的更改将推动可解释AI的研究,神经网络受到挑战。

尽管如此,在某些商业应用中,只有神经网络才能有效地完成工作,因此掌握神经网络技术依然至关重要。在我使用R语言进行一年左右的深度学习研究与实践中,本书是我的良师益友,指导我熟练地使用神经网络并完成图像识别项目。


推荐人:伯克利数据科学学院,首席ML科学家兼ML/AI负责人,Mike Tamir

推荐论文1:Right for the Wrong Reasons: Diagnosing Syntactic Heuristics in Natural Language Inference(错误的真正原因:自然语言推理中的启发式句法诊断)

我推荐的第一篇论文是MaCoy,Pavlick和Linzen的“错误的真正原因:自然语言推理中的启发式句法诊断”,论文表明transformer架构显著推动了自然语言推理等NLU任务的进步。在技术研究之外,“错误的真正原因”强调了基于当前数据集的系统缺陷,这在NLU任务中是致命漏洞。本论文将提醒AI从业者和研究人员保持清醒与理智。阅读原文了解更多信息。

推荐论文2:Emergence of Invariance and Disentanglement in Deep Representations(深度表示中的不变和解耦)

我推荐的第二篇论文是关于DL信息瓶颈分析的,也就是Achille和Soatto的研究成果“深度表示中的不变和解耦”,阅读博客了解详细信息。


推荐人:蒙特利尔AI伦理研究所,创始人,Abhishek Gupta

https://montrealethics.ai/the-state-of-ai-ethics-report-june-2020/  

推荐论文The State of AI Ethics ReportAI伦理道德报告)

在蒙特利尔AI伦理研究所,我们一直在关注一些最具影响力的论文,这些论文不仅关注AI伦理的常见问题,而且基于经验科学并能指导实践。为此,我们将过去一个季度的工作整理成《 AI伦理道德报告,2020年6月》,用于指导该领域的研究人员和从业人员在实践过程中遵守AI伦理责任。该报告的内容包括但不限于,NLP模型中对残疾人的社会偏见,YouTube反馈回路的潜在缺陷,AI治理,即在AI中实施道德规范的整体方法以及对抗性机器学习-行业观点。阅读原文了解更多信息。


AI系统与策略实验室,首席AI科学家,Jack Brzezinski

推荐论文:The Discipline of Machine Learning(机器学习学科建设)

http://www.cs.cmu.edu/~tom/pubs/MachineLearning.pdf  

本文简要介绍了机器学习学科建设纲要,机器学习要解决的基本问题和与其他科学和社会的关系,以及进一步的发展方向。阅读原文了解更多信息。


AIRAmed,机器学习工程师,Diego Fioravanti

推荐论文:Overfitting(过拟合)

https://en.m.wikipedia.org/wiki/Overfitting

Diego认为AI人员要对“过拟合”有清晰完整的了解。本文涉及内容涵盖统计推断,回归等。阅读原文了解更多内容。


AI研习社是AI学术青年和AI开发者技术交流的在线社区。我们与高校、学术机构和产业界合作,通过提供学习、实战和求职服务,为AI学术青年和开发者的交流互助和职业发展打造一站式平台,致力成为中国最大的科技创新人才聚集地。

如果,你也是位热爱分享的AI爱好者。欢迎与译站一起,学习新知,分享成长。

]]>
人工智能开发者 //www.xyschoolife.com/category/yanxishe/yYRFRv18itJv5BqH.html#comments Thu, 03 Dec 2020 10:52:00 +0800
最强通用棋类AI,AlphaZero强化学习算法解读 //www.xyschoolife.com/category/yanxishe/H6EDRFZoLlDFhirb.html 译者:AI研习社(Champagne Jin

双语原文链接:AlphaZero, a novel Reinforcement Learning Algorithm, in JavaScript


在本篇博文中,你将会了解并实现AlphaZero。AlphaZero是一个令人大开眼界且超乎寻常的强化学习算法,它以绝对的优势战胜了多名围棋以及国际象棋冠军。本文将会带你使用AlphaZero来解决一个益智小游戏(Dots and Boxes)并将其部署成一个纯JavaScript构建的Web应用。

AlphaZero最关键也是最令人诧异的一点,就是其能够在不依赖于外部先验知识的情况下在棋盘类游戏中获得超越人类的表现。AlphaZero通过自我博弈汲取经验知识来不断精通游戏。

企业微信截图_16050751082630.png

我们会借助于Github上由Surag Nair开发的一个“简化后的、高度灵活的、经过注释的且易于理解的”Python版AlphaZero来进行该项目。

你大可以先去这里玩一玩这个游戏。而Web应用以及具体的JavaScript实现代码可以在这里获取得到。这份代码是从该Python实现中移植过来的。

https://carlos-aguayo.github.io/alphazero/  

有关AlphaZero的原理,你可以阅读这篇由Silver,David等人撰写的论文:Mastering the game of Go without human knowledge” nature 550.7676 (2017): 354–359.

Dots and Boxes小游戏

Dots and Boxes是一个常见的儿童益智游戏,不过其具有令人讶异的复杂度

该游戏中,两名玩家轮流在两个相邻点之间放置一条水平或垂直线。如果某个 1×1 的小正方形的 4 条边都被连上了,那么补齐这个小方块的一方就获得 1 分,得分的玩家被奖励多走一步,再连一条线。当棋盘已满时,游戏结束,并且得分最高的玩家获胜。

(译者注:这个游戏相当有意思,建议先去玩玩看,点这里。能不能战胜AlphaZero就看你了!)

企业微信截图_16050752684879.png

人工智能与棋盘游戏

机器是否能够产生智能,我们已经为此思考了很久很久。那么,该如何验证机器具有智能呢?一个常用方法就是玩棋盘游戏,比如国际象棋,看看其是否具有超人的能力,甚至击败世界冠军。

1957年,Herbert Simon预言计算机系统能够在十年内击败国际象棋冠军。虽说实际上花的时间长了点,但是在1997年5月,计算机击败了当时的国际象棋冠军——Garry Kasparov

(译者注:战胜Kasparov的机器被命名为DeepBlue,意为“深蓝”)

尽管这一里程碑事件意义非凡,但人们仍可以争论这一计算机系统是否“智能”。

这一类计算机系统由以下三个组件构成:

1. 人为定义的评价函数

2. 博弈树搜索算法

3. 极为强悍的硬件设备。

评价函数会将棋盘盘面作为输入并输出该盘面的“价值”。高价值表示当前玩家处于非常有利的位置。例如,在国际象棋棋盘上,玩家即将进行“将死”时就会对应一个非常高的值。

博弈树搜索算法(比如 Minimax)在所有可能的走棋中进行搜索,寻找那些能够确保得到高价值棋盘盘面的路径。对于那些已经明知不可能有效的路径可以直接放弃搜索,从而使算法变得更有效率。这就是 Alpha-beta剪枝 的作用。

最后,搭配上异常强悍的硬件,你就将拥有一台能够打败国际象棋世界冠军的机器。

问题在哪儿?经验丰富的棋手人为地精心调制这些评价函数。这些计算机系统还依赖于一本本记录着最佳走棋的开局棋谱。游戏中局,还会用到通过研究大师们的博弈而精心构造的评价函数。这些函数还会经由象棋大师们进一步的优化调整。

例如,我们完全就可以为 Dots and Boxes 构造一个评价函数。一个合理而直接的选择就是做一个得分的比较。得分的正向差值越大,游戏盘面就对我们越有利。大多数情况下,这是可行的。然而,在 Dots and Boxes 中,就像许多其他棋盘类游戏一样,最佳的走法可能需要牺牲短期利益来换取长期利益。在 Dots and Boxes 游戏中,有时最好不要急于得分并获得额外先手,相反,要迫使对手走某一步棋。因此,我们必须考虑大量复杂场景并精心调制评价函数!

击败Kasparov的评价函数需要识别多达8000个盘面特征!而且其中绝大多数都是手动描述并调整的!

所以,倒也不是贬低这个击败国际象棋世界冠军重要里程碑的意思,只是,需要顶级玩家来定义这些计算机的行为并手动调整如此多的变量实在是有够折腾人的。

AlphaZero是什么?为何它如此令人心潮澎湃?

AlphaZero是首个能够在国际象棋、围棋等游戏中达到超越人类水平、击败世界冠军的计算机系统,且它仅依赖于游戏规则,无需任何人类先验知识。

仅凭给定的游戏规则,AlphaZero即可进行自我博弈。逐步习得游戏策略与技巧,很快即可获得超人的表现。

像DeepBlue这样的系统会需要国际象棋专家的协助,而AlphaZero却是凭借自我博弈来变强大的。不单单是在国际象棋上,哪怕是围棋,AlphaZero同样表现出超越人类的强大统治力。考虑到围棋相较于其他棋盘游戏更大的博弈空间等因素,对计算机来说,围棋是个极为复杂的游戏。

人类从几千年来数百万次的博弈中方才积累了诸如围棋和国际象棋等游戏的技艺,而AlphaZero,一个仅使用游戏规则信息的算法,却能够在几天时间内重新寻获这些知识并发现新的游戏策略。

甚至还有一部关于它的纪录片

(译者注:这部纪录片很值得一看,无法访问YouTube的同学可以在B站观看,链接在此。不过需要注明的是,本纪录片中实际上使用的是AlphaGo算法,而非AlphaZero,准确来说,AlphaZero是AlphaGo的进阶版本,全名为AlphaGo Zero。纪录片中与李世石博弈的AlphaGo在跟AlphaGo Zero 博弈时,0-100全负,并且,AlphaGo Zero在训练中未使用任何手工设计的特征或者围棋领域的专业知识,仅仅以历史棋面作为输入,其训练数据全部来自于自我博弈。可谓恐怖如斯!)

AlphaZero是怎么做到仅凭自我博弈就习得技艺的呢?

回想一下,像DeepBlue那样依赖于人为定义的“评价函数”的系统会把棋盘的盘面状态作为输入,再输出该状态的“价值”。

如今,对于深度学习模型来说,输入一张照片然后识别出照片里是猫还是狗简直简单到爆了。那么有个想法就是,把棋盘盘面作为一个深度学习模型的输入并且训练它,让它预测这样的盘面布置是会输还是会赢。

但是,要训练一个机器学习模型,就需要数据,海量的数据。从哪儿能得到那么多棋局博弈的数据呢?很简单,我们就让电脑自己跟自己下着玩儿,生成一堆棋局,然后再把它们做成一个数据集用来训练。

AlphaZero的训练算法

这个算法简单明了:

1. 让计算机自我博弈数局,记录每一步走棋。一旦胜负已分,就给之前的每一步走棋打上标签——棋面最终是“赢”或是“输”。如此一来,我们就获得了一个可以用于神经网络(Neural Network,NN)训练的数据集,让该网络学会判断给定棋面是“赢面”还是“输面”;

2. 复制这个神经网络。用上一步得到的数据集训练该克隆网络;

3. 让克隆网络与原始神经网络互相博弈;

4. 上一步中获胜的网络留下,败者弃之;

5. 重复第1步。

呼哈,就像是魔法似的,经过多轮迭代后,你就将获得一个世界级模型。这个模型在短短4小时内便超越了最强大的计算机象棋程序。

AlphaZero的组件

AlphaZero由两部分构成。我们已经提及了第一部分,就是神经网络。第二部分则是“蒙特卡洛树搜索(Monte Carlo Tree Search)”,或者简称MCTS。

1. 神经网络(NN)。以棋面作为输入,输出该棋面的“价值”,外加所有可能走法的概率分布。

2. 蒙特卡洛树搜索(MCTS)。理想情况下,使用神经网络就足以选择下一步走法了。不过,我们仍然希望考虑尽可能多的棋面,并确保我们的的确确选择了最好的走法。MTCS和Minimax一样,是一种可以帮助我们寻找可能棋面的算法。与Minimax不同的是,MTCS能够帮助我们更加高效地搜寻博弈树。

让我们深入细节,看一看下一步走棋究竟是如何得到的

我们不妨先看看AlphaZero在决定下一步走棋(竞技模式)时具体干了什么,然后再去探究它的训练过程,这样可以帮助我们更容易地理解AlphaZero。

神经网络在分类这件事儿上表现得异常出色,例如区分猫跟狗。所以这里的想法很简单直接,神经网络能学会区分棋局输赢的类别吗?更具体地来说,就是让神经网络预测一个表示棋局输赢概率的数值。此外,它还将输出所有可能走法的概率分布,来表示我们下一步应该如何决策。

神经网络将博弈状态作为输入并输出一个输赢概率数值以及所有可能走法的概率分布。对于Dots and boxes这个小游戏来说,游戏状态由三个元素表示:首先,某一条线是否已被占用,这可以用一个含有0与1的数组来表示,如果玩家已经画了某条线,则置其为1,否则为0;第二,当前的走法是否是空过;第三,双方玩家的得分。我们可以用这三个元素来表示所有需要的信息,用其计算当前盘面的价值并预测下一步的走法。

让我们分析一下下图中的博弈情形,该轮轮到蓝色玩家走。蓝色方有两个选择,按照图中上面的走法来画线就会输,按照下面的走法就会赢。

  (译者注:左下角是每根线的编号。如果你刚刚已经在网页上跟AlphaZero玩过这个游戏了,那么相信这张图是很容易理解的。上方第一种走法只顾眼前短期利益,最终葬送好局。)

如果蓝色方走23再走21,那么红色方必赢。然而,如果蓝色方走23后再走9,那蓝色方就赢了。要是AlphaZero在蓝色方,它怎么知道哪一种走法能够赢下来呢?

你可以用这个在线notebook复现我们即将呈现的效果。

将棋面送入神经网络,我们就能得到下一步走在不同位置的概率:

move_probability[0]: 9.060527501880689e-12
move_probability[1]: 3.9901679182996475e-10
move_probability[2]: 3.0028431828490586e-15
move_probability[3]: 7.959351400188552e-09
move_probability[4]: 5.271672681717021e-11
move_probability[5]: 4.101417122592821e-12
move_probability[6]: 1.2123925357696643e-16
move_probability[7]: 6.445387395019553e-23
move_probability[8]: 2.8522254313207743e-22
move_probability[9]: 0.0002768792328424752
move_probability[10]: 1.179791128073232e-13
move_probability[11]: 5.543385303737047e-13
move_probability[12]: 3.2618200407341646e-07
move_probability[13]: 4.302984970292259e-14
move_probability[14]: 2.7477634988877216e-16
move_probability[15]: 1.3767548163795204e-14
move_probability[16]: 8.998188305575638e-11
move_probability[17]: 7.494002147723222e-07
move_probability[18]: 8.540691764924446e-11
move_probability[19]: 9.55116696843561e-09
move_probability[20]: 4.6348909953086714e-12
move_probability[21]: 0.46076449751853943
move_probability[22]: 2.179317506813483e-20
move_probability[23]: 0.5389575362205505
move_probability[24]: 5.8165523789057046e-15

同时,我们还能得到当前棋局的赢面有多大:

-0.99761635

你可以在这里查阅与这些输出相关的代码。

这些输出值有一些很有意思的地方,我们来细品一下:

  1. 在所有可能画线的位置,23号、21号以及9号的概率值最大。如果神经网络选择在23号以及21号位置处画线,那么它就能够得到1分。另外,23号才是能够赢下来的走法,而相应地,从网络输出的概率来看,23号位置的概率(0.53)恰好比21号的(0.46)稍微高一点儿。

  2. 神经网络也会给不能够画线的位置输出一个概率值。虽然如此,但是代码上还是要进行限制,以确保计算机不会在不合规则的位置画线。

  3. 棋面的输赢概率为-0.99。这意味着AlphaZero认为它已经输掉游戏了。这个概率值的范围是-1(输)到1(赢)。这个值本应该很接近于1(赢)而不是-1(输)的,毕竟我们知道目前这个局面赢面很大。也许我们应该多训练几轮来让AlphaZero准确预估棋面的输赢概率。

我们很容易利用神经网络的输出来决定下一步的走法。

在棋盘游戏中(现实生活中也是),玩家在决定下一步怎么走的时候往往会“多想几步”。AlphaZero也一样。我们用神经网络来选择最佳的下一步走法后,其余低概率的位置就被忽略掉了。像Minimax这一类传统的AI博弈树搜索算法效率都很低,因为这些算法在做出最终选择前需要穷尽每一种走法。即使是带有较少分支因子的游戏也会使其博弈搜索空间变得像是脱缰的野马似的难以驾驭。分支因子就是所有可能的走法的数量。这个数量会随着游戏的进行不断变化。因此,你可以试着计算一个平均分支因子数,国际象棋的平均分支因子是35,而围棋则是250

这意味着,在国际象棋中,仅走两步就有1,225(35²)种可能的棋面,而在围棋中,这个数字会变成62,500(250²)。在Dots and Boxes游戏中,对于一个3×3大小的棋盘,初始的分支因子数是24,随着棋盘不断被填充,这个数字会不断减少(除非空过)。所以,在行至中局,分支因子变为15的时候,仅走3步就会有多达2730(15*14*13)种可能的棋面。

现在,时代变了,神经网络将指导并告诉我们哪些博弈路径值得探索,从而避免被许多无用的搜索路径所淹没。现在神经网络告诉我们23号和21号都是非常值得一探究竟的走法。

接着,蒙特卡洛树搜索算法就将登场啦!

蒙特卡洛树搜索(MCTS)

神经网络为我们指示了下一步可能的走法。蒙特卡洛树搜索算法将帮助我们遍历这些节点来最终选择下一步的走法。

去这个链接看看论文中有关蒙特卡洛树搜索的图形化描述。

使用MCTS的具体做法是这样的,给定一个棋面,MCTS共进行N次模拟。N是模型的超参数。N次模拟结束后,下一步的走法将是这N次模拟中所经次数最多的一步。你可以由这里的代码一窥究竟:

# https://github.com/suragnair/alpha-zero-general/blob/5156c7fd1d2f3e5fefe732a4b2e0ffc5b272f819/MCTS.py#L37-L48

for i in range(self.args.numMCTSSims):  # self.args.numMCTSSims, the number of MCTS simulations to compute
   self.search(canonicalBoard)  # "search" is a MCTS simulations

s = self.game.stringRepresentation(canonicalBoard)
# Count how many times we have visited each node
counts = [self.Nsa[(s, a)] if (s, a) in self.Nsa else 0 for a in range(self.game.getActionSize())]

if temp == 0:
   # Pick the node that was visited the most
   bestAs = np.array(np.argwhere(counts == np.max(counts))).flatten()
   bestA = np.random.choice(bestAs)
   probs = [0] * len(counts)
   probs[bestA] = 1
   return probs

进行N次MCTS模拟

一次MCTS模拟从当前的棋盘状态出发,沿着博弈树中具有最大“置信区间上界(UCB)”值(后文会给出定义)的节点不断向下追溯,直到遇到之前从未见过的棋盘状态,也叫做“叶子”状态。这就是原论文中Part A所谓的“选择(Select)”。

置信区间上界是什么呢?用数学形式来说就是 Q(s, a) + U(s, a)。其中 s 是状态,a 是走法。Q(s, a) 是我们希望由走法“a”构成状态“s”能够获得的期望值,与Q-Learning中的期望值一致。记住了,在这种情况下,该值的范围是-1(输)到1(赢)。U(sa) ∝ P(sa) / (1 + N(sa))。这意味着U正比于P和N。其中,P(s, a) 是元组 (s, a) 的先验概率值,这个值是从神经网络那里得到的,而 N(s, a) 是已经访问过状态 s 与对应的走法 a 的次数。

# Upper Confidence Bound
ucb = Qsa[(s,a)] + Ps[s,a] * sqrt(Ns[s]) / (1 + Nsa[(s,a)]

UCB的要点在于,其起初更倾向于具有较高先验概率(P)和较低访问次数(N)的走法,但渐渐地会倾向于具有较高动作价值(Q)的走法。

你不妨看看这里的代码好好理解一下。

# https://github.com/suragnair/alpha-zero-general/blob/5156c7fd1d2f3e5fefe732a4b2e0ffc5b272f819/MCTS.py#L105-L121
cur_best = -float('inf')
best_act = -1

# pick the action with the highest upper confidence bound
for a in range(self.game.getActionSize()):
   if valids[a]:
       if (s, a) in self.Qsa:
           u = self.Qsa[(s, a)] + self.args.cpuct * self.Ps[s][a] * math.sqrt(self.Ns[s]) / (
                   1 + self.Nsa[(s, a)])
       else:
           u = self.args.cpuct * self.Ps[s][a] * math.sqrt(self.Ns[s] + EPS)  # Q = 0 ?

       if u > cur_best:
           cur_best = u
           best_act = a

a = best_act
next_s, next_player = self.game.getNextState(canonicalBoard, 1, a)
next_s = self.game.getCanonicalForm(next_s, next_player)

# Recursively visit the node
v = self.search(next_s)

Part A——选择具有最高置信区间上界值的走法

一旦找到一个叶子状态,就把这个棋面状态送入神经网络。这是论文中称作的Part B,“扩展与评估”。且看代码

# leaf node
self.Ps[s], v = self.nnet.predict(canonicalBoard)
valids = self.game.getValidMoves(canonicalBoard, 1)
self.Ps[s] = self.Ps[s] * valids  # masking invalid moves
sum_Ps_s = np.sum(self.Ps[s])
self.Ps[s] /= sum_Ps_s  # renormalize
self.Vs[s] = valids
self.Ns[s] = 0

Part B——扩展与评估

最后,我们将传回神经网络返回的值。这就是论文所说的Part C——“备份”。您可以在此处看到相关代码。

v = self.search(next_s)

if (s, a) in self.Qsa:
   self.Qsa[(s, a)] = (self.Nsa[(s, a)] * self.Qsa[(s, a)] + v) / (self.Nsa[(s, a)] + 1)
   self.Nsa[(s, a)] += 1
else:
   self.Qsa[(s, a)] = v
   self.Nsa[(s, a)] = 1

self.Ns[s] += 1
return -v

Part C——备份

决定下一步如何走

让我们来看看AlphaZero面对上文提及的棋面时会决定如何走。

AlphaZero会进行50次蒙特卡洛树搜索模拟。

你可以用这个在线notebook复现下面展示的结果。

下面展示的就是每次迭代的路径:

Simulation #1 -> Expand root node
Simulation #2 -> 23
Simulation #3 -> 21
Simulation #4 -> 9
Simulation #5 -> 17
Simulation #6 -> 12
Simulation #7 -> 19
Simulation #8 -> 3
Simulation #9 -> 18
Simulation #10 -> 23,24
Simulation #11 -> 21,24
Simulation #12 -> 23,24,21
Simulation #13 -> 21,24,23,24
Simulation #14 -> 23,24,9
Simulation #15 -> 23,24,17
Simulation #16 -> 21,24,9
Simulation #17 -> 23,24,12
Simulation #18 -> 23,24,18
Simulation #19 -> 21,24,17
Simulation #20 -> 23,24,21,24,9
Simulation #21 -> 21,24,19
Simulation #22 -> 23,24,3
Simulation #23 -> 21,24,18
Simulation #24 -> 23,24,19
Simulation #25 -> 21,24,23,24,17
Simulation #26 -> 23,24,21,24,18
Simulation #27 -> 23,24,21,24,3
Simulation #28 -> 21,24,3
Simulation #29 -> 23,24,21,24,19
Simulation #30 -> 21,24,12
Simulation #31 -> 23,24,21,24,9,24
Simulation #32 -> 21,24,23,24,12
Simulation #33 -> 23,24,21,24,9,24,18
Simulation #34 -> 21,24,23,24,9,24,17
Simulation #35 -> 23,24,21,24,9,24,12
Simulation #36 -> 23,24,21,24,9,24,3
Simulation #37 -> 21,24,23,24,9,24,19
Simulation #38 -> 23,24,21,24,9,24,18,17
Simulation #39 -> 21,24,23,24,9,24,18,17,24
Simulation #40 -> 23,24,21,24,9,24,18,17,24,19
Simulation #41 -> 21,24,23,24,9,24,18,17,24,19,24
Simulation #42 -> 23,24,9,21
Simulation #43 -> 23,24,9,18
Simulation #44 -> 23,24,9,17
Simulation #45 -> 23,24,9,19
Simulation #46 -> 23,24,9,12
Simulation #47 -> 23,24,9,21,24
Simulation #48 -> 23,24,9,3
Simulation #49 -> 23,24,9,21,24,18
Simulation #50 -> 23,24,9,21,24,17

上面显示的结果的意思是:在第一次模拟中,由于算法之前并未见过这个棋面,因此输入的棋面实际上是一个“叶子”状态节点,需要先“扩展”这个节点。所谓扩展就是把棋面送到神经网络里对每个位置进行概率评估。

Simulation #1 -> Expand root node

在第二次模拟中,因为上步我们已经扩展了根节点,因此它不再是一个“叶子”节点了,就此,我们可以对具有最高置信区间上界值的节点进行搜索:

# https://github.com/suragnair/alpha-zero-general/blob/5156c7fd1d2f3e5fefe732a4b2e0ffc5b272f819/MCTS.py#L105-L121
cur_best = -float('inf')
best_act = -1

# pick the action with the highest upper confidence bound
for a in range(self.game.getActionSize()):
   if valids[a]:
       if (s, a) in self.Qsa:
           u = self.Qsa[(s, a)] + self.args.cpuct * self.Ps[s][a] * math.sqrt(self.Ns[s]) / (
                   1 + self.Nsa[(s, a)])
       else:
           u = self.args.cpuct * self.Ps[s][a] * math.sqrt(self.Ns[s] + EPS)  # Q = 0 ?

       if u > cur_best:
           cur_best = u
           best_act = a

a = best_act
next_s, next_player = self.game.getNextState(canonicalBoard, 1, a)
next_s = self.game.getCanonicalForm(next_s, next_player)

# Recursively visit the node
v = self.search(next_s)

具有最大置信区间上界值的是23号位置。搜索算法深入在23号位置画线的状态,由于这个状态在之前搜索算法也没见过,因此这也是个“叶子”节点状态,搜索算法会“扩展”这个状态。就这样,第二次模拟也完成啦。

Simulation #2 -> 23

这个时候,还记得上面神经网络输出的输赢概率吗,神经网络认为在23号位置画线必输无疑。神经网络可以进行更多轮的训练来确保这的确是个很差的走法。不过目前来说,这就足够了,我们后面会认识到这一点的。

接下来的模拟中,会依次搜索剩下的走法中具有最大置信区间上界的状态,不过只有下面给出的这些。因为在访问完以下这些走法之后,搜索算法会发现剩下的状态都具有很低的概率,也就是说其置信区间上界都很低,也就不必搜索了。

Simulation #3 -> 21
Simulation #4 -> 9
Simulation #5 -> 17
Simulation #6 -> 12
Simulation #7 -> 19
Simulation #8 -> 3
Simulation #9 -> 18

在之后的模拟中,一个令人兴奋的模式逐渐揭开面纱。记住,能够赢下来的走法序列是23,24(对应空过),9。

(译者注:填上23号之后,由于补全了一个正方形,因此对方空过。这里给出的序列是两方的走法序列。)

Simulation #10 -> 23,24
Simulation #11 -> 21,24
Simulation #12 -> 23,24,21
Simulation #13 -> 21,24,23,24
Simulation #14 -> 23,24,9
Simulation #15 -> 23,24,17
Simulation #16 -> 21,24,9
Simulation #17 -> 23,24,12
Simulation #18 -> 23,24,18
Simulation #19 -> 21,24,17
Simulation #20 -> 23,24,21,24,9
Simulation #21 -> 21,24,19
Simulation #22 -> 23,24,3
Simulation #23 -> 21,24,18
Simulation #24 -> 23,24,19

在第10至第24次模拟中,很明显,MCTS已经把注意力放在了21号节点与23号节点上。这说得通,因为这两种走法都能让我方得1分。

Simulation #33 -> 23,24,21,24,9,24,18
Simulation #34 -> 21,24,23,24,9,24,17
Simulation #35 -> 23,24,21,24,9,24,12
Simulation #36 -> 23,24,21,24,9,24,3
Simulation #37 -> 21,24,23,24,9,24,19
Simulation #38 -> 23,24,21,24,9,24,18,17
Simulation #39 -> 21,24,23,24,9,24,18,17,24
Simulation #40 -> 23,24,21,24,9,24,18,17,24,19
Simulation #41 -> 21,24,23,24,9,24,18,17,24,19,24

在第33至第41次模拟中,搜索算法深入探究了那些导致败局的走法。这里要注意到一件有意思的事情。尽管追究得很深,但是搜索算法并没有抵达游戏终局,后面还有可以走的步骤。

Simulation #42 -> 23,24,9,21
Simulation #43 -> 23,24,9,18
Simulation #44 -> 23,24,9,17
Simulation #45 -> 23,24,9,19
Simulation #46 -> 23,24,9,12
Simulation #47 -> 23,24,9,21,24
Simulation #48 -> 23,24,9,3
Simulation #49 -> 23,24,9,21,24,18
Simulation #50 -> 23,24,9,21,24,17

接着,在第42次至第50次模拟中,通过神经网络的场外援助,搜索算法意识到了23,24,21或者21,24,23都不是好的走法,这下子,它全然投入到能够获胜的走法序列:23,24,9。

在50次模拟后,是时候做出决定了。MCTS选择了其访问次数最多的位置。下面列出了每个走法的访问次数(只统计路径中的第一个位置):

counts[3] = 1
counts[9] = 1
counts[12] = 1
counts[17] = 1
counts[18] = 1
counts[19] = 1
counts[21] = 15
counts[23] = 28

3,9,12,17,18以及19号位置只在最初10次模拟中访问了1次。接着MCTS专注于21和23号位置,且在最后9次模拟中都先走23号。因为23号位置被访问次数最多,达到了28次之多,因此MCTS最终返回23作为下一步的走法。

关键点是什么?

  1. 通过每一次模拟,MCTS依靠神经网络, 使用累计价值(Q)、神经网络给出的走法先验概率(P)以及访问对应节点的频率这些数字的组合,沿着最有希望获胜的路径(换句话说,也就是具有最高置信区间上界的路径)进行探索。

  2. 在每一次模拟中,MCTS会尽可能向纵深进行探索直至遇到它从未见过的盘面状态,在这种情况下,它会通过神经网络来评估该盘面状态的优劣。

如果我们将上述方法与使用带有Alpha-Beta剪枝以及一个评价函数的Minimax之类的传统方法进行比较,我们可以发现以下几点:

  1. 在Minimax中,博弈树的搜索深度是由算法设计者自行设定的。它无论如何都会搜索到那个深度,然后用那个可爱的评价函数进行盘面评估。要是没有Alpha-Beta剪枝的话,它就得访问给定深度下所有可能的盘面节点,极为低效。在上面的情形中,如果还可以走8步,要搜索的深度为3,就意味着总共需要评估336个盘面状态。使用MCTS,仅仅用了50次模拟,也就是50次评估,而且在搜索中还尽可能搜索得足够深。

  2. Alpha-Beta剪枝能够帮助我们将336这个数字减少。然而,却并不能帮我们找到一条优良的博弈路径。

  3. 我们是一直在用神经网络来对盘面进行评估的,而不是某个认为定义的评价函数。

  4. 很有意思的是,在起初几步中,神经网络并没有做出正确的盘面评估。然而,随着在博弈树中搜索的深度提升,它自动修正了它的输出,而且搜索并未抵达游戏终局。

  5. 最后,要注意到AlphaZero的优雅与简洁。而在Alpha-Beta剪枝中,你的不断跟踪alpha和beta参数来知悉哪些路径被砍掉了,你还得用一个人为定义的评价函数,更不要说这个函数又笨重又丑陋。MCTS与NN让所有这一切都变得异常优雅与简洁。你甚至可以在JavaScript中把这一切都搞定!

训练神经网络

至此,我们还缺最后一个关键部分。究竟该如何训练这个神经网络呢?

不要害怕,嘻嘻,贼简单。我们之前提到的步骤是:

1. 让计算机在“训练模式”下自我博弈数局,记录每一步走棋。一旦胜负已分,就给之前的每一步走棋打上标签——棋面最终是“赢”或是“输”。如此一来,我们就获得了一个可以用于神经网络(Neural Network,NN)训练的数据集,让该网络学会判断给定棋面是“赢面”还是“输面”;

2. 复制神经网络。用上一步得到的数据集训练该克隆网络;

3. 让克隆网络与原始神经网络互相博弈;

4. 上一步中获胜的网络留下,败者弃之;

5. 重复第1步。

什么叫在“训练模式”下进行博弈呢?这个区别非常细微。当在“竞技模式”下博弈时,我们会选择访问次数最多的走法。而在“训练模式”下,在游戏刚开始的一定步数内,我们会将不同走法的访问次数变成概率分布,以此鼓励网络对不同的走法进行探索。举个例子,假设有3中可能的走法,对应的访问次数分别是[2, 2, 4]。那么在竞技模式中,由于第三种走法的访问次数最多,所以我们就选择第三种走法。但是在训练模式中,我们会将[2, 2, 4]变成一个概率分布,因为2+2+4=8,因此概率分布就是[2/8, 2/8, 4/8] 或者说是 [0.25, 0.25, 0.5]。换句话说,我们在50%的情况下会选择第三种走法,而第一以及第二种走法有25%的概率被选中。

接着,我们用一个简单的井字棋来描述一下数据集的构建。


在上面这副图片中,1号玩家执X获胜。

我们可以将盘面中未落子的地方记作0,1号玩家打X的位置记作1,2号玩家打圈的地方记作-1。

那么,上图中的棋盘各个盘面就可以变成下边这样:

0 0 0    1 0 0     1 0 0     1 0 0     1 0 0     1 0 0
0 0 0 -> 0 0 0 -> -1 0 0 -> -1 1 0 -> -1 1 0 -> -1 1 0
0 0 0    0 0 0     0 0 0     0 0 0    -1 0 0    -1 0 1

或者,我们将盘面降为一维表示,就是这样:

[0, 0, 0, 0, 0, 0, 0, 0, 0]
[1, 0, 0, 0, 0, 0, 0, 0, 0]
[1, 0, 0,-1, 0, 0, 0, 0, 0]
[1, 0, 0,-1, 1, 0, 0, 0, 0]
[1, 0, 0,-1, 1, 0,-1, 0, 0]
[1, 0, 0,-1, 1, 0,-1, 0, 1]

然后我们要做两件事情。第一件事,找到所有属于1号玩家轮次的棋盘盘面。我们只会给神经网络喂入1号玩家的相关盘面数据。在井字棋中,很容易就能挑选出来。而2号玩家轮次的那些盘面,直接将其数据取相反数,使其变为1号玩家视角下的盘面状态。

也就是,将:

[0, 0, 0, 0, 0, 0, 0, 0, 0]  # Player 1 turn
[1, 0, 0, 0, 0, 0, 0, 0, 0]  # Player 2 turn
[1, 0, 0,-1, 0, 0, 0, 0, 0]  # Player 1 turn
[1, 0, 0,-1, 1, 0, 0, 0, 0]  # Player 2 turn
[1, 0, 0,-1, 1, 0,-1, 0, 0]  # Player 1 turn
[1, 0, 0,-1, 1, 0,-1, 0, 1]  # Player 2 turn

变为:

[ 0, 0, 0, 0, 0, 0, 0, 0, 0]  # Player 1 turn
[-1, 0, 0, 0, 0, 0, 0, 0, 0]  # Player 1 turn
[ 1, 0, 0,-1, 0, 0, 0, 0, 0]  # Player 1 turn
[-1, 0, 0, 1,-1, 0, 0, 0, 0]  # Player 1 turn
[ 1, 0, 0,-1, 1, 0,-1, 0, 0]  # Player 1 turn
[-1, 0, 0, 1,-1, 0, 1, 0,-1]  # Player 1 turn

第二件事,我们对获得的每一条数据向后增加1位数据,“1”表示1号玩家赢,“-1”表示1号玩家输。如此一来,数据就变成了:

[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]  # Winning board
[-1, 0, 0, 0, 0, 0, 0, 0, 0, 0]  # Losing board
[ 1, 0, 0,-1, 0, 0, 0, 0, 0, 1]  # Winning board
[-1, 0, 0, 1,-1, 0, 0, 0, 0, 0]  # Losing board
[ 1, 0, 0,-1, 1, 0,-1, 0, 0, 1]  # Winning board
[-1, 0, 0, 1,-1, 0, 1, 0,-1, 0]  # Losing board

嗯,这个数据集现在有模有样了呢!你看,这样一来,我们就获得了一批用于训练神经网络的数据,并让神经网络学习判断盘面的输赢。

哦,我们好像漏掉了概率。那些不同走法的概率分布怎么得到呢?记住了,在训练模式下,我们每一步也还是会进行MCTS模拟的。正如我们会记录下不同的盘面,我们也会将对应的概率进行记录。

然后我们就会复制(或者说是克隆)神经网络,并用新获得的数据训练这个克隆网络,我们所期望的,是用上新获得的数据后,这个克隆网络可以变得更强一点儿。通过与原始网络进行对抗,我们可以验证其是否真的变强了。如果克隆网络的胜率超过55%,我们就把原始网络丢掉,这个克隆网络便可取而代之。

这个过程会一直重复下去,神经网络也在这个过程中不断变强。

你可以在这儿看到论文中的相关图表。

数据集中如何包含更多更具代表性的数据呢?相较于神经网络输出的原始走法概率分布,数据集会倾向于根据MCTS生成的概率来选择更具借鉴性的走法。通过让MCTS搜索足够多较深的博弈路径,神经网络可以获取更优质的数据并更加高效地学习。

试试看用这个Colab Notebook训练一个Dots and Boxes模型吧。

将其部署至一个Web应用

几个月前,我发了一篇博文,带你大致过了一遍使用TensorFlow.js将Keras或者TensorFlow模型部署至JavaScript的过程。这里我们要做的事情大差不差。我们会把用Keras训练得到的模型转换成能够被TensorFlow.js调用的模型。

这个Notebook展示了如何将一个预训练的Dots and Boxes博弈模型转换为一个TensorFlow.js模型。

一旦转换完成,这个模型就能够很轻松地使用JavaScript进行调用。不妨看看这里

结论

在本篇博文中,你认识了AlphaZero,一个能够在双方零和博弈的棋盘游戏中战胜世界冠军的强化学习算法

你也了解了它是如何使用蒙特卡洛树搜索算法以及神经网络来找到最佳的下一步走法,以及如何训练这样一个神经网络。



AI研习社是AI学术青年和AI开发者技术交流的在线社区。我们与高校、学术机构和产业界合作,通过提供学习、实战和求职服务,为AI学术青年和开发者的交流互助和职业发展打造一站式平台,致力成为中国最大的科技创新人才聚集地。

如果,你也是位热爱分享的AI爱好者。欢迎与译站一起,学习新知,分享成长。

]]>
人工智能开发者 //www.xyschoolife.com/category/yanxishe/H6EDRFZoLlDFhirb.html#comments Wed, 02 Dec 2020 11:12:00 +0800
2020 年 4 个最值得推荐的 VS Code 插件 //www.xyschoolife.com/category/yanxishe/Ts6Et1Hk8xLIj0Bh.html 译者:AI研习社(苏珊•克尔莱Icarus、

双语原文链接:Best 4 VS Code Extensions in 2020



Visual Studio Code(VS Code)是一个轻量级但功能强大的源代码编辑器,是最受程序员欢迎的开发工具之一。

在过去的几年里,我主要使用VS Code来编写python代码、Javascript代码和markdown格式的文档。

和其他的,我使用过带插件功能的IDE一样,我喜欢安装各种插件。我注意到今年在VS Code上已经安装了40多个扩展。

虽然这些扩展为我带来了新奇的体验,但也拖慢了VS Code的速度,让使界面变得混乱。所以,在2020年底,我卸载了40多个不必要的扩展,剩下的这4个对我来说最有用。

TabNine for Visual Studio Code

TabNine - Visual Studio市场

TabNine是2020年给我最大惊喜的应用

它是全语言自动完成,用机器学习来帮助你更快的写出代码。正因为如此,我在安装了这个插件后,把那些编程语言自动完成插件都卸载了。

  

TabNine示例

TabNine基于OpenAI的GPT-2,在200万个Github文件上进行训练。由于GitHub,TabNine熟悉一系列任务、算法、编码风格和语言。TabNine可以缩短编码时间,尤其是在输入死板的函数时。随着你的使用,你会惊讶地发现,你的TabNine正变得越来越聪明。

我们有理由相信,随着TabNine的不断学习,他可以帮助我们完成未来大部分的编码工作。

除了VS Code,TabNine还支持IntelliJ平台、Sublime Text、Vim、Emacs、Atom和Jupyter Notebook。

VS代码 Vim

Vim - Visual Studio市场

如果你和我一样喜欢使用Vim,你一定要安装这个Vim扩展。它将Vim和VS Code完美的结合在一起,这样你就不用把手离开键盘了。

Markdown 一体化

Markdown All in One--Visual Studio市场

我习惯于在VS Code中编写Markdown文件,这个Markdown扩展对Markdown的支持是最全面的。

和其他的软件相比,有一些亮点功能。

  • 键盘快捷键:有一些快捷键,支持Toggle bold、Toggle italic、Toggle heading等。

  • 列表编辑:自动格式化列表

  • 自动完成:图像/文件、数学函数、链接。

Spotify的音乐时间

Spotify的音乐时间 - Visual Studio Marketplace

很多程序员习惯在编码的时候听音乐。我在之前的一篇文章中介绍过这个扩展。我留下这个主要有两个原因:

1. 便利:控制你的Spotify而不离开你的VS代码。

2. AI支持:AI播放列表,个人前40名,全球前40名。

2020年我的VS码扩展总结

至于其他40多个扩展,有的我已经卸载了,有的我已经暂时禁用了。


我的禁用扩展列表

VS Code是一个轻量级的源码编辑器,我尽量保持它的 "轻",对于扩展,我坚持 "按需安装 "的原则。

还有一件重要的事情

2020年11月12日,Microsoft发布了Jupyter Notebook扩展。

Jupyter - Visual Studio应用市场

这个扩展我已经期待已久。

Jupyter Notebook是从事数据科学、机器学习、数据分析等工作的程序员最喜欢的开发工具之一。这次微软为我们带来了新的原生的体验。

我安装了这个扩展程序并进行了尝试。为了使用此扩展,您还需要安装Python 扩展。因为是官方插件,所以和VS Code可以完美配合。

如需有进一步的感受,我将在一段时间使用后告诉您。敬请关注!


AI研习社是AI学术青年和AI开发者技术交流的在线社区。我们与高校、学术机构和产业界合作,通过提供学习、实战和求职服务,为AI学术青年和开发者的交流互助和职业发展打造一站式平台,致力成为中国最大的科技创新人才聚集地。

如果,你也是位热爱分享的AI爱好者。欢迎与译站一起,学习新知,分享成长。

]]>
人工智能开发者 //www.xyschoolife.com/category/yanxishe/Ts6Et1Hk8xLIj0Bh.html#comments Tue, 01 Dec 2020 11:39:00 +0800
开源巨献:27个深度强化学习算法的实例项目 //www.xyschoolife.com/category/yanxishe/uiMwVZYPBHyI61I8.html 译者:AI研习社(宋怡然

双语原文链接:Deep Reinforcement Learning Nanodegree Algorithms


在这里,您可以找到几个致力于“深度强化学习”方法的项目。 项目以矩阵形式部署:[env x model],其中env是要解决的环境,而model是解决该环境的模型/算法。 在某些情况下,可以通过几种算法来解决同一环境。 所有项目均以包含培训日志的Jupyter笔记本的形式呈现。
支持以下环境:

AntBulletEnv, Bipedalwalker, CarRacing, CartPole, Crawler, HalfCheetahBulletEnv, HopperBulletEnv, LunarLander, LunarLanderContinuous, Markov Decision 6x6, Minitaur, Minitaur with Duck, Pong, Navigation, Reacher, Snake, Tennis, Waker2DBulletEnv.

在Udacity深度强化学习学位计划的框架内解决了四个环境(导航,爬虫,到达者,网球)。

蒙特卡洛方法 

在蒙特卡洛(MC)中,我们玩游戏的情节直到到达终点,我们从途中获得了奖励然后返回情节的开始。 我们重复此方法至足够的次数,然后平均每个状态的值。

时差方法与Q学习

连续空间中的强化学习(深度Q网络)

函数逼近和神经网络

通用逼近定理(UAT)规定,只要满足有关激活函数形式的轻微假设,就可以使用包含具有有限数量节点的单个隐藏层的前馈神经网络来近似任何连续函数。

基于策略的方法爬山模拟退火

在许多情况下,随机重启爬山是一种出奇的有效算法。 模拟退火是一种很好的概率技术,因为它不会偶然错误地将局部极值作为全局极值。

策略渐变方法REINFORCEPPO

定义一个性能指标J(\ theta)以使其最大化。 通过近似梯度上升来学习策略参数\ theta。

关键行为法A3CA2CDDPGTD3SAC

A3C与A2C的主要区别在于异步部分。  A3C由具有权重的多个独立代理(网络)组成,它们与环境的不同副本并行进行交互。 因此,他们可以在更少的时间内探索状态-行动空间的更大部分。

项目,模型和方法

AntBulletEnvSoft Actor-Critic (SAC)

BipedalWalker, Twin Delayed DDPG (TD3)

BipedalWalker, PPO, Vectorized Environment

BipedalWalker, Soft Actor-Critic (SAC)

BipedalWalker, A2C, Vectorized Environment

CarRacing with PPO, Learning from Raw Pixels

CartPole, Policy Based Methods, Hill Climbing

CartPole, Policy Gradient Methods, REINFORCE

Cartpole, DQN

Cartpole, Double DQN

HalfCheetahBulletEnv, Twin Delayed DDPG (TD3)

HopperBulletEnv, Twin Delayed DDPG (TD3)

HopperBulletEnv, Soft Actor-Critic (SAC)

LunarLander-v2, DQN

LunarLanderContinuous-v2, DDPG

Markov Decision Process, Monte-Carlo, Gridworld 6x6

MinitaurBulletEnv, Soft Actor-Critic (SAC)

MinitaurBulletDuckEnv, Soft Actor-Critic (SAC)

Pong, Policy Gradient Methods, PPO

Pong, Policy Gradient Methods, REINFORCE

Snake, DQN, Pygame

Udacity Project 1: Navigation, DQN, ReplayBuffer

Udacity Project 2: Continuous Control-Reacher, DDPG, environment Reacher (Double-Jointed-Arm)

Udacity Project 2: Continuous Control-Crawler, PPO, environment Crawler

Udacity Project 3: Collaboration_Competition-Tennis, Multi-agent DDPG, environment Tennis

Walker2DBulletEnv, Twin Delayed DDPG (TD3)

Walker2DBulletEnv, Soft Actor-Critic (SAC)

DQN和Double DQN的项目

PPO的项目

TD3的项目

Soft Actor-Critic (SAC) 的项目

BipedalWalker,与不同模型的混合

CartPole与不同模型的混合

更多链接

  • 有关Policy-Gradient Methods策略梯度方法,参见 123.

  • 有关 REINFORCE,参见 123.

  • 有关 PPO,参见 12345.

  • 有关 DDPG,参见 12.

  • 有关 Actor-Critic MethodsA3C,参见 1234.

  • 有关 TD3,参见 123

  • 有关 SAC,参见 12345

  • 有关 A2C,参见 12345 

TowardsDataScience网站上的文章

贝尔曼方程式在深度强化学习中如何工作?

深度Q网络中一对相互关联的神经网络

深度强化学习的三个方面:噪声,高估和探索

我在上述项目中开发的相关视频


AI研习社是AI学术青年和AI开发者技术交流的在线社区。我们与高校、学术机构和产业界合作,通过提供学习、实战和求职服务,为AI学术青年和开发者的交流互助和职业发展打造一站式平台,致力成为中国最大的科技创新人才聚集地。

如果,你也是位热爱分享的AI爱好者。欢迎与译站一起,学习新知,分享成长。

]]>
人工智能开发者 //www.xyschoolife.com/category/yanxishe/uiMwVZYPBHyI61I8.html#comments Wed, 25 Nov 2020 10:47:00 +0800
干货来袭 | 帮你拓展思维的39个网站 //www.xyschoolife.com/category/yanxishe/NzMUVv5JkGU9Kll2.html 译者:AI研习社(Icarus、

双语原文链接:39 Websites That Can Make You Unbelievably Smarter Just in 10 Minutes a Day


"智力增长从出生时开始,到死亡时才停止。"爱因斯坦这样说。终身学习是改善生活和事业的最佳途径之一。

每天自学可以丰富你的知识,一个好消息是,你可以在任何地方获取免费的在线资源,帮助你成为更好的自己。

即使你每天投入短短十分钟内到这些优质资源中,你的事业和个人生活就会变得不一样。

网络成为一个越来越强大的资源,可以轻松地帮助你学到新的东西。你有很大的机会能够把这些网站中的至少一个好好利用起来,成为更好的自己。

我每周都会持续访问其中的一些网站,学习新的话题、思想、概念和心理模型,以提高自己。 

  1. BBC--未来--每天让你更聪明。

  2. 口袋探索--发现网络中最好的、最热门的故事。

  3. Aeon--深刻而又具有启发性的思考内容。

  4. WikiWand--维基百科的全新界面。

  5. The long read(卫报)--深度报道、论文和简介。

  6. Wait But Why--一个流行的长篇、棒状图文并茂的博客,几乎无所不包。

  7. 法纳姆街--掌握别人琢磨出来的精华。

  8. InsightfulQuestions(subreddit)--不一定是特定类型的知识性讨论。

  9. Fast Company's 30-Second MBA--从有成就的企业高管的短视频片段中学习伟大的商业和生活经验。

  10. University of the People  --免学费的在线大学,提供多种课程流的高等教育。

11. OpenSesame--在线培训平台,现拥有22000+课程。
 
12. 生命学校:一个试图用文化来解答人生重大问题的地方。

13. Coursera--Coursera与一些最好的大学合作,免费提供大量开放的在线课程。

14.edX--学习世界上最好的大学的在线课程。

15. Quora--外国版知乎--有顶级专家和引人入胜的来回讨论一切。

16. 数码摄影学校--读完这里的宝藏文章能提高你的摄影技术。

17. Brain Pickings--关于生活、艺术、科学、设计、历史、哲学等方面的有见地的长篇文章。

18. Peer 2 Peer University或P2PU,是一个开放的教育项目,帮助你按照自己的节奏学习。

19. MIT Open CourseWare是MIT提供的免费在线课程和学习资源的目录。

20. Highbrow- 每天将给你的邮箱发送一份体积不大的课程。

21. Investopedia - 了解关于投资、市场和个人理财世界的一切。

22. Udacity 提供互动式在线课程和高等教育课程。

23. Mozilla开发者网络为网络开发者提供详细的文档和学习资源。

24. 未来学习--享受顶级大学和专业机构的免费在线课程。

25. Google Scholar--提供对许多学科和来源的学术文献的搜索,包括论文、书籍、摘要和文章。

26. The Creativity Post--关于创新和创意的高质量内容。

27. 99U(YouTube)--关于生产力、组织和领导力的可操作性见解,帮助有创造力的人推动创意的发展。

28. 少走弯路--在重要问题上取得智力进步的工具。

29. 允许思考----关于社会如何运作的新研究。

30. 行为科学家--来自行为科学第一线的原创性、发人深省的报道。

31. 艾利森--世界顶级出版商的免费在线课程。

32. Big Think --以 "大思维 "专家为主题的文章和视频。

33. Youtube EDU - 没有可爱的猫咪装在盒子里的教育视频--但它们确实能解锁知识。

34. 这个专栏将改变你的生活(卫报)--奥利弗-伯克曼调查通往心理健康的路线。

35. DataCamp - 在线R教程和数据科学课程。

36. Edge.org--最复杂头脑的想法。

37. TED--几乎每个主题都有很棒的视频来打开你的思路。

38. 科学美国人--科技领域最令人敬畏的进步指南。

39. 鹦鹉螺--一本与众不同的科学杂志。

你最喜欢的学习工具是什么,有没有在这个名单上?


AI研习社是AI学术青年和AI开发者技术交流的在线社区。我们与高校、学术机构和产业界合作,通过提供学习、实战和求职服务,为AI学术青年和开发者的交流互助和职业发展打造一站式平台,致力成为中国最大的科技创新人才聚集地。

如果,你也是位热爱分享的AI爱好者。欢迎与译站一起,学习新知,分享成长。

]]>
人工智能开发者 //www.xyschoolife.com/category/yanxishe/NzMUVv5JkGU9Kll2.html#comments Tue, 24 Nov 2020 10:40:00 +0800
BYOL:轻松进行自监督学习 //www.xyschoolife.com/category/yanxishe/VQDnS4MxvfIfSN5U.html 译者:AI研习社(季一帆

双语原文链接:Easy Self-Supervised Learning with BYOL


注:本文所有代码可见Google Colab notebook,你可用Colab的免费GPU运行或改进。

自监督学习

深度学习中,经常遇到的问题是没有足够的标记数据,而手工标记数据耗费大量时间且人工成本高昂。基于此,自我监督学习成为深度学习的研究热点,旨在从未标记样本中进行学习,以缓解数据标注困难的问题。子监督学习的目标很简单,即训练一个模型使得相似的样本具有相似的表示,然而具体实现却困难重重。经过谷歌这样的诸多先驱者若干年的研究,子监督学习如今已取得一系列的进步与发展。

在BYOL之前,多数自我监督学习都可分为对比学习或生成学习,其中,生成学习一般GAN建模完整的数据分布,计算成本较高,相比之下,对比学习方法就很少面临这样的问题。对此,BYOL的作者这样说道:

通过对比方法,同一图像不同视图的表示更接近(正例),不同图像视图的表示相距较远(负例),通过这样的方式减少表示的生成成本。

为了实现对比方法,我们必须将每个样本与其他许多负例样本进行比较。然而这样会使训练很不稳定,同时会增大数据集的系统偏差。BYOL的作者显然明白这点:

对比方法对图像增强的方式非常敏感。例如,当消除图像增强中的颜色失真时,SimCLR表现不佳。可能的原因是,同一图像的不同裁切一般会共享颜色直方图,而不同图像的颜色直方图是不同的。因此,在对比任务中,可以通过关注颜色直方图,使用随机裁切方式实现图像增强,其结果表示几乎无法保留颜色直方图之外的信息。

不仅仅是颜色失真,其他类型的数据转换也是如此。一般来说,对比训练对数据的系统偏差较为敏感。在机器学习中,数据偏差是一个广泛存在的问题(见facial recognition for women and minorities),这对对比方法来说影响更大。不过好在BYOL不依赖负采样,从而很好的避免了该问题。

BYOL:Bootstrap Your Own Latent(发掘自身潜能)

BYOL的目标与对比学习相似,但一个很大的区别是,BYOL不关心不同样本是否具有不同的表征(即对比学习中的对比部分),仅仅使相似的样品表征类似。看上去似乎无关紧要,但这样的设定会显著改善模型训练效率和泛化能力:

  1. 由于不需要负采样,BLOY有更高的训练效率。在训练中,每次遍历只需对每个样本采样一次,而无需关注负样本。

  2. BLOY模型对训练数据的系统偏差不敏感,这意味着模型可以对未见样本也有较好的适用性。

BYOL最小化样本表征和该样本变换之后的表征间的距离。其中,不同变换类型包括0:平移、旋转、模糊、颜色反转、颜色抖动、高斯噪声等(我在此以图像操作来举例说明,但BYOL也可以处理其他数据类型)。至于是单一变换还是几种不同类型的联合变换,这取决于你自己,不过我一般会采用联合变换。但有一点需要注意,如果你希望训练的模型能够应对某种变换,那么用该变换处理训练数据时必要的。

手把手教你编码BYOL

首先是数据转换增强的编码。BYOL的作者定义了一组类似于SimCLR的特殊转换:

import random
from typing import Callable, Tuple

from kornia import augmentation as aug
from kornia import filters
from kornia.geometry import transform as tf
import torch
from torch import nn, Tensor


class RandomApply(nn.Module):
   def __init__(self, fn: Callable, p: float):
       super().__init__()
       self.fn = fn
       self.p = p

   def forward(self, x: Tensor) -> Tensor:
       return x if random.random() > self.p else self.fn(x)


def default_augmentation(image_size: Tuple[int, int] = (224, 224)) -> nn.Module:
   return nn.Sequential(
       tf.Resize(size=image_size),
       RandomApply(aug.ColorJitter(0.8, 0.8, 0.8, 0.2), p=0.8),
       aug.RandomGrayscale(p=0.2),
       aug.RandomHorizontalFlip(),
       RandomApply(filters.GaussianBlur2d((3, 3), (1.5, 1.5)), p=0.1),
       aug.RandomResizedCrop(size=image_size),
       aug.Normalize(
           mean=torch.tensor([0.485, 0.456, 0.406]),
           std=torch.tensor([0.229, 0.224, 0.225]),
       ),
   )

上述代码通过Kornia实现数据转换,这是一个基于 PyTorch 的可微分的计算机视觉开源库。当然,你可以用其他开源库实现数据转换扩充,甚至是自己编写。实际上,可微分性对BYOL而言并没有那么必要。

接下来,我们编写编码器模块。该模块负责从基本模型提取特征,并将这些特征投影到低维隐空间。具体的,我们通过wrapper类实现该模块,这样我们可以轻松将BYOL用于任何模型,无需将模型编码到脚本。该类主要由两部分组成:

特征抽取,获取模型最后一层的输出。

映射,非线性层,将输出映射到更低维空间。

特征提取通过hooks实现(如果你不了解hooks,推荐阅读我之前的介绍文章How to Use PyTorch Hooks)。除此之外,代码其他部分很容易理解。

from typing import Union


def mlp(dim: int, projection_size: int = 256, hidden_size: int = 4096) -> nn.Module:
   return nn.Sequential(
       nn.Linear(dim, hidden_size),
       nn.BatchNorm1d(hidden_size),
       nn.ReLU(inplace=True),
       nn.Linear(hidden_size, projection_size),
   )


class EncoderWrapper(nn.Module):
   def __init__(
       self,
       model: nn.Module,
       projection_size: int = 256,
       hidden_size: int = 4096,
       layer: Union[str, int] = -2,
   ):
       super().__init__()
       self.model = model
       self.projection_size = projection_size
       self.hidden_size = hidden_size
       self.layer = layer

       self._projector = None
       self._projector_dim = None
       self._encoded = torch.empty(0)
       self._register_hook()

   @property
   def projector(self):
       if self._projector is None:
           self._projector = mlp(
               self._projector_dim, self.projection_size, self.hidden_size
           )
       return self._projector

   def _hook(self, _, __, output):
       output = output.flatten(start_dim=1)
       if self._projector_dim is None:
           self._projector_dim = output.shape[-1]
       self._encoded = self.projector(output)

   def _register_hook(self):
       if isinstance(self.layer, str):
           layer = dict([*self.model.named_modules()])[self.layer]
       else:
           layer = list(self.model.children())[self.layer]

       layer.register_forward_hook(self._hook)

   def forward(self, x: Tensor) -> Tensor:
       _ = self.model(x)
       return self._encoded


BYOL包含两个相同的编码器网络。第一个编码器网络的权重随着每一训练批次进行更新,而第二个网络(称为“目标”网络)使用第一个编码器权重均值进行更新。在训练过程中,目标网络接收原始批次训练数据,而另一个编码器则接收相应的转换数据。两个编码器网络会分别为相应数据生成低维表示。然后,我们使用多层感知器预测目标网络的输出,并最大化该预测与目标网络输出之间的相似性。


图源:Bootstrap Your Own Latent, Figure 2

也许有人会想,我们不是应该直接比较数据转换之前和之后的隐向量表征吗?为什么还有设计多层感知机?假设没有MLP层的话,网络可以通过将权重降低到零方便的使所有图像的表示相似化,可这样模型并没有学到任何有用的东西,而MLP层可以识别出数据转换并预测目标隐向量。这样避免了权重趋零,可以学习更恰当的数据表示!

训练结束后,舍弃目标网络编码器,只保留一个编码器,根据该编码器,所有训练数据可生成自洽表示。这正是BYOL能够进行自监督学习的关键!因为学习到的表示具有自洽性,所以经不同的数据变换后几乎保持不变。这样,模型使得相似示例的表示更加接近!

接下来编写BYOL的训练代码。我选择使用Pythorch Lightning开源库,该库基于PyTorch,对深度学习项目非常友好,能够进行多GPU培训、实验日志记录、模型断点检查和混合精度训练等,甚至在cloud TPU上也支持基于该库运行PyTorch模型

from copy import deepcopy
from itertools import chain
from typing import Dict, List

import pytorch_lightning as pl
from torch import optim
import torch.nn.functional as f


def normalized_mse(x: Tensor, y: Tensor) -> Tensor:
   x = f.normalize(x, dim=-1)
   y = f.normalize(y, dim=-1)
   return 2 - 2 * (x * y).sum(dim=-1)


class BYOL(pl.LightningModule):
   def __init__(
       self,
       model: nn.Module,
       image_size: Tuple[int, int] = (128, 128),
       hidden_layer: Union[str, int] = -2,
       projection_size: int = 256,
       hidden_size: int = 4096,
       augment_fn: Callable = None,
       beta: float = 0.99,
       **hparams,
   ):
       super().__init__()
       self.augment = default_augmentation(image_size) if augment_fn is None else augment_fn
       self.beta = beta
       self.encoder = EncoderWrapper(
           model, projection_size, hidden_size, layer=hidden_layer
       )
       self.predictor = nn.Linear(projection_size, projection_size, hidden_size)
       self.hparams = hparams
       self._target = None

       self.encoder(torch.zeros(2, 3, *image_size))

   def forward(self, x: Tensor) -> Tensor:
       return self.predictor(self.encoder(x))

   @property
   def target(self):
       if self._target is None:
           self._target = deepcopy(self.encoder)
       return self._target

   def update_target(self):
       for p, pt in zip(self.encoder.parameters(), self.target.parameters()):
           pt.data = self.beta * pt.data + (1 - self.beta) * p.data

   # --- Methods required for PyTorch Lightning only! ---

   def configure_optimizers(self):
       optimizer = getattr(optim, self.hparams.get("optimizer", "Adam"))
       lr = self.hparams.get("lr", 1e-4)
       weight_decay = self.hparams.get("weight_decay", 1e-6)
       return optimizer(self.parameters(), lr=lr, weight_decay=weight_decay)

   def training_step(self, batch, *_) -> Dict[str, Union[Tensor, Dict]]:
       x = batch[0]
       with torch.no_grad():
           x1, x2 = self.augment(x), self.augment(x)

       pred1, pred2 = self.forward(x1), self.forward(x2)
       with torch.no_grad():
           targ1, targ2 = self.target(x1), self.target(x2)
       loss = torch.mean(normalized_mse(pred1, targ2) + normalized_mse(pred2, targ1))

       self.log("train_loss", loss.item())
       return {"loss": loss}

   @torch.no_grad()
   def validation_step(self, batch, *_) -> Dict[str, Union[Tensor, Dict]]:
       x = batch[0]
       x1, x2 = self.augment(x), self.augment(x)
       pred1, pred2 = self.forward(x1), self.forward(x2)
       targ1, targ2 = self.target(x1), self.target(x2)
       loss = torch.mean(normalized_mse(pred1, targ2) + normalized_mse(pred2, targ1))

       return {"loss": loss}

   @torch.no_grad()
   def validation_epoch_end(self, outputs: List[Dict]) -> Dict:
       val_loss = sum(x["loss"] for x in outputs) / len(outputs)
       self.log("val_loss", val_loss.item())

上述代码部分源自Pythorch Lightning提供的示例代码。这段代码你尤其需要关注的是training_step,在此函数实现模型的数据转换、特征投影和相似性损失计算等。

实例说明

下文我们将在STL10数据集上对BYOL进行实验验证。因为该数据集同时包含大量未标记的图像以及标记的训练和测试集,非常适合无监督和自监督学习实验。STL10网站这样描述该数据集:

STL-10数据集是一个用于研究无监督特征学习、深度学习、自学习算法的图像识别数据集。该数据集是对CIFAR-10数据集的改进,最明显的便是,每个类的标记训练数据比CIFAR-10中的要少,但在监督训练之前,数据集提供大量的未标记样本训练模型学习图像模型。因此,该数据集主要的挑战是利用未标记的数据(与标记数据相似但分布不同)来构建有用的先验知识。

通过Torchvision可以很方便的加载STL10,因此无需担心数据的下载和预处理。

from torchvision.datasets import STL10
from torchvision.transforms import ToTensor


TRAIN_DATASET = STL10(root="data", split="train", download=True, transform=ToTensor())
TRAIN_UNLABELED_DATASET = STL10(
   root="data", split="train+unlabeled", download=True, transform=ToTensor()
)
TEST_DATASET = STL10(root="data", split="test", download=True, transform=ToTensor())

同时,我们使用监督学习方法作为基准模型,以此衡量本文模型的准确性。基线模型也可通过Lightning模块轻易实现:

class SupervisedLightningModule(pl.LightningModule):
   def __init__(self, model: nn.Module, **hparams):
       super().__init__()
       self.model = model

   def forward(self, x: Tensor) -> Tensor:
       return self.model(x)

   def configure_optimizers(self):
       optimizer = getattr(optim, self.hparams.get("optimizer", "Adam"))
       lr = self.hparams.get("lr", 1e-4)
       weight_decay = self.hparams.get("weight_decay", 1e-6)
       return optimizer(self.parameters(), lr=lr, weight_decay=weight_decay)

   def training_step(self, batch, *_) -> Dict[str, Union[Tensor, Dict]]:
       x, y = batch
       loss = f.cross_entropy(self.forward(x), y)
       self.log("train_loss", loss.item())
       return {"loss": loss}

   @torch.no_grad()
   def validation_step(self, batch, *_) -> Dict[str, Union[Tensor, Dict]]:
       x, y = batch
       loss = f.cross_entropy(self.forward(x), y)
       return {"loss": loss}

   @torch.no_grad()
   def validation_epoch_end(self, outputs: List[Dict]) -> Dict:
       val_loss = sum(x["loss"] for x in outputs) / len(outputs)
       self.log("val_loss", val_loss.item())

可以看到,使用Pythorch Lightning可以方便的构建并训练模型。只需为训练集和测试集创建DataLoader对象,将其导入需要训练的模型即可。本实验中,epoch设置为25,学习率为1e-4。

from os import cpu_count

from torch.utils.data import DataLoader
from torchvision.models import resnet18


model = resnet18(pretrained=True)
supervised = SupervisedLightningModule(model)
trainer = pl.Trainer(max_epochs=25, gpus=-1, weights_summary=None)
train_loader = DataLoader(
   TRAIN_DATASET,
   batch_size=128,
   shuffle=True,
   drop_last=True,
)
val_loader = DataLoader(
   TEST_DATASET,
   batch_size=128,
)
trainer.fit(supervised, train_loader, val_loader)

经训练,仅通过一个非常小的模型ResNet18就取得约85%的准确率。但实际上,我们还可以做得更好!

接下来,我们使用BYOL对ResNet18模型进行预训练。在这次实验中,我选择epoch为50,学习率依然是1e-4。注:该过程是本文代码耗时最长的部分,在K80 GPU的标准Colab中大约需要45分钟。

model = resnet18(pretrained=True)
byol = BYOL(model, image_size=(96, 96))
trainer = pl.Trainer(
   max_epochs=50,
   gpus=-1,
   accumulate_grad_batches=2048 // 128,
   weights_summary=None,
)
train_loader = DataLoader(
   TRAIN_UNLABELED_DATASET,
   batch_size=128,
   shuffle=True,
   drop_last=True,
)
trainer.fit(byol, train_loader, val_loader)

然后,我们使用新的ResNet18模型重新进行监督学习。(为彻底清除BYOL中的前向hook,我们实例化一个新模型,在该模型引入经过训练的状态字典。)

# Extract the state dictionary, initialize a new ResNet18 model,
# and load the state dictionary into the new model.
#
# This ensures that we remove all hooks from the previous model,
# which are automatically implemented by BYOL.
state_dict = model.state_dict()
model = resnet18()
model.load_state_dict(state_dict)

supervised = SupervisedLightningModule(model)
trainer = pl.Trainer(
   max_epochs=25,
   gpus=-1,
   weights_summary=None,
)
train_loader = DataLoader(
   TRAIN_DATASET,
   batch_size=128,
   shuffle=True,
   drop_last=True,
)
trainer.fit(supervised, train_loader, val_loader)

通过这种方式,模型准确率提高了约2.5%,达到了87.7%!虽然该方法需要更多的代码(大约300行)以及一些库的支撑,但相比其他自监督方法仍显得简洁。作为对比,可以看下官方的SimCLRSwAV是多么复杂。而且,本文具有更快的训练速度,即使是Colab的免费GPU,整个实验也不到一个小时。

结论

本文要点总结如下。首先也是最重要的,BYOL是一种巧妙的自监督学习方法,可以利用未标记的数据来最大限度地提高模型性能。此外,由于所有ResNet模型都是使用ImageNet进行预训练的,因此BYOL的性能优于预训练的ResNet18。STL10是ImageNet的一个子集,所有图像都从224x224像素缩小到96x96像素。虽然分辨率发生改变,我们希望自监督学习能避免这样的影响,表现出较好性能,而仅仅依靠STL10的小规模训练集是不够的。

类似ResNet这样的模型中,ML从业人员过于依赖预先训练的权重。虽然这在一定情况下是很好的选择,但不一定适合其他数据,哪怕在STL10这样与ImageNet高度相似的数据中表现也不如人意。因此,我迫切希望将来在深度学习的研究中,自监督方法能够获得更多的关注与实践应用。

参考资料

https://arxiv.org/pdf/2006.07733.pdf 

https://arxiv.org/pdf/2006.10029v2.pdf

https://github.com/fkodom/byol 

https://github.com/lucidrains/byol-pytorch

https://github.com/google-research/simclr 

http://image-net.org/

https://cs.stanford.edu/~acoates/stl10/  


AI研习社是AI学术青年和AI开发者技术交流的在线社区。我们与高校、学术机构和产业界合作,通过提供学习、实战和求职服务,为AI学术青年和开发者的交流互助和职业发展打造一站式平台,致力成为中国最大的科技创新人才聚集地。

如果,你也是位热爱分享的AI爱好者。欢迎与译站一起,学习新知,分享成长。

]]>
人工智能开发者 //www.xyschoolife.com/category/yanxishe/VQDnS4MxvfIfSN5U.html#comments Sun, 22 Nov 2020 09:31:00 +0800
知识图谱改变银行业务模式?基于GraphDB探索FIBO //www.xyschoolife.com/category/yanxishe/pLWUOZdKF25I15bL.html 译者:AI研习社(季一帆

双语原文链接:Exploring FIBO Using the Inference and Property Path Features of GraphDB



简介

本体知识图谱可不是随拿随用的,使用者需要做出相应的努力才能发挥其作用,使其成为有效可用的工具。我们知道,领域知识的用处极大,然而这些知识却总是不完备的,将领域知识表示为图中的数据可不容易。在这个过程中,关键在于将你掌握的领域知识完美匹配到图中的知识表示。在本文中,我们将就GraphDB特性进行一系列讨论,其中就包括上述的知识匹配/对齐。

FIBO概况

金融业业务本体(FIBO)是由企业数据管理委员会(EDMC)开发的金融行业概念模型,至今仍由EDMC支持着FIBO的维护和开发。FIBO的目标是在金融业务数据构件的描述中,提供独立于数据构件的精确含义。具体而言,FIBO包含构建、扩展及集成金融业务应用所需的实体和关联信息。由于FIBO基于RDF(S)和OWL,因此可以使用SPARQL和OWL推理进行分析。本文应用的版本(2020第2季度)包含以下内容:

  • 122个命名空间,表示模块结构;

  • 1542类别

  • 1328概念

  • 535断言

自2017年首次发布FIBO以来,受益于金融业的广泛参与,该标准已取得广大发展,并符合许多现有标准。从一个称为“语义知识库”的Excel工作簿开始,FIBO已经发展成为基于RDF和OWL的复杂本体。在这个过程中,还发展了其他一些意外成果,包括本体工程的实践指南,例如使用传统基于文本的版本控制系统的RDF文本稳定性,通过与对象管理组(OMG)的密切关系实现严格的元数据标准,以及对OWL推理能力的使用。更多细节可见此处

FIBO的内容多种多样,其中,RDF和OWL本体是包含业务知识的核心实体。这些业务知识可表示为RDF-XML、Turtle、JSON-LD和N-Quads/N-Triples等形式。此外:

  • FIBO词汇表基于SKOS分类法,用于RDF-XML、Turtle和JSON-LD序列化的分类管理。

  • FIBO数据字典有.csv和.xlsx格式,包含FIBO中的操作类及其附带属性。

  • FIBO-DM是一种企业数据模型,可用作SAP PowerDesigner概念和逻辑数据模型。

在本文中,我们重点关注FIBO本体和词汇表。由于它们都使用RDF编码,因此可使用SPARQL和OWL推理进行分析。

两不同层次结构

FIBO词汇表中的所有概念都是由FIBO本体中的实体定义的。因此,这些概念包含有丰富的上下文信息,在应用中使用该词汇表会同时为用户提供这些信息。如,fibo-v-be:DomesticUltimateParent 由实体 fibo-be-oac-cctl:DomesticUltimateParent 所定义。


FIBO词汇表中的概念由 skos:broader  和 skos:narrower 两种不同层次的谓词进行定义。在上图中,Total Controlling Interest Party 是比 Domestic Ultimate Parent 更为宽泛的概念。在已公布的词汇表中,仅使用了 skos:broader。如 SKOS 规范所述,“skos:broader 和 skos:narrower  彼此相反。当概念X比概念Y表示更广泛时,意味着Y相对是X是更小、更准确的概念“。因此,从 fibo-v-be:TotalControllingInterestParty fibo-v-be:DomesticUltimateParent  存在 skos:narrower 的关系。 

如果给定词汇表的层次结构和本体的层次结构,那么层次结构之间的关系是什么呢?fibo-be-oac-cctl:DomesticUltimateParent 的每一个父类在词汇中都有对应概念吗?这些概念是否表达了skos:broaderTransitive/skos:narrowerTransitive 与 fibo-v-be:DomesticUltimateParent 的层次结构?在本文的其余部分,我们将借助GraphDB解答这些问题。

FIBO导入GraphDB

GraphDB是Ontotext开发的一个可扩展、高性能的三元组数据库,其前身是OWLIM。当前的9.4.1版本支持RDF1.1、SPARQL 1.1和OWL2推理,此外还支持其他许多用于索引、可视化、分析和联合工具。同时,还提供有web访问的API(包括用于终端的SPARQL协议),因此可以结合任何编程语言使用。在下一节会展示该数据库对SPARQL1.1,OWL2推理及其规范属性路径的支持。

首先通过GraphDB创建一个存储库,通过导航窗口Setup -> Repositories > Create Repository 等步骤实现。其中,表单关键字包括:

  • Repository ID,本例中是 FIBO

  • Ruleset,本例中选择下拉菜单中的 OWL 2-RL (Optimized)

  • 选中“Use context index”,因为FIBO本体包含反映本体模块结构的命名图。

其余字段使用默认值即可,以下为屏幕截图:


接下来导入RDF图,有以下要求:

  1. EDMC FIBO本体站点下载FIBO Production zipped N-Quads发行版。本文使用为2020年第2季度版。

  2. EDMC FIBO词汇站点下载FIBO Production zipped N-Quads发行版。本文使用为2020年第2季度版。

  3. 从W3C获取所需的SKOS简单知识管理系统http://www.w3.org/2004/02/skos/core#。因为W3C具有HTTP303重定向功能,在web中浏览该URI会自动生成HTML,并在导入GraphDB时生成RDF。

为了提高效率,最好将FIBO下载到本地磁盘,存储到GraphDB的import目录,而SKOS直接通过internet下载。

从磁盘导入词汇表需要1秒,导入本体需要1分10秒,通过互联网导入sko需要2秒。之所以速度相差之大,是因为在导入过程中要执行推断操作。词汇表基于开放SKOS,借助生成新三元组的结构元素,词汇表和SKOS的导入训练。而由于在本体构建过程中OWL的复杂性,消耗了较长时间。最终,导入图谱的106187条显式语句生成405493条推断语句,总计511680条语句。需要注意的是,所有推断语句存在于默认图,同时该图还包含命名图中的所有语句。

使用GraphDB Workbench的Explore菜单中的类层次结构图能够获得本体概述,该图将子类表示为嵌套在父类中的圆:


GraphDB中的推理

OWL 2支持许多不同的推理机制,GraphDB为其中的一些程序语言配置文件提供支持。在GraphDB中,存储相关的语言配置文件由规则集合确定。无论是通过SPARQL插入数据还是直接导入图谱,只要将三元组添加到知识库中,就会调用专门的规则引擎——reasoner。除非不进行推理操作,否则任何规则集都通过额外的隐式三元组实现并存储,而不是显式插入的三元组。GraphDB的特殊指出在于,提交SPARQL DELETE操作后,将回收无效的推断语句。此外,存储内容和选定规则集决定了新建三元组的属性。例如,如果两个谓词的定义表明它们是相反的,那么当其中一个谓词出现在一个三元组时,将创建一个相应逆属性的三元组。

在本文的FIBO应用中,我们选择了OWL2RL语言配置文件,该配置适用于对可扩展推理有一定要求,同时保留一定表达能力的应用。我们还用RDF Schema(RDFS)规则集加载FIBO,该规则集非常简单,只包含rdfs:subPropertyOf, rdfs:subClassOf, rdfs:domain和rdfs:range。正如预期的那样,使用RDFS加载FIBO本体的NQ文件只需不到一秒钟,而使用OWL2RL则需要一分钟以上。但是,RDFS只推断出170804个隐式语句,比OWL2RL少2倍多,一些重要的推论被忽略。例如,执行以下查询将会提取出OWL2RL知识库存在但RDFS缺失的子类关系:

SELECT * WHERE {
 { SERVICE <repository:FIBO-RL> {
     ?sub_class rdfs:subClassOf ?super_class
     FILTER(?sub_class != ?super_class)
     FILTER(?super_class != owl:Thing)
     FILTER(contains(str(?sub_class),'fibo')
         && contains(str(?super_class),'fibo'))
 }  }
 FILTER NOT EXISTS {
         ?sub_class rdfs:subClassOf ?super_class
 }
}

GraphDB内部联合能够实现跨知识库的相同实例数据高效查询。以下是RDFS推理库缺失的子类关系:


究其原因,是因为RDFS推理器无法处理概念的定义。例如,Rate和Ratio类被定义为与以下语句等价:

fibo-fnd-qt-qtu:Rateowl:equivalentClassfibo-fnd-utl-alx:Ratio

在OWL2的所有语言配置文件中,这表示它们是彼此的子类,但RDFS语义却不是如此。

基于属性路径的增强推理

属性路径是SPARQL的特殊属性,通过属性路径,能够在RDF图中跨不同三元组的节点。三元组是SPARQL中最简单的属性路径。

在FIBO本体中,类层次结构由及物谓词表示,即rdfs:subClassOf。FIBO词汇概念的层次结构由不及物谓词表示,如skos:broader。这意味着,本体的类层次结构与常用编程语言的层次结构的概念类似,如java、python和C++,以及UML等规范语言。类层次结构被映射到谓词,然而由于无法精准表示预期,映射是有损的,谓词概念一般无法完整表达原有语义。

至于词汇表的使用,则是为了给领域特定词汇提供更广泛的上下文。因此,使用者必须区分他们的词汇结构和FIBO的词汇结构。因为层次结构隐式地反映了本体的及物类结构,所以任何情况下进行集成都要求外部词汇表与隐式FIBO层次结构相关联。

由于FIBO本体层次结构实际上是要映射到skos:broaderTransitiveskos:narrower_transitive谓词,因此通过推理可以缓解映射问题。将GraphDB知识库与OWL2RL (Optimized) 规则集配合使用,能够创建所有必需三元组。SKOS语义属性的顶层结构是skos:semanticRelation,该谓词提供了可视化表示和词汇表导航所必需的结构。skos:broader  和 skos:narrower三元组可用于降低对FIBO的本体需求。

skos:broader 和 skos:narrower可用于FIBO的高层本体,至于选择何种方式,由使用者自行决定,可以单独应用,也可以按一定策略结合SPARQL使用。

对两种层次结构的lint check验证了属性路径和推断的实用性。每个词汇概念都由本体中的实体定义,那么哪些实体由于词汇表没有相应词汇而进行了类层次结构的映射呢?

结构完整性约束


使用SPARQL分析图谱

利用SPAERL查询语句,查找与类层次结构的概念槽子类相关联、但与FIBO词汇表的概念层次结构缺乏关联的类别。

Lint查询

SELECT DISTINCT ?parentEntity  where {
   ?concept a skos:Concept ;
            rdfs:isDefinedBy ?entity .
   # Every concept is defined by an entity
   ?entity rdfs:subClassOf ?parentEntity .
   # Exclude restrictions
   FILTER(ISIRI(?parentEntity))
   # Only consider resources in the FIBO namespaces
   FILTER(CONTAINS(str(?parentEntity),'fibo'))
   FILTER NOT EXISTS {
       # Find where there is no semantic relation
       # between concept and related concept
       ?relatedConcept rdfs:isDefinedBy ?parentEntity .
       # Consider the entire set of
       # related concepts in the hierarchy
       ?concept (skos:semanticRelation)+ ?relatedConcept
   }
}

至于词汇表和本体之间的属性路径,一部分依赖于skos:semanticRelation,另一部分依赖于rdfs:subClassOf

skos:semanticRelation后面的加号(+)表示此谓词可用作与主语通过rdfs:subClassOf匹配的一个或多个谓语之间的路径。此外,在属性路径中可以执行其他许多操作,本文不再讨论,有兴趣的读者请查阅SPARQL 1.1 Query language W3C Recommendation 21 March 2013

至此,我们得到一个知识库,该库包含FIBO本体和FIBO词汇表的显式和隐式RDF语句。执行lint查询将会生成不满足上述完整性检查的类列表:父类应该链接到词汇表中与相应子类相关的概念。

parentEntity 
 fibo-der-drc-swp:SwapLifecycleEventIdentifier
 fibo-fbc-fct-bc:BusinessCenterCodeScheme
 fibo-fbc-fct-breg:RegistrationAuthorityCode
 fibo-fbc-fct-fse:FinancialServiceProviderIdentifierScheme
 fibo-fbc-fct-rga:RegulationIdentificationScheme
 fibo-fbc-fct-rga:RegulationIdentifier
 fibo-fbc-fct-usjrga:FederalReserveDistrictIdentifier
 fibo-fbc-fi-fi:SecuritiesTransactionIdentifier
 fibo-fnd-arr-arr:CollectionConstituent
 fibo-fnd-arr-arr:DatedCollectionConstituent
 fibo-fnd-arr-arr:DatedStructuredCollection
 fibo-fnd-arr-arr:Scheme
 fibo-fnd-arr-arr:StructuredCollection
 fibo-fnd-dt-fd:CombinedDateTime
 fibo-fnd-gao-gl:Goal
 fibo-fnd-law-lcap:LicenseIdentifier
 fibo-fnd-oac-ctl:Control
 fibo-fnd-oac-oac:OwnershipAndControl
 fibo-fnd-oac-own:Ownership
 fibo-fnd-pas-pas:ProductIdentifier
 fibo-fnd-plc-adr:RegionSpecificIdentifier
 fibo-fnd-plc-loc:County
 fibo-fnd-plc-loc:FederalCapitalArea
 fibo-fnd-plc-loc:FederalState
 fibo-fnd-plc-loc:Parcel
 fibo-fnd-plc-uspsa:DeliveryAddressCodeSet
 fibo-fnd-plc-uspsa:DeliveryPointCodeSet
 fibo-fnd-plc-uspsa:ZipCodeScheme
 fibo-fnd-plc-vrt:NotionalPlace
 fibo-fnd-pty-pty:Situation
 fibo-fnd-rel-rel:Reference
 fibo-fnd-utl-alx:StatisticalAreaIdentifier
 fibo-sec-sec-iss:SecurityOfferingDistributionType

结论

FIBO是本体工程一个非常复杂的展示,需要由具有广泛金融知识以及具有丰富的本体及其管理知识的人员执行,只靠阅读代码是不够用的。为了最好的利用FIBO,需要借助GraphDB这样强大的工具,以充分利用FIBO的丰富知识来辅助开发。本文证明,在FIBO执行推理时,OWL2RL是比RDFS更好的选择。同时,结合推理和属性路径能够检测到一些结构性问题,这些技术的研究为大型、复杂的本体和知识图谱提供质量保证。

之后,我们会陆陆续续发布一系列相关文章,对如何使用图数据库引擎和语义技术来处理金融服务部门的本体和数据进行介绍。


AI研习社是AI学术青年和AI开发者技术交流的在线社区。我们与高校、学术机构和产业界合作,通过提供学习、实战和求职服务,为AI学术青年和开发者的交流互助和职业发展打造一站式平台,致力成为中国最大的科技创新人才聚集地。

如果,你也是位热爱分享的AI爱好者。欢迎与译站一起,学习新知,分享成长。

]]>
人工智能开发者 //www.xyschoolife.com/category/yanxishe/pLWUOZdKF25I15bL.html#comments Sat, 21 Nov 2020 10:17:00 +0800
无需依赖英语数据,100种语言互译,脸书推出「 M2M-100」模型 //www.xyschoolife.com/category/yanxishe/inqm72KtVug1F2Sj.html 译者:AI研习社(季一帆

双语原文链接:Is The Data Science Profession At Risk of Automation?



  • Facebook AI首次提出多语言机器翻译(MMT)模型——M2M -100,该模型可以在不依赖英语数据的情况下在任何100种语言间进行翻译。该项目已开源

  • 由于英语训练数据非常广泛,之前的中法翻译模型会分别训练中文与英语以及英语与法语的翻译模型,通过英语作为中间环节实现翻译。本文模型直接应用中文与法语的训练数据,以更好保留语义。计算BLEU指标,表明其高于以英语中转的系统约10个百分点。

  • M2M-100总共使用2200种语言进行训练,这比之前最好的以英语为中心的多语言模型要多10倍。通过M2M-100模型,将有助于十亿人的翻译工作,对于低资源语言的翻译提升更加显著。

  • Facebook AI经多年在机器翻译方面的耕耘,如今终于实现该里程碑式的结果。接下来,我们将介绍具体的研究工作,包括为100种语言建立的翻译训练数据、模型的细节和训练。同时,我们还将开源该模型,并发布模型的训练和评估设置,以方便其他研究人员的复现,以此为基础进一步推动多语言模型的发展。

机器翻译(MT)能够打破语言障碍,将不同语种的人团结起来,为不同人群提供有关COVID的权威信息以帮助他们避免感染。得益于我们在低资源机器翻译翻译质量评估的最新研究与进展,现在,我们每天能够在Facebook News Feed上提供近200亿次翻译。

典型的MT系统需要对不同语言和任务单独构建翻译模型,然而,这样的方式却并不适合Facebook,因为在Facebook上,有超过160种语言发布的数十亿条内容。现在的多语言系统虽然可以一次处理多种语言,但却是通过英语数据作为源语言和目标语言之间的中转,从而降低了准确性。因此,我们需要一个真正的多语言机器翻译(MMT)模型,该模型可以在任何语言之间直接进行翻译,这将为我们的社区提供更好的服务。

我们已经在Facebook对MT进行了多年的研究,现在终于可以自豪的宣布:我们首次构建了一个的大型MMT模型,该模型可以在100种不同语言之间直接进行翻译,而无需依赖英语作为中转语言。同时,我们的多语言模型的表现完全不弱于传统的双语模型,甚至要比以英语为中转的多语言模型提高了10个BLEU点。

通过新颖的挖掘策略,我们首次构建了一个真正的“多对多”翻译数据集,该数据集有75亿个句子,涵盖100种不同语言。最终,我们构建了一个具有150亿个参数的通用模型,该模型可以捕获相关语言的信息,并能够学习更加多样化的语言和形态特征。开源地址见此

不同语言的亿万训练语句挖掘

建立多对多MMT模型的最大障碍之一是训练数据,即不同语言之间直接的高质量翻译数据,而不是以英语作为中间语言。然而现实情况是,比起法语和中文的直接翻译数据,中文和英文以及英语和法语的翻译数据更易获取。此外,训练所需的数据量与支持语言的数量成正比,例如,如果每种语言需要需要10M句子对,那么10种语言就是1B句子对,100种语言需要100B句子对。

构建包含100种语言的75亿句子对的多对多MMT数据集是艰巨的任务,由于我们多年来积累了不同的数据挖掘资源,包括ccAlignedccMatrixLASER,因此构建该数据集是可行的。为此,我们创建了新的LASER 2.0,改进了fastText语言识别,从而提高挖掘质量,相关的训练与评估脚本也会开源。当然,所有这些数据都是开源合法的。

Facebook AI提出的多对多的多语言模型是多年研究的结晶,MT模型、数据资源和优化技术等方面均是开创性的。本文会重点介绍一些主要成就。除此之外,我们通过挖掘ccNET创建了庞大的训练数据集,该数据集是基于fastText的(fastText是处理单词表示的重要方法);基于CCMatrix的LASER库可将句子嵌入多语言嵌入空间中;CCAligned则能够根据URL匹配来对齐文档。进一步,我们开发了改进版本LASER 2.0。

即使使用LASER 2.0等先进技术,挖掘100种不同语言/4450种可能语言对中的任意一类训练数据也需要大量的计算。由于数据规模巨大,为方便管理,我们首先关注翻译请求最多的语言。因此,我们综合数据规模和数据质量对挖掘目标进行优先排序,舍弃了对极冷门语言的数据挖掘,如冰岛语-尼泊尔语或僧伽罗语-爪哇语。

接下来,我们引入一种新的过渡挖掘策略,该策略根据地理和文化相似性将语言分为14个语言组。之所以这样做,是因为相同国家或地区中的人们会有更多的交流,这样的翻译数据质量更高。例如,将印度地区的语言分为一组,包括孟加拉语,北印度语,马拉地语,尼泊尔语,泰米尔语和乌尔都语。类似的,我们系统挖掘了不同组的全部语言对。

为了在不同组的语言之间建立联系,我们从每组中选择少量过渡语言,一般是一到三种主要语言。在上端的示例中,我们选择印地语,孟加拉语和泰米尔语作为印度雅-利安语言的过渡语言。然后,我们并行挖掘了过渡语言2200种组合的所有数据,最终得到包含75亿条数据的训练集。由于翻译数据是可以在两种语言之间相互进行训练的(如en-> fr和fr-> en),因此我们的挖掘策略采用高效的稀疏挖掘方式,通过一个模型就能实现100x100(共9,900个)种组合的数据挖掘工作。

在并行挖掘过程中,会得到一些低质量、低资源的翻译数据,基于此,我们采用反向翻译方法对这类数据进行扩充,该方法帮助我们在2018年和2019年的WMT国际机器翻译比赛中获得第一名。具体而言,如果我们的目标是训练汉语到法语的翻译模型,那么我们首先会训练法语到汉语的模型,然后将法语反译成汉语。我们发现,在数据规模较大时(如上亿语句)该方法非常有效。本研究中,我们使用反向翻译的合成数据对挖掘数据集进行扩充,同时,我们还使用反向翻译为那些未标注的语言对创建训练数据。

总体而言,相比仅依赖挖掘数据训练的模型,结合过渡策略和反向翻译的训练数据学习到的模型在100个反向翻译任务中BLEU平均提升约1.7。有了丰富、高质量的训练数据集,多对多翻译模型成为可能。

此外。我们还发现,对于没有训练数据的一个语言对,零样本(zero-shot)想过显著。例如,如果模型的训练数据只有法语-英语和德语-瑞典语,通过zero-shot我们可以在法语和瑞典语之间实现翻译。我们的M2M-100模型也表明,对于没有训练数据的语言对,融合zero-shot的多语言模型表现优于以英语作为过渡的多语言模型。

MMT模型-150亿参数,翻译快又准

多语言翻译中的一个挑战是,单一模型必须要能够从不同语言获取信息。为此,通常的方法是增大模型,添加面向特定语言类型的参数。同时,过量训练数据训练的模型包含一些无关参数,舍弃这类参数不仅会压缩模型,还避免了这些参数对翻译任务的干扰。最终,我们当将模型大小缩放到含120亿参数,发现在不同语言的翻译任务中BLEU平均提升约1.2,但随着参数的继续减少,模型性能开始下降。这样,通用多语言翻译模型含120参数,加上面向特定语言的32亿稀疏参数,最终的模型有150亿参数。


我们将该模型与双语基准模型和以英语作为过渡的多语言模型进行比较,如上图所示。第一行表示由24个编码器层和24个解码器层组成的包含12亿参数的基线模型,第二行是以英语为过渡的的多语言翻译模型。接下来,分别是包含12亿参数和120亿参数的M2M-100模型,可以看到,更多参数的模型BLEU提升1.2。

通过增加Transformer的层数以及每层的宽度,我们训练得到更大的模型,该模型依然训练高效、收敛快递。值得注意的是,该多对多翻译系统首次应用了Fairscale——一个是专用于pipeline和张量并行运算的新的PyTorch库。我们建立了通用架构,以通过Fairscale并行训练大型模型,避免了单GPU的限制。同时,我们应用ZeRO优化器层内模型并行pipeline模型并行来加快模型训练。

然而,120亿参数的多语言翻译模型是不够的,我们要训练更准确高效的模型。现在有许多研究工作使用多模型集成方法,即训练多个模型,并将其用于相同源语句进行翻译。为降低多个模型训练的复杂性和计算量,我们引入多源自组技术,该技术将源句子翻译成多种语言以提高翻译质量。参照LayerDropDepth-Adaptive,我们训练得到一个具有公共主干和不同语言特定参数集的模型。该方法能够按语言对或语言族将模型进行分块,非常适用多对多模型。最终,将压缩的多语言模型参数(12B)与特定语言参数(约3B)相结合,我们的模型不仅能像大型模型那样具有广泛扩展性,同时还能面向不同语言进行针对处理。

全力打破不同语言间的壁垒

多年来,人工智能研究人员一直在努力构建一个能够理解所有语言的通用模型。这样一个支持所有语言或方言的通用模型将为所有人提供更好的服务,令人满意的翻译将打破数十亿人的语言壁垒,让他们更加平等的了解这个世界。这项工作使我们更加接近了这一目标。

在长久的研究中,我们在预训练语言模型,微调和自我监督学习等方面发展迅速,研究成果振奋人心。这一系列的研究将进一步提高我们的系统使用未标记的数据来理解低资源语言文本的能力。例如,XLM-R是一个强大的多语言模型,它可以仅从一种语言数据中进行学习,然后扩展到100种语言。针对多语言BART任务,mBART是首次预训练全模型之一。最近,我们提出新的自我监督方法CRISS,通过许多不同语言的未标记数据来挖掘不同语言的并行句子,迭代训练更好的多语言模型。

我们将持续关注前沿进展,学习最新技术,探索MT系统的部署方式以及更加专业的计算架构,以继续改进翻译模型。

GitHub

https://github.com/pytorch/fairseq/tree/master/examples/m2m_100 


AI研习社是AI学术青年和AI开发者技术交流的在线社区。我们与高校、学术机构和产业界合作,通过提供学习、实战和求职服务,为AI学术青年和开发者的交流互助和职业发展打造一站式平台,致力成为中国最大的科技创新人才聚集地。

如果,你也是位热爱分享的AI爱好者。欢迎与译站一起,学习新知,分享成长。

]]>
人工智能开发者 //www.xyschoolife.com/category/yanxishe/inqm72KtVug1F2Sj.html#comments Thu, 19 Nov 2020 11:24:00 +0800