存储器内矩阵乘法及其在神经网络中的使用的制作方法
未命名
10-08
阅读:65
评论:0

存储器内矩阵乘法及其在神经网络中的使用
1.本技术是2017年3月23日提交的申请号为201780025209.5的同名专利申请的分案申请。
2.相关申请的交叉引用
3.本技术要求享有于2016年3月23日提交的美国临时专利申请62/312,162的优先权和权益,该申请通过引用并入本文。
技术领域
4.本发明总体上涉及存储器设备,并且具体地涉及关联存储器设备中的矩阵乘法。
背景技术:
5.矩阵乘法是在以下许多领域中的计算过程和算法中执行的常见任务:例如,图论、图形、人工智能、数据挖掘、大数据计算、预测分析、深度学习、神经网络等。矩阵乘法过程是复杂的过程并且消耗大量的计算资源。
6.人工神经网络是这样的计算范式:其受大脑处理信息的方式启发,旨在以与人类大脑相同的方式解决问题。大脑由大量彼此高度互连的细胞组成。使用通过细胞之间的专门结构的(化学的或电的)信号在细胞之间中继大脑中的信息,这使得信号能够在细胞之间中继(称为突触)。
7.人工神经网络数学地建模并用于根据特定输入提供输出,模仿大脑中的流动。人工神经网络的数学模型包括通过多个加权链接(表示连接大脑的细胞的突触)连接的多个节点(表示大脑的细胞)。节点和链接在数学上由矩阵和向量表示,并且激活人工神经网络要求大量的矩阵运算。
8.如果a是n
×
m被乘数矩阵并且b是m
×
p乘数矩阵,则其乘积矩阵ab是n
×
p输出矩阵,其中a的行的m个条目乘以b的列的m个条目并且求和以产生ab的条目,如等式1描述的:
[0009][0010]
值得注意的是,为了执行矩阵乘法,被乘数矩阵中的列的数量m必须等于乘数矩阵的行的数量m。
[0011]
向量是仅具有一行的特殊类型的矩阵,即,向量可以被认为n
×
m矩阵,其中n=1。向量和矩阵的乘法自然地使用与上文中的等式1中描述的相同的公式。当被乘数是1
×
p向量并且乘数是p
×
m矩阵时,乘法的结果是1
×
m向量。
[0012]
一般矩阵乘法的朴素复杂度是o(mpn)。当被乘数矩阵和乘数矩阵两者都是平方矩阵(n
×
n)时,计算复杂度可以是o(n3),而当被乘数是向量(1
×
m)并且乘数是矩阵(m
×
n)时,计算的复杂度可以是o(mn)。
[0013]
现在参考的图1示出了被乘数向量i(1
×
3)、乘数矩阵h(3
×
3)和结果向量z(1
×
3)的示例。被乘数向量i具有三个列c0、c1和c2,分别存储值i0、i1和i2。乘数矩阵h具有三个列c0、c1和c2以及三个行r0、r1和r2。存储在矩阵h中的值各自用两位下标j和k标记,其中j代
表行,并且k代表列。例如,值h
21
存储在行r2和列c1中。向量z存储乘法的结果z0、z1和z2。在该图中,向量i的每个比特具有不同的图案,矩阵h的每一行具有不同的灰色阴影,而向量z的比特没有阴影且没有图案。
[0014]
乘法结果向量z根据等式1计算。由于向量只有一行,下标符号可以省略行号(不是使用i
00
,符号将是i0),并且针对该特定示例对等式1的扩展可以表示为以下三个等式:等式1-0、等式1-1和等式1-2。
[0015]
z0=i0×h00
+i1×h10
+i2×h20
等式1-0
[0016]
z1=i0×h01
+i1×h11
+i2×h21
等式1-1
[0017]
z2=i0×h02
+i1×h12
+i2×h22
等式1-2
[0018]
在现在参考的图2中示出了在向量-矩阵乘法期间所需的乘法的视觉表示。来自被乘数向量i的每个操作数(比特)需要乘以矩阵h的整行(即,乘以来自该行的每个操作数(比特))。注意,所有乘法结果之间的总和运算没有在图2中示出。操作数之间的乘法通过连接线可视化,并且可以认识到操作数之间的连接的数量是m
×
n,并且在该示例中,连接的数量为3
×
3=9。
[0019]
矩阵乘法可以被视为重复向量乘法若干次,针对被乘数矩阵的每一行一次。
技术实现要素:
[0020]
根据本发明的优选实施例,提供了一种用于关联存储器阵列的方法。该方法包括:将矩阵的每个列存储在关联存储器阵列的相关联的列中,其中,矩阵的行j中的每个比特被存储在阵列的行r-矩阵-行-j中;并且将向量存储在每个相关联的列中,其中,来自向量的比特j被存储在阵列的r-向量-比特-j行中。该方法还包括同时激活向量-矩阵行对r-向量-比特-j和r-矩阵-行-j,以并发地接收所有相关联的列上的布尔函数的结果,使用相关联的列上的结果来计算向量-矩阵行对之间的乘积,并且将乘积写入阵列中的r-乘积-j行。
[0021]
进一步地,根据本发明的优选实施例,阵列包括多个分区,并且该方法还包括存储多个向量-矩阵对,每个对在分区中的一个分区中,并且并发地激活分区中的每个分区中的向量-矩阵对。
[0022]
此外,根据本发明的优选实施例,该方法还包括针对每个向量-矩阵行对重复同时激活、使用以及写入,并且将所有r-乘积行的值相加以计算向量和矩阵的叉积。
[0023]
根据本发明的优选实施例,提供了一种用于关联存储器阵列的关联方法的方法。该方法包括将矩阵的每个行j存储在存储器阵列中的乘数行r-矩阵-行-j的单元中,将向量的每个比特j的值存储在存储器阵列中的相关联的被乘数向量行r-向量-比特-j的所有单元中,其中,r-矩阵-行-j行中的每个单元通过对应的比特线blj而被连接到r-向量-比特-j行中的单元,并且同时激活向量-矩阵行对r-向量-比特-j和r-矩阵-行-j,以并发地接收所有比特线blj上的布尔函数的结果。
[0024]
此外,根据本发明的优选实施例,该方法还包括使用对应的比特线blj上的值来计算被乘数行r-向量-比特-j与乘数行r-矩阵-行-j之间的乘法运算的乘积。
[0025]
更进一步地,根据本发明的优选实施例,该方法还包括将乘积写入存储器阵列中的乘积行r-乘积-j。
[0026]
此外,根据本发明的优选实施例,该方法还包括针对每个向量-矩阵行对重复同时
激活、使用以及写入,并且激活r-乘积-j行以计算每个比特线的r-乘积-j行的总和。
[0027]
此外,根据本发明的优选实施例,该方法还包括将总和写入存储器阵列中的总和行。
[0028]
更进一步地,根据本发明的优选实施例,向量是神经网络的输入层,矩阵是人工网络的隐藏层,并且总和是人工网络的输出层。
[0029]
根据本发明的优选实施例,还提供了一种用于神经网络的存储器内计算的方法,神经网络具有以矩阵布置的权重。该方法包括预先将矩阵存储在相关联的存储器设备中,接收以向量布置的输入,并且将输入存储在存储器设备中,并且在存储器内使用输入和权重来计算网络的输出。
[0030]
此外,根据本发明的优选实施例,对输入的存储包括将输入的副本存储在与预先存储的权重的列相同的列中。
[0031]
根据本发明的优选实施例,还提供了一种用于关联存储器阵列的方法。该方法包括在分开的相关联的行上将来自被乘数矩阵和乘数矩阵的每个相关联的被乘数比特和乘数比特存储在多个列中的一个列中,其中,列上的单元通过比特线而被连接,激活相关联的被乘数行和乘数行以使用在比特线上生成的布尔值来计算乘法的结果,将结果写入连接到比特线的乘积行中的单元,其中,与被乘数矩阵的行和乘数矩阵的列相关联的多个乘积行通过全局比特线而被连接。该方法还包括激活多个乘积行,使用在全局比特线上生成的布尔结果来计算所有乘积行的总和,并且将总和写入总和行。
[0032]
根据本发明的优选实施例,还提供了一种用于存储器内计算的装置。该装置包括以行和列布置的存储器阵列。存储器阵列包括:多个乘数行,乘数行中的每个乘数行用于存储乘数矩阵的行;多个被乘数行,被乘数行中的每个被乘数行用于存储被乘数向量的比特的复制物,其中,被乘数行的单元通过乘积比特线而被连接到乘数行的单元。该装置还包括:多个乘积行,乘积行中的每个乘积行用于将乘法结果存储在单元中,其中,乘积行的单元被连接到乘积比特线,并且被连接到连接多个乘积行的总和比特线;以及总和行,总和行中的每个单元用于存储连接到总和比特线的所有乘积单元的总和。该装置还包括处理器,用于并发地激活被乘数行和乘数行,以并发地将乘法结果写入乘积行,以激活乘积行并且将总和结果写入总和行。
[0033]
此外,根据本发明的优选实施例,乘数行的行和被乘数行的相关联的行是相邻的行。
[0034]
进一步地,根据本发明的优选实施例,乘积行与相关联的乘数行和被乘数行中的一个相邻。
[0035]
更进一步地,根据本发明的优选实施例,乘积比特线和总和比特线是相同的比特线。
[0036]
并且更进一步地,根据本发明的优选实施例,该装置还包括控制器,用于一次激活一对相关联的被乘数行和乘数行,并且将乘法结果写入相关联的乘积行。
[0037]
更进一步地,根据本发明的优选实施例,存储器阵列被划分成多个分区。
[0038]
此外,根据本发明的优选实施例,被乘数行和乘数矩阵的对应行被存储在专用分区中。
[0039]
另外,根据本发明的优选实施例,多个被乘数行和乘数矩阵的对应行被存储在专
用分区中。
[0040]
根据本发明的优选实施例,还提供了一种用于存储器内计算的装置。该装置包括以行和列布置的存储器阵列。存储器阵列包括:多个乘数行,乘数行中的每个乘数行用于存储乘数矩阵的行;多个被乘数行,被乘数行中的每个被乘数行用于存储被乘数矩阵的行的比特的复制物,其中,被乘数行的单元通过乘积比特线而被连接到乘数行的单元。该装置还包括:多个乘积行,乘积行中的每个乘积行用于将乘法结果存储在单元中,其中,乘积行的单元被连接到乘积比特线,并且被连接到连接多个乘积行的总和比特线;多个总和行,总和行中的每个总和行用于存储连接到总和比特线的所有乘积单元的总和,其中,总和行的单元被连接到乘积比特线。该装置还包括处理器,用于并发地激活被乘数行和乘数行,以并发地将乘法结果写入乘积行,以激活乘积行并且将总和结果写入总和行。
[0041]
此外,根据本发明的优选实施例,存储器阵列被划分成多个分区。
[0042]
此外,根据本发明的优选实施例,被乘数矩阵的每个行被存储在专用分区中。
附图说明
[0043]
在说明书的结论部分中特别指出并清楚地要求保护被视为本发明的主题。然而,通过参考以下详细描述,当结合附图阅读时,可以最好地关于组织和操作方法以及其目的、特征和优点来理解本发明,在附图中:
[0044]
图1是被乘数向量、乘数矩阵和结果向量的示意图;
[0045]
图2是向量-矩阵乘法期间的乘法运算的示意性视觉表示;
[0046]
图3是根据本发明的优选实施例构造和操作的关联存储器设备的示意图;
[0047]
图4是根据本发明的优选实施例的向量-矩阵乘法的操作数的存储器布置的示意图,用于理解图3的设备的操作;
[0048]
图5是向量矩阵乘法过程中不同参与者在存储器中的放置的示意图,用于理解图3的设备的操作;
[0049]
图6a、图6b、图6c和图6d是关联存储器阵列的分区中的单元的值的详细示意图,针对一行中的每种存储类型一个图,用于理解图5中描述的数据的源;
[0050]
图7是关联存储器阵列的单个分段中的行指派的替代实施例的示意图;
[0051]
图8是根据本发明的优选实施例构造和操作的多分段相关存储器阵列中的行指派的示意图;
[0052]
图9是根据本发明的优选实施例构造和操作的关联存储器阵列中的人工神经网络计算的示意图;
[0053]
图10是根据本发明的优选实施例构造和操作的用于将向量存储在关联存储器阵列中的恒定复杂度过程的示意图;以及
[0054]
图11是根据本发明的优选实施例构造和操作的使用关联存储器阵列的神经网络扩展能力的示意图。
[0055]
应认识到,为了说明的简单和清楚起见,附图中所示的元素不一定按比例绘制。例如,为了清楚起见,元素中的一些元素的尺寸可能相对于其他元素被夸大。此外,在认为适当的情况下,可以在附图中重复附图标记以指示对应或类似的元素。
具体实施方式
[0056]
在以下详细描述中,阐述了许多具体细节以便提供对本发明的透彻理解。然而,本领域技术人员将理解,可以在没有这些具体细节的情况下实践本发明。在其他实例中,没有详细描述公知的方法、过程和组件,以免模糊本发明。
[0057]
申请人已经意识到,可以使用关联存储器设备在存储器中更高效地执行矩阵乘法,例如,在2009年7月16日提交的美国专利8,238,173和2016年5月5日提交的美国专利9,558,812中描述的关联存储器,这两个专利都转让给本发明的共同受让人,并且通过引用并入本文。
[0058]
如在上面提到的专利中所讨论的,可以在每个计算周期中访问多个行,产生执行多个单元操作的能力,例如,多单元写入操作和多单元计算。
[0059]
现在参考的图3示出了根据本发明的优选实施例构造和操作的关联存储器设备300。关联存储器设备300可以包括存储器阵列310、多行解码器320、感测电路330、选择性写入单元340和控制器350。
[0060]
存储器阵列310可以是任何合适的存储器阵列,易失性或非易失性的、破坏性或非破坏性的,例如,ram、dram、sram、re-ram、zram、mram、忆阻器等,并且可以包括被设计用于仅存储数据而无需附加电路的纯存储器单元。根据本发明的优选实施例,存储器阵列310可以是单个存储器阵列,或者可以划分成两个或更多个分区,其中的每个分区包括以行和列布置的多个单元,行和列中可以存储数据。对于图3的示例,假设存储器阵列310被划分成两个分区:分区315和分区316。来自不同源的数据以独特的方式存储在分区315的行中。标记为r-向量-比特的行可以存储来自向量的数据,标记为r-矩阵-行的行可以存储来自矩阵的数据,标记为r-总和的行可以存储在存储器中计算的总和,并且标记为临时的行可以存储在存储器中计算的中间值,这些中间值可能是其他计算所需的。作为示例,分区315包括3个r-向量-比特类型的行(r-向量-比特-0、r-向量-比特-1和r-向量-比特-2),3个r-矩阵-行类型的行(r-矩阵-行-0、r-矩阵-行-1和r-矩阵-行-2),1个r-sum类型的行以及多个临时类型的行。可以认识到,图示中的行和列的数量仅仅是用于说明的示例,并且分区315中的行和列的数量可以完全不同。未指定分区316中的行的分配。
[0061]
多行解码器320可以是能够并发地激活多个行的任何合适的行解码器。行解码器320可以一次激活存储器阵列310的两个行或更多个行。同时可以激活存储器阵列310的所有列,在执行读取操作时在阵列310的所有列上提供并发计算,并且在执行写入操作时提供并发写入操作。
[0062]
感测电路330可以由任何合适的感测电路形成,并且可以能够感测列的任何比特线连接单元上的值,并且可以提供在每个列的所选择的单元之间执行的布尔函数的结果。
[0063]
选择性写入单元340可以选择将哪些感测到的列写回到存储器阵列310并且能够并发地从多个感测电路组件写入值。
[0064]
控制器350可以向多行解码器320指示针对当前操作(读取或写入)要激活哪些行,并且还可以向选择性写入单元340指示从哪些列将感测电路330的输出写回到存储器阵列310中。在选择性写入操作中数据可以被写入的行可以与先前选择的行在相同的分区中或在不同的分区中。
[0065]
可以认识到,由于多读取操作,计算发生在存储器阵列内。因此,关联存储器设备
300可以在阵列310的所有列上并发地实现任何布尔运算,从而导致大量的就地并行计算。
[0066]
申请人已经意识到,将向量和矩阵数据存储在存储器阵列310中的特定位置可能对向量-矩阵计算的复杂度具有深远影响。如下文描述的,在本发明中,向量-矩阵乘法的计算复杂度可以是线性的,并且甚至是常数。
[0067]
根据本发明的优选实施例,特定向量-矩阵计算的操作数可以存储在连接到相同比特线的单元中,即,在一列中,如下文描述的,使得并发地激活若干行可以提供向量-矩阵乘法的结果,该结果可以进一步写回存储器阵列310。
[0068]
现在参考图4,其示出了来自被乘数向量i的操作数以及来自乘数矩阵h的操作数在存储器阵列310中的存储器布置。根据本发明的优选实施例,向量i作为列(而不是行)存储在用于存储矩阵h的存储器阵列310的每个且每一个列中,使得向量i的比特i0重复地存储在存储器阵列310的行的列c0、c1和c2中,比特i1重复地存储在第二行中,并且比特i2重复地存储在第三行中。可以认识到,来自向量i的操作数和来自每次计算中使用的矩阵h的操作数全部存储在连接到相同比特线的相同列中:列c0中的bl0,列c1中的bl1以及c2中的bl2。如下文进一步描述的,还可以使用用于中间存储和最终结果的附加行。可以认识到,来自向量i的单个操作数存储在若干位置以优化计算,代价是一些额外的存储。
[0069]
由于来自向量的每个数据项在阵列的整个行上被复制,因此可以减少计算的所有操作数之间的所需连接的数量,如图4可见的。可以认识到,连接的数量从图2中的数量显著地减少一个数量级,从m2到m(其中m在示例中为3)。
[0070]
可以认识到,如图4可见的,来自向量i的比特ij可以放置在来自矩阵h的比特h
ij
的正上方,从而提供操作数之间的紧密邻近。
[0071]
可以认识到,存储器阵列310中的行和列的数量可以大于矩阵h的行和列的数量。为了简单起见,说明书使用相同的行和列标识符来标识来自矩阵h的行/列以及存储器阵列310中的行/列。然而,来自矩阵h的行和列在存储器阵列310中的任何其他放置是可能的,只要阵列中的行和列的阶保持与矩阵中的阶相同,来自向量i和来自矩阵h的相关项存储在相同列上,并且计算结果可以与结果向量中的相关位置相关联。
[0072]
现在参考的图5示出了向量矩阵乘法过程中不同参与者的放置。示出了诸如(图3的)存储器阵列310的分区315之类的一个分区中的单元。
[0073]
分区315可以包括n个列c0,c1...cn和多个行,每个行存储来自不同源的值。存储在行中的值的源可以是向量i、矩阵h、乘法运算、总和运算以及实现总和或乘积计算所需的任何临时计算。
[0074]
分区315可以具有以下行类型:r-向量-比特行,在该行的所有单元中重复地存储向量i的特定比特j的值;r-矩阵-行行,存储矩阵h的整个行j;r-乘积行,各自存储相关联的行的向量比特和矩阵比特的乘积;以及r-总和行,其可以存储所有相关联的乘积的总和。可以认识到,可以根据等式1来计算乘积和总和。
[0075]
现在参考的图6a、图6b、图6c和图6d更详细地示出了根据本发明的实施例的分区315中的单元的值。图6a示出了将值存储在r-向量-比特行中的过程。行r-向量-比特-0可以在所有列(c0、c1和c2)中存储向量i的比特i0的值;行r-向量-比特-1可以在所有列中存储向量i的比特i1的值;并且类似地,行r-向量-比特-2可以在行的所有单元中重复地存储向量i的比特i2的值。
[0076]
图6b示出了将值存储在r-矩阵行中的过程。分区315的行r-矩阵-行-0可以存储矩阵h的行r0的值;分区中的行r-矩阵-行-1可以存储矩阵h的行r1的值;并且类似地,分区315中的行r-矩阵-行-2可以存储矩阵h的行r2的值。
[0077]
图6c示出了可以存储在行r-乘积中的内容。分区315的每个r-乘积-j行可以存储相同列的r-向量-比特-j中的单元(来自向量i的比特j)与r-矩阵-行-j中的单元(来自矩阵h的行j)之间的乘法运算的结果,一次针对所有列。行r-乘积-0可以存储r-向量-比特-0中的单元和r-矩阵-行-0中的单元的乘法结果:i0
×
h00、i0
×
h01、i0
×
h02;行r-乘积-1可以存储r-向量-比特-1中的单元和r-矩阵-行-1中的单元的乘法结果:i1
×
h10、i1
×
h11、i1
×
h12;并且行r-乘积-2可以存储r-向量-比特-2中的单元和r-矩阵-行-2中的单元的乘法结果:i2
×
h20、i2
×
h21、i2
×
h22。由于两个单元连接到相同的比特线,所以比特线可以具有对这两个单元执行的布尔运算的结果。如下文讨论的,因为结果还不是乘法结果,(图3的)选择性写入单元340可以将布尔结果写入要在乘积计算期间使用的临时位置。
[0078]
重复这种激活两个行并将布尔结果写入相同列的第三行的过程,可以通过每次选择正确的行(如akerib等人的us 8,238,173中讨论的)而针对所有列产生向量被乘数比特和矩阵乘数比特之间的乘积。类似的操作可以提供所有乘法结果的总和,该总和可以存储在行r-sum中(图6d),即,行r-sum可以存储列的r-乘积-0+r-乘积-1+r-乘积-2的总和。
[0079]
可以认识到,并发地对阵列的所有列执行的计算可以包括两个步骤:并行乘法和所有乘法结果的并行求和。
[0080]
可以通过以下步骤针对每对行r-向量-比特-j
×
r-矩阵-行-j执行乘法运算:(图3的)控制器350可以指示多行解码器320并发地激活一对行。行解码器320可以按照指示激活该对行。每个列的比特线可以保持存储在列中的激活的单元中的值之间的布尔运算的结果:ij×hjk
。
[0081]
应认识到,当所有列被并发地激活时,可以同时计算向量比特中的一个向量比特与所有相关矩阵元素的乘法(即,ij*h
jk
)。因此,执行整个矩阵h的乘法所需的步骤的数量恰好是相乘矩阵中的行的数量,在该示例中为3。类似地,当所有列被并发地激活时,可以同时计算所有列的总和,即,可以在单个步骤中并发地计算整个输出向量z。因此,使用该存储器配置的向量-矩阵乘法的复杂度可以是线性的,即,o(n)。
[0082]
可以认识到,r-向量-比特行(源自向量i)和r-矩阵-行行(源自矩阵h)可以远程地定位在存储器中,并且不一定定位为连续行。然而,这些行必须经由计算的操作数之间的单个比特线提供连接。现在参考的图7示出了单个分区中的存储器阵列310中的行指派的替代实施例。在图7中,每种类型的元素存储在连续的行中:所有与向量相关的行存储在分区315中的后续行中,所有与矩阵相关的行存储在分区315中的后续行中,并且所有计算行存储在分区315中的后续行中。只要每个计算的操作数存储在由相同比特线连接的相同列的单元上,就可以在所有列上并发地就地执行乘法和求和。
[0083]
现在参考的图8示出了本发明的替代优选实施例。在该实施例中,存储器阵列800可以包括若干分区810、820和830,其中每对相关联的行(存储来自向量i的被乘数比特的行和存储来自矩阵h的乘数行的行)可以存储在可用分区中的一个可用分区中。存储器阵列可以包括分区内的局部比特线bli和连接不同分区的局部比特线的全局比特线gblk。使用这种配置,将每对行存储在专用分区中,不是一次激活一对行,并发地激活所有行是可能的,
在单个步骤中提供整个向量-矩阵乘法的乘法结果,每个分区中一个结果。在求和步骤中,可以激活与全局比特线连接的单元以提供所有乘积的总和。对每对行使用专用分区可以在单个步骤中提供所有乘法结果,并且提供用于总和计算的附加步骤,为整个向量-矩阵乘法过程提供o(1)的复杂度。
[0084]
如上文描述的,将所有行存储在单个分区中可以提供o(n)的复杂度,并且分区数量和分区内部的行布置的任何组合可以提供处于o(1)与o(n)之间的复杂度。在每种情况下,当在存储器阵列中布置向量和矩阵信息时,可以考虑可用分区的数量和矩阵的大小。
[0085]
改进向量-矩阵乘法的复杂度可以显著地改进人工神经网络的计算复杂度。在人工神经网络中,表示大脑的细胞的多个节点通过表示细胞之间的突触中的连接强度的加权链接来连接。现在参考的图9示出了示例性人工神经网络。人工神经网络的节点以层来布置:输入层包括所讨论问题的输入值(图中的圆圈),通过加权链接(图中的箭头)连接的一组隐藏层(图中的矩形)以及可以提供考虑的问题的答案的输出层(图中的椭圆)。
[0086]
图9示出了向量和矩阵在这种人工神经网络中的使用。神经网络包括输入节点ni0-ni2,隐藏层节点nh00-nh12以及输出层no0-no2。该神经网络可以使用映射使用图6a-6d的示例的向量-矩阵计算来计算。输入层ni0、ni1、ni2的节点与隐藏层的第一层nh00、nh01、nh02之间的权重i0、i1、i2可以映射到向量i。隐藏层的第一层nh00、nh01、nh02与隐藏层的第二层nh10、nh11、nh22之间的权重h00、h01、h02、h10、h11、h12、h20、h21、h22可以映射到矩阵h。隐藏层与输出层:no0、no1、no2之间的权重z0、z1、z2可以映射到向量z。
[0087]
根据本发明的优选实施例,神经网络的数据可以以与上文描述的向量矩阵乘法类似的方式在关联存储器阵列中布置,使得处理步骤的操作数被定位在相同列上(即,在相同比特线上)。以这种方式,可以同时激活乘数和被乘数,以在结果行上提供乘法的结果,并且同时激活多个结果行可以提供总和,具有在存储器中执行整个计算而不是必须执行对用于计算的数据的任何输入-输出(io)操作的优点。唯一需要的io是接收输入向量i并且提供和输出向量z。
[0088]
矩阵(神经网络的隐藏层)可以一次存储在(图3的)存储器阵列310中,并且可以针对不同的输入向量多次使用,针对每个输入向量提供输出向量。由于矩阵被存储一次,当网络被训练并准备好操作时,向存储器阵列310的矩阵插入的复杂度对神经网络的正在进行的活动的计算复杂度没有影响。
[0089]
神经网络的典型的正在进行的使用可以是接收和存储输入向量,执行计算以及接收输出。可以认识到,将输入向量存储到存储器阵列中是重复任务,其复杂度可能对神经网络的整体复杂度有影响,因为针对每个计算提供新的输入向量。可以认识到,整个向量可以以上文描述的布置一次写入存储器阵列310。使用在akerib等人的us 9,558,812中定义的多单元写入操作,可以在单个步骤中将存储来自输入向量的比特(在每个相关列和每个相关行中)的所有单元设置为适当的值。
[0090]
现在参考的图10示出了如何可以以恒定的复杂度将向量i存储在存储器阵列310中而无论向量的大小如何。
[0091]
首先,必须将每个行r-向量-比特-j的单元清零以确保擦除先前的内容。使用多单元写入操作,可以将值“0”并发地写入所有行r-向量-比特-j的所有单元。控制器350可以指示多行解码器320在写入使能(we)线wevi0、wevi1、wevi2...wevin(所有r-向量-比特行的
we)上设置值“0”。控制器350可以激活选择性写入单元340中的所有列,这可以向所有选择的单元设置值“0”。
[0092]
在将r-向量-比特行中的所有单元清零之后,控制器350可以将向量i的比特的值设置到we线。使用多单元写入操作,控制器350可以将i0的值设置到wevi0,将i1的值设置到wevi1,将i2的值设置到wevi2等,直到将向量i的最后一个比特设置到wevin。控制器350可以指示选择性写入单元340激活所有列,这可以通过以下来产生:将i0的值设置到行r-向量-比特-0的所有单元,将值i1设置到行r-向量-比特-1的所有单元,并且以此类推,直到r-向量-比特-n为止到所有r-向量比特行。
[0093]
可以认识到,从向量i的所有比特到所有行r-向量-比特的所有比特的整个分发典型地可以花费2个时钟周期:一个时钟周期用于将存储器阵列310中存储向量相关的操作数的单元中的任何先前内容清零,并且另一个时钟周期用于将来自向量i的所有比特值1分发给相关的操作数单元。
[0094]
并发比特分发具有o(1)的复杂度,因为其不依赖于阵列310的列的数量。
[0095]
可以认识到,所有乘法步骤可以并行执行,即,在最佳情况下所有a
kbkj
可以在单个步骤中完成,并且在最坏情况下在n个步骤中完成,这取决于存储器阵列310中的分区的数量。还应认识到,所有总和运算也可以在单个步骤中完成。
[0096]
还可以认识到,如在现有技术中,操作数之间没有交叉互连,并且所有输出同时生成,因为输入数据在若干位置重复,用“数据重复”代替交叉互连。输入向量i与矩阵h的每个行j一起以垂直方式存储在存储器阵列310的列中。
[0097]
除了低计算复杂度之外,可以认识到,可以容易地向网络提供线性扩展。增加输出向量(即,将输出节点添加到神经网络)可以通过向存储器阵列添加列来实现,并且增加输入向量(即,添加更多输入节点)可以通过添加行(每个输入行可以存储附加输入值)来实现,如现在参考的图11所示。
[0098]
图11示意性地示出了根据本发明的优选实施例构造和操作的将输入节点或输出节点添加到现有神经网络的结果。项1200a是能够计算图9的神经网络的具有1
×
3输入向量、3
×
3矩阵和1
×
3输出向量的神经网络的示例性存储器配置。
[0099]
项1200b是示例性网络配置,其中将附加值1201添加到输入向量,将输入向量的大小增加到1
×
4。这种变化可以通过向矩阵添加附加的行而反映在网络中(因为乘数矩阵的行的数量必须等于被乘数向量的列的数量)。矩阵的新行可以通过存储新矩阵线的新行1202和在所有行单元中重复地存储所添加的比特的值的附加新行1203而反映在存储器阵列中。
[0100]
项1200c是示例性网络配置,其中将附加值1204添加到输出向量,将输出向量的大小增加到1
×
4。添加新输出值可以通过向矩阵添加附加列而反映在网络中(因为矩阵的列的数量必须等于乘积向量的列的数量)。矩阵中的新列通过存储器阵列中的新列1205而反映在存储器中。
[0101]
可以认识到,单个神经网络还可以通过由图3的若干关联存储器设备300构成的分布式系统来实现。每个存储器设备300可以计算与神经网络的单个输出节点相关的整个计算。在这种分布式配置中,还可以容易地实现可扩展性。增加输出向量(即,将输出节点添加
到神经网络)可以通过添加关联存储器设备300来实现,同时增加输入向量(即,添加更多输入节点)可以通过向分布式系统的每个存储器设备300添加行(每个输入行可以存储附加输入值)来实现。
[0102]
如上文已经提到的,矩阵-矩阵乘法可以被视为多个向量-矩阵乘法(被乘数向量的行的数量是所需的向量-矩阵乘法的数量)。乘数矩阵可以如上文描述地存储,同时每个向量(即,被乘数矩阵的行)可以如上文描述地存储在存储器中。通过针对每个被乘数行选择相关联的行对,一次被乘数的一个行来执行乘法过程。
[0103]
除非另有明确说明,否则如从前面的讨论中显而易见的,应认识到,在整个说明书中,利用诸如“处理”、“运算”、“计算”、“确定”等之类的术语的讨论涉及诸如客户端/服务器系统、移动计算设备、智能电器或类似的电子计算设备之类的任何类型的通用计算机的动作和/或过程,该通用计算机将表示为计算系统的寄存器和/或存储器内的物理(例如,电子)量的数据操纵和/或转换成类似地表示为计算系统的存储器、寄存器或其他此类信息存储、传输或显示设备内的物理量的其他数据。
[0104]
本发明的实施例可以包括用于执行本文的操作的装置。该装置可以针对期望的目的专门构造,或者该装置可以包括由存储在计算机中的计算机程序选择性地激活或重新配置的通用计算机。当由软件指示时,所得到的装置可以将通用计算机转变成如本文讨论的发明元件。指令可以定义与其期望用于的计算机平台一起操作的发明设备。这样的计算机程序可以存储在计算机可读存储介质中,例如但不限于任何类型的盘(包括光盘、磁光盘)、只读存储器(rom)、易失性和非易失性存储器、随机存取存储器(ram)、电可编程只读存储器(eprom)、电可擦除且可编程只读存储器(eeprom)、磁卡或光卡、闪速存储器、钥匙形盘(disk-on-key)或适用于存储电子指令并且能够耦合到计算机系统总线的任何其他类型的介质。
[0105]
本文呈现的过程和显示并非固有地与任何特定计算机或其他装置相关。各种通用系统可以与根据本文的教导的程序一起使用,或者可以证明构造更专用的装置来执行期望的方法是方便的。从下面的描述中可以看出各种这些系统的期望的结构。另外,没有参考任何特定编程语言描述本发明的实施例。应认识到,可以使用各种编程语言来实现如本文描述的本发明的教导。
[0106]
虽然本文已经说明和描述了本发明的特定特征,但是本领域普通技术人员现在将想到许多修改、替换、改变和等同物。因此,应理解,所附权利要求旨在覆盖落入本发明的真正精神内的所有这些修改和改变。
技术特征:
1.一种用于神经网络的存储器内计算的方法,所述神经网络具有以矩阵布置的权重,所述方法包括:将所述权重存储在关联存储器设备中;接收以向量布置的输入,并且将所述输入存储在所述关联存储器设备中;以及在存储器内使用所存储的输入和所存储的权重来计算所述神经网络的输出。2.根据权利要求1所述的方法,其中,对所述输入进行所述存储包括:将所述输入的副本存储在与所述权重的列相同的列中。
技术总结
一种用于关联存储器阵列的方法,包括:将矩阵的每个列存储在关联存储器阵列的相关联的列中,其中,矩阵的行j中的每个比特被存储在阵列的行R-矩阵-行-j中;将向量存储在每个相关联的列中,其中,来自向量的比特j被存储在阵列的R-向量-比特-j行中。该方法包括同时激活向量-矩阵行对R-向量-比特-j和R-矩阵-行-j以并发地接收所有相关联的列上的布尔函数的结果,使用该结果来计算向量-矩阵行对之间的乘积,并且将乘积写入阵列中的R-乘积-j行。j行。j行。
技术研发人员:A
受保护的技术使用者:GSI科技公司
技术研发日:2017.03.23
技术公布日:2023/10/6
版权声明
本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
航空之家 https://www.aerohome.com.cn/
飞机超市 https://mall.aerohome.com.cn/
航空资讯 https://news.aerohome.com.cn/