机器/深度学习X-DeepLearning、Nevergrad、JAX、NumSharp介绍

以下为你介绍的机器学习/深度学习软件都可用在Linux系统上:X-DeepLearning(面向高维稀疏数据场景的深度学习框架)、Nevergrad(无梯度优化开源工具)、JAX(TensorFlow 简化库)、NumSharp(C# 机器学习库)。

1、X-DeepLearning(面向高维稀疏数据场景的深度学习框架)

X-DeepLearning (简称 XDL) 是面向高维稀疏数据场景(如广告/推荐/搜索等)深度优化的一整套解决方案。

现有开源框架在分布式性能、计算效率、水平扩展能力以及实时系统适配性的等方面往往难以满足工业级生产应用的需求,XDL 正是面向这样的场景设计与优化的工业级深度学习框架,经过阿里巴巴广告业务的锤炼,XDL 在训练规模和性能、水平扩展能力上都表现出色,同时内置了大量的面向广告/推荐/搜索领域的工业级算法解决方案。

系统核心能力:

1]、为高维稀疏数据场景而生。支持千亿参数的超大规模深度模型训练,支持批学习、在线学习等模式。

2]、工业级分布式训练能力。支持 CPU/GPU 的混合调度,具备完整的分布式容灾语义,系统的水平扩展能力优秀,可以轻松做到上千并发的训练。

3]、高效的结构化压缩训练。针对互联网样本的数据特点,提出了结构化计算模式。典型场景下,相比传统的平铺样本训练方式,样本存储空间、样本IO效率、训练绝对计算量等方面都大幅下降,推荐等场景下整体训练效率最大可提升10倍以上。

4]、成熟多后端支持。单机内部的稠密网络计算复用了成熟开源框架的能力,只需要少量的分布式驱动代码修改,就可以把 TensorFlow/MxNet 等的单机代码运行在 XDL 上,获得 XDL 分布式训练与高性能稀疏计算的能力。

下载地址:https://github.com/alibaba/x-deeplearning

2、Nevergrad(无梯度优化开源工具)

机器/深度学习X-DeepLearning、Nevergrad、JAX、NumSharp介绍

大多数机器学习任务——从自然语言处理、图像分类到翻译以及大量其他任务,都依赖于无梯度优化来调整模型中的参数和/或超参数。为了使得参数/超参数的调整更快、更简单,Facebook 创建了一个名叫 Nevergrad 的 Python 3 库,并将它开源发布。Nevergrad 提供了许多不依赖梯度计算的优化算法,并将其呈现在标准的问答 Python 框架中。此外,Nevergrad 还包括了测试和评估工具。

Nevergrad 现已对外开放,人工智能研究者和其他无梯度优化相关工作者马上就可以利用它来协助自己的工作。这一平台不仅能够让他们实现最先进的算法和方法,能够比较它们在不同设置中的表现,还将帮助机器学习科学家为特定的使用实例找到最佳优化器。在 Facebook 人工智能研究院(FAIR),研究者正将 Nevergrad 应用于强化学习、图像生成以及其他领域的各类项目中,例如,它可以代替参数扫描来帮助更好地调优机器学习模型。

这个库包含了各种不同的优化器,例如:

差分进化算法(Differential evolution)。

序列二次规划(Sequential quadratic programming)。

FastGA。

协方差矩阵自适应(Covariance matrix adaptation)。

噪声管理的总体控制方法(Population control methods for noise management)。

粒子群优化算法(Particle swarm optimization)。

安装说明:

nevergrad是一个Python 3.6+库,它可以安装:

pip install nevergrad

您还可以使用以下方法安装master分支,而不是最新版本:

pip install git+https://github.com/facebookresearch/nevergrad@master#egg=nevergrad

另外,您可以克隆存储库并运行pip install -e,从存储库文件夹中。

默认情况下,这仅安装优化和检测子包的要求,如果您也对基准测试部分感兴趣,则应使用[benchmark]选项进行安装(例如:pip install 'nevergrad[benchmark]'),如果还需要测试工具,请使用[all]选项(例如:pip install -e '.[all]')

下载地址:https://github.com/facebookresearch/nevergrad

3、JAX(TensorFlow 简化库)

机器/深度学习X-DeepLearning、Nevergrad、JAX、NumSharp介绍

JAX 是一个 TensorFlow 的简化库,它结合了 Autograd 和 XLA,专门用于高性能机器学习研究。

凭借 Autograd,JAX 可以求导循环、分支、递归和闭包函数,并且它可以进行三阶求导。通过 grad,它支持自动模式反向求导(反向传播)和正向求导,且二者可以任何顺序任意组合。

得力于 XLA,可以在 GPU 和 TPU 上编译和运行 NumPy 程序。默认情况下,编译发生在底层,库调用实时编译和执行。但是 JAX 还允许使用单一函数 API jit 将 Python 函数及时编译为 XLA 优化的内核。编译和自动求导可以任意组合,因此可以在 Python 环境下实现复杂的算法并获得最大的性能。

import jax.numpy as np

from jax import grad, jit, vmap

from functools import partial

def predict(params, inputs):

for W, b in params:

outputs = np.dot(inputs, W) + b

inputs = np.tanh(outputs)

return outputs

def logprob_fun(params, inputs, targets):

preds = predict(params, inputs)

return np.sum((preds - targets)**2)

grad_fun = jit(grad(logprob_fun))  # compiled gradient evaluation function

perex_grads = jit(vmap(grad_fun, in_axes=(None, 0, 0)))  # fast per-example grads

更深入地看,JAX 实际上是一个可扩展的可组合函数转换系统,grad 和 jit 都是这种转换的实例。

下载地址:https://github.com/google/JAX

4、NumSharp(C# 机器学习库)

机器/深度学习X-DeepLearning、Nevergrad、JAX、NumSharp介绍

NumPy是在python中处理数据的最基本和最强大的包。如果您打算从事数据分析或机器学习项目,那么对numpy的充分理解几乎是必须的。其他用于数据分析的软件包(如pandas)是建立在numpy之上,用于构建机器学习应用的scikit-learn软件包也在numpy上运行。但对于.NET开发人员来说,却没有这样的强大工具库。虽然有像Deedle和Math.NET这样的开源库,但它们不是很容易使用,也不能借用很多现有的python代码。

NumSharp(Numerical .NET)可以说是C#中的线性代数库。它是用C#编写的,符合.netstandard 2.0库标准。它的目标是让.NET开发人员使用NumPy的语法编写机器学习代码,从而最大限度地借鉴现有大量在python代码的转译成本。NumSharp使用最新的Span技术安全高效地访问内存,优化每个模拟API的性能,确保最底层的NDArray达到最佳性能状态。NumSharp对于在数组上执行数学和逻辑运算非常有用。它为.NET中的n阵列和矩阵的操作提供了大量有用的功能。

让我们给出一个代码片段来说明如何使用NumSharp。

// 初始化一个NumSharp实例,类名故意叫NumPy

var np = new NumPy<int>();

// 产生一个数字0到9的向量

np.arange(10)

// 产生一个3维张量

np.arange(12).reshape(2, 3, 2);

// 产生10个0到9的随机数,并转换成5*5的矩阵

np.random.randint(low: 0, high: 10, size: new Shape(5, 5));

上面的代码是不是看起来否非常接近python代码?简直就是如出一辙。NumSharp的目的就是让你可以轻松的复制粘贴Python代码。

在NuGet中安装NumSharp:

PM> Install-Package NumSharp

使用:

using NumSharp;

var nd = np.full(5, 12); //[5, 5, 5 .. 5]

nd = np.zeros(12); //[0, 0, 0 .. 0]

nd = np.arange(12); //[0, 1, 2 .. 11]

// create a matrix

nd = np.zeros((3, 4)); //[0, 0, 0 .. 0]

nd = np.arange(12).reshape(3, 4);

// access data by index

var data = nd[1, 1];

// create a tensor

nd = np.arange(12);

// reshaping

data = nd.reshape(2, -1); //returning ndarray shaped (2, 6)

Shape shape = (2, 3, 2);

data = nd.reshape(shape); //Tuple implicitly casted to Shape

 //or:

nd =   nd.reshape(2, 3, 2);

// slicing tensor

data = nd[":, 0, :"]; //returning ndarray shaped (2, 1, 2)

data = nd[Slice.All, 0, Slice.All]; //equivalent to the line above.

// nd is currently shaped (2, 3, 2)

// get the 2nd vector in the 1st dimension

data = nd[1]; //returning ndarray shaped (3, 2)

// get the 3rd vector in the (axis 1, axis 2) dimension

data = nd[1, 2]; //returning ndarray shaped (2, )

// get flat representation of nd

data = nd.flat; //or nd.flatten() for a copy

// interate ndarray

foreach (object val in nd)

{

 // val can be either boxed value-type or a NDArray.

}

var iter = nd.AsIterator<int>(); //a different T can be used to automatically perform cast behind the scenes.

while (iter.HasNext())

{

 //read

 int val = iter.MoveNext();

 //write

 iter.MoveNextReference() = 123; //set value to the next val

 //note that setting is not supported when calling AsIterator<T>() where T is not the dtype of the ndarray.

}

运行基准:

C: \> dotnet NumSharp.Benchmark.dll nparange

下载地址:https://github.com/SciSharp/NumSharp

注明

以上就是机器/深度学习X-DeepLearning、Nevergrad、JAX、NumSharp的介绍内容,这些机器学习/深度学习软件都能使用在Linux操作系统中。

栏目相关文章