Auto Byte

专注未来出行及智能汽车科技

微信扫一扫获取更多资讯

Science AI

关注人工智能与其他前沿技术、基础学科的交叉研究与融合发展

微信扫一扫获取更多资讯

报道

谷歌大脑开源Trax代码库,你的深度学习进阶路径

感觉深度学习建模只不过调库与堆叠层级?你需要谷歌大脑维护的这条路径 Trax,从头实现深度学习模型。

从最开始介绍卷积、循环神经网络原理,到后来展示各种最前沿的算法与论文,机器之心与读者共同探索着机器学习。我们会发现,现在读者对那些著名的深度学习模型已经非常熟悉了,经常也会推导或复现它们。

而对于最前沿的一些实现,包括 Transformer 或其它强化学习,我们通常都需要看原作者开源的代码,或者阅读大厂的复现。出于速度等方面的考虑,这些实现通常会显得比较「隐晦」,理解起来不是那么直白。这个时候,你就需要谷歌大脑维护的 Trax,它是 ML 开发者进阶高级 DL 模型的路径。

Trax 是一个开源项目,它的目的在于帮助我们挖掘并理解高一阶的深度学习模型。谷歌大脑表示,该项目希望 Trax 代码做到非常整洁与直观,并同时令 Reformer 这类高阶深度学习达到最好的效果。

项目地址:https://github.com/google/trax
什么是 Trax

简单来说,Trax 就是一个代码库,它有点类似于一个极简的深度学习框架。只不过 Trax 关注什么样的代码能让读者更好地理解模型,而不只是关注加速与优化。

Trax 代码及其组织方式希望让我们从头理解深度学习,而不只是简单地调库。整个项目从最基础的数学部分开始,然后向上依次构建层级运算、模型运算,以及有监督与强化学习训练任务。

因为是进阶深度学习高级建模,Trax 还囊括了最前沿的研究结果,例如在 ICLR 2020 上做演讲报告的 Reformer。如下展示的是该项目的代码文件结构:
如果要从头理解并进阶深度学习,那么 Trax 代码主要可以分为以下 6 部分:
  • math/:最基本的数学运算,以及通过 JAX 和 TensorFlow 加速运算性能的方法,尤其是在 GPU/TPU 上;

  • layers/:搭建神经网络的所有层级构建块;

  • models/:包含所有基础模型,例如 MLP、ResNet 和 Transformer,还包含一些前沿 DL 模型;

  • optimizers/:包含深度学习所需要的最优化器

  • supervised/:包含执行监督学习的各种有用模块,以及整体的训练工具;

  • rl/:包含谷歌大脑在强化学习上的一些研究工作;

每一个文件夹下都有对应的实现,例如在 Layers 中,所有神经网络层级都继承自最基础的 Layer 类,实现这个类花了 700 行代码。而后新的层级在继承它后只要实现以下两个方法就行:
通过 900 行代码(包括 Err 处理),基础的 Layer 类能完成其它所有处理,包括初始化与调用等。

使用 Trax

我们可以将 Trax 作为 Python 脚本库或者 Jupyter Notebook 的基础,也可以作为命令行工具执行。Trax 包含很多深度学习模型,并且绑定了大量深度学习数据集,包括 Tensor2Tensor 和 TensorFlow 采用的数据集。同时,如果我们在 CPU、GPU 或 TPU 上运行这些模型,也不需要改变。

如果读者想要了解如何快速将 Trax 作为一个库来使用,那么可以看看如下 Colab 上的入门示例。它介绍了如何生成样本数据,并连接到 Trax 中的 Transformer 模型。在训练或推断时,我们可以选择 GPU,也可以选择 8 核心的免费 TPU。
入门简介地址:

https://colab.research.google.com/github/google/trax/blob/master/trax/intro.ipynb

如果要在命令行中使用 Trax,那么带上参数就可以了,例如模型类型、学习率等超参。谷歌大脑团队建议我们可以看看 gin-config,例如训练一个最简单的 MNIST 分类模型,可以看看 mlp_mnist.gin,然后如下运行就行了:

python -m trax.trainer --config_file=$PWD/trax/configs/mlp_mnist.gin

如果你觉得上面的训练太简单,也可以在 ImageNet64 上训练一下 Reformer:

python -m trax.trainer --config_file=$PWD/trax/configs/reformer_imagenet64.gin

最后,这个项目最重要的还是它的实现代码,我们并不是因为可以直接运行而使用它。相反,我们是因为它的代码直观简洁,能帮助我们一步步更深刻地理解模型而使用它。
工程谷歌大脑开源库Trax深度学习
相关数据
深度学习技术

深度学习(deep learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。 深度学习是机器学习中一种基于对数据进行表征学习的算法,至今已有数种深度学习框架,如卷积神经网络和深度置信网络和递归神经网络等已被应用在计算机视觉、语音识别、自然语言处理、音频识别与生物信息学等领域并获取了极好的效果。

机器学习技术

机器学习是人工智能的一个分支,是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、计算复杂性理论等多门学科。机器学习理论主要是设计和分析一些让计算机可以自动“学习”的算法。因为学习算法中涉及了大量的统计学理论,机器学习与推断统计学联系尤为密切,也被称为统计学习理论。算法设计方面,机器学习理论关注可以实现的,行之有效的学习算法。

参数技术

在数学和统计学裡,参数(英语:parameter)是使用通用变量来建立函数和变量之间关系(当这种关系很难用方程来阐述时)的一个数量。

学习率技术

在使用不同优化器(例如随机梯度下降,Adam)神经网络相关训练中,学习速率作为一个超参数控制了权重更新的幅度,以及训练的速度和精度。学习速率太大容易导致目标(代价)函数波动较大从而难以找到最优,而弱学习速率设置太小,则会导致收敛过慢耗时太长

TensorFlow技术

TensorFlow是一个开源软件库,用于各种感知和语言理解任务的机器学习。目前被50个团队用于研究和生产许多Google商业产品,如语音识别、Gmail、Google 相册和搜索,其中许多产品曾使用过其前任软件DistBelief。

神经网络技术

(人工)神经网络是一种起源于 20 世纪 50 年代的监督式机器学习模型,那时候研究者构想了「感知器(perceptron)」的想法。这一领域的研究者通常被称为「联结主义者(Connectionist)」,因为这种模型模拟了人脑的功能。神经网络模型通常是通过反向传播算法应用梯度下降训练的。目前神经网络有两大主要类型,它们都是前馈神经网络:卷积神经网络(CNN)和循环神经网络(RNN),其中 RNN 又包含长短期记忆(LSTM)、门控循环单元(GRU)等等。深度学习是一种主要应用于神经网络帮助其取得更好结果的技术。尽管神经网络主要用于监督学习,但也有一些为无监督学习设计的变体,比如自动编码器和生成对抗网络(GAN)。

监督学习技术

监督式学习(Supervised learning),是机器学习中的一个方法,可以由标记好的训练集中学到或建立一个模式(函数 / learning model),并依此模式推测新的实例。训练集是由一系列的训练范例组成,每个训练范例则由输入对象(通常是向量)和预期输出所组成。函数的输出可以是一个连续的值(称为回归分析),或是预测一个分类标签(称作分类)。

强化学习技术

强化学习是一种试错方法,其目标是让软件智能体在特定环境中能够采取回报最大化的行为。强化学习在马尔可夫决策过程环境中主要使用的技术是动态规划(Dynamic Programming)。流行的强化学习方法包括自适应动态规划(ADP)、时间差分(TD)学习、状态-动作-回报-状态-动作(SARSA)算法、Q 学习、深度强化学习(DQN);其应用包括下棋类游戏、机器人控制和工作调度等。

堆叠技术

堆叠泛化是一种用于最小化一个或多个泛化器的泛化误差率的方法。它通过推导泛化器相对于所提供的学习集的偏差来发挥其作用。这个推导的过程包括:在第二层中将第一层的原始泛化器对部分学习集的猜测进行泛化,以及尝试对学习集的剩余部分进行猜测,并且输出正确的结果。当与多个泛化器一起使用时,堆叠泛化可以被看作是一个交叉验证的复杂版本,利用比交叉验证更为复杂的策略来组合各个泛化器。当与单个泛化器一起使用时,堆叠泛化是一种用于估计(然后纠正)泛化器的错误的方法,该泛化器已经在特定学习集上进行了训练并被询问了特定问题。

Jupyter技术

Jupyter Notebook(此前被称为 IPython notebook)是一个交互式笔记本,支持运行 40 多种编程语言。 Jupyter Notebook 的本质是一个 Web 应用程序,便于创建和共享文学化程序文档,支持实时代码,数学方程,可视化和 markdown。 用途包括:数据清理和转换,数值模拟,统计建模,机器学习等等 。

优化器技术

优化器基类提供了计算梯度loss的方法,并可以将梯度应用于变量。优化器里包含了实现了经典的优化算法,如梯度下降和Adagrad。 优化器是提供了一个可以使用各种优化算法的接口,可以让用户直接调用一些经典的优化算法,如梯度下降法等等。优化器(optimizers)类的基类。这个类定义了在训练模型的时候添加一个操作的API。用户基本上不会直接使用这个类,但是你会用到他的子类比如GradientDescentOptimizer, AdagradOptimizer, MomentumOptimizer(tensorflow下的优化器包)等等这些算法。

机器之心机构

机器之心,成立于2014年,是国内最具影响力、最专业、唯一用于国际品牌的人工智能信息服务与产业服务平台。目前机器之心已经建立起涵盖媒体、数据、活动、研究及咨询、线下物理空间于一体的业务体系,为各类人工智能从业者提供综合信息服务和产业服务。

https://www.jiqizhixin.com/
推荐文章
暂无评论
暂无评论~