Raven:全球首个真正分布式深度学习训练协议

对于深度学习研究者来说,计算能力非常关键,但 CPU 和 GPU 资源往往是有限的。Raven 协议正是解决这一问题的良方。Raven 协议可以利用空闲的计算资源来训练深度神经网络,而这些资源均来自个人用户设备的分享。分享空闲计算资源进行深度学习训练的概念可以为资源使用者节约大量的研究成本,而资源的贡献者则可以得到 Raven 币(RAV)作为补偿 / 回报。

在一个普通的、计算能力有限的计算机上训练一个 AI/ML 模型往往需要数周甚至数月的时间。对于更好的计算芯片(GPU)的需求是一个必须考虑的成本因素。密集和频繁地使用高速计算资源来操作计算数据、计算和更新深度神经网络中不同神经元的梯度,其需要的成本往往是小型到中型公司和开发者无法担负的。云计算在一定程度上对这一问题有所帮助,但获取云资源来支持 AI 研发仍是一笔难以负担的开支。目前,在绝大部分云计算平台上,每小时所需支付的金额都在 2.5~17 美元之间。

对于中小型企业来说,要解决算力资源问题最简单的方式是通过众包。众包这一概念从很早之前便开始挑战传统经营模式,使得计算资源服务更加便宜、更加容易获得。Uber 和 Airbnbs 就是通过众包存活下来的代表。AI 世界也注意到了这种优秀的模式。Kaggle 平台的开发就是通过众包,利用海洋协议(Ocean Protocol)来收集数据。AI 生态系统非常欢迎这种新方法。而 Raven 协议的目标就是将众包火炬传递下去,通过对空闲计算资源的充分利用,建立第一个真正去中心化、分布式的深度学习训练系统,使深度学习模型的训练更为经济。

希望进行技术革新的 AI 爱好者和企业家们现在可以从 AI 研究中有所收获了,因为众包资源可以解决计算资源短缺难题。AI 社区中的许多成员,如 Singularity.net、Ocean Protocol、OpenMind、Deep Brain Chain 等等,都建立起了资源共享平台,用于在安全的区块链内共享计算和数据资源,进而助力机器学习 / 深度学习算法向商业模型的转变。

Raven 协议成功建立起了去中心化、激励性和安全的机器学习 / 深度学习模型训练机制。

经过几十年的发展,传统的神经网络相关算法已进化为深度神经网络(DNN),并在各种应用领域取得了巨大成功,尤其是模式识别领域。

这种基于训练的方法的理论局限是,一个 DNN 架构怎样在一个节点上训练、在多个不同的服务器上应用,或分割成数个部分并分发到数个服务器上训练。显然,这种训练方式极其消耗算力,所以只能在强大的 GPU 和服务器上进行操作。Raven 解决这一问题的方式是装配动态节点分配机制,对网络中的设备进行分工。这样,Raven 就可以消除主节点的所有依赖,并显著地减少任务所需的计算能力。

Raven 协议相较于其他相似规则的突出之处在于它处理异步更新及数据碎片的并行所产生的延迟的方法。这种延迟问题用其他方案无法解决,而且延迟在模型训练过程中是一个主要耗时因素,可能会消耗数周甚至数月。即使是拥有大量计算资源,对这一问题也无能为力。另外,如果想要让数据实现并行化,用户必须拥有可处理庞大计算资源的平台。这一因素使得规模较小的用户群无法访问该平台。Raven 协议允许个人用户贡献、分享空闲设备的计算资源,使得研究者对性能强大的 CPU 或 GPU 硬件的需求降到最低。分享空闲计算资源来进行训练的概念,会大大降低成本。作为补偿 / 回报,计算资源的分享者们会得到 Raven 币(RAV)。只需要在以太坊区块链中通过智能合同进行两步简单的校验,这种激励机制便可实现。

Raven 可以成功地将模型训练过程中所需的数量庞大的小型异步运算,搭建为一个动态图。

TensorFlow 推出模型优化工具包,可将模型压缩75%

近日,TensorFlow 推出了一款新的模型优化工具包。利用该该工具包中的技术可以将模型压缩 75%,最大可将速度提升到原来的 3 倍。新手和熟练的开发者都能利用这套工具包中的技术来优化待部署和执行的机器学习模型。预计该工具包中的技术将有助于优化所有 TensorFlow 模型以进行部署,但它对于那些为内存紧张、功率和存储受限的设备提供模型的 TensorFlow Lite 开发人员来说帮助最大。

添加的第一项支持技术是对 TensorFlow Lite 转换工具的训练后量化(post-training quantization)。对于相关的机器学习模型,利用该技术可以将模型压缩到原来的 1/4,并将速度提升到原来的 3 倍。开发者可以通过量化模型减少能耗。这点对于在边缘设备中部署(不局限于手机)非常有用。

训练后量化技术是 TensorFlow Lite 转换工具的一部分。上手非常简单:创建 TensorFlow 模型之后,开发者可以简单地实现 TensorFlow Lite 转换工具中的「post_training_quantize」标记。假设这一保存的模型存储在 saved_model_dir 中,则可以生成量化的 tflite flatbuffer:

TensorFlow 提供了相关教程,深入解析如何做到这一点。未来的目标是将这种技术纳入通用的 TensorFlow 工具中,以便将其部署在目前没有 TensorFlow Lite 支持的平台上。好处在于 ——

  • 模型缩小到原来的 1/4
  • 主要由卷积层组成的模型执行速度提高了 10-50%。
  • 基于 RNN 的模型得到了 3 倍的加速
  • 由于减少了内存和计算需求,预计大多数模型将降低功耗。

信通院发布《人工智能安全白皮书(2018年)》

此前,中国信息通信研究院、中国人工智能产业发展联盟首次联合发布《人工智能发展白皮书 – 技术架构篇(2018年)》。

人工智能作为引领未来的战略性技术,日益成为驱动经济社会各领域从数字化、网络化向智能化加速跃升的重要引擎。近年来,数据量爆发式增长、计算能力显著性提升、深度学习算法突破性应用,极大地推动了人工智能发展。自动驾驶智能服务机器人、智能安防、智能投顾等人工智能新产品新业态层出不穷,深刻地改变着人类生产生活,并对人类文明发展和社会进步产生广泛而深远的影响。

然而,技术的进步往往是一把『双刃剑』,人工智能作为一种通用目的技术,为保障国家网络空间安全、提升人类经济社会风险防控能力等方面提供了新手段和新途径。但同时,人工智能在技术转化和应用场景落地过程中,由于技术的不确定性和应用的广泛性,带来冲击网络安全、社会就业、法律伦理等问题,并对国家政治、经济和社会安全带来诸多风险和挑战。世界主要国家都将人工智能安全作为人工智能技术研究和产业化应用的重要组成部分,大力加强对安全风险的前瞻研究和主动预防,积极推动人工智能在安全领域应用,力图在新一轮人工智能发展浪潮中占得先机、赢得主动。

本白皮书从人工智能安全内涵出发,首次归纳提出了人工智能安全体系架构,在系统梳理人工智能安全风险和安全应用情况的基础上,进一步总结了国内外人工智能安全的管理现状,研究提出了我国人工智能安全风险应对与未来发展建议。安全风险包括:网络安全风险、数据安全风险、算法安全风险、信息安全风险、社会安全风险、以及国家安全风险。另外,信通院同时发布了白皮书的解读 PPT

AMD ROCm GPU,TensorFlow Alternative Solution

Google 近日宣布:推出适用于 AMD ROCm GPU 的 TensorFlow v1.8,其中包括 Radeon Instinct MI25。对于 Google 正在进行的深度学习加速工作而言,这是一座重大的里程碑。ROCm 即 Radeon 开放生态系统 (Radeon Open Ecosystem),是在 Linux 上进行 GPU 计算的开源软件基础。AMD 的 TensorFlow 实现使用了 MIOpen,这是一个适用于深度学习的高度优化 GPU 例程库。AMD 提供了一个预构建的 whl 软件包,安装过程很简单,类似于安装 Linux 通用 TensorFlow。同时,已发布安装说明及预构建的 Docker 映像

GitHub地址项目 GitHub 地址

TensorFlow 数据验证:能够大规模理解、验证和监控数据

日前,Google 推出了 TensorFlow 数据验证(TFDV),这是一个可以帮助您大规模地理解、验证和监控 ML 数据的开源库。 学术界和工业界都非常关注 ML 算法及其性能,一旦输入数据有误,所有这些为了优化而做的努力都将成为泡影。能够自动化和扩展数据分析,验证和监视任务就变得尤其重要。

TFDV 是 TFX Platform 平台的一部分,用于每天分析和验证若干 PB 的 Google 数据。 它在早期捕获数据错误方面具有良好的记录,因此有助于 TFX 客户维护其 ML 流程的健康状况。

在 TFDV 的基础上有一个功能强大的库,用于计算训练数据中的那些描述性统计数据。 这些统计信息用于帮助开发人员调查和了解他们的数据,以及推断架构(稍后将详细介绍)

  • 推断架构:根据统计数据,TFDV 推断出一种模式(由 schema.proto 描述),旨在反映数据的稳定特征。
  • 验证新数据:给定一个模式,TFDV 可以根据模式中表达的期望验证一组新数据。

在 notebook 环境之外,可以使用相同的 TFDV 库来大规模分析和验证数据。 TFX 流程中 TFDV 的两个常见用例是连续到达数据和训练 / 服务偏斜检测的验证。 此外,对于 TensorFlow Transform 的用户,可以使用推断的模式将数据解析为 preprocessing_fn。

  • 验证持续到达数据 Validation of Continuously Arriving Data:在数据连续到达的情况下,需要根据模式中编码的期望来验证新数据。
  • 训练 / 服务偏斜检测 Training/Serving Skew Detection:训练 / 服务偏斜是指用于训练模型的数据与服务系统观察到的数据之间的特征值或分布的差异。

GitHub地址项目 GitHub 地址

TensorFlow 基础实验指南

Google 在全球有很多 GDE (Google Developers Expert),他们都是 Google 认可的资深专家。GDE 一直致力于通过各种形式传播和推广新技术,并帮助开发者解决开发过程中遇到的问题。每一位 GDE 都对其所在的领域作出过特殊贡献。这篇精简的 TensorFlow 入门指导,作者李锡涵。基于 TensorFlow 的 Eager Execution(动态图)模式,力图让具备一定机器学习及 Python 基础的开发者们快速上手 TensorFlow。

 

信通院发布 2018 年人工智能发展白皮书(技术架构篇)

中国信息通信研究院、中国人工智能产业发展联盟首次联合发布《人工智能发展白皮书 – 技术架构篇(2018年)》。本篇为:技术架构篇,从产业发展的角度,选择以深度学习算法驱动的人工智能技术为主线,分析作为人工智能发展『三驾马车』的

数据,计算力,算法

的技术现状、问题以及趋势,并对:

智能语音,自然语言处理,计算机视觉

等基础应用技术进行分析,并提出了目前存在的问题和技术的发展趋势。后续我院与中国人工智能产业发展联盟将继续发布人工智能应用、产业和政策方面研究成果。

Facebook 推出大规模 OCR 系统:Rosetta

OCR(Optical Character Recognition),也称光学字符识别,是通过扫描等光学输入方式将各种票据、报刊、书籍、文稿及其它印刷品的文字转化为图像信息,再利用文字识别技术将图像信息转化为可以使用的计算机输入的一种技术。其实大家都在应用这项技术:快递单号的扫描识别、火车票的验证等等。最近,Facebook 研究人员提出了一个大规模图像文本提取和识别系统:Rosetta。这是一种有效的建模技术用于检测和识别图像中的文本。通过进行大量的评估实验,Facebook 解释了这种实用系统是如何用于构建 OCR 系统,以及如何在系统的开发期间部署特定的组分。KDD 2018 链接

AI 科研神器!Google 数据集搜索引擎

在当今世界,数据成了诸多学科领域的科学家和数据记者的命脉。网络上有成千上万的数据存储库,提供了数百万个数据集,世界各地的地方和国家政府也会公布他们的数据。为了能够轻松访问这些数据,Google 启动了 Dataset Search 项目,让科学家、数据记者、数据爱好者或其他人能够快速找到他们想要的数据,或者仅仅为了满足他们的求知欲。

Google Dataset Search
Google Dataset Search

数据集搜索使用户能够查找网上数以千计的存储区中存储的数据集,从而让这些数据集可供大众使用,让人人受益。

数据集和相关数据往往分布在网上的多个数据存储区中。在大多数情况下,搜索引擎既无法提供这些数据库相关信息的链接,也不会将这些信息编入索引,这会导致数据寻找变得无比繁琐,或者在某些情况下无法实现。

Google 为用户提供了能够同时搜索多个存储区的单个界面,希望借此改变用户发布和运用数据的方式。Google 还相信,这个项目能够带来下列好处:

  • 形成数据共享生态系统,鼓励数据发布者依照最佳做法来存储和发布数据;
  • 为科学家提供相应平台,方便大众引用他们创建的数据集,展现他们的研究成果所带来的影响力。

Dataset Search 与 Google Scholar 的工作方式类似,可以让用户找到托管在任何位置的数据集,无论是发布者的网站、数字图书馆还是个人主页。Google 为数据提供者制定了一个指南,通过某种方式来描述他们的数据,这样,Google (和其他搜索引擎)可以更好地理解他们的数据。指南要求描述有关数据集的一些重要信息:数据集的创建者、发布时间、数据的收集方式、数据的使用条款等等。然后,Google 会收集并链接这些信息,分析可能存在的相同数据集的不同版本,并尝试找与描述或讨论数据集相关的资料。Google 所采用的方法是基于一种数据集描述开放标准(schema.org),数据发布者可以通过这种方式描述他们的数据集。数据集提供者可以采用这一通用标准,以便让更多的数据集成为这个强大生态系统的一部分。

Google 数据指南基于数据集的开放标准(schema.org),任何发布数据的人都可以通过这种标准方式来描述他们的数据集。以下是一个数据集定义的示例,完整数据集定义参见:http://schema.org/Dataset

成为数据科学家的 8 个步骤

为了引导您完成这个信息和建议的丛林,DataCamp 已经改进了『成为数据科学家的 8 个步骤』信息图:它现在提供了学习数据科学所需的八个步骤的最新视图。 根据背景和个人经验以及其他因素,这些八个步骤中的一些对于某些人来说将比对其他步骤更容易。然而,目标仍然是让每个对数据科学学习感兴趣的人或者已经成为数据科学家或数据科学团队成员的所有人的视觉指南,但是需要一些额外的资源来进一步完善。同时,中国人民大学的朝乐门教授做了中文版翻译。

Data Science Eight Steps
Data Science Eight Steps

数据湖概念与应用

日前,IBM 发布博文,从数据湖的定义,数据湖的优势,数据湖的演变,数据湖的应用等方面,多角度的阐述了近期日渐火爆的『数据湖』概念。

基本概念

  • 数据仓库:数据仓库是一种存储架构,旨在保存从多个数据源提取的数据,这些数据源包括操作数据存储、事务数据存储,以及企业内的部门数据集市。数据仓库将数据组合为一种聚合、摘要形式,适合于进行企业级数据分析以及针对业务需求定制报告。
  • 数据湖:数据湖是一种存储库,它以原生格式保存大量原始数据或细化的数据,以供按需访问。这个词有时与 Apache Hadoop 对象存储有关,但数据科学家越来越多地开始使用数据湖这个词来描述任何具有不明确的模式和数据需求的大型数据池。分析师仅在查询数据时定义这些参数。
  • 数据沼泽:数据沼泽是一种设计不良、未充分归档或未有效维护的数据湖。这些缺陷损害了检索数据的能力,用户无法有效地分析和利用数据。尽管数据已经存在,但如果没有上下文元数据,数据沼泽就无法检索数据。

为什么我们真的需要数据湖?

  • 用作原始数据存储库来满足合规和审核用途(例如录音和录像、文档扫描、文本和日志文件)。
  • 作为一个平台,供数据科学家和分析师访问结构化和非结构化数据来进行验证,并在沙箱中运行新的分析模型。
  • 作为一个平台,集成来自操作或事务系统的实时数据,并越来越多地集成来自 IoT 设备的传感器数据。

数据仓库提供的聚合和摘要数据对大部分 BI 用户已足够。数据湖的用户可以是审核人员、专业分析师和数据科学家(占少数)。有什么其他令人信服的让企业选择创建数据湖的原因?因此,了解数据湖与数据仓库有何不同是值得的。

数据仓库与数据湖之间有何区别?

数据仓库是一种具有正式架构的成熟的、安全的技术。它们存储经过全面处理的结构化数据,以便完成数据治理流程。数据仓库将数据组合为一种聚合、摘要形式,以在企业范围内使用,并在执行数据写入操作时写入元数据和模式定义。数据仓库通常拥有固定的配置;它们是高度结构化的,因此不太灵活和敏捷。数据仓库成本与在存储前处理所有数据相关,而且大容量存储的费用相对较高。

相较而言,数据湖是较新的技术,拥有不断演变的架构。数据湖存储任何形式(包括结构化和非结构化)和任何格式(包括文本、音频、视频和图像)的原始数据。根据定义,数据湖不会接受数据治理,但专家们都认为良好的数据管理对预防数据湖转变为数据沼泽不可或缺。数据湖在数据读取期间创建模式。与数据仓库相比,数据湖缺乏结构性,而且更灵活;它们还提供了更高的敏捷性。在检索数据之前无需执行任何处理,而且数据湖特意使用了便宜的存储。

尽管有这些优势,但数据湖在安全、治理和管理方面仍需要完善。但是,它还有一个重要优势,这也是一个富有吸引力的驱动因素。

机器学习和深度学习都是驱动因素

在采用数据湖的原因中,讨论最少但或许最有吸引力的是数据挖掘和分析中越来越多地开始采用机器学习和深度学习技术。传统搜索和分析方面的软件审核是一个成熟领域,但用于数据挖掘和分析的机器学习和深度学习技术的软件审核还处于起步阶段。

语音转录、光学字符识别、图像和视频识别等等,现在经常使用机器学习或深度学习技术。数据科学家需要访问原始的非结构化数据来训练这些系统,以便执行系统验证,并确保审计跟踪。类似地,深度学习执行数据挖掘等任务来查找维度与时序数据之间的模式和关系。

另一种深度学习应用是提取以前无法访问的、无法通过查询来检索的数据。这些数据称为暗数据,是本系列下一期的主题。在数据挖掘和分析应用中,机器学习和深度学习的出现是迁移到数据湖架构的一个非常有吸引力的理由。

数据湖的优势

  • 轻松地收集和摄入数据:企业中的所有数据源都可以送入数据湖中。因此,数据湖成为了存储在企业内部服务器或云服务器中的结构化和非结构化数据的无缝访问点。通过数据分析工具可以轻松地获得整个无孤岛的数据集合。此外,数据湖可以用多种文件格式存储多种格式的数据,比如文本、音频、视频和图像。这种灵活性简化了旧有数据存储的集成。
  • 支持实时数据源:数据湖支持对实时和高速数据流执行 ETL 功能,这有助于将来自 IoT 设备的传感器数据与其他数据源一起融合到数据湖中。
  • 更快地准备数据:分析师和数据科学家不需要花时间直接访问多个来源,可以更轻松地搜索、查找和访问数据,这加速了数据准备和重用流程。数据湖还会跟踪和确认数据血统,这有助于确保数据值得信任,还会快速生成可用于数据驱动的决策的 BI。
  • 更好的可扩展性和敏捷性:数据湖可以利用分布式文件系统来存储数据,因此具有很高的扩展能力。开源技术的使用还降低了存储成本。数据湖的结构没那么严格,因此天生具有更高的灵活性,从而提高了敏捷性。数据科学家可以在数据湖内创建沙箱来开发和测试新的分析模型。
  • 具有人工智能的高级分析:访问原始数据,创建沙箱的能力,以及重新配置的灵活性,这些使得数据湖成为了一个快速开发和使用高级分析模型的强大平台。数据湖非常适合使用机器学习和深度学习来执行各种任务,比如数据挖掘和数据分析,以及提取非结构化数据。

数据湖的演变

与其说数据湖在演变,不如说是一种技术融合。数据仓库是从其前身(关系数据库)演化而来,迈出了革命性的一步,但对于数据湖和数据仓库,我们不能这么说。

数据湖汇集了各种技术,包括数据仓库、实时和高速数据流技术、数据挖掘、深度学习、分布式存储和其他技术。但是,人们感觉数据湖在专业数据科学家或分析师中拥有有限的用户群。另一种常见的误解是,将数据湖概念与一种特定的支持技术(比如 Hadoop)联系起来。

数据湖概念拥有比任何一种基础技术更大的潜力,而且还在不断演化,供应商也在不断在添加特性和功能。潜在的增长领域包括:

  • 架构标准化和互操作性
  • 数据治理、管理和综合处理
  • 整体数据安全性

与大部分不断演化的技术一样,供应商之间的竞争和业务驱动因素扩大了应用边界。数据湖在诸多数据存储技术中获得广泛接受只是时间问题。

数据湖的应用

数据湖可以帮助解决电子医疗记录 (EMR) 的互操作性问题。联邦任务的意图是,通过使用 EMR,让医生能够访问跨多个系统的患者医疗记录,并在各个医院之间轻松地交接患者护理。在实际中,许多记录(包括保险索赔和临床数据)要么无法互操作,要么具有机器不可读的数据格式。在检索前,数据湖会存储任何格式的记录。所以,患者记录可能也包含医生手写的笔记、医学图像等。随着医疗领域中越来越多地开始使用医学设备遥测和 IoT,数据湖还能够从实时数据流中提取和存储数据。

银行和金融业通常会处理多个数据源。它也会处理高速的交易数据(从股票市场到信用卡)和其他银行交易。银行和金融机构经常存储法律和其他文档,以满足合规性和审核需求。数据湖非常适合存储这些混合数据格式,并以数字方式存储旧有数据,以方便检索。数据湖充当着一个敏捷平台来摄入多个数据流,以供这个行业垂直领域中的大量分析工具进行使用。

Twitter 情感分析项目

Twitter sentiment analysis with Python
Twitter sentiment analysis with Python

本文为 Python 实战之 Twitter 情感分析项目系列,原作者为 Ricky Kim,全文共分 11 个子项目:

  1. 数据准备
  2. 数据清洗
  3. 数据可视化探索
  4. 构建分类模型
  5. 分类模型对比
  6. Doc2Vec 框架
  7. Doc2Vec 短语建模
  8. 降维
  9. 神经网络分析应用(Keras)
  10. 神经网络分析应用(Doc2Vec / Word2Vec / GloVe)
  11. 神经网络分析应用(CNN + Word2Vec)

GitHub地址项目 GitHub 地址

神经网络架构搜索(NAS)综述

深度学习模型在很多任务上都取得了不错的效果,但调参对于深度模型来说是一项非常苦难的事情,众多的超参数和网络结构参数会产生爆炸性的组合,常规的 random search 和 grid search 效率非常低,因此最近几年神经网络的架构搜索和超参数优化成为一个研究热点。

机器之心的译文,从网络架构搜索的三个方面进行了分类综述,包括:

  • 搜索空间
  • 搜索策略
  • 评价预估

问题定义

网络架构和超参数优化的问题,有以下的特点:

  1. 评价函数未知,是一个黑箱优化问题,因为评价往往是在 unseed dataset 上进行评价;
  2. 非线性;
  3. 非凸;
  4. 混合优化,既有离散空间,又有连续空间;
  5. 一次优化结果的评价非常耗时,大型的深度学习模型参数数以亿计,运行一次结果需要几周时间;
  6. 在某些应用场景中,存在多个目标。比如:移动端的模型结构优化,既希望得到尽量高的准确率,又希望有非常好的模型计算效率。
Neural Architecture Search
Neural Architecture Search

搜索空间

搜索空间定义了优化问题的变量,网络结构和超参数的变量定义有所不同,不同的变量规模对于算法的难度来说也不尽相同。

早期很多工作都是用以遗传算法为代表的进化算法对神经网络的超参数和权重进行优化,因为当时的神经网络只有几层,每层十几个神经元,也不存在复杂的网络架构,参数很有限,可直接进行优化。而深度学习模型一方面有着复杂的网络结构,另一方面权重参数通常都以百万到亿来计,进化算法根本无法优化。

但换个思路,假如我们找到了一组网络架构参数和对应的超参数,深度学习模型的性能其实是由这组参数来控制和决定的,所以只需要对复杂模型的架构参数和对应的超参数进行优化即可。

目前常见的一种网络架构是链状结构,如下图:

N 层序列网络架构
N 层序列网络架构

这种结构相当于一个 N 层的序列,每一层有几种可选的算子,比如卷积、池化等,每种算子包括一些超参数,比如卷积尺寸、卷积步长等。

最近的一些工作受启发于一些人工设计的网络架构,研究带有多分支的网络,如下图:

多分支网络架构
多分支网络架构

很多的深层 RNN 会有类似的结构,很多的网络结构虽然很深,但会有许多重复 cell,将 cell 抽象出来之后,复杂的结构也会变得简单,一方面可以减少优化变量数目,另一方面相同的 cell 在不同任务之间进行迁移,如下图。

深层循环神经网络(RNN)架构
深层循环神经网络(RNN)架构

网络架构搜索问题由于其高维度、连续和离散混合等诸多难点,在搜索空间维度这块如果可以做些降维,将会大大提升效果,Zoph 在 2018 年的工作用了 cell 这种方式相比于 2017 年的工作有 7 倍的加速。

搜索策略

搜索策略定义了使用怎样的算法可以快速、准确找到最优的网络结构参数配置。常见的搜索方法包括:随机搜索、贝叶斯优化、进化算法、强化学习、基于梯度的算法。其中,2017 年谷歌大脑的那篇强化学习搜索方法将这一研究带成了研究热点,后来 Uber、Sentient、OpenAI、Deepmind 等公司和研究机构用进化算法对这一问题进行了研究,这个 task 算是进化算法一大热点应用。

强化学习

强化学习是一种非常有意思的范式,几乎只要可以提炼出强化学习四要素,原问题就可以用强化学习来求解。

在 NAS 任务中,将架构的生成看成是一个 agent 在选择 action,reward 是通过一个测试集上的效果预测函数来获得(这个函数类似于工程优化问题中的 surrogate model,即代理模型)。这类工作整体的框架都是基于此,不同的点在于策略表示和优化算法。

一个工作是,用 RNN 来表示策略函数,初始化时先用策略梯度算法赋初值,然后用 PPO 来进行优化。另一个工作是,用简单的 Q-learning 算法来训练策略函数,序列地进行动作选择,即选择 layer 的类型和相关的超参数。

因为在 NAS 任务中,agent 与环境没有交互,可以降阶为无状态的多臂老虎机(MAB)问题。 这里的几个工作都是近两三年的新工作,后面会对这些 paper 进行专门解读。

进化算法

进化算法是一大类算法,大概的框架也基本类似,先随机生成一个种群(N 组解),开始循环以下几个步骤:选择、交叉、变异,直到满足最终条件。最近几年流行一种基于概率模型的进化算法 EDA (Estimation Distribution of Algorithm),基本的思路类似遗传算法,不同的是没有交叉、变异的环节,而是通过 learning 得到一个概率模型,由概率模型来 sample 下一步的种群。

用进化算法对神经网络超参数进行优化是一种很古老、很经典的解决方案,90 年代的学者用进化算法同时优化网络结构参数和各层之间的权重,因为当时的网络规模非常小,所以还能解决,但后续深度学习模型网络规模都非常大,无法直接优化。

进化算法是一种无梯度的优化算法(Derivative Free Optimization Algorithm),优点是可能会得到全局最优解,缺点是效率相对较低,近两年几家高科技企业做 NAS 时都在用进化算法优化网络结构,同时用基于梯度的方法(BP)来优化权值。在 NAS 任务中,进化算法的交叉算子和任务结合比较紧,被定义为一些类似添加、删除层的操作,而非简单的更改某一位编码。

用进化算法解决 NAS 问题,不同的工作可能聚焦在不同的过程中,比如如何 sample 种群,如何 update 种群,如何生成子代种群等。这些工作将会被在后面的文章中进行解读。

贝叶斯优化

贝叶斯优化(Bayesian Optimization)是超参数优化问题的常用手段,尤其是针对一些低维的问题,基于高斯过程(Gaussian Processes)和核方法(kernel trick)。对于高维优化问题,一些工作融合了树模型或者随机森林来解决,取得了不错的效果。

除了常见的三大类方法,一些工作也在研究分层优化的思路,比如将进化算法和基于模型的序列优化方法融合起来,取各种方法的优势。Real 在 2018 年的一个工作对比了强化学习、进化算法和随机搜索三类方法,前两种的效果会更好一些。

评价预估

评价预估类似于工程优化中的代理模型(surrogate model),因为深度学习模型的效果非常依赖于训练数据的规模,大规模数据上的模型训练会非常耗时,对优化结果的评价将会非常耗时,所以需要一些手段去做近似的评估。

一种思路是用一些低保真的训练集来训练模型,低保真在实际应用可以有多种表达,比如训练更少的次数,用原始训练数据的一部分,低分辨率的图片,每一层用更少的滤波器等。用这种低保真的训练集来测试优化算法会大大降低计算时间,但也存在一定的 bias,不过选择最优的架构并不需要绝对数值,只需要有相对值就可以进行排序选优了。

另一种主流思路是借鉴于工程优化中的代理模型,在很多工程优化问题中,每一次优化得到的结果需要经过实验或者高保真仿真(有限元分析)进行评价,实验和仿真的时间非常久,不可能无限制地进行评价尝试,学者们提出了一种叫做代理模型的回归模型,用观测到的点进行插值预测,这类方法中最重要的是在大搜索空间中如何选择尽量少的点预测出最优结果的位置。

第三种主流思路是参数级别的迁移,用之前已经训练好的模型权重参数对target问题进行赋值,从一个高起点的初值开始寻优将会大大地提高效率。在这类问题中,积累了大量的历史寻优数据,对新问题的寻优将会起到很大的帮助,用迁移学习进行求解,是一个很不错的思路。

另一种比较有意思的思路叫做单次(One-Shot)架构搜索,这种方法将所有架构视作一个 one-shot 模型(超图)的子图,子图之间通过超图的边来共享权重。

小结

网络结构和超参数优化是自动机器学习(AutoML)中关键的一个环节,在上一个人工智能时代,浅层神经网络比较火的时候,自动调参也有很多工作,只不过区别在于不仅仅对超参数进行优化,还对网络的权值一起进行了优化。

在这个人工智能时代来临之后,各种深度模型的效果非常好,重新点燃了这个方向的研究激情,加上强化学习的火热,各种流派百家争鸣。

GitHub地址项目 GitHub 地址