关于并行计算和人工神经网络的若干观点

  • 格式:pdf
  • 大小:522.49 KB
  • 文档页数:6

关于并行计算和人工神经网络的若干观点廖添[ Tain L. ]2015年5月2日星期六前言自从几年前开始关注图形绘制渲染和图像识别方面到现在,我意识到一些关于传统串行计算方式和这几个领域之间存在的关系和矛盾,从而产生了若干观点和想法。

因此,我打算利用接下来的文字来记录和阐述我的观点。

当然,这些都只是我的个人观点和想法,也并没有其它特殊意图,只希望能够通过此文章与感兴趣之人交流意见即可。

关于并行计算从第一台计算机诞生至今,几乎所有的计算设备,用于特殊研究的计算机除外,都采用串行计算的思想对数据进行处理。

这也就是众所周知的以传统中央处理器为计算核心的相关体系结构,比如冯·诺依曼结构(称普林斯顿结构)和哈佛结构。

在这些体系中的中央处理器负责的内容非常简单,即按照先后顺序从内存中读取指令、数据然后计算出结果传回内存,或者是对其它设备按顺序下达指令和按顺序访问数据。

现今的计算机之所以如此强大是因为电信号的响应速度非常迅速,以至于中央处理器的每个指令的完成速度非常短暂,因此这个性质允许我们在可以接受的时间内完成多到难以计数的指令操作。

快速的串行运算能够胜任非常多的实际需求,而且至今为止它都工作地非常完美,我们不得不承认它是个非常实用的计算操作原理。

但人的欲望是无止境的,大概地球上最得寸进尺的生物就是人类了吧。

人们从未停下提升中央处理计算速度的脚步,也就是一直在想方设法将每个单位指令的操作时间降到工艺极限。

提升计算速度就会遇到功耗提升、降低工艺等多方面问题。

不仅如此,单靠中央处理器的速度提升无法解决缓存、内存、数据总线、硬盘速度等等其它设备的问题,从而导致整个计算机系统或结构的速度难有大幅度提升。

这时,芯片制造商意识到他们难以提供按摩尔定律增长的单核的计算速度时,他们转向为提供按摩尔定律增长的计算核数。

这也就是为什么市面上的芯片核数不断增长但单核速率却起色不大的原因。

而且人们发现一些有趣的现象,那就是双核芯片的运算速度明显高于单核芯片而且功耗也明显下降,当然这里的前提是双核芯片的每个单核的运算速度与单核芯片的运算速度是一致的。

这也就是为什么从2006年Core 系列发行开始个人计算设备全面进入多核时代的原因。

并行计算是建立在串行计算之上的计算方式,它要求计算机应该拥有多个相对独立的计算执行单元以同时工作,完成计算任务。

最简单的实例就是向量加法计算:假设有2个5维向量,对它们进行相加操作在串行和并行的计算方式中的情况如下:显而易见,并行计算在这种情况下的运算速度是串行计算的5倍,而且内存开销更低。

并行计算在处理独立问题时的优势非常明显,但是在解决具体问题时编程工作就变得非常困难。

很多问题自身内部相关联系非常大,因此计算单元容易闲置,并行计算从而退化为串行计算。

不过在矩阵运算、图形渲染、图象识别方面的工作容易发挥并行计算的性能。

个人认为,并行计算更加接近这个世界的运行本质,串行计算则贴近人对问题的认识的求解过程。

这也就是为什么很多仿真类运算在串行计算机上很难完美地发挥作用,而在并行计算机上效果惊人。

a0a1 a2 a3 a4 b0 b1 b2 b3 b4 r0 = a0 + b0 串行计算r0 r1 r2 r3 r4 a0 a1 a2 a3 a4b0 b1 b2 b3 b4r0 r1 r2r3 r4并行计算 rk = ak + bk为了更清晰地体验并行计算的优势,不妨设想一下这样的一整套系统:硬件方面,拥有1024个并行处理计算单元,每个单元的时钟频率为512MHz ,搭载512个内存单元,每个单元大小128MB 、时钟频率为512MHz ,配有100台外部储存设备,每台大小100GB ;软件方面,拥有新的并行计算的操作系统,设计新的程序设计语言和思想,具有针对并行计算开发的新数据结构和文件管理机制。

如果我们将它当作传统的串行计算机的话,它理应具有的性能是524GHz 的中央处理器、64GB 且256GHz 的内存、近10TB 的外部存储空间。

系统设计合理的情况下、该并行计算机的执行能力会远远超过同样硬件性能的串行计算机。

虽然并行计算机在处理传统问题上的编程难度较大,但随着最近的图像识别、模式识别、图形绘制和渲染、人工智能等等领域的兴起,并行计算机的性能将得到非常可观的发挥。

可以说它就是为推动以上领域发展而诞生的。

比如,一个视频渲染工作在你的传统桌面计算机上需要1个小时完成,而交给上述并行平台处理的话有望在1分钟之内甚至更短的时间内完成。

现如今具有并行计算能力的设备随处可见,大到云计算平台,小至智能手机,都具有或多或少的并行能力。

而我想要表达的并行平台是一种通用的、大众的计算平台,正如我们现在使用最多的桌面平台一样。

不仅如此,连程序设计思想也应当改变以适应并行计算,而不仅仅是加入多线程的支持来敷衍了事。

更自然、严密的程序设计思想能够轻松解决很多串行计算机下出现的多线程任务的难题,提升更多的性能以满足更复杂的用户需求。

假如硬要说串行计算机如何过渡到并行计算机的话,我认为应该让并行计算系统具有降阶为串行计算的功能,这样可以保证过渡时期所需要的兼容性。

CPUTask 1Task 2Task 3Task 4Task 5Task 6 Task 7串行系统对任务的响应MemTask 1 Task 2 Task nPU 1 PU 2 PU 3 PU kMem 1 Mem 2 Mem 3 Mem p并行系统对任务的响应总而言之,这个世界中的运动,绝大部分都是并行发生的,它们相互独立却又在一定条件下相互联系。

假如我们想要通过计算机去解决更多生活中的问题,我们必须去模仿这个世界的运行本质——并行处理,而不是一味逃避它、将它降阶为串行计算。

关于人工神经网络一直有这么一个问题困扰着许多人,也将继续困扰下去,那就是“什么是思维?”。

当然有更多的人一直在对这个问题作出自己的回答。

只不过这些回答到目前为止几乎都是无法证明,也无法证伪的观点罢了。

个人认为,若要知道什么是思维,可以尝试去制造它。

若要去制造思维,我们拥有的唯一捷径就是了解人的大脑是如何工作的。

在尝试读懂大脑的过程当中,我们可以尝试各种于其相关的抽象概念来打开自己的眼界。

或许在这样一个反复失败又反复尝试的过程中我们正在走进思维的本质。

在目前主流的模拟智能的方案中,和大脑相关最紧密的也就是人工神经网络了。

人工神经网络认为人脑的工作方式并不是和传统计算机一样,按事先编排好的一系列指令执行。

反而认为人脑最基本的工作单元(神经元)的功能十分简单,它只负责收集树突传入的信号,经过一系列限制后决定如何下传递信号。

然而,整个神经网络里上亿颗神经元相互交织连接,组建出一个极其复杂的结构,在对外界信号进行响应中表现出智能和思维。

神经网络的研究者普遍承认这样一个猜想:思维在复杂但有序的连接模式中诞生,系统的学习过程在本质上就是改变这些连接模式以适应不断改变的环境。

下面就拿感知器的一个单元来简述神经网络的基本元素——神经元的抽象结构:图中:x i 为上一个神经元的输出,y 为该神经元的输出,w i 为上个神经元到该神经元的连接强度,θ为阀值。

由此可得到由输入计算输出的公式:y =f(∑w i x i n i=1−θ)在BP 算法中f 常取:f (x )= 11+e −x对神经网络的计算可以通过矩阵计算很方便地得到我们需要的结果。

也就是说使用计算机去执行神经网络的效率在很大程度上取决于该计算机对矩阵运算执行的效率。

更难解决的问题是如何训练我们的神经网络,甚至是如何去训练它来让它学会如何训练自己。

神经网络在训练的过程中不断地更新着自己的连接模式,甚至自我拓展连接模式,这些操作都回对目前的串行计算机带来非常大的计算负担。

自然会有这样的认识产生:人脑之所以对复杂信息的处理和响应能在非常短暂的时间内完成,而相同的工作在传统串行计算机上需花费大量计算时间甚至无法完成,是因为人脑当中的大规模神经网络是由数十亿的神经元并行处理所完成的。

有些人用计算机做数字运算的速度远远超过人类的水平来反驳计算机的计算能力不如人类这一观点。

要知道,传统的计算机正式为数字计算这样的串行任务来设计的。

如果让计算机和人比试如何在各种复杂条件下快速从人群当中找出你的朋友,那么你将会非常自豪地打败任何一台强大的计算机。

为支持神经网络的运算需求,最理想的情况就是建立一套类似前文所述的完整并行计算系统。

在这样的系统上面神经网络可以利用并行计算的优势完成其在串行计算系统上很难完 ∑w i x i n i=1θ y x 1x 3x nw 1w 2w 3w n成的任务。

不仅如此,神经网络更可以成为并行程序设计当中的标准计算工具为其他更加智能的功能提供有效的支持。

就目前的情况来说,神经网络迫切需要一个标准的代码库来提供基本的编程模型,以便其他用户使用。

这样的代码库的设计应该符合面向对象思想、借鉴Application Framework而且必须体现并行计算的思想。

近来,Intel、AMD和NVidia等著名芯片制造商都在逐渐提供异构计算支持,这一动作为传统的串行计算机引入了更深的并行计算支持。

上述代码库应该利用目前的发展趋势,全面利用异构计算带来的并行性能。

假如上述代码库被建立起来,神经网络入门门槛将会大大降低,更多的人工智能爱好者将参与到神经网络的研究开发工作当作来。

不仅如此,优秀的封装结果和高效的硬件利用可以为商业软件提供令人满意的开发平台,从而催生更多的商业人工智能产品发行到市场。

总结我的观点和想法可以简单总结为如下几点:□并行计算思想应该被更多地应用在解决通用问题上;□可以为并行计算建立新的程序设计思想和语言;□可以投入更多的精力用于通用的并行计算机,正如现今桌面计算机一样;□并行计算机可以提供退化为串行计算的功能提供对传统操作系统的兼容性;□可以利用异构计算提高矩阵计算能力;□人工神经网络需要一个优秀的标准代码库;□人工神经网络必须和并行计算一起发展;。