三九宝宝网宝宝教育学龄段教育

深度神经网络的网络大小与最佳训练样例的数目有什么关系

03月15日 编辑 39baobao.com

[网络流量分析与网络行为分析的区别]作为一家Flow和sFlow厂商,Plixer用自己的流量分析工具“Flow Analytics”进入了“深入流量分析市场”。希望这个与Plixer首席执行官Michael Patterson的对话能够让我们更好...+阅读

这两个概念实际上是互相交叉的,例如,卷积神经网络(Convolutional neural networks,简称CNNs)就是一种深度的监督学习下的机器学习模型,而深度置信网(Deep Belief Nets,简称DBNs)就是一种无监督学习下的机器学习模型。深度学习的概念源于人工神经网络的研究。含多隐层的多层感知器就是一种深度学习结构。深度学习通过组合低层特征形成更加抽象的高层表示属性类别或特征,以发现数据的分布式特征表示。深度学习的概念由Hinton等人于2006年提出。基于深信度网(DBN)提出非监督贪心逐层训练算法,为解决深层结构相关的优化难题带来希望,随后提出多层自动编码器深层结构。此外Lecun等人提出的卷积神经网络是第一个真正多层结构学习算法,它利用空间相对关系减少参数数目以提高训练性能。

...

如何从零使用 Keras TensorFlow开发一个复杂深度学习模型

这篇文章说明的是关于并行深度神经网络的设计。在今年发布的两个机器学习项目中,cxxnet是最精彩的一个。因为它包含了我们团队可以发挥到的机器学习和系统的各个方面的极致:除了前沿的深度学习之外,它的两个独到特点也是让我们在设计实现中最为享受的1)灵活的公式支持和极致的C++模板编程;深度神经网络的实现大致分两类:以python为主的编程效率派和以c++为核心的为代表的追逐性能派。前者支持直接tensor的计算,而后者往往需要给每个神经网络的层和更新公式编写独立的cudakernel。编程效率派认为机器学习程序员应该是写公式来达到代码最大的可读性和易改写性。而很多以C++为核心的代码之所以没有支持非常灵活的张量计算,是因为因为运算符重载和临时空间的分配会带来效率的降低。

cxxnet的核心mshadow在这两者之间做了一个平衡。使得我们在不损失效率的前提下可以通过模板编程技术允许开发者编写和matlab/numpy类似的代码,并且在编译时自动成优化的kernel。其背后的expressiontemplate技术是我最喜欢的c++trick之一。非常值得最求效率抽象和优美的同学了解。因为采用了mshadow作为核心,直接导致cxxnet的各种实现可以非常简单可读,编写一份代码就可以在GPU和CPU上面跑。使得其在代码简洁和可扩展上更加容易。2)通用的并行参数共享和更新方案多卡和多机计算一直是大规模机器学习中一个让人兴奋的话题。提到神经网络并行,最让我头疼的是可以选择的方案很多,而都涉及到不同的hack。单机多卡到底是用P2P,还是拷贝到内存,是用stream开始开多线程。分布式到底是用parameterserver,MPI还是自己写一个框架。

可以选择的方法很多。设计出一个分布式的代码不难,困难的是如何让并行的接口自然的独立出来,使得其不会影响其它部分的实现。经过不断地考虑,最终我决定采用了mshadow-ps这样一个统一的参数共享接口。简单的说,mshadow-ps是一个GPU的异步parameterserver接口(应该也是目前为止唯一一个,因为GPU线程模型和CPU不同,原有的的ps库并不能直接用于GPU)。异步通信对于神经网络的更新非常重要。在backprop算法中,我们很早就可以获得梯度并且进行梯度同步,而只有到下一次forward到对应层的时候才会需要这个weight。我和limu合作设计了ps风格的三个接口来解决这样的同步问题,Push/PullReq和Pullwait。当获backprop得梯度的时候直接调用push把梯度发送出去,并且调用pullreq请求结果。Push和Pullreq都是异步操作,背后会有单独的线程同时完成数据拷贝同步,以及拷回的操作。

而当我们需要weight之前在调用Pullwait来等待可能没有完成的操作。这样简单的三个接口,使得我们可以经过很少的改动就可以设计出多卡和分布式的神经网络来,并且在调用这些接口的时候完全不需要关系同步的实现是什么。值得一提的是,这样的编程模式把多GPU,分布式以及各个通信框架直接结合起来。mshadow-ps支持单机多卡的GPUPS,以及基于parameter-server的分布式PS实现。同样的也可以很容易MPI来支持多机通信。使得一个统一的接口,可以完成从单机多卡到分布式各种后端实现的支持。并且因为高效的异步通信,使得我们可以在alexnet上面达到linearspeedup(注:并行的难度在于计算和通信的时间比,weight少更加复杂的网络反而更加容易线性加速,而alexnet是非常困难的例子)。

经过团队里面大家不断地努力,cxxnet的V2终于可以和大家见面了。除了上述说明的技术亮点之外,还有各种好玩的特性。现在把特点总结如下:1.轻量而齐全的框架:我们尽力维持最小的依赖库实现最多的功能。推荐环境下仅需要CUDA,OpenCV,MKL或BLAS即可编译。2.强大的统一的并行计算接口:基于mshadow-ps的并行计算接口采用了一份代码解决了多GPU,多机的异步同步。同步和计算重叠,在多份测试中均可以得到线性加速比。3.易于扩展的代码结构:cxxnet计算核心由mshadow提供。Mshadow使用户可以编写numpy/matlab风格的代码,但仍具备手动优化cuda代码的灵活性。CPU和GPU共享同一份代码,在编译期间通过模板自动翻译成CUDA/MKL调用。另外一些特性包括:4.CuDNN支持:Nvidia原生卷积支持,可加速计算30%!5.及时更新的最新技术:我们将及时跟进学术界的动态,例如现在已经支持MSRA的ParametricRelu和Google的BatchNormalization6.Caffe模型转换:支持将训练好的Caffe模型直接转化为cxxnet模型(本周内上线!)7.方便的语言接口:在Python中直接进行训练,方便可视化。

Matlab也将很快提供我们相信可以通过最简洁清晰的代码来完成高效的C++深度神经网络实现。我们也欢迎对于系统和机器学习有兴趣的同学加入到项目中来

深度神经网络的工作

多层的好处是可以用较少的参数表示复杂的函数。

在监督学习中,以前的多层神经网络的问题是容易陷入局部极值点。如果训练样本足够充分覆盖未来的样本,那么学到的多层权重可以很好的用来预测新的测试样本。但是很多任务难以得到足够多的标记样本,在这种情况下,简单的模型,比如线性回归或者决策树往往能得到比多层神经网络更好的结果(更好的泛化性,更差的训练误差)。

非监督学习中,以往没有有效的方法构造多层网络。多层神经网络的顶层是底层特征的高级表示,比如底层是像素点,上一层的结点可能表示横线,三角; 而顶层可能有一个结点表示人脸。一个成功的算法应该能让生成的顶层特征最大化的代表底层的样例。如果对所有层同时训练,时间复杂度会太高; 如果每次训练一层,偏差就会逐层传递。这会面临跟上面监督学习中相反的问题,会严重欠拟合。

2006年,hinton提出了在非监督数据上建立多层神经网络的一个有效方法,简单的说,分为两步,一是每次训练一层网络,二是调优使原始表示x向上生成的高级表示r和该高级表示r向下生成的x'尽可能一致。方法是

1,首先逐层构建单层神经元,这样每次都是训练一个单层网络。

2,当所有层训练完后,hinton使用wake-sleep算法进行调优。将除最顶层的其它层间的权重变为双向的,这样最顶层仍然是一个单层神经网络,而其它层则变为了图模型。向上的权重用于”认知“,向下的权重用于”生成“。然后使用Wake-Sleep算法调整所有的权重。让认知和生成达成一致,也就是保证生成的最顶层表示能够尽可能正确的复原底层的结点。比如顶层的一个结点表示人脸,那么所有人脸的图像应该激活这个结点,并且这个结果向下生成的图像应该能够表现为一个大概的人脸图像。Wake-Sleep算法分为醒(wake)和睡(sleep)两个部分。

2.1,wake阶段,认知过程,通过外界的特征和向上的权重(认知权重)产生每一层的抽象表示(结点状态),并且使用梯度下降修改层间的下行权重(生成权重)。也就是“如果现实跟我想像的不一样,改变我的权重使得我想像的东西就是这样的“。

2.2,sleep阶段,生成过程,通过顶层表示(醒时学得的概念)和向下权重,生成底层的状态,同时修改层间向上的权重。也就是“如果梦中的景象不是我脑中的相应概念,改变我的认知权重使得这种景象在我看来就是这个概念“。

由于自动编码器(auto-encoder,即上面说的神经网络。广义上的自动编码器指所有的从低级表示得到高级表示,并能从高级表示生成低级表示的近似的结构,狭义上指的是其中的一种,谷歌的人脸识别用的)有联想功能,也就是缺失部分输入也能得到正确的编码,所以上面说的算法也可以用于有监督学习,训练时y做为顶层网络输入的补充,应用时顶层网络生成y'。

如何用70行java代码实现深度神经网络算法

神经网络结构如下图所示,最左边的是输入层,最右边的是输出层,中间是多个隐含层,对于隐含层和输出层的每个神经节点,都是由上一层节点乘以其权重累加得到,标上“+1”的圆圈为截距项b,对输入层外每个节点:Y=w0*x0+w1*x1+...+wn*xn+b,由此我们可以知道神经网络相当于一个多层逻辑回归的结构。import java.util.Random; public class BpDeep{ public double[][] layer;//神经网络各层节点 public double[][] layerErr;//神经网络各节点误差 public double[][][] layer_weight;//各层节点权重 public double[][][] layer_weight_delta;//各层节点权重动量 public double mobp;//动量系数 public double rate;//学习系数 public BpDeep(int[] layernum, double rate, double mobp){ this.mobp = mobp; this.rate = rate; layer = new double[layernum.length][]; layerErr = new double[layernum.length][]; layer_weight = new double[layernum.length][][]; layer_weight_delta = new double[layernum.length][][]; Random random = new Random(); for(int l=0;l

以下为关联文档:

五种沟通形态的比较五种沟通网络特点利弊及其与绩效的关系链式沟通。这是一个平行网络,其中居于两端的人只能与内侧的一个成员联系,居中的人则可分别与两人沟通信息。在一个公司系统中,它相当于一个纵向沟通系统,代表一个等级层次,逐渐传...

网络营销怎么做?什么是网络营销?网络营销策划方案做这个,一定要有良好的执行力,一定要把工作做细,而不是完成了工作。只有把工作做细才会发现操作方案的不足之初,然后才可以做有利于目标的调整。可能讲得有些理论,不过真正去操作...

公用网络家庭网络工作网络是什么意思1、家庭网络:是融合家庭控制网络和多媒体信息网络于一体的家庭信息化平台。 2、工作网络:指的是社会网络,是一种基于“网络”(节点之间的相互连接)而非“群体”(明确的边界和秩序)...

WIN7系统的家庭网络工作网络公用网络的作用及区别是什么Windows 7中的网络类型分为三种,实质是两种:可信任网络和不可信任网络。其差异在于防火墙的策略和文件共享等功能的配置。家庭网络和工作网络同为可信任网络,选择这两种网络类...

如何处理知识产权保护与网络信息资源使用之间的关系互联网作为一种新兴的媒体日益成为一种不容忽视的知识传播方式。在网络时代,如果知识产权权利人不能有效地控制网络这种日益主流的传播方式,那么其知识产权就不可避免地会受到...

谁了解网络营销机会网络营销基础与实践网络营销及案例分析网络营销机会,网络营销基础与实践,网络营销及案例分析,网络营销计划? 总体来说都是推广方式中不错的选择。 一些经营较好的企业,基本都是通过网络推广在做营销。传统的展会或专业...

企业如何结合网络深度发展现在越来越多的网站都和实业相结合起来,但是这个东西说起来简单,做起来却要考虑很多方面的事情,无论是网站的类型,还是所做实业的项目,我觉得既然是通过网络,那么网站就必须给人有...

继续教育与网络教育有什么区别•【入学门槛对比】 成人高等教育入学考试是全国统一招生考试,由学校根据考试结果择优录取,统考每年举行一次。 自学考试没有入学考试,考生参加单科考试,合格一门,发一门的合格证...

电子商务与网络营销的关系电子商务,“电子”就是电子支付,“商务络营销,电子商务就是电子支付+网络营销,意思就是在进行网络营销时,需要结算时,使用电子支付手段。 电子商务和网络营销既有区别,也有联系: 电...

推荐阅读
图文推荐