机器/深度学习TFMesos、Certigrad、ELF、ELL介绍

以下为你介绍的机器学习/深度学习软件都可用在Linux系统上:TFMesos(在 Mesos 上使用 Docker 运行 Tensorflow)、Certigrad(无 Bug 的随机计算图)、ELF(轻量级游戏研究平台)、ELL(嵌入式学习库)。

1、TFMesos(在 Mesos 上使用 Docker 运行 Tensorflow)

TFMesos 是一个轻量级框架,用于帮助在 Apache Mesos 上通过 Docker 和 Nvidia-Docker 运行分布式 Tensorflow 机器学习任务。

TFMesos 通过 Mesos 集群动态分配资源,为 Tensorflow 构建分布式训练集群,并在 Docker 的帮助下,使得共享的 Mesos 集群中的不同训练任务能够被管理和隔离。

运行简单测试:

在设置了mesos并在单个节点(或cluser)上拉docker镜像之后,您应该能够使用以下命令运行简单的测试。

$ docker run -e MESOS_MASTER=mesos-master:5050 \

 -e DOCKER_IMAGE=tfmesos/tfmesos \

 --net=host \

 -v /path-to-your-tfmesos-code/tfmesos/examples/plus.py:/tmp/plus.py \

 --rm \

 -it \

 tfmesos/tfmesos \

 python /tmp/plus.py mesos-master:5050

成功运行测试应该在控制台上输出42。

下载地址:https://github.com/douban/tfmesos

2、Certigrad(无 Bug 的随机计算图)

Certigrad 是一个概念证明,它是一种开发机器学习系统的新方法,其中包含以下组件:

应用本身。

基础数学库。

应用在数学上所需求的形式化描述。

应用满足其形式化描述的机器可测证明。

具体地说,Certigrad 是一个优化随机计算图的系统,研究人员使用 Lean Theorem Prover 对其进行了系统性的除错,它最终在底层数学上被证明是正确的。

背景:随机计算图

随机计算图通过允许节点代表随机变量,和定义损失函数为叶子结点在全图中随机选择的预测值之和,扩展了 TensorFlow 和 Theano 这些系统的计算图。Certigrad 允许用户从该项目提供的基元中构建随机计算图。创造这一系统的主要目的是找到一个能够描述随机计算图,并运行随机算法(随机反向传播)的程序。同时期望对参数损失函数梯度进行采样。

正确性:

随机反向传播:

通俗地说,它表示:对于任何随机计算图,backprop 计算了张量的向量,如此,每一个向量元素都是一个随机变量,这个随机变量等同于关于此参数的图的期望损失梯度。

优化验证:

研究人员实现了两个随机计算图转换,一个是对图进行「重新参数化」(reparameterize),让随机变量不再直接依赖于一个参数,另一个用于整合多元各向同性高斯(multivariate isotropic Gaussian)的 KL 散度。

验证 Certigrad 程序属性:

Certigrad 还包括构建随机计算图的前端语法。

正式证明:

在证明定理的过程中,Lean 构建了一个正式的证书,它可以通过一个小型独立可执行程序进行自动验证,它的可靠性是基于构建良好的元理论嵌入到 Lean 的逻辑核心中,而 Lean 的可靠性已被大量开发者所证明。

问题:

尽管在证明期间研究者们使用了非常高的标准,但 Certigrad 仍然有一些不够理想的地方。

我们对其数学基础进行了公理化,而不是从基本原理的层面上进行构建。

在一些地方我们采用了浮点数,即使我们的正确性定理只适用于无限精度的实数。

为了保证性能,我们在运行时用 Eigen 调用替换原始张量运算。

系统在虚拟机中执行,该虚拟机的设计不像核心逻辑的证明检验程序那样值得信赖。

表现:

能被证实的正确性原则就不需要再牺牲计算效率了:证明只需被检查一次,而且不会带来过多的运行成本和运行时间。尽管目前经过我们验证的算法缺乏很多优化措施,机器学习系统的大多数训练时间都花费在了乘法矩阵上,我们仍能够通过与矩阵运算的优化库(Eigen)进行链接来轻松达到具有竞争力的表现水平。我们在 MNIST 上使用 ADAM 训练了一个自编码变贝叶斯(AEVB)模型,发现该模型的表现和 TensorFlow 相比具有竞争力(在 CPU 上)。

优势:

机器/深度学习TFMesos、Certigrad、ELF、ELL介绍

尽管新方法面临一些挑战,但它的优势是显而易见的。

调试:

首先,新方法提供了一种系统性的调试机器学习系统的方法。

执行错误(Implementation errors)在机器学习系统中非常难于探测——更不用说本地化和问题解决——而且还有其他潜在的不良影响。例如,一个执行错误可能会导致不正确的梯度,让整个机器学习算法停顿,但这种情况也可能是由于训练的数据中存在噪音、错误设置、优化不合适、搜索策略不对或数值不稳定而引起的。这些其他问题是如此之常见,以至于我们通常认为任何不良行为都是由其中的一部分引起的。

因此,在实现中出现的错误如果没有被检测到,将会无限期地存在下去。而在随机系统中,错误更加难以检测,因为一些错误可能会扭曲随机变量的分布,可能需要编写定制的统计测试才能被检测出。

通过我们的方法,正式规范可以用来在逻辑层面上对机器学习系统进行彻底的测试与调试,完全不需要进行经验主义的测试。而证明规范的过程将揭示所有实现错误,疏忽和隐含假设。一旦得到证实,每个利益相关方都可以确定实现是正确的,而无需依赖于任何有关人员,或去了解程序是如何运行的。

合成:

第二,我们的方法可以让一些实现的工作半自动地完成。

而使用现在的方法,编译器完全无法知晓自己需要做什么——它们只能捕捉语法错误,而新方法可以用定理推出程序需要做什么,并提供更多有意义的帮助。举一个简单的例子,假设我们需要将双层 MLP 编译成一个单原始运行器,避免图处理时需要消耗的计算资源。通常这需要包括手工打造的梯度函数。但在新方法中,定理证明器知道如何使用数学方法,包括相关的梯度规则和张量的代数性质,它可以帮助推导出新算子的梯度。

合成的可能性不仅仅是简单的自动化代数推导。在开发 Certigrad 时,研究人员证明了系统中所有复杂部位的可实现性,并使用这一过程所产生的证明义务来帮助确定程序需要做什么。正式规范最终是机器可检验的正确性证明,它使得我们能够正确地实现系统,而无需对「为什么系统正确」采取一致的全局理解。同样,大多数这样的负担被留给了电脑。

侵略性最优化(Aggressive optimizations):

第三,我们的方法可以使得稳定自动化更主动地进行转换。例如,我们可以编写一个程序来搜索随机计算图的构建元素,这样就能用分析方法进行整合,因此可以充分利用积分恒等式的大型库,和很难由手动进行模拟的程序方法。这样的过程可能在许多模型上实现超人为方差缩减,但可靠的实现会极其困难。如果该过程能为给定转换生成机器可测的数字证书,那么转换是可信的,且无需考虑过程本身的复杂性。

文档:

第四,形式规范(即使没有正式的证明)也可以作为系统的精确文档,它同样可以让我们理解代码的各部分到底是在做什么、各个部分假设了什么样的先决条件和保持了怎样的不变量。这种精确的文档对于任何软件系统都是很有用的,但对于机器学习来说格外的有效,因为并不是所有的开发者都有必要的数据专业基础来填补非正式描述的鸿沟。

递增:

对于高安全等级(high-assurance)系统,我们的系统已经十分节约计算资源了,但仍然需要很多的研究工作才能使其适应主流发展,因为正确性只是一个选项。然而,我们方法的一个关键方面可以递增地接受。我们只能在 Lean 中写一点代码,并简单的对其它部分进行打包和公理化(如同我们在 Eigen 所做的一样)。我们也可以写下来浅层的正确性属性,并只证明其中一小部分属性。我们希望随着时间的推移和工具的发展,开发者能发现进一步应用我们的方法是非常值得的。

搭建 Certigrad:

Lean 还处于开发阶段,我们也更进一步地努力使得 Certigrad 可以简单地进行安装。与安装 Certigrad 特别相关的是外部功能接口(FFI)。我们复制了 Lean 项目以添加代码将 Eigen 打包入 Lean 虚拟机中,但是很快 Lean 将有一个外部功能接口,我们也就不需要重新构建 Lean 而添加到虚拟机中了。一旦 FFI 发布了,我们将把 Certigrad 移动到 Lean 的主分支下。

注意:构建 Certigrad 一般会话 15 分钟左右,并至少需要 7GB 的内存。

下载地址:https://github.com/dselsam/certigrad

3、ELF(轻量级游戏研究平台)

机器/深度学习TFMesos、Certigrad、ELF、ELL介绍

ELF-一个大范围、轻量级且易于使用的游戏研究平台。

ELF 可以让研究者们在不同的游戏环境中测试他们的算法,其中包括桌游、Atari 游戏,以及定制的即时战略游戏(RTS)。它们可以运行在带有 GPU 的笔记本电脑上,而且支持在更为复杂的游戏环境中训练 AI。

ELF 在 C/C++界面中运行所有游戏,自动处理并发问题如多线程/多任务。另外,ELF 还有一个纯净的 Python 用户界面,提供了一批可供训练的游戏状态。ELF 也支持游戏以外的用途,它包括物理引擎等组件,可以模拟现实世界的环境。

安装脚本

您需要具有cmake >= 3.8,gcc >= 4.9和tbb(linux libtbb-dev),才能成功安装此脚本。

# Download miniconda and install. 

wget https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh -O $HOME/miniconda.sh

/bin/bash $HOME/miniconda.sh -b

$HOME/miniconda3/bin/conda update -y --all python=3

# Add the following to ~/.bash_profile (if you haven't already) and source it:

export PATH=$HOME/miniconda3/bin:$PATH

# Create a new conda environment and install the necessary packages:

conda create -n elf python=3

source activate elf

# If you use cuda 8.0

# conda install pytorch cuda80 -c soumith

conda install pytorch -c soumith

pip install --upgrade pip

pip install msgpack_numpy

conda install tqdm

conda install libgcc

# Install cmake >= 3.8, gcc >= 4.9 and libtbb-dev

# This is platform-dependent.

# Clone and build the repository:

cd ~

git clone https://github.com/facebookresearch/ELF

cd ELF/rts/

mkdir build && cd build

cmake .. -DPYTHON_EXECUTABLE=$HOME/miniconda3/bin/python

make

# Train the model

cd ../..

sh ./train_minirts.sh --gpu 0

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

4、ELL(嵌入式学习库)

机器/深度学习TFMesos、Certigrad、ELF、ELL介绍

ELL,即 Embedded Learning Library,嵌入式学习库,是微软研究院发布的全新的项目——将人工智能嵌入一个如同面包屑大小的处理器中。

ELL 将帮助开发人员构建学习模型和部署嵌入式平台,旨将传统需要大规模云计算的 AI 技术小型化。它允许你将嵌入式学习管道构建并部署到嵌入式平台上,如 Raspberry Pis、Arduinos、micro:bits 和其他微控制器。部署的机器学习模型在设备上运行,与云连接。一旦部署,机器学习模型可以不连接到互联网而运行。消除对互联网的需求可以减少带宽限制,并消除对网络延迟的担忧。此外,设备上的机器学习限制了与云的通信中的电池耗尽。通过将个人和敏感信息保存在设备中来保护隐私。

下载地址:https://github.com/Microsoft/ELL

注明

以上就是机器/深度学习TFMesos、Certigrad、ELF、ELL的介绍内容,这些机器学习/深度学习软件都能使用在Linux操作系统中。

栏目相关文章