社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

光子是深度学习的未来

IEEE电气电子工程师 • 2 年前 • 257 次点击  

减少神经网络的能量需求可能需要使用光进行计算。
不久以前,许多任务还需要靠人类直觉才能完成,如今却都使用了计算机。计算机日常可用于识别图像中的物体、转录语音、翻译语言、诊断疾病、玩复杂的游戏和驾驶汽车。
实现这些惊人发展的技术称为“深度学习”,指的是被称为人工神经网络的数学模型。深度学习是机器学习的一个分支,而机器学习是计算机科学的一个分支,它建立在对复杂模型进行数据拟合的基础上。
虽然机器学习已经存在很久了,但是深度学习最近才发展起来。其原因主要是计算能力越来越广泛可用且不断增长,易于获取和用于神经网络训练的数据数量迅速增长。
千禧年之交,计算能力开始飞速提高,图形处理单元(GPU)也开始用于非图形计算,在过去10年里,这一趋势变得越来越普遍,而深度学习的计算需求增长得更快。这种动态促使工程师去开发专门针对深度学习的电子硬件加速器,谷歌的张量处理单元(TPU)就是一个典型的例子。
在这里,我将介绍一种与众不同的方法来解决这个问题,即使用光学处理器和光子而不是电子来进行神经网络计算。为了理解光学器件在其中所起的作用,我们需要了解目前计算机是如何进行神经网络计算的。因此,我会介绍它背后的原理。
几乎无一例外,人工神经元是用某种数字电子计算机上运行的特殊软件构建的。该软件会为给定的神经元提供多个输入和一个输出。每个神经元的状态取决于其输入的加权和,并对其应用一个非线性函数,称为“激活函数”。然后,结果(也就是这个神经元的输出)会变成其他神经元的输入。
为了提高计算效率,这些神经元会被分成不同的层,神经元只与相邻层的神经元相连。相较于允许任意两个神经元连接,这种安排的好处是它可以使用线性代数的某些数学技巧来加速计算。
虽然这些线性代数计算不是深度学习的全部内容,但是它们是深度学习中计算要求最高的部分,特别是随着网络规模的增长,计算需求也会增长。对于训练(确定对每个神经元的输入应用多少权重的过程)和推理(神经网络将提供期望的结果时)来说尤其如此。
那么,这些神秘的线性代数计算是什么?其实并不复杂。它们涉及矩阵运算,矩阵只是数字形成的矩形阵列,也可以将其理解为电子表格,但其中没有典型Excel文件的描述性列标题。
这是个好消息,因为现代计算机硬件已针对矩阵运算进行了很好的优化,而早在深度学习普及之前,矩阵运算就已经成为高性能计算的主要内容了。归根结底,深度学习的相关矩阵计算是大量的乘法和累加运算,即将数对相乘,并将它们的乘积相加。
这些年来,深度学习需要的乘法和累加运算越来越多。以LeNet(一种开创性的深度神经网络,主要用于图像分类)为例,1998年,它被证明在识别手写字母和数字方面优于其他机器技术。不过,到了2012年,乘法和累加运算处理量约为LeNet的1600倍的神经网络AlexNet,已经能够识别图像中成千上万种不同类型的物体。
从最初成功的LeNet到AlexNet,计算性能提升了约11倍。在这14年中,摩尔定律是推动性能提高的主要原因。在摩尔定律逐渐失势的情况下,如何继续保持这种趋势成为了一项挑战。通常的解决方案是简单地投入更多的计算资源以及时间、金钱和精力。
因此,如今的大型神经网络训练往往有着显著的环境足迹。比如,2019年的一项研究发现,某种用于自然语言处理的深度神经网络训练,其排放的二氧化碳是在汽车寿命期内驾驶汽车所排放二氧化碳的5倍。

无疑,数字电子计算机的进步促进了深度学习的蓬勃发展,但这并不意味着进行神经网络计算的唯一途径就是使用这种机器。几十年前,数字计算机还比较原始的时候,就有工程师用模拟计算机来解决有难度的计算了。随着数字电子技术的进步,那些模拟计算机也被淘汰了。不过,现在也许是时候再次采用这种策略了,特别是可以用光学方法完成模拟计算时。

人们早就知道,相较于电线,光纤能够支持更高的数据速率。因此从20世纪70年代末开始,所有的长途通信线路都采用了光纤。从那时起,光纤数据链路开始在越来越短的距离范围内取代铜线,直到数据中心的机到机通信。光纤数据通信速度更快,耗电更少。光计算也具有同样的优势。
不过,数据通信和与数据计算有很大的区别。模拟光学方法因此遇到了障碍。传统计算机以晶体管为基础,晶体管是高度非线性的电路元件,这意味着它们的输出与输入不成正比,至少在用于计算时是这样。非线性控制着晶体管的开和关,使它们变成逻辑门。这种切换很容易通过电子器件实现,因为对它们来说非线性并不稀奇。然而光子遵循的是麦克斯韦方程组,它们是线性的,这意味着光学设备的输出通常与其输入成正比。
我们的诀窍是利用光学设备的线性来做深度学习最依赖的事情——线性代数。
为了说明如何实现这一点,我会介绍一种光子器件,它在与一些简单的模拟电子器件耦合时,可以将两个矩阵相乘。这种乘法可以把一个矩阵的行和另一个矩阵的列结合起来。更准确地说,它能够将这些行和列中的数对相乘,并将它们的乘积相加,这就是前文所述的乘法和累加运算。2019年,我和麻省理工学院的同事发表了一篇论文对此进行了说明。目前我们正在制作这样一个光学矩阵乘法器。
这种器件中的基本计算单元是一个名为“分束器”的光学元件。虽然它的组成实际更加复杂,但我们可以把它想象成一个45度角的半镀银镜。如果从侧面向其发射一束光,分束器会让一半的光直接穿过它,而另一半则从呈角度放置的镜子反射出去,与入射光呈90度角反弹。
现在向分束器投射与第一束垂直的第二束光,这样它就会射到角度镜的另一边。同样,第二束光的一半将传输出去,另一半则以90度被反射出去。两道输出光束将与第一道光束的两个输出相结合。所以,分束器会有两个输入和两个输出。
要使用这个器件进行矩阵乘法,我们需要生成两道光束,使其电场强度与想要相乘的两个数成正比。我们可以把这两个场强设为x和y。把这两束光射进分束器,分束器将把它们结合起来,并产生两个电场值为(x+y)/和(x-y)/的输出。
除了分束器,这款模拟乘法器还需要两个简单的电子元件(光电探测器)来测量两道输出光束。不过,它们不会测量这些光束的电场强度。它们测量的是光束的功率,该功率与电场强度的平方成正比。
为什么这种关系很重要?要理解这一点,我们需要一些代数知识,但不会超出高中知识范围。回想一下,当我们对(x+y)/进行平方运算时,将得到(x2+2xy+y2)/2对(x-y)/进行平方运算时,将得到(x2-2xy+y2)/2用前者减去后者,得到2xy。现在来思考这个简单的数学运算的意义。它意味着,如果我们将一个数字编码为一束具有一定强度的光,将另一个数字编码为另一束具有另外一种强度的光,通过这样一个分束器发射它们,用光电探测器测量两个输出,并在它们相加之前将其中一个电信号变正为负,我们将得到一个与两个数字的乘积成正比的信号。

在这种描述中,似乎每一道光束都必须保持稳定。事实上,我们可以暂时对两道输入光束中的光作脉冲处理,然后测量输出脉冲。更好的办法是,我们可以把输出信号送入一个电容器,电容器会在脉冲持续的时间内积累电荷。然后我们可以再次对输入光进行脉冲处理,持续时间与上次相同,这次会编码两个新数字进行乘法运算。它们的乘积会给电容器增加更多电荷。我们可以根据需要多次重复这个过程,每次执行另一套乘法和累加运算。

以这种方式使用脉冲光,我们可以快速执行许多这样的运算。其中最耗能量的部分是读取电容器上的电压,这需要一个模数转换器。不过,不需要在每次脉冲后都这么做,可以等到N次脉冲结束。这意味着该设备可以使用同一份能量执行N次乘法和累加运算以读取结果,无论N是多少。这里的N对应的是神经网络中每层的神经元数量,轻轻松松可以达到成千上万个。所以这种策略消耗的能量非常少。
有时我们也可以在输入端节省能源。因为同一个值经常被用作多个神经元的输入。不需要多次将这个数字转换成光(每次都会消耗能量),只需转换1次即可,而且所产生的光束可以分成许多通道。这样一来,输入转换的能源成本就可以分摊到许多运算中。
将光束分成多个通道只需要一个透镜,但要把透镜装到芯片上却很难。因此,我们正在开发的光学神经网络计算设备很可能最终会变成一种混合设备,它能够将高度集成的光子芯片与单独的光学元件结合在一起。

除了我在上文中介绍的我和同事一直在追求的策略,还可以使用其他方法来解决光学问题。另一个有望成功的方案以马赫-曾德尔(Mach-Zehnder)干涉仪为基础,通常包括两个分束器和两面全反射镜。它也可以用于以光学方式进行矩阵乘法。两家有麻省理工学院背景的初创公司Lightmatter和Lightelligence正在开发以这种方法为基础的光学神经网络加速器。Lightmatter已经使用自己制造的光学芯片建造了一台原型机。该公司希望在今年晚些时候开始销售使用这种芯片的光学加速板。

另一家使用光学技术进行计算的初创公司是Optalysis,该公司希望复兴一个较为古老的概念。早在20 世纪60年代,光学计算的最初用途之一就是处理合成孔径雷达数据。它面临的一项重要挑战是对测量数据应用一种名为“傅里叶变换”的数学运算。当时的数字计算机难以处理傅里叶变换。即便是现在,对大量数据应用傅立叶变换也需要进行密集的计算。不过,只需要一个透镜,我们就可以通过光学方式进行傅里叶变换,多年来,工程师一直在使用透镜处理合成孔径数据。Optalysis希望改进该方法并实现更广泛的应用。

此外还有一家名为Luminous的公司,该公司来自普林斯顿大学,正在致力于创建一种脉冲神经网络,该神经网络以其“激光神经元”为基础。脉冲神经网络更形象地模仿了大脑等生物神经网络的工作方式,可以使用很少的能量进行计算。Luminous公司的硬件仍处于早期开发阶段,但将脉冲和光学这两种节能方法结合起来的技术,其前景相当令人兴奋。
当然,其中还有许多技术挑战需要克服。其中一项是提高模拟光学计算的精度和动态范围,它们远不及数字电子器件所能达到的水平。因为这些光处理器受到各种噪声源的影响,而且用于数据输入输出的数模转换器和模数转换器的精度有限。实际上,光学神经网络的工作精度很难超过8到10位。虽然存在8位电子深度学习硬件(谷歌TPU就是一个很好的例子),但这个行业(特别是神经网络训练)需要更高的精度。
此外,将光学元件集成到芯片上也存在困难。因为这些元件的尺寸有几十微米,无法像晶体管那样进行紧密的封装,因此这会大大增加所需芯片面积。2017年,麻省理工学院的研究人员在演示这种方法时,使用了一块边长为1.5毫米的芯片。虽然人们还可以制作更大的芯片,但即使是最大的芯片也只有几平方厘米,这就限制了可以用这种方式并行处理的矩阵的大小。
在计算机架构方面,光子学研究人员对许多其他问题都倾向于避而不谈。不过,可以确定的是,光子学至少在理论上有可能将深度学习的速度提高几个数量级。
基于目前各种元件(光调制器、探测器、放大器、模数转换器)可应用的技术,我们有理由认为,神经网络计算的能源效率可以达到当前电子处理器的1000倍。如果对新兴光学技术做出更大胆的假设,这个系数可能高达100万。由于电子处理器的功率有限,这些能源效率的提高很可能会转化为相应的速度提升。
许多模拟光学计算概念已经有几十年的历史了,有些甚至早于硅计算机。光学矩阵乘法方案乃至光学神经网络方案的首次演示发生都在20世纪70年代,但这种方法并没有流行起来。这次会有所不同吗?很有可能,原因有三。
首先,深度学习现在不是一种学术珍品,而是真的很有用。第二,我们无法仅仅依靠摩尔定律来继续完善电子器件。最后,我们有了一项前几代所没有的新技术——集成光子学。这些因素表明,光学神经网络这次会真正到来,而这种计算的未来可能确实是光子。 
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/122057
 
257 次点击