Deep deeplearning4j 教程需要什么样的硬件配置

02:57:39 UTC
深度学习做计算机视觉,基本的gpu配置和计算机配置是什么?推荐的配置是什么?
03:20:21 UTC
调试算法单机即可,我自己的实验机器是 Intel i7 + 32GB 内存 + nvidia GTX 970 。 但要跑大量数据还是需要集群。
分享一个常跑kaggle竞赛的同学选择GPU机器的经验之谈:
Why should I get a GPU?
I have been using GPUs for nearly two years now and for me it is again and again amazing to see how much speedup you get. Compared to CPUs 20x speedups are typical, but on larger problems one can achieve 50x speedups. With GPUs you can try out new ideas, algorithms and experiments much faster than usual and get almost immediate feedback as to what works and what does not. This is a very important aspect when one begins to do deep learning as this rapid gain in practical experience is key to build the expertise with which you can make deep learning work on new problems. Without this rapid feedback it just takes too much time to learn from one’s mistakes and it can be discouraging and frustrating to go on with deep learning.
With GPUs I quickly learned how to apply deep learning on a range of Kaggle competitions and I managed to earn second place in the
Kaggle competition, where it was the task to predict weather ratings for a given tweet. In the competition I used a rather large two layered deep neural network with rectified linear units and dropout for regularization and this deep net fitted barely into my 6GB GPU memory. More details on my approach can be found .
Should I get multiple GPUs?
Excited by what deep learning can do with GPUs I plunged myself into multi-GPU territory by assembling a small GPU cluster with InfiniBand 40Gbit/s interconnect. I was thrilled to see if even better results can be obtained with multiple GPUs.
Setup in my main computer: You can see three GXT Titan and an InfiniBand card. Is this a good setup for doing deep learning?
I quickly found that it is not only very difficult to parallelize neural networks on multiple GPU efficiently, but also that the speedup was only mediocre for dense neural networks. Small neural networks could be parallelized rather efficiently using data parallelism, but larger neural networks like I used in the Partly Sunny with a Chance of Hashtags Kaggle competition received almost no speedup.
However, using model parallelism, I was able to train neural networks that were much larger and that had almost 3 billion connections. But to leverage these connections one needs just much larger data sets than are normally used. I found some uses for that when I trained a language model on the entire Wikipedia corpus – but that’s about it.
On the other hand, one advantage of multiple GPUs is that you can run multiple algorithms or experiments separately on each GPU. This is highly useful if your main goal is to gain deep learning experience as quickly as possible. You gain no speedups, but you get more information of your performance by using different algorithms or parameters at once.
If you use deep learning only occasionally, or you use rather small data sets (smaller than say 10-15GB) and foremost dense neural networks, then multiple GPUs are probably not for you. However, when you use convolutional neural networks a lot, then multiple GPUs might still make sense.
released his new
which can run convolutional neural networks on up to four GPUs. Convolutional neural networks – unlike dense neural networks – can be run very efficiently on multiple GPUs because their use of weight sharing makes data parallelism very efficient. On top of that, Alex Krizhevsky’s implementation utilizes model parallelizm for the densely connected final layers of the network.
However, if you want to program similar networks for yourself, be aware that to program efficient convolutional kernels for multiple GPUs is a very difficult undertaking for which expert GPU programming skills are required.
So overall, one can say that one GPU should be sufficient for almost any task and that additional GPUs convey only benefits under very specific circumstances.
So what kind of GPU should I get?
Required memory size
People often ask me if the GPUs with the largest memory are best for them, as this would enable them to run the largest neural networks. I thought like this when I bought my GPU, a GTX Titan with 6GB memory. And I also thought that this was a good choice when my neural network in the Partly Sunny with a Chance of Hashtags Kaggle competition barely fitted in my GPU memory. But later I found out that my neural network implementation was very memory inefficient and much less memory would have been sufficient.
Generally, if you want to know how large a neural network you could fit into a given GPU memory then subtract 400 MB as a buffer, then divide the GPU memory by two for the momentum matrix, then multiply the memory in MB by ${1024\times 1024}$ to get bytes, and finally divide by four get the number of floating point numbers fitting into that memory. For a GTX Titan this would be $\frac{()\times 1024\times 1024}{4\times 2} = 752.877.568$ parameters. For the Kaggle competition I used a 00x32 network, which are just 52.128.000 parameters (with momentum matrix). So this network would even fit into a small GPU with 1536 MB (space for about 148.897.792 parameters). For comparison, Alex Krizhevsky’s convolutional neural network for the ImageNet competition featured 60.000.000 parameters (120 million with momentum matrix).
So the bottom line is if you just want to use neural networks on some Kaggle data sets and build normal models, you should not worry too much about memory (${\geq 1536\mbox{MB}}$ is fine). For cutting edge models that are used on very large amounts of data you should have more than 3GB.
Update : Sander Dieleman made me aware, that this last sentence should be emphasized: If you really want to work on large data sets, you should go for either 4GB or 6GB (depending on your budget). He also pointed out an error in my reasoning with parameters: Convolutional kernels need additional memory to run, i.e. they need additional memory beyond the parameters alone. So Alex’s net – even though it features 120 million parameters, does not fit into 3GB memory. So my calculation above are off for convolutional neural networks (which are arguably the most important neural networks to date). Otherwise this blog post contains all the information you need to make a fully informed choice for your deep learning GPU. I will update the post as more information regard GTX 980 performance is known (first currency mining tests indicate, that the GTX 980 will be the best GPU. Although it’s stats are bad, it’s architecture seems to make more than just up for it! More later).
Fastest GPU for a given budget
Processing performance is most often measured in floating-point operations per second (FLOPS). This measure is often advertised in GPU computing and it is also the measure which determines which supercomputer enters the TOP500 list of the fastest supercomputers. However, this measure is misleading, as it measures processing power on problems that do not occur in practice.
It turns out that the most important practical measure for GPU performance is bandwidth in GB/s, which measures how much memory can be read and written per second. This is because almost all mathematical operations, such as dot product, sum, addition etcetera, are bandwidth bound, i.e. limited by the GB/s
of the card rather than its FLOPS.
Comparison of bandwidth for CPUs and GPUs over time. Bandwidth is one of the main reasons why GPUs are faster for computing than CPUs are.
To determine the fastest GPU for a given budget one can use and look at Bandwidth in GB/s; the listed prices are quite accurate for newer cards (600 and 700 series), but the 400 and 500 series is significantly cheaper than the listed prices – especially if you buy those cards via eBay.
Another important factor to consider however, is that the Fermi architecture (400 and 500 series) is quite a bit faster than the newer Kepler architecture (600 and 700 series), so that for example the GTX 580 is faster than any GTX 600 series GPU. Only high end 700 series GPUs (770, 780, Titan) outpace the GTX 580.
So the only disadvantage a GTX 580 has is its smaller memory of 1.5 or 3GB – which as discussed above – is not so bad after all. With an eBay price of $150-200 the GTX 580 is rather cheap (compared to the 770, 780 and Titan, that is) while delivering excellent performance with a good amount of memory.
For special applications one can easily reason which GPU to choose by balancing ones required memory size, bandwidth in GB/s and the price of the GPU, and this reasoning will be solid for many years to come. But right now and more generally, choosing a GTX 580 will be the best and most cost-effective choice for most deep learning application that does not involve (very) large neural networks.
原文(需翻墙):
17:39:25 UTC
很好的介绍了如果要做 深度学习 相关工作应该如何选择 合适的GPU,值得收藏。
17:50:38 UTC
深度学习“引擎”之争:GPU加速还是专属神经网络芯片?
深度学习(DeepLearning)在这两年风靡全球,大数据和高性能计算平台的推动作用功不可没,可谓深度学习的“燃料”和“引擎”,GPU则是引擎的引擎,基本所有的深度学习计算平台都采用GPU加速。同时,深度学习已成为GPU提供商NVIDIA的一个新的战略方向,以及3月份的GTC 2015的绝对主角。
那么,GPU用于深度学习的最新进展如何?这些进展对深度学习框架有哪些影响?深度学习开发者应该如何发挥GPU的潜力?GPU与深度学习结合的前景以及未来技术趋势到底是怎么样的?在日前的NVIDIA深度学习中国战略发布会上,NVIDIA全球副总裁、PSG兼云计算业务中国区总经理Ashok Pandey带领其深度学习相关管理团队接受了记者的采访,就NVIDIA的深度学习战略、技术、生态、市场相关问题进行了详细的解读。
NVIDIA认为,目前是数据、模型和GPU在推动深度学习的蓬勃发展,深度学习用户可以选择不同的计算平台,但开发人员需要一个易于部署的平台和良好的生态环境,包括一些基于硬件优化的开源工具,而构建一个良好的深度学习计算生态,既是GPU现有的优势,也是NVIDIA一贯的宗旨。
NVIDIA全球副总裁、PSG兼云计算业务中国区总经理Ashok Pandey
为什么GPU与深度学习很合拍?
随着数据量和计算力的提升,Hinton和LeCun耕耘多年的大型神经网络终有用武之地,深度学习的性能和学习精度得到很大的提升,被广泛运用到文本处理、语音和图像识别上,不仅被Google、Facebook、百度、微软等巨头采用,也成为猿题库、旷视科技这类初创公司的核心竞争力。
那么为什么是GPU呢?最重要的是GPU出色的浮点计算性能特别提高了深度学习两大关键活动:分类和卷积的性能,同时又达到所需的精准度。NVIDIA表示,深度学习需要很高的内在并行度、大量的浮点计算能力以及矩阵预算,而GPU可以提供这些能力,并且在相同的精度下,相对传统CPU的方式,拥有更快的处理速度、更少的服务器投入和更低的功耗。
采用GPU加速与只采用CPU训练CNN的性能比较
以ImageNet竞赛为例,基于GPU加速的深度学习算法,百度、微软和Google的计算机视觉系统在ImageNet图像分类和识别测试中分别达到了5.98%(2015年1月数据)4.94%(2015年2月数据)、4.8%(2015年2月数据)、的错误率,接近或超过了人类识别水平——跑分竞赛虽然有针对已知数据集进行特定优化之嫌,但优化结果对工业界的实践仍然具有参考价值。
“人工智能从过去基于模型的方法,变成现在基于数据、基于统计的方法,主要得益于GPU高度并行的结构、高效快速的连接能力。事实证明GPU很适合深度学习。”北京航空航天大学教授、国家“十二五 863计划高效能计算机及应用服务环境”重大项目总体组组长钱德沛说。
NVIDIA回顾了GTC上推出的四项有助于推动深度学习发展的新产品和方案:
1、GeForce GTX TITAN X,为训练深度神经网络而开发的GPU。
TITANX采用 NVIDIA Maxwell GPU 架构,结合 3,072 个处理核心、单精度峰值性能为7 teraflops,加上板载的 12GB 显存,336.5GB/s 的带宽,可处理用于训练深度神经网络的数百万的数据。
NVIDIA介绍,TITAN X 在工业标准模型AlexNet 上,花了不到三天的时间、使用 120万个 ImageNet 图像数据集去训练模型,而使用16核心的 CPU 得花上四十多天。
2、DIGITS DevBox,针对研究人员的桌边型深度学习工具。
DIGITSDevBox采用四个 TITAN X GPU,从内存到 I/O的每个组件都进行了最佳化调试,预先安装了开发深度神经网络所需要使用到的各种软件,包括:DIGITS软件包,三大流行深度学习架构Caffe、Theano和Torch,以及 NVIDIA 完整的GPU 加速深度学习库 cuDNN 2.0。和其他巨头一样,NVIDIA对开源的支持也是不遗余力。
NVIDIA表示,在关键深度学习测试中,DIGITSDevBox 可以提供 4 倍于单个TITAN X 的性能。使用 DIGITSDevBox 来训练 AlexNet 只要13个小时就能完成,而使用最好的单GPU PC 的话则是两天,单纯使用 CPU 系统的话则要一个月以上的时间。
3、下一代GPU 架构Pascal,将使深度学习应用中的计算速度相比Maxwell加快十倍。
Pascal引入了大幅加快训练速度的三项设计,包括:32GB 的显存(是GeForce GTX TITANX 的 2.7 倍),可进行混合精度的计算任务,能够在 16位浮点精度下拥有两倍于 32 位浮点精度下的速率的计算速度;配备 3D 堆叠显存,让开发人员能建立更大的神经网络,提升深度学习应用程序的速度性能多达5倍;另搭配 NVIDIA 的高速互连技术 NVLink 来连接两个以上的 GPU,可将深度学习的速度提升达十倍。
NVIDIA表示,现在在深度学习领域一般都用单精度进行,未来的趋势可能有人要用半精度,甚至1/4精度,所以NVIDIA需要根据用户的需求调整GPU的架构,Pascal支持FP16和FP32,可以提升机器学习的性能。
4、DRIVE PX,用于自动驾驶汽车的深度学习平台。
基于NVIDIA Tegra X1,结合最新的PX平台,可以让汽车在仪表显示和自动驾驶方面得到质的飞跃。
值得关注的NVLink和DIGITS
谈到下一代Pascal 架构的十倍性能,不得不说NVLink,它使得 GPU 与 GPU 之间、GPU 与 CPU 之间数据传输的速度,较现有的PCI-Express 标准加快5到12倍,对于深度学习这些需要更高 GPU 间传递速度的应用程序来说是一大福音。开发者应当高兴的是,NVLink基于点对点传输形式,编程模式与 PCI-Express 相同。
NVIDIA表示,NVLink可将系统里的 GPU 数量增加一倍,以共同用于深度学习计算任务上;还能以新的方式连接 CPU 与 GPU,在服务器设计方面提供较 PCI-E 更出色的灵活性和省电表现。
其实不管要做数据并行还是模型并行,NVLink对深度学习开发人员都带来更大的想象空间。国内语音识别领头羊科大讯飞,基于多GPGPU和InfiniBand构建了一个环形的并行学习架构,用于DNN、RNN、CNN等模型训练,效果不错,但采用InfiniBand也让其他从业者羡慕其“土豪”行径,如果有了NVLink,显然可以有别的好办法。
当然,想用NVLink也意味着新的投资,而NVIDIA现有的产品线对深度学习的支持也不错,用户可以酌情选择。更多的深度学习硬件选择知识,可以参考Kaggle比赛选手Tim Dettmers撰写的博文:《深度学习硬件指南完整版》。
另外一个是DIGITS,用于设计、训练和验证图像分类深度神经网络的多合一图形系统。DIGITS可在安装、配置和训练深度神经网络过程中为用户提供指导,具有便于从本地和网络加载训练数据集的用户界面和工作流程管理能力,并提供实时监控和可视化功能,目前支持GPU 加速版本 Caffe,详见ParallelForall 博客:《》。
DIGITS之所以首先选择支持Caffe,NVIDIA表示,是因为他们的客户调研结果显示这一框架目前最受欢迎(包括国内的BAT等和国外的一些用户),同理,cuDNN运算库也是最先集成到Caffe开源工具中。NVIDIA承诺,即使不能覆盖所有的工具,DIGITS后续也会对主流的开源工具提供支持,主要是前述的Theano和Torch。NVIDIA全球在DIGITS、cuDNN团队都分别投入30多人到开源工作之中,这些开发人员也在社区中与深度学习开发者保持密切的沟通。
在NVIDIA看来,国内的深度学习研究水平与国外机构基本相当,从高校科研的角度来说,香港中文大学、中科院自动化所都获得ImageNet不错的名次,从工业界来说,BAT、乐视、科大讯飞等都在深度学习领域拥有很多年轻的工程师和不错的研究成果。NVIDIA希望加强中国生态环境的建设,推动深度学习的应用,主要方式仍然包括开源社区的投入、高校科研合作、服务器厂商的合作以及企业用户的合作。
2015年1月,NVIDIA与爱奇艺签署了深度合作框架协议,双方将在视频深度学习(deepvideo)和媒体云计算领域紧密合作,利用最先进的GPU和深度学习架构,搭建爱奇艺视频创作、分享、服务平台。NVIDIA表示,未来还将继续与重点客户合作建立联合实验室。
采用GPU加速的深度学习的企业
GPU还是专用芯片?
尽管深度学习和人工智能在宣传上炙手可热,但无论从仿生的视角抑或统计学的角度,深度学习的工业应用都还是初阶,深度学习的理论基础也尚未建立和完善,在一些从业人员看来,依靠堆积计算力和数据集获得结果的方式显得过于暴力——要让机器更好地理解人的意图,就需要更多的数据和更强的计算平台,而且往往还是有监督学习——当然,现阶段我们还没有数据不足的忧虑。未来是否在理论完善之后不再依赖数据、不再依赖于给数据打标签(无监督学习)、不再需要向计算力要性能和精度?
退一步说,即便计算力仍是必需的引擎,那么是否一定就是基于GPU?我们知道,,而,在70毫瓦的功率上提供100万个“神经元”内核、2.56亿个“突触”内核以及4096个“神经突触”内核,甚至允许神经网络和机器学习负载超越了冯·诺依曼架构,二者的能耗和性能,都足以成为GPU潜在的挑战者。例如,科大讯飞为打造“讯飞超脑”,除了GPU,还考虑借助深度定制的人工神经网络专属芯片来打造更大规模的超算平台集群。
不过,在二者尚未产品化的今天,NVIDIA并不担忧GPU会在深度学习领域失宠。首先,NVIDIA认为,GPU作为底层平台,起到的是加速的作用,帮助深度学习的研发人员更快地训练出更大的模型,不会受到深度学习模型实现方式的影响。其次,NVIDIA表示,用户可以根据需求选择不同的平台,但深度学习研发人员需要在算法、统计方面精益求精,都需要一个生态环境的支持,GPU已经构建了CUDA、cuDNN及DIGITS等工具,支持各种主流开源框架,提供友好的界面和可视化的方式,并得到了合作伙伴的支持,例如浪潮开发了一个支持多GPU的Caffe,曙光也研发了基于PCI总线的多GPU的技术,对熟悉串行程序设计的开发者更加友好。相比之下,FPGA可编程芯片或者是人工神经网络专属芯片对于植入服务器以及编程环境、编程能力要求更高,还缺乏通用的潜力,不适合普及。Deep learning需要什么样的硬件配置_百度知道Deep Learning for Video Analysisi 的 当前最新硬件配置时什么,什么型号服务器+多大内存+什么型号GPU_百度知道Deeplearning常用的模型以及方法 - 博客频道 - CSDN.NET
分类:Deeplearning
1)该Deep Learning的学习系列是整理自网上很大牛和专家所无私奉献的资料的。
2)根据看的论文以及博客总结了深度学习常用的方法和模型,便于以后自己回顾,记性太猪了,唉,快赐予我过目不忘的本领吧。
3)文中部分参考了某些博主的内容,觉得没人家总结的好,会表明出处,还望博主海涵。
4)如果有什么错误的地方希望大家一起讨论,自己还是个菜鸟,请多多指教。
5)本文内容对于很多知识点没有很详尽的描述,只是提供个框架,只是整理下常用方法。
一: MultiLayer Perceptron(多层感知器)
二:Convolutional& Neural Networks(卷积神经网络)
三:Autoencoders||Denoising Autoencoders(DA)||Stacked Denoising Autoencoders(SDA)(自动编码器||降燥自动编码器||堆降燥自动编码器)
四:Restricted Boltzmann Machines(RBM受限波尔茨曼机)
五:Deep Belief Networks(DBNs深度信念网络)
deep learning训练过程
&&&&&& 2006年,hinton提出了在非监督数据上建立多层神经网络的一个有效方法,简单的说,分为两步,一是每次训练一层网络,二是调优,使原始表示x向上生成的高级表示r和该高级表示r向下生成的x'尽可能一致。方法是:
1)首先逐层构建单层神经元,这样每次都是训练一个单层网络。
2)当所有层训练完后,Hinton使用wake-sleep算法进行调优。
&&&&&& 将除最顶层的其它层间的权重变为双向的,这样最顶层仍然是一个单层神经网络,而其它层则变为了图模型。向上的权重用于“认知”,向下的权重用于“生成”。然后使用Wake-Sleep算法调整所有的权重。让认知和生成达成一致,也就是保证生成的最顶层表示能够尽可能正确的复原底层的结点。比如顶层的一个结点表示人脸,那么所有人脸的图像应该激活这个结点,并且这个结果向下生成的图像应该能够表现为一个大概的人脸图像。Wake-Sleep算法分为醒(wake)和睡(sleep)两个部分。
1)wake阶段:认知过程,通过外界的特征和向上的权重(认知权重)产生每一层的抽象表示(结点状态),并且使用梯度下降修改层间的下行权重(生成权重)。也就是“如果现实跟我想象的不一样,改变我的权重使得我想象的东西就是这样的”。
2)sleep阶段:生成过程,通过顶层表示(醒时学得的概念)和向下权重,生成底层的状态,同时修改层间向上的权重。也就是“如果梦中的景象不是我脑中的相应概念,改变我的认知权重使得这种景象在我看来就是这个概念”。
deep learning训练过程具体如下:
1)使用自下上升非监督学习(就是从底层开始,一层一层的往顶层训练):
&&&&&& 采用无标定数据(有标定数据也可)分层训练各层参数,这一步可以看作是一个无监督训练过程,是和传统神经网络区别最大的部分(这个过程可以看作是feature learning过程):
&&&&&& 具体的,先用无标定数据训练第一层,训练时先学习第一层的参数(这一层可以看作是得到一个使得输出和输入差别最小的三层神经网络的隐层),由于模型capacity的限制以及稀疏性约束,使得得到的模型能够学习到数据本身的结构,从而得到比输入更具有表示能力的特征;在学习得到第n-1层后,将n-1层的输出作为第n层的输入,训练第n层,由此分别得到各层的参数;
2)自顶向下的监督学习(就是通过带标签的数据去训练,误差自顶向下传输,对网络进行微调):
&&&&&& 基于第一步得到的各层参数进一步fine-tune整个多层模型的参数,这一步是一个有监督训练过程;第一步类似神经网络的随机初始化初值过程,由于DL的第一步不是随机初始化,而是通过学习输入数据的结构得到的,因而这个初值更接近全局最优,从而能够取得更好的效果;所以deep learning效果好很大程度上归功于第一步的feature learning过程。
一:MultiLayer Perceptron(多层感知器)
&&&&&&& 这里我们介绍的是只有一层隐含层的多层感知器(感觉辜负了多层,哈哈,拥有多隐含层的MLP才更具有深度学习的基本特性,感觉深度学习就体现在深度二字上,深度=多层),这个单隐含层的MLP可以看做是一个逻辑回归分类器,(其实多隐含层的话,每层也可以看做是逻辑回归分类器)这个分类器的输入要经过非线性学习转换函数处理(就是常用的activition function函数或者叫transform function),它将输入数据映射到一个线性可分的空间里。中间的一层是隐含层。
&&&& 1 模型
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&& 通常,拥有一层隐含层的多层分类器可以用以下函数表示:,是输入向量的size,那么自然就是输出向量的size了,那么用矩阵表示法就是:&分别为输入层到隐含层的偏置项和隐含层到输出层的偏置项,为对应的权重矩阵,,为为激活函数。构成了隐含层,,每一列表示输入单元与第i个隐含单元之间的权重。激活函数通常采用或者函数,后来又出现了ReLu,等激活函数,其中的效果还没有验证。输出由函数得到。
训练过程:
&& ① 先逐层训练每层神经网络,得到每层的激活函数值,权重矩阵,偏置向量,代价函数
&& ②利用梯度下降法最小化代价函数,经典的就是用BP算法来求解梯度使得代价函数最小。
&&&& 反向传播算法的思路如下:给定一个样例 ,我们首先进行“前向传导”运算,计算出网络中所有的激活值,包括&&&&&&
的输出值。之后,针对第 层的每一个节点,我们计算出其“残差”,该残差表明了该节点对最终输出值的残差产生了多少影响。如果知道了网络的本层误差,那么对Wn和Xn-1的导数就可以通过反向传播得到。
反向传播算法可表示为以下几个步骤:
进行前馈传导计算,利用前向传导公式,得到 直到输出层
的激活值。对输出层(第
层),计算:
的各层,计算:
计算最终需要的偏导数值:
最后,我们将对梯度下降算法做个全面总结。在下面的伪代码中, 是一个与矩阵
维度相同的矩阵, 是一个与
维度相同的向量。注意这里“”是一个矩阵,而不是“
相乘”。下面,我们实现批量梯度下降法中的一次迭代:
对于所有 ,令
, (设置为全零矩阵或全零向量)对于
使用反向传播算法计算
和。计算 。计算 。
更新权重参数:
现在,我们可以重复梯度下降法的迭代步骤来减小代价函数
的值,进而求解我们的神经网络。
&BP算法虽然很简单,但是也存在着弊端:
(1)梯度越来越稀疏:从顶层越往下,误差校正信号越来越小;
(2)收敛到局部最小值:尤其是从远离最优区域开始的时候(随机值初始化会导致这种情况的发生);
(3)一般,我们只能用有标签的数据来训练:但大部分的数据是没标签的,而大脑可以从没有标签的的数据中学习;
所以说层数不能太多。
二:Convolutional& Neural Networks(卷积神经网络)
&&&&&&& 卷积神经网络是人工神经网络的一种,已成为当前语音分析和图像识别领域的研究热点。它的权值共享网络结构使之更类似于生物神经网络,降低了网络模型的复杂度,减少了权值的数量。该优点在网络的输入是多维图像时表现的更为明显,使图像可以直接作为网络的输入,避免了传统识别算法中复杂的特征提取和数据重建过程。卷积网络是为识别二维形状而特殊设计的一个多层感知器,这种网络结构对平移、比例缩放、倾斜或者共他形式的变形具有高度不变性。
&&&&&& CNNs是受早期的延时神经网络(TDNN)的影响。延时神经网络通过在时间维度上共享权值降低学习复杂度,适用于语音和时间序列信号的处理。
&&&&&&&CNNs是第一个真正成功训练多层网络结构的学习算法。它利用空间关系减少需要学习的参数数目以提高一般前向BP算法的训练性能。CNNs作为一个深度学习架构提出是为了最小化数据的预处理要求。在CNN中,图像的一小部分(局部感受区域)作为层级结构的最低层的输入,信息再依次传输到不同的层,每层通过一个数字滤波器去获得观测数据的最显著的特征。这个方法能够获取对平移、缩放和旋转不变的观测数据的显著特征,因为图像的局部感受区域允许神经元或者处理单元可以访问到最基础的特征,例如定向边缘或者角点。
&&& && 卷积神经网络是一个多层的神经网络,每层由多个二维平面组成,而每个平面由多个独立神经元组成。
&&&& 2 训练过程
神经网络用于模式识别的主流是有指导学习网络,无指导学习网络更多的是用于聚类分析。对于有指导的模式识别,由于任一样本的类别是已知的,样本在空间的分布不再是依据其自然分布倾向来划分,而是要根据同类样本在空间的分布及不同类样本之间的分离程度找一种适当的空间划分方法,或者找到一个分类边界,使得不同类样本分别位于不同的区域内。这就需要一个长时间且复杂的学习过程,不断调整用以划分样本空间的分类边界的位置,使尽可能少的样本被划分到非同类区域中。
&&&&&& 卷积网络在本质上是一种输入到输出的映射,它能够学习大量的输入与输出之间的映射关系,而不需要任何输入和输出之间的精确的数学表达式,只要用已知的模式对卷积网络加以训练,网络就具有输入输出对之间的映射能力。卷积网络执行的是有指导训练,通过有标签样本集训练构建神经网络model,提取特征。所以其样本集是由形如:(输入向量,理想输出向量)的向量对构成的。
&&&&&& 训练算法与传统的BP算法差不多。主要包括4步,这4步被分为两个阶段:
&&&&&& 第一阶段,向前传播阶段:
&&&&&&& a)从样本集中取一个样本(X,Yp),将X输入网络;
&&&&&&& b)计算相应的实际输出Op。
&&&&& 在此阶段,信息从输入层经过逐级的变换,传送到输出层。这个过程也是网络在完成训练后正常运行时执行的过程。在此过程中,网络执行的是计算(实际上就是输入与每层的权值矩阵相点乘,得到最后的输出结果):
&&&&&&&&& Op=Fn(…(F2(F1(XpW(1))W(2))…)W(n))
第二阶段,向后传播阶段
a)算实际输出Op与相应的理想输出Yp的差;
b)按极小化误差的方法反向传播调整权矩阵。
三:Autoencoders||Denoising Autoencoders(DA)||Stacked Denoising Autoencoders(SDA)(降燥自动编码器||栈式降燥自动编码器)
1:Autoencoders自动编码器
&&&&Deep Learning最简单的一种方法是利用人工神经网络的特点,人工神经网络(ANN)本身就是具有层次结构的系统,如果给定一个神经网络,我们假设其输出与输入是相同的,然后训练调整其参数,得到每一层中的权重。自然地,我们就得到了输入I的几种不同表示(每一层代表一种表示),这些表示就是特征。自动编码器就是一种尽可能复现输入信号的神经网络。为了实现这种复现,自动编码器就必须捕捉可以代表输入数据的最重要的因素,就像PCA那样,找到可以代表原信息的主要成分。
具体过程简单的说明如下:
1)给定无标签数据,用非监督学习学习特征:
&&&&&& 在我们之前的神经网络中,如第一个图,我们输入的样本是有标签的,即(input, target),这样我们根据当前输出和target(label)之间的差去改变前面各层的参数,直到收敛。但现在我们只有无标签数据,也就是右边的图。那么这个误差怎么得到呢?
&&&&& 如上图,一个自动编码器将样本输入到一个encoder编码器中,得到一个隐含输出y:,s为activation function。那么我们怎么知道这个code表示的就是input呢?我们加一个decoder解码器,通过函数得到decoder输出:
,那么如果输出的这个信息和一开始的输入信号input是很像的(理想情况下就是一样的),那很明显,我们就有理由相信这个code是靠谱的。所以,我们就通过调整encoder和decoder的参数,使得重构误差最小,这时候我们就得到了输入input信号的第一个表示了,也就是编码code了。因为是无标签数据,所以误差的来源就是直接重构后与原输入相比得到。
2)通过编码器产生特征,然后训练下一层。这样逐层训练:
&&&&&& 那上面我们就得到第一层的code,我们的重构误差最小让我们相信这个code就是原输入信号的良好表达了,或者牵强点说,它和原信号是一模一样的(表达不一样,反映的是一个东西)。那第二层和第一层的训练方式就没有差别了,我们将第一层输出的code当成第二层的输入信号,同样最小化重构误差,就会得到第二层的参数,并且得到第二层输入的code,也就是原输入信息的第二个表达了。其他层就同样的方法炮制就行了(训练这一层,前面层的参数都是固定的,并且他们的decoder已经没用了,都不需要了)。
&&&&&& 重构误差可以由很多方式来获得,主要依赖给定的输入样本的分布假设。在这里我们用传统的平方差来计算误差。,如果输入是向量,则误差可以重写为:
&&&&&&&& 我们希望编码 y
是一个分布式表示, 它可以抓住数据变化主要因素的方向. 这类似于向主成分方向投影的方式, 都将获得数据变化的主要因素. 实际上, 如果有一个线性隐藏层(编码), 并且使用均方差准则来训练网络, 那么,k
个隐藏层单元就是学习如何将输入投影到由数据的前k个主成分张成的子空间里(in
the span of the first k
principal components of the data). 如果隐藏层是非线性的, 自编码器与PCA表现不同, 它具有捕获数据分布多模态(multi-modal)的能力. 因而, 当我们构建深度自编码器时, 我们会堆叠多个编码器(stacking multiple encoders, 及其对应的解码器), 此时, 就不能以PCA的观点来看待.
&&&&& 因为y是x的有损压缩,
所以对于所有的x,y当然不能全部很好(small-loss)的压缩x.
优化自编码器模型, 使y成为训练样例的良好压缩,
并希望自编码器对其它的输入也能较好的压缩, 但不是说对任意的输入都有良好的压缩. 那么一个自编码器推广的意义就是: 一个自编码器在与训练样例(training examples)有相同分布的测试样例(test examples)上的重构误差低, 然而, 一般说来, 对在从输入空间随机抽取的样例上的重构误差很高.
3)有监督微调:
&&&&& 经过上面的方法,我们就可以得到很多层了。至于需要多少层(或者深度需要多少,这个目前本身就没有一个科学的评价方法)需要自己试验调了。每一层都会得到原始输入的不同的表达。当然了,我们觉得它是越抽象越好了,就像人的视觉系统一样。
&&&&&& 到这里,这个AutoEncoder还不能用来分类数据,因为它还没有学习如何去连结一个输入和一个类。它只是学会了如何去重构或者复现它的输入而已。或者说,它只是学习获得了一个可以良好代表输入的特征,这个特征可以最大程度上代表原输入信号。那么,为了实现分类,我们就可以在AutoEncoder的最顶的编码层添加一个分类器(例如罗杰斯特回归、SVM等),然后通过标准的多层神经网络的监督训练方法(梯度下降法)去训练。
&&&&&&& 也就是说,这时候,我们需要将最后层的特征code输入到最后的分类器,通过有标签样本,通过监督学习进行微调,这也分两种,一个是只调整分类器(黑色部分):
&&&&&& 另一种:通过有标签样本,微调整个系统:(如果有足够多的数据,这个是最好的。end-to-end learning端对端学习)
&&&&&& 一旦监督训练完成,这个网络就可以用来分类了。神经网络的最顶层可以作为一个线性分类器,然后我们可以用一个更好性能的分类器去取代它。
&&&&&& 在研究中可以发现,如果在原有的特征中加入这些自动学习得到的特征可以大大提高精确度,甚至在分类问题中比目前最好的分类算法效果还要好!
&&&&&&& AutoEncoder存在一些变体,这里简要介绍下:
2:Sparse AutoEncoder稀疏自动编码器:
&&&&& 当然,我们还可以继续加上一些约束条件得到新的Deep Learning方法,如:如果在AutoEncoder的基础上加上L1的Regularity限制(L1主要是约束每一层中的节点中大部分都要为0,只有少数不为0,这就是Sparse名字的来源),我们就可以得到Sparse AutoEncoder法。
&&&&&& 如上图,其实就是限制每次得到的表达code尽量稀疏。因为稀疏的表达往往比其他的表达要有效(人脑好像也是这样的,某个输入只是刺激某些神经元,其他的大部分的神经元是受到抑制的):
3:Denoising AutoEncoders降噪自动编码器:
&&&&&&&&降噪自动编码器DA是在自动编码器的基础上,训练数据加入噪声,所以自动编码器必须学习去去除这种噪声而获得真正的没有被噪声污染过的输入。因此,这就迫使编码器去学习输入信号的更加鲁棒的表达,这也是它的泛化能力比一般编码器强的原因。DA可以通过梯度下降算法去训练。
&&&&&&& 一个DA主要做两件事情,一是encode the input,并且在输入样本中加入大量噪音的前提下,能够尽量消除在经过多次Encoder后信息衰减带来的影响,二是能够捕获输入之间的依赖关系。DA可以从不同的角度来看待,可以说是流行学习模型,随机操作模型,自底向上的信息构建模型,以及自顶向下的信息生成模型。训练过程于AutoEncoder过程一样。
4:Stacked Denoising Autoencoders(SDA)
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&& Stacked一看就是把一堆DA堆一起的意思,哈哈,堆叠多个DA, 并把上一层的隐藏层表示(编码)作为当前层的输入, 可以形成深层网络. 这样一个无监督预训练(unsupervised pre-training)的体系结构, 一次只做一层. 每一层都作为一个降噪自编码器, 并通过最小化( 即前一层的输出编码 )重构输入的误差来训练.
一旦训练好前k层,
我们就可以训练第k+1层,
这是因为现在可以计算下一层的编码或隐层表示. 一旦所有层都经过预训练, 网络开始进入训练的第二阶段, 即微调( fine-tuning)。就和autoencoder一样的微调方式。
四:Restricted Boltzmann Machines(RBM受限波尔茨曼机)
&&&&&& 在此之前引入一个概念,基于能量的模型(Energy Based Model,EBM),基于能量的模型是一种具有普适意义的模型,可以说它是一种模型框架,在它的框架下囊括传统的判别模型和生成模型,图变换网络(Graph-transformer Networks),条件随机场,最大化边界马尔科夫网络以及一些流形学习的方法等。EBM通过对变量的每个配置施加一个有范围限制的能量来捕获变量之间的依赖 关系。EBM有两个主要的任务,一个是推断(Inference),它主要是在给定观察变量的情况,找到使能量值最小的那些隐变量的配置;另一个是学习(Learning)。
它主要是寻找一个恰当的能量函数,使样本中正确的输入输出的能量 比错误的输入输出的能量低。
&&&&&& 基于能量的模型(EBM)把我们所关心变量的各种组合和一个标量能量联系在一起。我们训练模型的过程就是不断改变标量能量的过程,因此就有了数学上期望的意义。比如,如果一个变量组合被认为是合理的,它同时也具有较小的能量。基于能量的概率模型通过能量函数来定义概率分布:
&&&&&&& 其中Z为规整因子,
&&&&&&&&&&&&&&
&&&&&&& 基于能量的模型可以利用使用梯度下降或随机梯度下降的方法来学习,具体而言,就是以训练集的负对数作为损失函数,
&&&&&&&&&&&&&&&&
&&&&&&& 其中θ为模型的参数,将损失函数对θ求偏导,
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
即得到损失函数下降最快的方向。
包含隐单元的EBMs
&&&&&&&& 在很多情况下,我们无法观察到样本的所有属性,或者我们需要引进一些没有观察到的变量,以增加模型的表达能力,这样得到的就是包含隐含变量的EBM,
&&&&&&&&&&&&&&
&&&&&&&&& 其中h表示隐含变量。在这种情况下,为了与不包含隐含变量的模型进行统一,我们引入如下的自由能量函数,
&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&& 这样P(x)就可以写成,
&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&& 此时,损失函数还是类似的定义,只是在进行梯度下降求解时稍微有些不同,
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&& 该梯度表达式中包含两项,他们都影响着模型所定义的分布密度:第一项增加训练数据的概率(通过减小对应的自由能量),而第二项则减小模型 生成的样本的概率。
&&&&& 通常,我们很难精确计算这个梯度,因为式中第一项涉及到可见单元与隐含单元的联合分布,由于归一化因子Z(θ)的存在,该分布很难获取。我们只能通过一些采样方法(如Gibbs采样)获取其近似值,其具体方法将在后文中详述。
&&&&&& 1 波尔兹曼机
&&&&&&& 波尔茨曼机(BM)是Hiton和Sejnowski于1986年提出的一种根植于统计力学的随机神经网络。这种网络中的神经元是随机神经元,神经元的输出只有两种状态(未激活、激活),一般用二进制的0和1表示,,状态的取值根据概率统计法则决定。从功能上讲,BM是由随机神经元全连接组成的反馈神经网络,且对称连接,无自反馈,如图(1)所示
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 图 1包含一个可见层和一个隐层的BM模型如图2(a)所示
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 图2
&&& BM具有强大的无监督学习能力,能够学习数据中复杂的规则。但是,拥有这种学习能力的代价是其训练/学习时间非常长。此外,不仅无法确切地计算BM所表示的分布,甚至得到服从BM所表示分布的随机样本也很困难。为克服此问题,Sejnowski引入了一种限制的波尔兹曼机(RBM)。RBM具有一个可见层,一个隐层,层内无连接,其结构如图2(b)所示。Roux和Bengio从理论上证明只要隐单元的数目足够多,RBM能够拟合任意离散分布。
RBM受限波尔茨曼机
受限波尔茨曼机(Boltzmann Machine,BM)是一种特殊形式的对数线性的马尔科夫随机场(Markov Random Field,MRF),即能量函数是自由变量的线性函数。 通过引入隐含单元,我们可以提升模型的表达能力,表示非常复杂的概率分布。
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&& 为什么它是Deep Learning方法。首先,这个模型因为是二部图,所以在已知v的情况下,所有的隐藏节点之间是条件独立的(因为节点之间不存在连接),即p(h|v)=p(h1|v)…p(hn|v)。同理,在已知隐藏层h的情况下,所有的可视节点都是条件独立的。同时又由于所有的v和h满足Boltzmann
分布,因此,当输入v的时候,通过p(h|v) 可以得到隐藏层h,而得到隐藏层h之后,通过p(v|h)又能得到可视层,通过调整参数,我们就是要使得从隐藏层得到的可视层v1与原来的可视层v如果一样,那么得到的隐藏层就是可视层另外一种表达,因此隐藏层可以作为可视层输入数据的特征,所以它就是一种Deep Learning方法。
下面介绍下它的原理以及用到的方法
能量函数 定义为:
& 表示输入层与隐层连接的权重,b,c分别为可见层和隐藏层的偏移量。
直接自由能公式如下:
因为RBMs的特殊结构,可见单元和隐藏单元彼此条件独立。有了这个属性,我们可以得到:
&&&& 运用二值单元的RBM
&&&& 如果RBM中的每个单元都是二值的,即有vj,hi∈{0,1},我们可以得到神经元激活函数:
则对应的RBM的二值自由能函数进一步简化为:
使用梯度下降法求解模型参数时,各参数的梯度值如下
前面提到了,RBM是很难学习的,即模型的参数很难确定,下面我们就具体讨论一下基于采样的近似学习方法。学习RBM的任务是求出模型的参数 θ={c,b,W}的值。
&&& Gibbs采样
&&&&&& Gibbs采样是一种基于马尔科夫链蒙特卡罗(Markov Chain Monte Carlo,MCMC)策略的采样方法。对于一个N维随机向量的联合分布通过若干步以的形式进行Gibbs采样,其中是指S中除了以外的其它的N-1维向量。(是不是很难懂?我也没懂,嘿嘿,找个例子可能就好懂了。)
&&&&& 这里通俗点的解释一下。首先,什么是sampling。sampling就是以一定的概率分布,看发生什么事件。举一个例子。甲只能E:吃饭、学习、打球,时间T:上午、下午、晚上,天气W:晴朗、刮风、下雨。现在要一个sample,这个sample可以是:打球+下午+晴朗。。。
&&&& 问题是我们不知道p(E,T,W),或者说,不知道三件事的联合分布。当然,如果知道的话,就没有必要用gibbs sampling了。但是,我们知道三件事的conditional distribution。也就是说,p(E|T,W),p(T|E,W),p(W|E,T)。现在要做的就是通过这三个已知的条件分布,再用gibbs sampling的方法,得到joint distribution。
&&& 具体方法。首先随便初始化一个组合,i.e. 学习+晚上+刮风,然后依条件概率改变其中的一个变量。具体说,假设我们知道晚上+刮风,我们给E生成一个变量,比如,学习-》吃饭。我们再依条件概率改下一个变量,根据学习+刮风,把晚上变成上午。类似地,把刮风变成刮风(当然可以变成相同的变量)。这样学习+晚上+刮风-》吃饭+上午+刮风。
&&& 同样的方法,得到一个序列,每个单元包含三个变量,也就是一个马尔可夫链。然后跳过初始的一定数量的单元(比如100个),然后隔一定的数量取一个单元(比如隔20个取1个)。这样sample到的单元,是逼近联合分布的。
&&& 对于RBMs来说,S包含了一组可见单元和隐藏单元。然而,因为它们是条件独立的,每一个都可以执行吉布斯抽样。在这种背景下,可见单位同时采样隐藏单位的固定值。同样,隐藏单位取样同时可见。马尔可夫链的一个步骤是采取如下:
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
& 表示马尔可夫链的第n步中所有的隐含单元集,也就是说 ,例如,用概率被随机的指定为1(相对于0)同样的,用概率指定为1.如图:
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
就近似代表.
理论上,学习过程中更新的每一个参数都需要进行这样的链式收敛(感觉就是采样过程),不用说这样做代价太高,因此,就提出了集中算法来提高采样效率。主要是Contrastive Divergence(CD),PersistentContrastive Divergence(PCD).简单提下。
Contrastive Divergence (CD-k)
&&&& 主要用了两个小技巧 :
&由于我们最终是想要
(数据真正的潜在分布), 我们需要用一个训练样本来初始化马尔可夫链,在这个样本的选择时,最好选择一个样本是服从或者尽可能的接近我们最终的分布。CD算法不等待马尔可夫链收敛。采样样本经过k步的吉布斯采样后得到。在实际训练中,k = 1效果已经很好了。(不是很懂)
Persistent CD
&&&& Persistent CD使用另一种近似抽样. 它依赖于一个单独的马尔可夫链,这个马尔可夫链有一个persistent状态,也就是说不用为每一个观察样本重新生成一个马尔可夫链,这条链可以用于后续参数的更新。
RBM的基于CD的快速学习算法主要步骤如下:
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
五:Deep Belief Networks(DBNs深度信念网络)
&&&&&& DBNs是一个概率生成模型,与传统的判别模型的神经网络相对,生成模型是建立一个观察数据和标签之间的联合分布,对P(Observation|Label)和 P(Label|Observation)都做了评估,而判别模型仅仅而已评估了后者,也就是P(Label|Observation)。对于在深度神经网络应用传统的BP算法的时候,DBNs遇到了以下问题:
(1)需要为训练提供一个有标签的样本集;
(2)学习过程较慢;
(3)不适当的参数选择会导致学习收敛于局部最优解。
& & & &DBNs由多个限制玻尔兹曼机(Restricted Boltzmann Machines)层组成,一个典型的神经网络类型如图三所示。这些网络被“限制”为一个可视层和一个隐层,层间存在连接,但层内的单元间不存在连接。隐层单元被训练去捕捉在可视层表现出来的高阶数据的相关性。
& & & &首先,先不考虑最顶构成一个联想记忆(associative memory)的两层,一个DBN的连接是通过自顶向下的生成权值来指导确定的,RBMs就像一个建筑块一样,相比传统和深度分层的sigmoid信念网络,它能易于连接权值的学习。
& & & &最开始的时候,通过一个非监督贪婪逐层方法去预训练获得生成模型的权值,非监督贪婪逐层方法被Hinton证明是有效的,并被其称为对比分歧(contrastive divergence)。
& & & &在这个训练阶段,在可视层会产生一个向量v,通过它将值传递到隐层。反过来,可视层的输入会被随机的选择,以尝试去重构原始的输入信号。最后,这些新的可视的神经元激活单元将前向传递重构隐层激活单元,获得h(在训练过程中,首先将可视向量值映射给隐单元;然后可视单元由隐层单元重建;这些新可视单元再次映射给隐单元,这样就获取新的隐单元。执行这种反复步骤叫做吉布斯采样)。这些后退和前进的步骤就是我们熟悉的Gibbs采样,而隐层激活单元和可视层输入之间的相关性差别就作为权值更新的主要依据。
& & & &训练时间会显著的减少,因为只需要单个步骤就可以接近最大似然学习。增加进网络的每一层都会改进训练数据的对数概率,我们可以理解为越来越接近能量的真实表达。这个有意义的拓展,和无标签数据的使用,是任何一个深度学习应用的决定性的因素。
& & & &在最高两层,权值被连接到一起,这样更低层的输出将会提供一个参考的线索或者关联给顶层,这样顶层就会将其联系到它的记忆内容。而我们最关心的,最后想得到的就是判别性能,例如分类任务里面。
& & & &在预训练后,DBN可以通过利用带标签数据用BP算法去对判别性能做调整。在这里,一个标签集将被附加到顶层(推广联想记忆),通过一个自下向上的,学习到的识别权值获得一个网络的分类面。这个性能会比单纯的BP算法训练的网络好。这可以很直观的解释,DBNs的BP算法只需要对权值参数空间进行一个局部的搜索,这相比前向神经网络来说,训练是要快的,而且收敛的时间也少。
& & & &DBNs的灵活性使得它的拓展比较容易。一个拓展就是卷积DBNs(Convolutional Deep Belief Networks(CDBNs))。DBNs并没有考虑到图像的2维结构信息,因为输入是简单的从一个图像矩阵一维向量化的。而CDBNs就是考虑到了这个问题,它利用邻域像素的空域关系,通过一个称为卷积RBMs的模型区达到生成模型的变换不变性,而且可以容易得变换到高维图像。DBNs并没有明确地处理对观察变量的时间联系的学习上,虽然目前已经有这方面的研究,例如堆叠时间RBMs,以此为推广,有序列学习的dubbed
temporal convolutionmachines,这种序列学习的应用,给语音信号处理问题带来了一个让人激动的未来研究方向。
& & & &目前,和DBNs有关的研究包括堆叠自动编码器,它是通过用堆叠自动编码器来替换传统DBNs里面的RBMs。这就使得可以通过同样的规则来训练产生深度多层神经网络架构,但它缺少层的参数化的严格要求。与DBNs不同,自动编码器使用判别模型,这样这个结构就很难采样输入采样空间,这就使得网络更难捕捉它的内部表达。但是,降噪自动编码器却能很好的避免这个问题,并且比传统的DBNs更优。它通过在训练过程添加随机的污染并堆叠产生场泛化性能。训练单一的降噪自动编码器的过程和RBMs训练生成模型的过程一样。
参考:/view/708718
&&&&&&&&&& http://blog.csdn.net/zouxy09/article/details/8781396/
排名:千里之外
(3)(4)(6)(7)(16)(7)

我要回帖

更多关于 deep learning 的文章

 

随机推荐