深度学习是机器学习最近的一个趋势,模拟高度非线性的数据。在过去的几年中,深度学习在各种应用中获得了巨大的发展势头(Wikipedia 2016a)。其中包括图像和语音识别,无人驾驶汽车,自然语言处理等等。 最近我们被客户要求撰写关于深度学习的研究报告,包括一些图形和统计输出。
今天,深度学习对于几乎所有需要机器学习的任务都是非常有效的。但是,它特别适合复杂的分层数据。其潜在的人工神经网络模型高度非线性表示; 这些通常由多层结合非线性转换和定制架构组成。图1描述了一个深度神经网络的典型表示。

图1.深度神经网络的模型
深度学习的成功带来了各种编程语言的各种框架和库。例子包括Caffee,Theano,Torch和Tensor Flow等等。这篇博客文章的目的是为编程语言R提供不同深度学习软件包的概述和比较。我们比较不同数据集的性能和易用性。
R编程语言在统计人员和数据挖掘人员之间的易用性以及复杂的可视化方面已经获得了相当的普及。随着深度学习时代的到来,对R的深度学习的支持不断增长,随着越来越多的软件包的推出,本节提供以下软件包提供的有关深度学习的概述:MXNetR,darch,deepnet,H2O和deepr。
首先,我们注意到,从一个包到另一个包的底层学习算法有很大的不同。同样,表1显示了每个软件包中可用方法/体系结构的列表。
R包中可用的深度学习方法列表:
MXNetR前馈神经网络,卷积神经网络(CNN)
DEEPNET前馈神经网络,受限玻尔兹曼机器,深层信念网络,堆栈自动编码器
H2O前馈神经网络,深度自动编码器
MXNetR包是用C ++编写的MXNet库的接口。它包含前馈神经网络和卷积神经网络(CNN)(MXNetR 2016a)。它也允许人们构建定制的模型。该软件包分为两个版本:仅CPU或GPU版本。以前的CPU版本可以直接从R内部直接安装,而后者的GPU版本依赖于第三方库(如cuDNN),并需要从其源代码(MXNetR 2016b)中构建库。
前馈神经网络(多层感知器)可以在MXNetR中构建,其函数调用如下:
mx.mlp(data, label, hidden_node=1, dropout=NULL, activation=”tanh”, out_activation=”softmax”, device=mx.ctx.default(),…)
参数如下:
data - 输入矩阵
label - 训练标签
hidden_node - 包含每个隐藏层中隐藏节点数量的向量
dropout - [0,1)中包含从最后一个隐藏层到输出层的丢失率
activation - 包含激活函数名称的单个字符串或向量。有效值是{ 'relu','sigmoid','softrelu','tanh'}
out_activation - 包含输出激活函数名称的单个字符串。有效值是{ 'rmse','sofrmax','logistic'}
device- 是否训练mx.cpu(默认)或mx.gpu
函数mx.model.FeedForward.create在内部使用,mx.mpl并采用以下参数:
symbol - 神经网络的符号配置
ctx - 上下文,即设备(CPU / GPU)或设备列表(多个CPU或GPU)
num.round - 训练模型的迭代次数
optimizer- 字符串(默认是'sgd')
initializer - 参数的初始化方案
eval.data - 过程中使用的验证集
eval.metric - 评估结果
epoch.end.callback - 迭代结束时回调
batch.end.callback - 当一个小批量迭代结束时回调
array.batch.size - 用于训练的批量大小
array.layout-可以是{ 'auto','colmajor','rowmajor'}
示例调用:
model <- mx.mlp(train.x, train.y, hidden_node=c(128,64), out_node=2, activation="relu", out_activation="softmax",n