机器学习洞察JAX,机器学习领域的“新面孔”在之前的《机器学习洞察》系列文章中,我们分别针对于多模态机器学习和分布

从这张GitHubStar趋势图可以看到,自2019年JAX出现到如今保持着一个向上的抛物线走势。

回归并理清这些历史问题有助于开发者了解机器学习的演变逻辑,并了解JAX是如何吸取之前的教训,帮助开发者更方便地实践深度学习或机器学习应用。

在TF引进了Eager模式之后,它会采用更直观的界面,使用自然的Python代码和数据结构,而且享受更加便携的调试,在Eager模式中可以通过直接调用操作来检查和测试模型,而之前Graph这种模式有点类似于C和C++,它的编程是写好程序之后要先进行编译才能运行。

Eager模式有自然控制的流程,使用Python而不是图控制流,以及支持GPU和TPU的加速。做为开发者,我们希望可以客观地看待不同的框架,而不是比较他们的优劣。值得思考的一个问题是:通过了解TF的Eager模式对于Graph模式的改进,它的改进逻辑和思路在JAX中都有身影。

JAX作为现在越来越流行的库,是一种类似于NumPy(使用Python开源的数值计算扩展库)的轻量级用于阵列的计算。JAX最开始的设计不仅仅是为了深度学习而设计的,深度学习只是它的一小部分,它提供了编写NumPy程序的能力,这些程序可以使用GPU/TPU自动拆分和加速。

JAX用于基于阵列的计算时,开发者无需修改代码就可以在CPU/GPU/ASIC上同时运行,并支持原生Python和NumPy函数的四种可组合函数转换:

我们可以通过下面这个简单的测试对比JAX和NumPy的计算性能。

输入一个100X100的二维数组X,选取ml.g4dn.12xlarge计算实例通过NumPy和JAX分别对矩阵的前三次幂求和:

deffn(x):returnx+x*x+x*x*xx=np.random.randn(10000,10000).astype(dtype='float32')%timeit-n5fn(x)436ms±206μsperloop(mean±std.dev.of7runs,5loopseach)我们发现此计算大约需要436毫秒。接下来,我们使用JAX实现以下计算:

jax_fn=jit(fn)x=jnp.array(x)%timeitjax_fn(x).block_until_ready()3.67ms±10.7μsperloop(mean±std.dev.of7runs,1loopeach)JAX仅在3.67毫秒内执行此计算,比NumPy快118倍以上。可见,JAX有可能比NumPy快几个数量级(注意,JAX使用TPU而NumPy正在使用CPU)。

*以上为个人测试结果,非官方提供的数据,仅供研究参考

对比测试结果可得,NumPy完成计算需要436毫秒,而JAX仅需要3.67毫秒,计算速度相差100多倍。这个测试也说明了为什么很多开发者对它的性能赞不绝口。

我们希望通过回答这个问题来解读JAX的动机:

如何使用Python从头开始实现高性能和可扩展的深度神经网络?

通常,Python程序员会从NumPy之类的东西开始,因为它是一种熟悉的、基于数组的数据处理语言,在Python社区中已经使用了几十年。如果你想在NumPy中创建深度学习系统,你可以从预测方法开始。

这里可以用一个详细的例子说明问题,从NumPy上的深度学习的场景说起:

上述代码展示了订阅一个前馈的神经网络,它执行了一系列的点积和激活函数,然后将输入转化为某种可以学习的输出。一旦定义了这样的一个模型,接下来需要做就是要定义损失函数,这个函数将为你提供正在尝试优化的那些指标,来适应最佳的机器学习模型。例如以上代码的损失函数是以均方误差损失函数MSE为例。

现在我们来分析下:在深度学习场景使用NumPy还缺少什么?

硬件加速(GPU/TPU)

自动微分(autodiff)快速优化

添加编译(Compilation)融合操作

向量化操作批处理(batching)

大型数据集并行化(Parallelization)

1)硬件加速(GPU/TPU):首先深度学习需要大量的计算,我们想在加速的硬件上运行它。所以我们想在GPU和TPU/ASIC上运行这个模型,这对于经典的NumPy来说有点困难;

2)自动微分(autodiff)快速优化:接下来我们想要做自动微分,这样就可以有效地拟合这个损失函数,而不必自己来实现数值微分;

3)然后我们需要添加编译(Compilation):这样你就可以将这些操作融合在一起,使它们更加高效;

4)向量化操作批处理(Batching):另外,当我们编写了某些函数后,可能希望将其应用于多个数据片段,而不再需要重写预测和损失函数来处理这些批量数据;

5)大型数据集并行化(Parallelization):最后,如果我们正在处理大型数据集,会希望能够支持跨多个cores或多台machines做并行化操作。

JAX非常重要的一个动机就是XLA和自动定位。让我们来看看JAX可以做些什么,来填补前面分析的在深度学习场景使用NumPy还缺少的功能。

首先,用jax.numpy替换numpy导入模块。在许多情况下,jax.numpy与经典的NumPy具有相同的API,但jax.numpy可以完成前面分析时发现NumPy缺少,但是在深度学习场景却非常需要的的东西。

JAX可以通过XLA后端,来自动定位CPU、GPU和TPU或者ASIC,以便快速计算模型和算法。

第二个重要动机是Autograd。开发者可以通过下面的代码调用Autograd版本:

通过fromjaximportgrad模块,使用Autograd的更新版本,JAX可以自动微分原生Python和NumPy函数。它可以处理Python功能的大子集,包括循环、Ifs、递归等,甚至可以接受导数的导数。

JAX提供了一组可组合的变换,其中之一是grad变换。

例子中,像mse_loss这样的损失函数,通过grad(mse_loss)将其转换为计算梯度的Python函数。

Autograd的主要预期应用是基于梯度的优化。

在使用梯度函数时,开发者希望将其应用于多个数据片段,而在JAX中,你不再需要重写预测和损失函数来处理这些批量数据。

如图中代码最后一行(perexample_grads…)所诠释的那样,如果你通过vmaptransform传递它,这会自动向量化这个代码,这样就可以在多个批次中使用相同的代码。

JAX还有一个重要的组合函数——jit,开发者可以使用jittransform实现即时编译。

jit结合后台可以使用XLA后端编译器将操作融合在一起,来自动定位CPU、GPU和TPU或者ASIC,加速计算模型和算法。

最后,如果想并行化你的代码,有一个和vmap非常相似得转换叫pmap。

通过代码运行pmap,开发者能够本地定位系统中的多个内核或你有权访问的GPU、TPU或ASIC集群。

这最终成为一个非常强大的系统,可以在没有太多额外代码的情况下构建我们用类似于NumPy的熟悉API,做深度学习的快速计算等工作负载。

JAX的关键设计思想

通过上述对比可以看到,JAX不仅为开发者提供了和NumPy相似的API,上述的五大函数转换组合也让JAX可以在不需要额外代码的情况下,帮助开发者构建深度学习应用进行快速计算。

这里的关键思想是:

1)首先,在JAX中,Python代码被追溯到中间表示,JAX知道如何转换这个中间表示。

3)另外,JAX还有基于NumPy和SciPy的面向用户的API,如果开发者一直使用Python的技术栈,应该会对JAX感觉相当熟悉;

4)最后,JAX提供了功能强大的变换:grad,git,vmap,pmap等,来支持深度学习等计算,因此JAX可以做到之前NumPy代码无法做到的事情。

THE END
1.《机器学习实战指南:CSDN经验集成》数据收集:在机器学习实战中,数据收集是至关重要的第一步。可以通过多种方式获取数据,例如从数据库中提取已有的结构化数据,利用 API 从外部数据源获取特定格式的数据,或者使用爬虫技术从网页上抓取所需的数据。数据库提供了稳定且结构化的数据来源,适合大规模数据的存储和检索。API 则允许我们与各种在线服务进行交互,https://blog.csdn.net/beautifulmemory/article/details/144353490
2.人工智能算法工程师进阶指南:从机器学习基础到深度学习模型部署全深度学习是机器学习的一个分支,其特点是通过构建深层神经网络来学习数据的表示和特征。深度学习模型可以自动学习数据的抽象特征,对于复杂的非线性问题有很好的处理能力。 深度学习模型类型 常见的深度学习模型包括卷积神经网络(CNN)、循环神经网络(RNN)、长短时记忆网络(LSTM)等。这些模型在图像处理、自然语言处理等领域https://www.jianshu.com/p/cf7a6f9a964c
3.Microsoft机器学习产品和技术概述ML.NET是一个开源的跨平台机器学习框架。 使用 ML.NET,可以构建自定义机器学习解决方案并将其集成到 .NET 应用程序中。 ML.NET 提供了与 TensorFlow 和 ONNX 等常用框架的不同级别的互操作性,用于对机器学习模型和深度学习模型进行训练和评分。 对于资源密集型任务(例如训练图像分类模型),可以利用 Azure 在云中https://docs.microsoft.com/zh-cn/azure/machine-learning/service/overview-more-machine-learning
4.转载:AI系统自动微分引言腾讯云开发者社区这一篇幅里面主要是围绕 AI 框架、或者训练平台的自动微分功能。AI 框架中关于自动微分的一个重要性不言而喻,实际上自动微分是贯穿整个 AI 框架的全流程。没有了自动微分,也就没有了 AI 框架最核心的功能。为什么这么说呢?可以想象一下,假设在实现一个神经网络模型的时候,一般开发者只会使用 Pytorch 的API实现一https://cloud.tencent.com/developer/article/2476374
5.年达特茅斯会议与人工智能的起源TensorFlow:这是由谷歌开发的开源机器学习框架,广泛应用于深度学习领域。 PyTorch:这是由Facebook开发的开源机器学习框架,具有动态神经网络的特点,广泛应用于强化学习和自然语言处理等领域。 Keras:这是基于TensorFlow和Theano的开源高级神经网络API,提供了简洁的接口和丰富的预训练模型。 https://blog.51cto.com/universsky/12693430
6.2020届计算机科学方向毕业设计(论文)阶段性汇报探究将Focal loss应用于轻量化目标检测框架中的目标框回归,已经在SSD目标检测框架上通过实验发现了相对于IOU loss明显的性能提升,并且这一提升不需要任何的计算量和模型大小的提升。事实上,这一方法可以应用于一般的通用目标检测框架。 冯思远 面向机器学习算法的中间语言设计第二次阶段性汇报 https://zhiyuan.sjtu.edu.cn/html/zhiyuan/announcement_view.php?id=3709
7.cubestudio开源云原生一站式机器学习/深度学习/大模型AI平台机器学习框架ray-sklearn分布式job-template/job/ray_sklearn/README.md 机器学习算法random_forest单机job-template/job/random_forest/README.md 机器学习算法lr单机job-template/job/lr/README.md 机器学习算法lightgbm单机job-template/job/lightgbm/README.md https://github.com/tencentmusic/cube-studio
8.九章云极DataCanvas方磊:Hypernets——自动化机器学习的基打架在WAIC 2021 AI 开发者论坛上,九章云极 DataCanvas 董事长方磊发表主题演讲《Hypernets:自动化机器学习的基础框架》,在演讲中,他主要介绍了 Hypernets 的概念模型和两个具体实例。他认为,好的 AutoML 框架一定要具备富有表现力的搜索空间描述语言、支持高维空间的高效搜索算法和高性能的评估策略。 https://m.thepaper.cn/baijiahao_13676597
9.13种主流机器学习的框架Apache Spark 最为人所知的是它是Hadoop家族的一员,但是这个内存数据处理框架却是脱胎于Hadoop之外,也正在Hadoop生态系统以外为自己获得了名声。Hadoop 已经成为可供使用的机器学习工具,这得益于其不断增长的算法库,这些算法可以高速度应用于内存中的数据。 http://www.360doc.com/content/19/0322/20/32167373_823462051.shtml
10.pytorch开源机器学习框架Install PyTorch Get Started Choose Your Path: Install PyTorch Locally or Launch Instantly on Supported Cloud Platforms Get started Blog Stay up-to-date on the latest news and technical topics from the PyTorch Foundation. Read more PyTorch 2.5https://pytorch.org/
11.第四范式先知平台的整体架构和实现细节架构胡时伟为此,我们的算法工程团队开发了一系列的基础设施组件,组成了大规模分布式机器学习框架 GDBT(General Distributed Brain Technology)。GDBT 是一个由 C++ 编写的,完全分布式的适合于机器学习计算场景的计算框架,可以运行在单机、MPI、Yarn、Mesos 等多个分布式环境。https://www.infoq.cn/article/the-fourth-paradigm-prophet-platform
12.关于机器学习,这可能是目前最全面最无痛的入门路径和资源!但是,各位童鞋,不要慌也不要怕李杰克有自信这应该是目前你在网上能够读到的最全面、最良心、最友好的关于机器学习入门路径和资源分享的文章了。 说它“全面”是因为我为大家梳理了Python及常用库、机器学习算法、深度学习框架的学习路径和资源,就算你不打算根据推荐的资源进入更深的学习,读完文章后,你也应该大https://www.36kr.com/p/5109465.html
13.FCS前沿综述:音乐情感识别—论文—科学网现有的基于机器学习的MER工作包括三个部分,即领域定义、特征提取和情绪识别。整体框架如图1所示。从图1中可以看出,在域定义阶段选择了情绪模型和数据集,在特征提取阶段提取了有用的特征,在情绪识别阶段对情绪标签进行了预测。 图1. MER框架 情感模型和数据集 https://news.sciencenet.cn/htmlpaper/2022/6/20226231124191573739.shtm
14.《零基础学机器学习》(黄佳)简介书评在线阅读人工智能教程籍,深入浅出神经网络与深度学习入门,基于python框架算法,机器学习入门小白书,与小冰一起课堂培训丰富的实战案例赠送全书实例源代码、案例数据集。 作者:黄佳出版社:人民邮电出版社出版时间:2020年12月 手机专享价 ¥ 当当价降价通知 ¥85.30 http://product.dangdang.com/29159728.html
15.阿里云机器学习AutoML引擎介绍与应用PAI 架构中最下面是基础硬件层、分布式的优化、调度层,基于此构建了各类计算引擎的框架,比如深度学习框架 TensorFlow 、Pytorch,流式机器学习框架 Alink 等。AutoML 引擎则是构建在计算引擎之上,为更上层的算法、产品和业务提供服务,起到了承上启下的作用。 https://blog.itpub.net/70024924/viewspace-2936628/
16.数科专业《Python机器学习课程设计》作品展课程设计第一部分,基于PyTorch框架的机器学习开发环境 实验学时:2学时 实验目的:掌握PyTorch的开发环境安装 实验硬件:任意独立的NVIDIA GPU 实验软件:Anaconda3、PyTorch 实验要求:1)在教师演示后独立完成环境安装 2)测试环境并运行示例代码 第二部分PyTorch开发机器学习应用 https://www.cdutetc.cn/c/6940646a-9e49-4fa4-87a3-c504b0b21f03.html
17.机器学习案例实战教学PPT498.pptx免费在线预览全文 根据教材制作,可作为授课教师的参考资料和从业人员的自学资料。 机器学习案例实战(第2版) ——机器学习基础 机器学习平台 一个功能强大且易学、易用的机器学习平台对于开展机器学习项目非常重要。良好的机器学习框架提供了丰富的预制组件,可以方便机器学习模型的设计和实现。 目前存在以下几类基本的机https://max.book118.com/html/2022/0918/6223000133004240.shtm
18.一周AI最火论文模型是否遗忘了我删除的数据?这个算法可以评估一个面向API的图无监督学习开源Python框架 本文介绍了Karate Club,它是一个结合了30多种先进的图形挖掘算法的Python框架,可以解决无人监督的机器学习任务。该框架由Karate Club设计,有着一致的应用程序界面、可伸缩性、易用性、合理的即用型模型行为、标准化的数据集提取和输出生成等特性。该研究还通过实际示例讨论了https://news.hexun.com/2020-04-27/201164779.html