最佳 Pytorch 科研项目架构模板实践

此前,跨象乘云™ 发布了《最佳TensorFlow科研项目架构模板实践》,TensorFlow 是帮助深度学习新方法走向实现的强大工具。它为大多数深度学习领域中使用的常用语言提供了大量应用程序接口。对于开发者和研究人员来说,在开启新的项目前首先面临的问题是:如何构建一个简单明了的结构。所以,经过大量的实践和对 Tensorflow 项目贡献,整理了一个结合简洁,具备文件夹结构化组织,并且面向对象设计的 Tensorflow 项目模板最佳实践 —— 为高校深度学习与新一代人工智能科研实验室建设以及科研教学平台提供良好的基础支撑。

另一方面,自从 PyTorch 1.0 发布之后,越来越多的人选择使用 PyTorch,今天给大家介绍一个 Github 项目,作者通过自己使用 PyTorch 的实际工程经验,总结出了一套非常有用的使用 PyTorch 的最佳实践,涉及到使用 PyTorch 的方方面面。

本文总结了使用 PyTorch 框架进行深度学习的一年多经验中的最佳实践。请注意,我们分享的经验大多来自研究和创业的视角。这是一个开放的项目,欢迎其他合作者编辑和改进文档。该文档有三个主要部分。首先,简要回顾一下 Python 中的最佳实践,然后介绍一些使用 PyTorch 的技巧和建议。最后,我们分享了一些使用其他框架的见解和经验,这些框架通常对我们改进工作流有帮助。

GitHub地址项目 GitHub 地址

《机器学习实用指南》第二版发布

Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow》(《机器学习实用指南》),这本书最大的特色从理论上讲就是言简意赅,全书基本上没有太多复杂的数学公式推导。这一点正是国内很多高校教材所欠缺的。这本超赞的机器学习实用指南终于正式出版了第二版:《Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow: Concepts, Tools, and Techniques to Build Intelligent Systems 2nd Edition》,并且在美国亚马逊上开售(包括 Kindle 版本)。

Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow Concepts, Tools, and Techniques to Build Intelligent Systems 2nd Edition
Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow Concepts, Tools, and Techniques to Build Intelligent Systems 2nd Edition

本教材作者是 Aurélien Géron,法国人,毕业于AgroParisTech,曾任 Google Youtube 视频分类项目组负责人,创建过多家公司并担任 CTO,也曾在 AgroParisTech 担任讲师。现在是一名机器学习的顾问。第二版相比第一版增加了许多新的内容,最直白的就是第一版使用了 Scikit-LearnTensorFlow,而第二版增加了 Keras 深度学习框架。从内容上来说,第二版增加了更多的机器学习前沿知识,包括:无监督学习,训练深度网络,计算机视觉自然语言处理等等。作者将本书所有章节的详细代码都开源了并发布在 GitHub 上,目前已经收获了 5.5k star。

GitHub地址项目 GitHub 地址

吴恩达新课上线:TensorFlow 移动和 Web 端机器学习

大家都很熟悉吴恩达了。他开设的 Coursera 机器学习课程可以说是很多初学者的「白月光」。近日,他创始的 deeplearning.ai 在 Coursera 上另外开设了一门课程 ——《TensorFlow: Data and Deployment Specialization》,主要介绍使用 Tensorflow.js、TensorFlow Lite、TensorFlow Hub 等工具进行数据分析的方法。该专项课程已于今日开放注册。吴恩达对课程进行了转推。

TensorFlow 是深度学习中最著名的框架之一,绝大多数人都已经掌握了基本的使用方法。如果要更上一层楼,选择本课程无疑是一个好方法。据介绍,这门课程可以帮助学习者了解很多应用场景,并发现训练模型中的高效方法。

该专项课程总共分为四个部分,主旨在于帮助学习者了解如何让机器学习模型从实验阶段走向实际应用。首先,你可以了解到在浏览器和移动设备中训练模型。同时,你可以学习如何仅用几行代码使用内置数据集、完成数据分割和处理各种非结构化数据的工作。最后,你还能了解很多应用场景,并了解 TensorFlow Serving、TensorFlow Hub、TensorBoard 等。

Joshua Gordon《TensorFlow 2.0讲解》PPT

Tensorflow2.0 对于新手来说更为易用,而对于老手来说,功能更为强大,Josh Gordon 为我们介绍了TensorFlow2.0  的一些新的特征与使用技巧。

在构建模型方面,针对不同的使用人群,TensorFlow2.0 提供了不同层面的 API,针对刚接触 TensorFlow 的新手,提供了Sequential API, 针对工程师,开放了 FunctionalAPI 与 build-in 层,针对有更高需求的工程师,开放了 FunctionalAPI 与可定制的层,评估指标,损失函数等,而针对科研工作者,开放了 Subclassing,可以定制一切函数。

在训练模型方面,从简单到复杂也分很多层次。从快速实验的 model.fit(),到定制回调函数 callbacks,到定制训练循环 batch (使用 GAN 时很有效),到完全定制训练过程,包括优化算法等 (GradientTape).

在数据方面,提供了 tensorflow_datasets,能够轻松地加载数据集。

在并行训练方面,得益于分布式策略,无需改变代码,就可以在多台机器、多个 GPU 上训练(MirroredStrategy, MultiWorkerMirroredStrategy)。

教程最后还介绍了两个项目:TinyML: 轻量级的机器学习项目 与 TF.js.

Joshua Gordon 《TensorFlow 2.0讲解》

神经架构搜索研究指南 -5

  1. 系列文章:《神经架构搜索研究指南 -1
  2. 系列文章:《神经架构搜索研究指南 -2
  3. 系列文章:《神经架构搜索研究指南 -3
  4. 系列文章:《神经架构搜索研究指南 -4

9. SNAS:随机神经结构搜索

ICLR 2019:SNAS: Stochastic Neural Architecture Search

这篇论文的作者提出了随机神经结构搜索 (SNAS)。SNAS 是 NAS 的端到端解决方案,在同一轮的反向传播中同时训练神经算子参数和体系结构分布参数。在此过程中,它维护了 NAS 流程的完整性和可微性。

作者将 NAS 重新表述为单元中搜索空间的联合分布参数的优化问题。搜索梯度被用于,利用梯度信息进行泛化的可微损失的体系结构搜索。这种搜索梯度与基于增强学习的 NAS 优化了相同的目标,但为结构决策分配分数时效率更高。

如下所示,搜索空间使用一个有向无环图 (DAG) 表示,称为父图。在图中,节点 xi 代表隐式表示。边 (i, j) 表示要在节点之间选择的信息流和操作。

A conceptual visualization for a forward pass within SNAS.
A conceptual visualization for a forward pass within SNAS.

以下是 CIFAR-10 上 SNAS 和最先进的图像分类器的分类错误:

Classification errors of SNAS and state-of-the-art image classifiers on CIFAR-10.
Classification errors of SNAS and state-of-the-art image classifiers on CIFAR-10.

10. DARTS:可微结构搜索

ICLR 2019:DARTS: Differentiable Architecture Search

这篇论文以可微的方式构造任务,解决了结构搜索的可伸缩性问题。

本文没有在一组离散的候选结构上进行搜索,而是将搜索空间放宽为连续的。因此,可以通过梯度下降,对体系结构的验证集性能进行优化。基于梯度优化的数据效率提升,使得 DARTS 能够使用更少的计算资源获得出色的性能。该模型的性能也优于 ENAS。DARTS 既适用于卷积网络,也适用于递归网络。

作者寻找一种计算单元作为最终架构的构建模块。通过递归连接,学习单元可以被堆叠成卷积网络或递归网络。一个单元是由 N 个节点的有序序列组成的有向无环图。每个节点都是一个隐式的表示——例如一个特征图——并且每条有向边都与转换节点的一些操作相关联。一个单元格被假定为有两个输入节点和一个输出节点。卷积单元的输入节点定义为前两层的单元输出。最近文献里提到的卷积单元里,它们的输入节点被定义为当前步骤的输入和上一步所携带的状态。对所有中间节点应用缩减操作(例如 concatenation 操作)来生成输出单元。

 An overview of DARTS
An overview of DARTS.

该模型与 CIFAR-10 上最先进的图像分类器的比较如下:

Comparison with state-of-the-art image classifiers on CIFAR-10.
Comparison with state-of-the-art image classifiers on CIFAR-10.

——》本系列文章完《——

神经架构搜索研究指南 -4

  1. 系列文章:《神经架构搜索研究指南 -1
  2. 系列文章:《神经架构搜索研究指南 -2
  3. 系列文章:《神经架构搜索研究指南 -3

7. Auto-Keras:高效的神经结构搜索系统

2018:Auto-Keras: An Efficient Neural Architecture Search System

本文提出了一个框架,使用贝叶斯优化引导网络形变,以提升 NAS 的效率。基于他们的方法,作者构建了一个名为 Auto-Keras 的开源 AutoML 系统。

该方法中,网络的主要组成模块,是在贝叶斯优化算法的指导下,通过神经结构的形变来寻找搜索空间。NAS 空间不是欧氏空间,因此作者设计了一个神经网络核函数来解决这一问题。核函数是将一个神经结构变形为另一个神经结构的编辑距离。

Neural Network Kernel. Given two neural networks fa, fb , and matchings between the similar layers, the figure shows how the layers of fa can be changed to the same as fb . Similarly, the skip-connections in fa also need to be changed to the same as fb according to a given matching.
Neural Network Kernel. Given two neural networks fa, fb, and matchings between the similar layers, the figure
shows how the layers of fa can be changed to the same as fb. Similarly, the skip-connections in fa also need to be changed to the same as fb according to a given matching.

利用贝叶斯优化来指导网络形态的第二个挑战是获取函数的优化。这些方法不适用于网络形态的树结构的搜索。通过优化树结构空间的获取函数,解决了这一难题。置信度上界 (UCB) 被选择作为获取函数。
该体系结构的搜索模块是包含贝叶斯优化器和高斯过程的模块。搜索算法在 CPU 上运行,模型训练器模块在 GPU 上进行计算。

该模块在分离的进程中用训练数据训练神经网络,以实现并行化。图模块处理神经网络的计算图,并由搜索模块控制,进行网络形态学操作。模型存储是一个包含经过训练的模型的池子。由于这些模型很大,所以它们存储在存储设备上。

Auto-Keras System Overview
Auto-Keras System Overview

下面是该模型与其他模型在不同数据集上的性能比较:

Classification Error Rate
Classification Error Rate

8. 基于贝叶斯优化和最优传输的神经结构搜索

2018:Neural Architecture Search with Bayesian Optimisation and Optimal Transport

这篇论文提出了一种基于高斯过程 (贝叶斯优化,即 BO) 的神经结构搜索框架 NASBOT。这是通过在神经网络体系结构的空间中开发一个距离度量来实现的,该距离度量可以通过最优传输程序来计算。

作者提出了一种神经网络结构的 (伪) 距离,称为 OTMANN (神经网络结构的最优传输度量),可以通过最优传输程序进行快速计算。他们还开发了一个 BO 框架来优化神经网络结构上的函数,称为 NASBOT (使用贝叶斯优化和最优传输的神经结构搜索)。

为了实现 BO 方案,本文提出了一种神经网络结构的核函数,并给出了一种优化神经网络结构获取函数的方法,它采用进化算法对获取函数进行优化。

这个方法有一个初始的网络池,并计算这些网络上的获取函数。然后该网络池的一组 Nmut 个突变被生成出来。首先要做的就是从被评估的网络集合中随机选择 Nmut 个候选对象,这样那些具有较高的函数值的网络更有可能被选中。然后对每个候选对象进行修改,以生成一个新的体系结构。

可以通过增加或减少一个层中的计算单元数量、添加或删除层,或更改现有层的连接结构来更改体系结构。

最后一步是评估这些 Nmut 突变的获取函数,将其添加到初始池中,并重复指定的次数。在实验中,作者使用 NASBOT 来优化获取。通过实验,他们得出结论,NASBOT 的性能优于用于优化采集的进化算法。

 An illustration of some CNN architectures
An illustration of some CNN architectures

与其他模型相比,NASBOT 的性能如下图所示:

The first row gives the number of samples N and the dimensionality D of each dataset in the form (N, D). The subsequent rows show the regression MSE or classification error (lower is better) on the test set for each method. The last column is for Cifar10 where we took the best models found by each method in 24K iterations and trained it for 120K iterations. When we trained the VGG-19 architecture using our training procedure, we got test errors 0.1718 (60K iterations) and 0.1018 (150K iterations).
The first row gives the number of samples N and the dimensionality D of each dataset in the form (N, D). The subsequent rows show the regression MSE or classification error (lower is better) on the test set for each method. The last column is for Cifar10 where we took the best models found by each method in 24K iterations and trained it for 120K iterations. When we trained the VGG-19 architecture using our training procedure, we got test errors 0.1718 (60K iterations) and 0.1018 (150K iterations).

神经架构搜索研究指南 -3

  1. 系列文章:《神经架构搜索研究指南 -1
  2. 系列文章:《神经架构搜索研究指南 -2

5. 高效结构搜索的层次化表示

ICLR 2018:Hierarchical Representations for Efficient Architecture Search

该网络中提出的算法在 CIFAR-10 上实现了 3.6% 的 top-1 误差,在 ImageNet 上实现了 20.3% 的 top-1 误差。作者提出了一种描述神经网络结构的层次化表示方法,证明了用简单的随机搜索可以得到具有竞争力的图像分类网络结构,并提出了一种可扩展的进化搜索方法变体。

对于平面体系结构表示,他们研究了由单源、单汇聚(single-sink)计算图组成的神经网络体系结构家族,该计算图将源处的输入转换为汇聚处的输出。图中的每个节点都对应一个特征图,每个有向边都和某个操作关联,比如池化操作或者卷积操作。此操作转换输入节点中的特征图,并将其传递给输出节点。

Three-level hierarchical architecture representation
Three-level hierarchical architecture representation.

对于层次化结构,将在不同层次上有若干个不同的 motifs。在较高层次的 motifs 构建过程中,较低层次的 motifs 被作为构建模组。

A ARCHITECTURE VISUALIZATION
A ARCHITECTURE VISUALIZATION

这是 CIFAR-10 测试集中不同模型的错误率:

Classification error on the CIFAR-10 test set obtained using state-of-the-art models as well as the best-performing architecture found using the proposed architecture search framework. Existing models are grouped as (from top to bottom): handcrafted architectures, architectures found using reinforcement learning, and architectures found using random or evolutionary search.
Classification error on the CIFAR-10 test set obtained using state-of-the-art models as
well as the best-performing architecture found using the proposed architecture search framework.
Existing models are grouped as (from top to bottom): handcrafted architectures, architectures found
using reinforcement learning, and architectures found using random or evolutionary search.

6. 渐进神经结构搜索

ECCV 2018:Progressive Neural Architecture Search

该方法采用基于序列模型的优化策略 (SMBO) 学习卷积神经网络 (CNNs) 的结构。本文基于神经结构搜索 (NAS) 方法。

本文中,搜索算法的任务是识别一个好的卷积单元,而不是一个完整的 CNN。每个单元格包含 B 个块,每个块是应用于两个输入数据的组合运算符。每个输入都可以在组合之前进行转换 —— 例如,通过卷积进行转换。然后根据训练集的大小和最终 CNN 所要求的运行时间,决定叠加起来的单元的数量。

The best cell structure found by our Progressive Neural Architecture Search.
The best cell structure found by our Progressive Neural Architecture Search.

通过使用步长为 1 或步长为 2 的基本单元叠加预定数量的副本,可以将单元叠加转换为 CNN,如上图所示。然后,在步长为 2 的单元之间的步长为 1 的单元数量,调整为最多可以有 N 个。在网络的顶层引入了平均池化和 softmax 分类层。下图显示了模型在 CIFAR 测试集上的性能:

Performance of different CNNs on CIFAR test set.
Performance of different CNNs on CIFAR test set.

神经架构搜索研究指南 -2

系列文章:《神经架构搜索研究指南 -1

3. 可伸缩图像识别领域的可转移架构学习

2017:Learning Transferable Architectures for Scalable Image Recognition

在本文中,作者在一个小数据集上搜索结构上的一个组成模块,然后将该模块再转换到一个大数据集上。这是因为直接使用大型数据集将非常麻烦和耗时。

作者在 CIFAR-10 数据集上寻找最佳卷积层,并将其应用于 ImageNet 数据集。具体做法是将该层的更多副本堆叠在一起来实现的。每一层都有自己的参数,用于设计卷积架构。作者将这种体系结构称为 NASNet 架构。

他们还引入了正则化技术——ScheduledDropPath——来改进 NASNet 模型中的泛化性能。该方法的错误率为 2.4%。最大的 NASNet 模型平均精度达到 43.1%。

与前一篇文章一样,本文也使用了神经体系结构搜索 (NAS) 框架。本文的方案中,卷积网络的总体结构是人工预置好的。它们由重复几次的卷积单元组成。每个卷积层具有相同的结构,但权重不同。

该网络有两种类型的单元:返回相同维度特征图的卷积单元(Normal Cell),以及返回特征图的卷积单元(Reduction Cell)。后者特征图的高度和宽度在卷积输出时减少了一半。

 Scalable architectures for image classification consist of two repeated motifs termed Normal Cell and Reduction Cell. This diagram highlights the model architecture for CIFAR-10 and ImageNet. The choice for the number of times the Normal Cells that gets stacked between reduction cells, N, can vary in our experiments.
Scalable architectures for image classification consist of two repeated motifs termed Normal Cell and Reduction Cell. This diagram highlights the model architecture for CIFAR-10 and ImageNet. The choice for the number of times the Normal Cells that gets stacked between reduction cells, N, can vary in our experiments.

在本文提出的搜索空间中,每个单元接收两个初始隐藏状态作为输入,这两个初始隐藏状态是前两层或输入图像中的两个单元的输出。在给定这两个初始隐藏状态的情况下,控制器 RNN 递归地预测卷积单元结构的其余部分。

Controller model architecture for recursively constructing one block of a convolutional cell. Each block requires selecting 5 discrete parameters, each of which corresponds to the output of a softmax layer. Example constructed block shown on right. A convolutional cell contains B blocks, hence the controller contains 5B softmax layers for predicting the architecture of a convolutional cell. In our experiments, the number of blocks B is 5.
Controller model architecture for recursively constructing one block of a convolutional cell. Each block requires selecting 5 discrete parameters, each of which corresponds to the output of a softmax layer. Example constructed block shown on right. A convolutional cell contains B blocks, hence the controller contains 5B softmax layers for predicting the architecture of a convolutional cell. In our experiments, the number of blocks B is 5.

下面是 CIFAR-10 数据集上神经结构搜索的性能:

Performance of Neural Architecture Search and other state-of-the-art models on CIFAR-10. All results for NASNet are the mean accuracy across 5 runs.
Performance of Neural Architecture Search and other state-of-the-art models on CIFAR-10. All results for NASNet are the mean accuracy across 5 runs.

4. 参数共享的高效神经结构搜索

2018:Efficient Neural Architecture Search via Parameter Sharing

本文作者提出了一种称为高效神经结构搜索 (ENAS) 的方法。在这种方法中,控制器通过在大型计算图中搜索最优子图来发现神经网络结构。该控制器经过训练,可以选出在验证集上获得最佳准确度的子图。

然后训练所选子图对应的模型,使正则交叉熵损失最小化。参数通常在子模型之间共享,以便 ENAS 能够提供更好的性能。在 CIFAR-10 测试中,ENAS 的错误率为 2.89%,而神经结构搜索 (NAS) 的错误率为 2.65%。

本文强制所有子模型共享权值,以避免从零开始训练每个子模型达到收敛,从而提高了 NAS 的效率。
本文用单个有向无环图(DAG)表示 NAS 的搜索空间。通过引入一个具有 N 个节点的 DAG,设计出了递归单元,该单元表示局部计算,图中的边表示 N 个节点之间的信息流。

ENAS 的控制器是一个 RNN,它决定在 DAG 中的每个节点上执行哪些计算以及激活哪些边。控制器网络是一个包含 100 个隐藏单元的 LSTM。

An example of a recurrent cell in our search space with 4 computational nodes. Left: The computational DAG that corresponds to the recurrent cell. The red edges represent the flow of information in the graph. Middle: The recurrent cell. Right: The outputs of the controller RNN that result in the cell in the middle and the DAG on the left. Note that nodes 3 and 4 are never sampled by the RNN, so their results are averaged and are treated as the cell’s output.
An example of a recurrent cell in our search space with 4 computational nodes. Left: The computational DAG that corresponds to the recurrent cell. The red edges represent the flow of information in the graph. Middle: The recurrent cell. Right: The outputs of the controller RNN that result in the cell in the middle and the DAG on the left. Note that nodes 3 and 4 are never sampled by the RNN, so their results are averaged and are treated as the cell’s output.
The graph represents the entire search space while the red arrows define a model in the search space, which is decided by a controller. Here, node 1 is the input to the model whereas nodes 3 and 6 are the model’s outputs.
The graph represents the entire search space while the red arrows define a model in the search space, which is decided by a controller. Here, node 1 is the input to the model whereas nodes 3 and 6 are the model’s outputs.

在 ENAS 中,需要学习两组参数:控制器 LSTM 的参数和子模型的共享参数。在训练的第一阶段,对子模型的共享参数进行训练。在第二阶段,对控制器 LSTM 的参数进行训练。这两个阶段在 ENAS 的训练期间交替进行。

An example run of a recurrent cell in our search space with 4 computational nodes, which represent 4 layers in a convolutional network. Top: The output of the controller RNN. Bottom Left: The computational DAG corresponding to the network’s architecture. Red arrows denote the active computational paths. Bottom Right: The complete network. Dotted arrows denote skip connections.
An example run of a recurrent cell in our search space with 4 computational nodes, which represent 4 layers in a convolutional network. Top: The output of the controller RNN. Bottom Left: The computational DAG corresponding to the network’sarchitecture. Red arrows denote the active computational paths. Bottom Right: The complete network. Dotted arrows denote skip connections.

以下是 ENAS 在 CIFAR-10 数据集上的表现情况:

Classification errors of ENAS and baselines on CIFAR-10. In this table, the first block presents DenseNet, one of the state-ofthe-art architectures designed by human experts. The second block presents approaches that design the entire network. The last block presents techniques that design modular cells which are combined to build the final network.
Classification errors of ENAS and baselines on CIFAR-10. In this table, the first block presents DenseNet, one of the state-ofthe-art architectures designed by human experts. The second block presents approaches that design the entire network. The last block presents techniques that design modular cells which are combined to build the final network.

神经架构搜索研究指南 -1

从训练到用不同的参数做实验,设计神经网络的过程是劳力密集型的,非常具有挑战性,而且常常很麻烦。但是想象一下,如果能够将这个过程实现自动化呢?将这种想象转变为现实,就是本指南的核心内容。

我们将探索一系列的研究论文,这些论文试图解决具有挑战性的自动化神经网络设计任务。在本指南中,我们假设读者尝试过使用 KerasTensorFlow 等框架从头开始设计神经网络。

1. 基于强化学习的神经结构搜索

2016:Neural Architecture Search with Reinforcement Learning

本文利用递归神经网络 (RNN) 生成神经网络的模型描述。为了提高 RNN 在验证集上的精度,作者对 RNN 进行了强化学习训练,该方法在 CIFAR-10 数据集上的错误率为 3.65。

本文提出的神经结构搜索是基于梯度的。本文提出的方法是基于以下考虑:神经网络的结构和连通性可以用变长串来描述。被称为控制器的神经网络用于生成这样的字符串。然后,字符串指定的子网络根据真实数据进行训练,并在验证集上得到初始的准确度度量。然后,使用这个准确度数据计算策略梯度,再用后者更新控制器。因此,具有较高准确度的结构可以得到较高的选中概率。

An overview of Neural Architecture Search
An overview of Neural Architecture Search

神经网络结构搜索中,该控制器用于生成神经网络的结构超参数。在下图中,控制器用于生成一个卷积神经网络。控制器预测滤波器高度、滤波器宽度和步长。预测由 softmax 分类器执行,然后作为输入,输入到下一个时间步。一旦控制器完成了生成结构的过程,带有这个结构的神经网络就会建立起来,并用它进行训练。

How our controller recurrent neural network samples a simple convolutional network. It predicts filter height, filter width, stride height, stride width, and number of filters for one layer and repeats. Every prediction is carried out by a softmax classifier and then fed into the next time step as input.
How our controller recurrent neural network samples a simple convolutional network. It predicts filter height, filter width, stride height, stride width, and number of filters for one layer and repeats. Every prediction is carried out by a softmax classifier and then fed into the next time step as input.

于子网络的训练需要花费数小时的时间,为了加快控制器的学习过程,作者采用了分布式训练和异步参数更新的方法。

 Distributed training for Neural Architecture Search. We use a set of S parameter servers to store and send parameters to K controller replicas. Each controller replica then samples m architectures and run the multiple child models in parallel. The accuracy of each child model is recorded to compute the gradients with respect to θc, which are then sent back to the parameter servers.
Distributed training for Neural Architecture Search. We use a set of S parameter servers to store and send parameters to K controller replicas. Each controller replica then samples m architectures and run the multiple child models in parallel. The accuracy of each child model is recorded to compute the gradients with respect to θc, which are then sent back to the parameter servers.

该模型与其他模型的错误率对比如下:

Performance of Neural Architecture Search and other state-of-the-art models on CIFAR-10
Performance of Neural Architecture Search and other state-of-the-art models on CIFAR-10.

2. 高效结构搜索的层次化表示

ICLR 2018:Hierarchical Representations for Efficient Architecture Search

该网络中提出的算法在 CIFAR-10 上实现了 3.6% 的 top-1 误差,在 ImageNet 上实现了 20.3% 的 top-1 误差。作者提出了一种描述神经网络结构的层次化表示方法,证明了用简单的随机搜索可以得到具有竞争力的图像分类网络结构,并提出了一种可扩展的进化搜索方法变体。

对于平面体系结构表示,他们研究了由单源、单汇聚(single-sink)计算图组成的神经网络体系结构家族,该计算图将源处的输入转换为汇聚处的输出。图中的每个节点都对应一个特征图,每个有向边都和某个操作关联,比如池化操作或者卷积操作。此操作转换输入节点中的特征图,并将其传递给输出节点。

An example of a three-level hierarchical architecture representation.
An example of a three-level hierarchical architecture representation.

对于层次化结构,将在不同层次上有若干个不同的 motifs。在较高层次的 motifs 构建过程中,较低层次的 motifs 被作为构建模组。

A ARCHITECTURE VISUALIZATION
A ARCHITECTURE VISUALIZATION

这是 CIFAR-10 测试集中不同模型的错误率:

 Classification error on the CIFAR-10 test set obtained using state-of-the-art models as well as the best-performing architecture found using the proposed architecture search framework. Existing models are grouped as (from top to bottom): handcrafted architectures, architectures found using reinforcement learning, and architectures found using random or evolutionary search.
Classification error on the CIFAR-10 test set obtained using state-of-the-art models as well as the best-performing architecture found using the proposed architecture search framework. Existing models are grouped as (from top to bottom): handcrafted architectures, architectures found using reinforcement learning, and architectures found using random or evolutionary search.

TensorFlow 2.0 正式版发布

此前,Google 在 TensorFlow 开发者大会 (TensorFlow Dev Summit) 上发布了 TensorFlow 2.0 的 Alpha 版本。经过近 7 个月的努力,今天,TensorFlow 2.0 正式版现已推出!TensorFlow 2.0 由社区推动,社区的声音让 Google 了解到开发者需求的是一个灵活、强大且易于使用的平台,并且支持部署 TensorFlow 2.0 到任何平台上。TensorFlow 2.0 为开发者、企业与研究人员提供了一个全面的生态系统,以推动最先进的机器学习研究与构建大规模的机器学习应用。—— 同时,跨象乘云™ 也提供了 TensorFlow 2.0 的实战课程

TensorFlow 2.0 让 ML 应用的开发变得更容易。KerasEager Execution 更紧密地结合至  TensorFlow 并成为默认选项,并以原生 Python 的方式执行函数,TensorFlow 2.0 让开发应用的体验变得更接近于原生 Python 开发。对于想要推进机器学习进步的研究人员,Google 在 TensorFlow 底层 API 上投入了大量精力:Google 暴露了内部使用的所有算子 (ops),并且为关键概念(如变量和 checkpoints)提供了可继承的接口。这允许开发者基于 TensorFlow 内部方法进行开发,而不必重新编译 TensorFlow。

TensorFlow 2.0 Training and Deployment
TensorFlow 2.0 Training and Deployment

为了能够在不同运行时环境(如云、Web、浏览器、Node.js、移动端以及嵌入式系统)中运行模型,Google 使用了标准化的文件结构 SavedModel 。让开发者在TensorFlow 中运行模型的同时,可以通过 TensorFlow Serving 部署模型,通过 TensorFlow Lite 部署至移动或嵌入式系统中,并且在浏览器或 Node.js 中使用 TensorFlow.js 训练和运行模型。

对于高性能训练场景,您可以使用 Distribution Strategy API 进行分布训练,修改少量代码并获得出色的开箱即用 (out-of-the-box) 性能。支持使用 Keras Model.fit 进行分布式训练,并支持自定义训练循环 (custom training loops)。此外,现已提供多 GPU 支持

TensorFlow 2.0 在 GPU 性能提升上也作出了很多努力。TensorFlow 2.0 通过使用 Volta 与 Turing GPU 混合精度,仅需几行代码,即可提升 3 倍训练性能(可见ResNet-50 与 BERT 模型的示例)。TensorFlow 2.0 紧密结合了 TensorRT ,通过使用改进的 API,提升了 NVIDIA T4 Cloud GPUs 在谷歌云的可用性与性能。

在使用 TensorFlow 建模时,有效获取训练和验证数据至关重要。为此,Google 引入了  TensorFlow Datasets ,为包含多种数据类型(如图像、文本、视频等)的大量数据集提供了标准接口。

虽然 Google 仍保留了传统的基于会话(Session)的开发模式,但 Google 建议使用基于 Eager Execution 的更接近原生 Python 的开发模式。使用 tf.function 将代码转换为可远程执行、序列化和性能优化的计算图。此外,Autograph 还可以将常规的 Python 控制流直接转换为 TensorFlow 控制流。

当然,如果您使用过 TensorFlow 1.x 并正在寻找 2.0 的迁移指南,Google 也已经在此发布。TensorFlow 2.0 正式版还包含一个自动转换脚本以帮助您入门。

Google 内部及 TensorFlow 社区的许多用户进行了合作,以测试 TensorFlow 2.0 的功能,Google 为收集到的反馈感到高兴:如 Google News 团队在 TensorFlow 2.0 中使用了基于 BERT 的语言理解模型,该模型大大提高了报道的覆盖率。TensorFlow 2.0 提供的灵活且易于使用的 API,可快速将新想法落地。模型培训和服务已无缝集成到现有基础架构中。

此外,ML 不仅适用于 Python 开发者 —— 有了 TensorFlow.js,JavaScript开发者也可以使用 TensorFlow 进行训练和推理,并且我们也持续在 Swift 上进行投入,通过 Swift for TensorFlow 使其作为一种构建模型的语言。

还有很多值得介绍的功能,为了帮助大家快速了解这些新功能,我们为 TensorFlow 2.0 中的所有新功能创建了便捷指南。不仅如此,为了使 TensorFlow 2.0 入门更加容易,我们在还发布了使用2.0 API 的几种常用 ML 模型的参考实现。

快速上手:请尝试使用 Google Cloud’s Deep Learning VM Images —— 无需进行设置,预先配置的虚拟机即可帮助您构建 TensorFlow 2.0 深度学习项目。