的神经。每个神经部分有指向性,每一个神经元会指向下一层的节点。节点是分层的,每个节点指向上一层节点。同层节点没有连接,并且不能越过上一层节点。每个弧上有一个值,我们通常称之为”权重“。通过权重就可以有一个公式计算出它们所指的节点的值。这个权重值是多少?我们是通过训练得出结果。它们的初始赋值往往通过随机数开始,然后训练得到的最逼近真实值的结果作为模型,并可以被反复使用。这个结果就是我们说的训练过的分类器。节点分成输入节点和输出节点,中间称为隐层。简单来说,我们有数据输入项,中间不同的多个层次的神经网络层次,就是我们说的隐层。之所以在这样称呼,因为对我们来讲这些层次是不可见的。输出结果也被称作输出节点,输出节点是有限的数量,输入节点也是有限数量,隐层是我们可以设计的模型部分,这就是最简单的神经网络概念。如果简单做一个简单的类比,我想用四层神经网络做一个解释。左边是输入节点,我们看到有若干输入项,这可能代表不同苹果的RGB值、味道或者其它输入进来的数据项。中间隐层就是我们设计出来的神经网络,这个网络现在有不同的层次,层次之间权重是我们不断训练获得一个结果。最后输出的结果,保存在输出节点里面,每一次像一个流向一样,神经是有一个指向的,通过不同层进行不同的计算。在隐层当中,每一个节点输入的结果计算之后作为下一层的输入项,最终结果会保存在输
出节点上,输出值最接近我们的分类,得到某一个值,就被分成某一类。这就是使用神经网络的简单概述。除了从左到右的形式表达的结构图,还有一种常见的表达形式是从下到上来表示一个神经网络。这时候,输入层在图的最下方,输出层则在图的最上方。从左到右的表达形式以Andrew Ng和LeCun的文献使用较多。而在 Caffe框架里则使用的则是从下到上的表达。简单来说,神经网络并不神秘,它就是有像图,利用图的处理能力帮助我们对特征的提取和学习的过程。2006年Hinton的那篇著名的论文中,将深度学习总结成三个最重要的要素:计算、数据、模型。有了这三点,就可以实现一个深度学习的系统。 程序员需要的工具箱 对于程序员来说,掌握理论知识是为了更好的编程实践。那就让我们看看,对于程序员来说,着手深度学习的实践需要准备什么样的工具。硬件从硬件来讲,我们可能需要的计算能力,首先想到的就是CPU。除了通常的CPU架构以外,还出现了附加有乘法器的CPU,用以提升计算能力。此外在不同领域会有DSP的应用场景,比如手写体识别、语音识别、等使用的专用的信号处理器。还有一类就是GPU,这是一个目前深度学习应用比较热门的领域。最后一类就是FPGA(可编程逻辑门阵列)。这四种方法各有其优缺点,每种产品会有很大的差异。相比较而言CPU虽然运算能力弱一些,但是擅长管理和调度,比如读取数据,管理文件,人机交互等,
工具也丰富。DSP相比而言管理能力较弱,但是强化了特定的运算能力。这两者都是靠高主频来解决运算量的问题,适合有大量递归操作以及不便拆分的算法。GPU 的管理能力更弱一些,但是运算能力更强。但由于计算单元数量多,更适合整块数据进行流处理的算法。FPGA在管理与运算处理方面都很强,但是开发周期长,复杂算法开发难度较大。就实时性来说,FPGA是最高的。单从目前的发展来看,对于普通程序员来说,现实中普遍采用的计算资源就还是是CPU以及GPU的模式,其中GPU是最热门的领域。为什么是GPU?简单来说就是性能的表现导致这样的结果。随着CPU的不断发展,工艺水平逐步提高,我们开始担心摩尔定律会不会失效。但是GPU的概念横空出世,NVIDIA 的CEO 黄仁勋得意的宣称摩尔定律没有失效。我们看到最近几年,GPU处理能力的提升是非常惊人的。今年发布的Nvidia P100的处理能力已经达到令人恐怖的效果。与CPU处理能力做一个对比,虽然CPU的主频要远远高过GPU的主频,例如目前GPU在主频在0.5GHz到1.4gHz,处理单元达到3584个;而且最常见的CPU,比如Intel的处理器,大约只有20几个处理单元。这种差别是仅仅在处理单元的数量上就已经存在了巨大的差别。所以深度学习具备大量处理能力计算要求的情况下,GPU无疑具有非常强大的优势。GPU并不是完全完美的方案!对于程序员来讲,我们也应该了解到它天生的
不足。相比CPU,它仍然存在许多的局限。首先,比如:这种技术需要绑定特定的硬件、对编程语言的有一定的限制。简单来说,开发的灵活性不如CPU。我们习惯的CPU已经帮助我们屏蔽掉处理了许多的硬件上细节问题,而GPU则需要我们直接面对这些底层的处理资源进行编程。第二,在GPU领域不同厂商提供了不兼容的框架。应用的算法需要针对特定的硬件进行开发、完善。这也意味着采用了不同框架的应用对于计算环境的依赖。第三,目前GPU是通过PCIe外部配件的方式和计算机集成在一起。众所周知,PCIe连接的频宽是很大的瓶颈,PCIe 3.0 频宽不过7.877 Gbit/s。考虑到计算需求较大的时,我们会使用显卡构成GPU的集群(SLI),这个频宽的瓶颈对于性能而言就是一个很大的制约。最后,就是有限的内存容量的限制。现在Intel新推出的E7处理器的内存可以达到2TB。但是对于GPU而言,即使是Nvidia 的 P100 提供有16GB的内存,将四块显卡构成SLI(Scalable Link Interface)也只有64GB的显存容量。如果你的模型需要较大的内存,恐怕就需要做更好的优化才可以满足处理的需要。这些都是GPU目前的缺陷和不足。我们在着手使用GPU这种技术和资源的时候一定要意识到这一点。GPU除了硬件上具备了一定的优势以外,Nvidia还为程序员提供了一个非常好的开发框架-CUDA。利用这个编程框架,我们通过简单的程序语句就可以访问GPUs中的指令
集和并行计算的内存。对于这个框架下的并行计算内存,CUDA提供了统一管理内存的能力。这让我们可以忽略GPU的差异性。目前的编成接口是C语言的扩展,绝大多数主流编程语言都可以使用这个框架,例如C/C++、Java、Python以及.NET 等等。今年的中秋节假期,我为自己DIY了一台深度学习工作站。起因是我买了一块GeForce GTX 1070显卡,准备做一些深度学习领域的尝试。因为我的老的电脑上PCIe 2.0 的插槽无法为新的显卡供电。不得已之下,只好更新了全部设备,于是就组装了一台我自己的深度学习工作站。这个过程是充满挑战的,这并不仅仅是需要熟悉各个部件的装配。最重要的是要考虑很多细节的的搭配的问题。比如说供电的问题,要计算出每个单元的能耗功率。这里面又一个重要的指标就是TDP( Thermal Design Power)。Intel 6850K的TDP值是140W,1070显卡的值是150W。于是,系统搭配的电源就选择了650W的主动电源。其次,如果我们用多块显卡(SLI),就必须考虑到系统频宽的问题。普通的CPU和主板在这方面有很大局限。就我的最基本的需求而言我需要的最大的PCI Expres Lanes 是 40。这样算下来,Intel i7-6850K就是我能找到最便宜而且可以达到要求的CPU了。我在这两天的时间里,走了很多弯路,所以就想跟大家分享一下我的经验。第一,Linux在显卡驱动的兼容性方面有很多问题。大多数Linux 分发版本提供的 Nvidia显
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库程序员为什么要学深度学习?(3)在线全文阅读。
相关推荐: