首页 / 学习装置及学习方法

学习装置及学习方法有效专利 发明

技术领域

[0001] 本发明涉及一种学习装置及学习方法。

相关背景技术

[0002] 近些年,已在各个领域中尝试基于大量数据使用机器学习来替换人工,已知机器学习与人工智能(AI)相关。这个领域正在日益发展,但在目前的情况下还存在一些问题。其中比较典型的问题比如准确度的限制,包括从数据中提取一般知识的泛化性能,以及为由于大的计算成本而导致的处理速度的限制。作为众所周知的用于高性能机器学习的算法,已知有深度学习(DL),输入向量受限于邻域的卷积神经网络(CNN)的等。与这些技术相比,在目前情况下,已知梯度提升决策树(GBDT)对于诸如图像、声音和语言的输入数据的准确度较低,因为难以提取特征量,但GBDT为其他结构化数据提供了更好的性能。在数据科学家们的竞赛Kaggle中,GBDT是最标准的算法。现实世界中机器学习要解决的问题中有70%是图像、声音和语言以外的结构化数据,而GBDT无疑是解决现实世界中的问题的重要算法。最近提出了使用决策树从诸如图像和声音的数据中提取特征的技术。
[0003] 在梯度提升中,学习处理的执行速度高于诸如CCN的深度学习。然而,在实践中进行数百次或更多次学习以用于超参数的调整和特征选择是必不可少的工作。为了达到评估泛化性能和改进性能的目的,对于诸如集成模型和堆栈之类的工作,通过采取组合多个模型来进行学习的方式是十分普遍的。因而即使在以相对较高的速度进行处理的梯度提升中,计算时间也成为问题。因此,近年来,针对通过梯度增强来提高学习处理的处理速度进行了大量研究。
[0004] 为了使用决策树来实现这种区分,相关文献公开了一种通过调整阈值的方式来强化缓存的效果并提高速度的技术(参考日本专利No.5032602)。
[0005] 然而,日本专利No.5032602中公开的技术存在以下问题:由于最优分支条件下计算了每个节点,在进程执行时会依次遍历从节点到分支的所有样本数据,导致处理时间过长。在依次执行分支中样本数据情况下,假定可被随机访问的静态随机存取存储器(SRAM)能够作为存储介质存储在节点进行分支之前和之后的样本数据,但也只能处理芯片内的少量数据,仍旧有大量样本数据无法学习和区分。
[0006] 鉴于此种情况,提出了本发明,其目的在于提供一种能够提高针对大量样本数据的决策树的学习速度的学习装置和学习方法。

具体实施方式

[0064] 在高级别,本文所使用的术语仅用于描述特定实施例的目的,并不旨在限制本发明。
[0065] 如本文所使用的,单数形式的“一”和“该”也包括复数形式,除非上下文另有明确说明。
[0066] 在描述附图中所示的优选实施例时,为了清楚起见,可能采用了特定术语。然而,本专利说明书的公开内容并不旨在限于所选择的特定术语,并且应理解,每个特定元件包括所有具有相同功能、以类似方式操作和实现类似的结果的技术等同物。
[0067] 以下实施例描述了一种学习装置及学习方法,下面将参考附图详细描述本发明的实施例。本发明不限于以下实施例,并且以下实施例中的部件包括本领域技术人员容易想到的那些,基本相同的那些和其等同物。在不脱离以下实施例的精神的情况下,可以删除、替换、修改和组合这些组件。
[0068] 第一实施例
[0069] GBDT的逻辑
[0070] 在DL中作为高性能机器学习算法,判别器由各种硬件逻辑实施,与图形处理单元(GPU)的处理相比,已知其功率高效。然而,在DL中,特别是在与GPU架构良好匹配的CNN的情况下,利用逻辑实施的现场可编程门阵列(FPGA)在分类方面不一定比GPU更快。相比之下,对于诸如GBDT的决策树型算法,已经尝试了在FPGA上的硬件逻辑实施,并且据报道比GPU更快。如稍后将描述的,这是因为基于决策树的算法由于其数据对齐的特性而不适合于GPU架构。
[0071] 在世界上关于学习的研究滞后于判别。DL中的学习的报道几乎没有,并且关于决策树学习的报道很少。这其中,GBDT学习目前尚未有报道,被认为是一个尚未开发的领域。为了获得准确的判别模型,在学习过程中进行特征量的选择和设计以及学习算法中超参数的选择,这需要大量的试验。特别是当存在大量训练数据时,学习过程的速度实际上对最终模型的准确性有很大影响。另外,在需要实时适应环境变化的领域,例如机器人、高频交易(HFT)和实时出价(RTB),速度与性能直接相关。因此,准确GBDT中的高速学习过程可以导致使用GBDT的系统的更好性能。
[0072] GBDT与FPGA的兼容性
[0073] 在GBDT与FPGA的兼容性方面,我们将讨论为什么GPU没有加速决策树或GBDT以及为什么FPGA能加速。
[0074] 首先,我们将重点关注GBDT是一种使用提升(boosting)的算法。在决策树中,使用集成学习的随机森林(RF)很容易与GPU并行化,因为树之间没有依赖关系。但是,GBDT是一种使用提升连接许多树的方法,在没有前一棵树的结果的情况下不开始下一棵树的学习。因此,处理是连续的,并且每棵树的学习速度是关键。相比之下,在RF中,尽管每棵树的学习很慢,但是通过并行加速学习多棵树可以加速整个学习。由于这个原因,GPU的使用可能在某种程度上隐藏了动态随机存取存储器(DRAM)的访问延迟的问题,这将在下面描述。
[0075] 我们现在将重点关对注GPU装置中随机存取存储器(RAM)的访问速度(特别是随机访问)的限制。FPGA中的静态随机存取存储器(SRAM)可以增加FPGA中RAM的总线宽度。因此,当使用例如可从Xilinx公司获得的XC7k325T的中档FPGA时,可达到3.2[TB/秒],如下所示。这里,内部RAM的容量为16[Mb]。
[0076] 445BRAMs×36bits×100MHz×2端口=445*36*2*100*10^6/10^9=400GB/秒
[0077] 在可以从Xilinx公司获得高端FPGA VU9P的情况下,可达到864[GB/秒]。内部RAM的容量为270[Mb]。
[0078] 960URAMs×36bits×100MHz×2端口=960*36*2*100*10^6/10^9=864GB/秒[0079] 当时钟频率为100[MHz]时获得这些值。实际上,通过电路配置的设计,操作在大约200到500[MHz]是可能的,实现高出几倍的限制带宽。相比之下,连接到当前一代中央处理单元(CPU)的RAM是双倍数据速率4(DDR4),且每个双列直插式内存模块(DIMM)的带宽仅为
25.6[GB/秒]。四DIMM交错配置(256位宽度)达到约100[GB/秒]。当DDR4芯片标准是DDR4-
3200(总线宽64位,一个DIMM)时,我们可以获得如下。
[0080] 1600MHz×2(DDR)×64=1600*10^6*2*64/10^9=25.6GB/秒
[0081] GPU上的图形双倍数据速率5(GDDR5)的带宽大约是DDR4的带宽的四倍,但实际上最大约为400[GB/秒]。
[0082] 以这种方式,FPGA中的RAM与GPU和CPU中的外部内存之间的带宽差异很大。虽然我们已经讨论了对地址进行顺序访问的情况,但是,在随机访问中,访问时间会产生更大的影响。FPGA中的内部RAM是一个SRAM,在顺序访问或随机访问中具有一个时钟的访问延迟。DDR4和GDDR5是DRAM,为了读出放大器(sense amplifiers),在访问不同列时具有更大的延迟。例如,在DDR4的RAM中,典型的列地址选通延迟(CAS延迟)是16个时钟,简而言之,吞吐量仅为顺序访问的1/16。
[0083] 在其中相邻像素的数据被处理的CNN的情况下,随机访问中的延迟不是主要问题。然而,在决策树的情况下,随着分支的进行,对于每个分支原始数据的地址变得越来越不连续,基本上陷入随机访问。因此,当数据写入DRAM时,其吞吐量是瓶颈,导致显著的减速。为了防止这种情况下的性能下降,GPU包括高速缓存。然而,由于决策树基本上是一种扫描数据的算法,因此在数据访问中没有局部性,高速缓存不太可能是有效的。在GPU的结构中,GPU具有共享内存,其配置有分配给每个算法核的SRAM(SM)。共享内存的使用可以实现快速处理,但是小到每个SM 16到48[kB],并且跨SM的访问具有大的延迟。以目前昂贵的大型GPU Nvidia K80为例,共享内存的容量如下。
[0084] K80=2×13SMX=26SMX=4992CUDA核
[0085] 26×48×8=9Mb
[0086] 这样,即使是花费数十万日元的大型GPU也只有9[Mb]的共享内存,这是一个太小的容量。此外,由于执行处理的SM不能直接访问另一SM的共享内存,因此当GPU用于决策树学习时,难以高速编码。
[0087] 如上所述,在数据要写入FPGA上的SRAM的前提下,FPGA可以比GPU更快地实现GBDT学习算法。
[0088] GBDT算法
[0089] 图1是示出示例性决策树模型的示例的示意图。在下文中,参考公式(1)到公式(22)和图1,描述GBDT的基本逻辑。
[0090] GBDT是一种监督式学习的方法。如公式(1)所示,监督式学习是优化目标函数obj(θ)的过程,其包括表示拟合训练数据的良好性的损失函数L(θ)和表示学习模型的复杂度的正则化顶Ω(θ)。正则化项Ω(θ)具有防止模型(决策树)变得过于复杂的作用,即,增加泛化性能。
[0091] obj(θ)=L(θ)+Ω(θ)   (1)
[0092] 公式(1)中的第一项损失函数,例如,将每个样本数据(训练数据)的误差函数1所计算的损失相加,如下面的公式(2)所示。这里,n是样本大小,i是样本号,y是标签,并且模型的y(hat)是预测值。
[0093]
[0094] 这里,例如如下面的公式(3)和公式(4),所使用的误差函数l是平方误差函数或逻辑损失函数。
[0095]
[0096]
[0097] 公式(1)中第二项的正则化项Ω(θ)使用的是,例如,由下面的公式5表示的参数θ的平方范数。这里,λ是表示正则化权重的超参数。
[0098] Ω(θ)=λ||θ||2   (5)
[0099] 我们现在将考虑GBDT的情况。首先,GBDT中第i个样本数据xi的预测值可写为如下的公式(6)。
[0100]
[0101] 这里,K是决策树的总数,k是决策树的编号,fk()是第k个决策树的输出,xi是输入样本数据的特征量。可以理解,GBDT以与RF中相同的方式产生最终输出,该最终输出是决策树的输出的总和。参数θ是θ={f1,f2,...,fK}。基于以上,GBDT的目标函数可以写成如下的公式(7)。
[0102]
[0103] 在学习上述目标函数时,在神经网络中的学习中使用的随机梯度下降(SGD)等方法不能用于决策树模型。然后,附加训练(提升(boosting))用于学习。在附加训练中,某一轮(学习迭代、决策树模型号)t中的预测值写成如下的公式(8)。
[0104]
[0105] 公式(8)表示有必要在某一轮t中找到决策树ft(xi)(的输出)。相反,在某一轮t中,不需要审查其他轮次。随后下面我们审查轮t。轮t中的目标函数写为下面的公式(9)。
[0106]
[0107] 这里,轮t中目标函数的泰勒展开(检查到二阶项)写为下面的公式(10)。
[0108]
[0109] 这里,在公式(10)中,gi和hi写成下面的公式(11)。
[0110]
[0111] 在公式(10)中忽略常数项,然后将轮t中的目标函数写为公式(12)。
[0112]
[0113] 根据公式(12),轮t中的目标函数由相对于前一轮中的预测值的误差函数的一阶导数和二阶导数以及正则化项表示。可以理解,可以应用一阶导数和二阶导数可以找到的误差函数。
[0114] 以下将考虑决策树模型。图1示出了示例性决策树模型。决策树模型配置有节点和叶。基于某个分支条件,对节点的输入被输入到下一个节点或叶。叶具有叶权重,叶权重是对其输入的输出。例如,在图1中,“叶2”的叶权重W2是“-1”。
[0115] 决策树模型如公式(13)所述。
[0116]
[0117] 在公式(13)中,w是叶权重,q是树结构。即,根据树结构q将输入(样本数据x)分配给任何叶,并输出叶的叶权重。
[0118] 这里,决策树模型的复杂性如下面的公式(14)定义。
[0119]
[0120] 在公式(14)中,第一项是由叶数量决定的复杂性,第二项是叶权重的平方范数。这里,γ是控制正则化项的重要性的超参数。基于以上,轮t中的目标函数被组织为公式(15)。
[0121]
[0122] 在公式(15)中,Ij,Gj和Hj写成下面的公式(16)。Ij={i|q(xi)=j}
[0123]
[0124] 根据公式(15),某一轮t中的目标函数是叶权重w的二次函数,并且二次函数的最小值及其条件通常写为下面的公式(17)。
[0125]
[0126] 也就是说,当确定某一轮t中的决策树结构q时,其目标函数和叶权重如下面的公式(18)所示。
[0127]
[0128] 如上所述,当确定了某一轮中的决策树结构时,可以计算叶权重。在下文中,将描述决策树结构的学习过程。
[0129] 决策树结构学习方法之一是贪心方法(贪心算法)。在贪心算法中,通过从树结构的深度0开始,计算每个节点处的分支分数(增益)并确定是否分支来学习决策树结构。分支分数通过下面的公式(19)找到。
[0130]
[0131] 这里,GL和HL是分支到左侧节点的样本的梯度信息,GR和HR是分支到右侧的样本的梯度信息,γ是正则化项。在公式(19)中,[]中的第一项是分支到左侧节点的样本数据的得分(目标函数),第二项是分支到右侧节点的样本数据得分,第三项是没有分支的得分,代表分支对目标函数的改善程度。
[0132] 由上述公式(19)表示的分支分数指示具有某个阈值的某特征量的分支的良好性,但这个单独不能确定哪个条件是最佳的。然后,贪心算法找到所有特征量的所有阈值候选值的分支分数,并找到分支分数最大的条件。贪心算法是一种非常简单的算法,但其计算成本很高,因为要找到所有特征量的所有阈值候选值的分支分数。然后,诸如稍后描述的XGBoost的库包括用于在保持性能的同时降低计算成本的方案。
[0133] XGBoost
[0134] 下面将描述XGBoost,XGBoost是众所周知的GBDT库。XGBoost的学习算法包括两种方案,用于减少阈值候选值和处理缺失值。
[0135] 首先,描述阈值候选值的减少。上述贪心算法具有计算成本高的缺点。在XGBoost中,阈值候选值的数量通过被称为加权分位数草图(Weighted Quantile Sketch)的方法减少。更具体地,在计算分支分数(增益)时,向左和右分支的样本数据的梯度信息的总和是重要的,并且仅探索梯度信息的总和以某一比率变化的阈值。具体地,使用样本的二阶梯度h。假设f是特征量的维度,一组特征量和二阶梯度h写成下面的公式(20)。
[0136] Df={(x1f,h1),(x2f,h2),…,(xnf,hn)}   (20)
[0137] 秩函数rf定义为下面的公式(21)。
[0138]
[0139] 这里,z是阈值候选值。公式(21)中所示的秩函数rf表示样本数据的二阶梯度之和的比例小于所有样本数据的二阶梯度之和中的某一阈值候选值。最后,对于由维度f表示的特征量,必须找到一组阈值候选值{sf1,sf2,...,sfl},这可以通过下面的公式(22)找到。|rf(Sfj)-rf(Sfj+1)|<ε
sf1=min({x1f,x2f,…,xnf})
[0140] sf1=max({x1f,x2f,…,xnf})   (22)
[0141] 这里,ε是确定阈值候选值的减少程度的参数,并且获得约1/ε的阈值候选值。
[0142] 加权分位数草图有两种模式:全局加权分位数草图,其在决策树的初始节点处执行(对于所有样本数据同时进行);和局部加权分位数草图,其对于每个节点执行(每次样本分配给节点时进行)。由于据报道局部在泛化性能方面更好,XGBoost采用局部。
[0143] 接下来,将描述缺失值的处理。在GBDT和决策树以及机器学习领域,没有一种常用的有效方法来处理输入样本数据的缺失值。一种方法是用平均值、中值、协同过滤器等补充缺失值。另一种方法是去除具有许多缺失值的特征量。然而,就性能而言,这些方法在许多情况下都不成功。结构化数据通常包括缺失值,并且在实践中寻求某种解决方案。
[0144] 在XGBoost中,设计学习算法以便直接处置包括缺失值的样本数据。在确定节点的分支分数时,该方法确定当具有缺失值的数据被分配给左或右节点时的分数。当执行上述加权分位数草图时,找到一组的不包括包含缺失值的样本数据的阈值候选值。
[0145] LightGBM
[0146] 现在将描述LightGBM,LightGBM是GBDT库。LightGBM采用称为建立容器(binning)的特征量的量化作为预处理,并采用使用GPU进行分支分数计算的快速算法。与XGBoost相比,LightGBM具有学习速度高出几倍的等同性能,因此最近吸引了更多使用者。
[0147] 首先,描述特征量的量化。当数据集是大规模的时,必须为大量的阈值候选值计算分支分数。LightGBM通过量化特征量作为学习的预处理来减少阈值候选值的数量。与XGBoost不同,量化不会改变每个节点的阈值候选值的数量和值,并且是使用GPU时的必要处理。
[0148] 关于特征量的量化已有各种研究,称为建立容器(bining)。在LightGBM中,特征量被划分为k个容器(bin),并且仅存在k个阈值候选的,其中k是255,63,和15等,例如,性能或学习速度因数据集而异。
[0149] 量化特征量简化了分支分数的计算。具体而言,阈值候选值是简单的量化值。这样,为每个特征量创建一阶梯度和二阶梯度的直方图,并且为每个容器(bin)(量化值)获得分支分数。这称为特征量直方图。
[0150] 接下来,将描述使用GPU计算的分支分数。随着特征量的量化,在计算分支分数时最多有256个模式。然而,有些数据集的样本大小为数万样本数据。因此,直方图的创建在学习时间中占主导地位。如上所述,在计算分支分数时,必须获得特征量直方图。当使用GPU时,多个线程需要更新相同的直方图并且可以更新相同的容器(bin)。因此,需要使用原子操作,并且当更新相同容器(bin)的比率高时,性能降低。然后,在创建直方图时,LightGBM决定是否要从每个线程的一阶梯度直方图或二阶梯度直方图更新值,从而减少更新相同容器(bin)的频率。
[0151] 学习及判别装置的配置
[0152] 图2是示出根据实施例的学习及判别装置的示例性模块配置的示意图。图3是示出指针内存的示例性配置的示意图。图4是示出学习模块的示例性模块配置的示意图。参照图2至图4,将描述根据本实施例的学习及判别装置1。
[0153] 如图2所示,根据本实施例的学习及判别装置1包括CPU 10、学习模块20(学习单元)、数据存储器30、模型内存40和分类模块50(分类单元)。其中,学习模块20、数据存储器30、模型内存40和分类模块50由FPGA配置。CPU 10和FPGA可以通过总线传送数据。除了图2中所示的组件之外,学习及判别装置1还可以包括其他组件,例如,包括用作CPU 10的工作区的RAM,存储由CPU 10运行的程序的只读存储器(ROM),用于存储各种数据(例如,程序)的辅助存储装置和用于与外部装置通信的通信接口(I/F)。
[0154] CPU 10是用于控制整个GBDT的学习的计算单元。CPU 10包括控制单元11。控制单元11控制以下模块,包括学习模块20、数据存储器30、模型内存40和分类模块50。控制单元11通过由CPU 10运行的程序实施。
[0155] 学习模块20是计算阈值和决策树中的每个节点的最佳特征量的编号(下文中可以称为“特征量号”)并将结果写入模型内存40的硬件模块,如果节点是叶,则计算叶权重。如图4所示,学习模块20包括增益计算模块21_1,21_2,...,21_n(增益计算单元)和最佳条件导出模块22(导出单元)。这里,n是数值,该数值等于或大于至少是样本数据(包括训练数据和分类数据)的特征量数值。当参考任何给定增益计算模块时或者当整体参考增益计算模块时,增益计算模块21_1,21_2,...,21_n简称为“增益计算模块21”。
[0156] 增益计算模块21是使用上面的公式(19)计算对于对应特征量的每个阈值中的分支分数的模块,特征量包括在输入样本数据中。这里,在样本数据中,训练数据包括特征量以及标签(真值)。在样本数据中,分类数据包括特征量,但不包括标签。增益计算模块21具有相应的内存,用于计算和存储(在一个时钟中)一次输入的所有特征量的直方图,并且并行地计算所有特征量。基于直方图的结果,并行计算特征量的增益。该配置使得能够一次或同时处理所有特征量,从而可以大幅提高学习过程的速度。这样,并行读取和处理所有特征量的方法称为特征并行(Feature Parallel)。为了实现该方法,必须一次(一个时钟)从数据存储器中读取所有特征量。因此,该方法不能由具有32位或256位数据宽度的公共内存来实现。使用软件,公共CPU一次处理的数据位数仅为64位。如果有100个特征量和每个特征量为8位,则需要8000位,其无法被处置。因此,根据传统方法,对内存的每个地址存储不同的特征量(例如,可以由CPU处置的64位宽度),并且所有特征量存储在多个地址上。作为对比,根据本方法,一种新颖的技术在于,所有特征量都存储在内存的一个地址中,并且所有特征量通过单次访问来读取。
[0157] 如上所述,GBDT无法并行化决策树学习。因此,每个单独的决策树学习的多快主导着学习过程的速度。另一方面,执行集成学习的RF容易并行化每个决策树的学习过程,因为在学习期间决策树之间没有依赖性。然而,RF不如GBDT准确。如上所述,对于比RF具有更高准确度的GBDT,如上所述采用特征并行可以提高决策树学习过程的速度。
[0158] 增益计算模块21将计算出的分支分数输出给最佳条件导出模块22。
[0159] 最佳条件导出模块22接收与每个增益计算模块21输出的特征量相对应的分支分数,并导出具有最大分支分数的阈值和特征量的编号(特征量号)。最佳条件导出模块22将导出的特征量号和阈值写入模型内存40,作为相应节点的分支条件数据(节点数据的示例)。
[0160] 数据存储器30是存储各种数据的SRAM。数据存储器30包括指针内存31、特征内存32和状态内存33。
[0161] 指针内存31是内存,其存储了存储在特征内存32中的样本数据的存储地址。如图3所示,指针内存31包括存储体(bank)A(存储体区域)和存储体B(存储体区域)。将样本数据的存储地址存储到存储体A和存储体B两个存储体中的操作将在后面参考图5至图13详细说明。指针内存31可包括三个或更多的存储体。
[0162] 特征内存32是内存,存储样本数据(包括训练数据和判别数据)。
[0163] 状态内存33存储状态信息(上面的w、g、h)和标签信息。
[0164] 模型内存40是SRAM,其存储用于决策树的每个节点的分支条件数据(特征量号、阈值)、指示节点是否是叶的叶标志(标志信息,节点的数据的示例)和节点是叶时的叶权重。
[0165] 分类模块50是一个硬件模块,它为每个节点、每个决策树分配样本数据。分类模块50计算状态信息(w、g、h)并将计算的状态信息写入状态内存33。
[0166] 分类模块50不仅可以在如上所述的学习过程的对样本数据(训练数据)的判别(分支)中,而且还可以在样本数据(判别数据)的判别过程中,分类模块50能够用相同模块配置对判别数据进行判别。在判别过程中,分类模块50的处理也可以通过一次读取所有特征量来流水线化,使得处理可以与每个时钟的一个样本数据的判别一样快。如果特征量无法一次读取,则不知道哪个特征量是必要的,直到分支成节点。因此,通过每次访问相应特征量的地址无法实现流水线化。
[0167] 可以包括多个分类模块50,使得多条判别数据被划分(数据并行)并分配给分类模块50,每个分类模块50执行判别处理,从而加速判别过程。
[0168] 学习及判别装置的学习过程
[0169] 参考图5至图13,将具体描述学习及判别装置1的学习过程。
[0170] 初始化
[0171] 图5是示出根据实施例的学习及判别装置的初始化中的模块的操作的图。如图5所示,首先,控制单元11初始化指针内存31。例如,如图5所示,控制单元11按照训练数据的编号按顺序(例如,按照从较低地址开始的顺序)将特征内存32中的样本数据的地址写入指针内存31中的存储体A。
[0172] 注意,可以不使用所有训练数据(可以不写入所有的地址),并且可以通过数据子采样使用基于预定随机数的概率随机选择的训练数据(可以写入所选训练数据的地址)。例如,当数据子采样为0.5时,根据随机数,训练数据的所有地址具有50%的概率,一半地址可以写入指针内存31(此处,存储体A)。在生成随机数时,可以使用由线性反馈移位寄存器(LFSR)生成的伪随机数。
[0173] 训练数据的所有特征量可以都不用于学习。仅基于根据如上所述的随机数的概率随机选择(例如,一半选择)的特征量可以由特征子采样使用。在这种情况下,例如,作为通过特征子采样选择的特征量之外的特征量的数据,可以从特征内存32输出常数。该操作改善了未知数据(判别数据)的泛化性能。
[0174] 深度0/节点0的分支条件数据的确定
[0175] 图6是示出根据实施例的用于确定学习及判别装置中的深度0、节点0的节点参数的模块的操作的示意图。决策树的顶层被表示为“深度0”,并且下面的层依次被表示为“深度1”、“深度2”.......,某一层的左侧节点表示为“节点0”,向右的节点依次被表示为“节点1”、“节点2”......。
[0176] 如图6所示,首先,控制单元11向学习模块20发送起始地址和结束地址,以触发学习模块20的处理的启动。学习模块20基于起始地址和结束地址从指针内存31(存储体A)指定目标训练数据的地址,使用指定的地址从特征内存32读取训练数据(特征量),并从状态内存33中读取状态信息(w、g、h)。
[0177] 在这种情况下,如上所述,学习模块20中的每个增益计算模块21计算相应特征量的直方图,将直方图存储到其SRAM中,并基于结果计算每个阈值的分支分数。然后,学习模块20的最佳条件导出模块22接收与从每个增益计算模块21输出的特征量相对应的分支分数,并导出具有最大分支分数的阈值和特征量的编号(特征量号)。然后最佳条件导出模块22将导出的特征量号和阈值作为相应节点(深度0、节点0)的分支条件数据写入模型内存40中。这样做,最佳条件导出模块22设置叶标志为“0”以指示节点(深度0、节点0)进一步分支,并将节点的数据(可以是分支条件数据的一部分)写入模型内存40。
[0178] 学习模块20通过连续地指定写入存储体A中的训练数据的地址并使用该地址从特征内存32读取每个训练数据来执行上述操作。
[0179] 在深度0/节点0的数据分支过程
[0180] 图7是示出根据实施例的学习及判别装置中在深度0、节点0处的分支的模块的操作的示意图。
[0181] 如图7所示,控制单元11将起始地址和结束地址发送到分类模块50,以触发分类模块50的处理的启动。分类模块50基于起始地址和结束地址从指针内存31(存储体A)指定目标训练数据的地址,并使用指定的地址从特征内存32读取训练数据(特征量)。分类模块50从模型内存40读取相应节点(深度0、节点0)的分支条件数据(特征量号、阈值)。然后分类模块50根据分支条件数据确定是否向节点(深度0、节点0)的左侧或右侧分支读取的样本数据,并基于确定结果将特征内存32中的训练数据的地址写入指针内存31中与读存储体(这里,存储体A)(用于读取的存储体区域)不同的另一存储体(写存储体)(此处,存储体B)(用于写入的存储体区域)。
[0182] 这样做,如图7所示,当确定向节点的左侧分支时,分类模块50从存储体B的较低地址开始按顺序写入训练数据的地址。当确定向节点的右侧分支时,分类模块50从存储体B的较高地址开始按顺序写入训练数据的地址。因此,在写存储体(存储体B)中,地址可以分开写入,使得向节点的左侧分支的训练数据的地址写在较低的地址中,而向节点的右侧分支的训练数据的地址写入较高的地址。在写存储体中,向节点的左侧分支的训练数据的地址可以写在较高的地址中,并且向节点的右侧分支的训练数据的地址可以写在较低的地址中。
[0183] 以这种方式,指针内存31配置有两个存储体,即存储体A和存储体B,在其中交替执行读和写,如上所述。因此,由于FPGA中SRAM的容量有限,内存可以被有效地使用。简单地说,特征内存32和状态内存33中的每一个可以配置有两个存储体。然而,由于指示特征内存32中的地址的数据通常小于样本数据,因此可以通过准备指针内存31并间接指定如本实施例中的地址来更多地减少内存使用。
[0184] 对于上述操作,分类模块50对所有训练数据执行分支处理。然而,在完成分支过程之后,训练数据不一定在节点的左侧和右侧(深度0,节点0)均等地划分。因此,分类模块50将写存储体(存储体B)中的对应于向左分支的训练数据的地址与向右分支的训练数据的地址之间的边界的地址(中间地址)返回到控制单元11。中间地址用于下一分支过程。
[0185] 深度1/节点0处的分支条件数据的确定
[0186] 图8是示出根据实施例的用于确定学习及判别装置中的深度1、节点0处的节点参数的模块的操作的示意图。基本上,除了由于目标节点的层次改变(从深度0到深度1)指针内存31的存储体A和存储体B的作用被反转之外,该过程类似于在图6中所示的深度0/节点0处确定分支条件数据的过程。具体而言,存储体B是读存储体,存储体A是写存储体(参见图9)。
[0187] 如图8所示,控制单元11基于在深度0处的过程中从分类模块50接收的中间地址,向学习模块20发送起始地址和结束地址,以触发学习模块的处理的启动。学习模块20基于起始地址和结束地址从指针内存31(存储体B)指定目标训练数据的地址,使用指定的地址从特征内存32读取训练数据(特征量),并从状态内存33读取状态信息(w、g、h)。特别地,如图8所示,学习模块20按照从存储体B的左侧(较低地址)到中间地址的顺序指定地址。
[0188] 在这种情况下,如上所述,学习模块20的每个增益计算模块21将读取的训练数据的特征量存储到其SRAM中并计算每个阈值的分支分数。然后,学习模块20的最佳条件导出模块22接收与从每个增益计算模块21输出的特征量相对应的分支分数,并导出具有最大分支分数的阈值和特征量的编号(特征量号)。然后最佳条件导出模块22将导出的特征量号和阈值作为相应节点(深度1,节点0)的分支条件数据写入模型内存40中。这样做,最佳条件导出模块22设置叶标志为“0”以指示节点(深度1,节点0)进一步分支,并将节点的数据(可以是分支条件数据的一部分)写入模型内存40。
[0189] 学习模块20通过连续地指定从存储体B左侧(较低地址)到中间地址的地址并使用指定的地址从特征内存32读取每个训练数据来执行上述操作。
[0190] 在深度1/节点0的数据分支过程
[0191] 图9是示出根据该实施例的学习及判别装置中在深度1、节点0处的分支的模块的操作的示意图。
[0192] 如图9所示,控制单元11基于在深度0处的处理中从分类模块50接收的中间地址,将起始地址和结束地址发送到分类模块50,以触发分类模块50的处理的启动。分类模块50基于起始地址和结束地址从指针内存31(存储体B)的左侧指定目标训练数据的地址,并使用指定的地址从特征内存32读取训练数据(特征量)。分类模块50从模型内存40读取相应节点(深度1、节点0)的分支条件数据(特征量号、阈值)。然后分类模块50根据分支条件数据确定是否向节点(深度1,节点0)的左侧或右侧分支读取的样本数据,并基于确定结果将特征内存32中的训练数据的地址写入指针内存31中与读存储体(这里,存储体B)(用于读取的存储体区域)不同的另一存储体(写存储体)(此处,存储体A)(用于写入的存储体区域)。
[0193] 这样做,如图9所示,当确定向节点的左侧分支时,分类模块50从存储体A的较低地址开始按顺序写入训练数据的地址。当确定向节点的右侧分支时,分类模块50从存储体A的较高地址开始按顺序写入训练数据的地址。因此,在写存储体(存储体A)中,地址可以分开写入,使得向节点的左侧分支的训练数据的地址写在较低的地址,而向节点的右侧分支的训练数据的地址写在较高的地址。在写存储体中,向节点的左侧分支的训练数据的地址可以写在较高的地址中,并且向节点的右侧分支的训练数据的地址可以写在较低的地址中。
[0194] 对于上述操作,分类模块50对所有训练数据执行分支处理,训练数据由写在相对于存储体B的中间地址的左侧的地址指定。然而,在分支过程完成之后,训练数据不一定均分到节点(深度1,节点0)的右侧和左侧。因此,分类模块50将写存储体(存储体A)中的对应于向左分支的训练数据的地址与向右分支的训练数据的地址之间的中间的地址(中间地址)返回到控制单元11。中间地址用于下一分支过程。
[0195] 深度1/节点1的分支条件数据的确定
[0196] 图10是示出根据该实施例的用于确定学习及判别装置中的深度1、节点1的节点参数的模块的操作的示意图。以与如图8所示的相同的方式,由于该节点与深度1/节点0的节点处于同一层,因此存储体B是读存储体,存储体A是写存储体(参见图11)。
[0197] 如图10所示,控制单元11基于在深度0处的处理中从分类模块50接收的中间地址,向学习模块20发送起始地址和结束地址,以触发学习模块20的处理的启动。学习模块20基于起始地址和结束地址从指针内存31(存储体B)指定目标训练数据的地址,使用指定的地址从特征内存32读取训练数据(特征量),并从状态内存33读取状态信息(w、g、h)。特别地,如图10所示,学习模块20按照从存储体B的右侧(较高地址)到中间地址的顺序指定地址。
[0198] 在这种情况下,如上所述,学习模块20的每个增益计算模块21将读取的训练数据的特征量存储到其SRAM中并计算每个阈值的分支分数。然后,学习模块20的最佳条件导出模块22接收与从每个增益计算模块21输出的特征量相对应的分支分数,并导出具有最大分支分数的阈值和特征量的编号(特征量号)。然后,最佳条件导出模块22将导出的特征量号和阈值作为相应节点(深度1,节点1)的分支条件数据写入模型内存40中。这样做,最佳条件导出模块22设置叶标志为“0”以指示节点(深度1,节点1)进一步分支,并将节点的数据(可以是分支条件数据的一部分)写入模型内存40。
[0199] 学习模块20通过从存储体B的右侧(较高地址)到中间地址顺序指定地址并使用指定的地址从特征内存32读取每个训练数据来执行上述操作。
[0200] 在深度1/节点1的数据分支过程
[0201] 图11是示出根据实施例的学习及判别装置中在深度1,节点1处的分支的模块的操作的示意图。
[0202] 如图11所示,控制单元11基于在深度0处的处理中从分类模块50接收的中间地址,将起始地址和结束地址发送到分类模块50,以触发分类模块50的处理的启动。分类模块50基于起始地址和结束地址从指针内存31(存储体B)的右侧指定目标训练数据的地址,并使用指定的地址从特征内存32读取训练数据(特征量)。分类模块50从模型内存40读取相应节点(深度1,节点1)的分支条件数据(特征量号、阈值)。然后分类模块50根据分支条件数据确定是否向节点(深度1,节点1)的左侧或右侧分支读取的样本数据,并基于确定结果将特征内存32中的训练数据的地址写入指针内存31中与读存储体(这里,存储体B)(用于读取的存储体区域)不同的另一存储体(写存储体)(此处,存储体A)(用于写入的存储体区域)。
[0203] 这样做,如图11所示,当确定向节点的左侧分支时,分类模块50从存储体A的较低地址开始按顺序写入训练数据的地址。当确定向节点的右侧分支时,分类模块50从存储体A的较高地址开始按顺序写入训练数据的地址。因此,在写存储体(存储体A)中,地址可以分开写入,使得向节点的左侧分支的训练的地址数据写在较低的地址,而向节点的右侧分支的训练数据的地址写在较高的地址。在写存储体中,向节点的左侧分支的训练数据的地址可以写在较高的地址中,并且向节点的右侧分支的训练数据的地址可以写在较低的地址中。在这种情况下,图9中的操作需要被调整。
[0204] 对于上述操作,分类模块50对所有训练数据执行分支过程,训练数据由写在相对于存储体B的中间地址的右侧的地址指定。然而,在分支过程完成之后,训练数据不一定均分到节点(深度1,节点1)的左侧和右侧。因此,分类模块50将写存储体(存储体A)中的对应于向左分支的训练数据的地址与向右分支的训练数据的地址之间的中间的地址(中间地址)返回到控制单元11。中间地址用于下一分支过程。
[0205] 深度1/节点1的分支条件数据的确定中没有分支
[0206] 图12是示出在根据实施例的学习及判别装置中深度1,节点1的节点参数的确定中没有分支时的模块的操作的示意图。以与图8所示的相同的方式,由于该节点与深度1/节点0的节点处于同一层,因此存储体B是读存储体。
[0207] 如图12所示,控制单元11基于在深度为0的过程中从分类模块50接收的中间地址,向学习模块20发送起始地址和结束地址,以触发学习模块20的处理的启动。学习模块20基于起始地址和结束地址从指针内存31(存储体B)指定目标训练数据的地址,使用指定的地址从特征内存32读取训练数据(特征量)。并从状态内存33读取状态信息(w、g、h)。特别地,如图12所示,学习模块20按照从存储体B的右侧(较高地址)到中间地址的顺序指定地址。
[0208] 当确定没有从节点(深度1,节点1)的进一步分支时,例如,基于计算的分支分数,学习模块20将叶标志设置为“1”,将节点的数据(可以是分支条件数据的一部分)写入模型内存40,并将节点的叶标志“1”发送到控制单元11。这样,识别节点(深度1,节点1)不再进一步分支到较低的层。当节点(深度1,节点1)的叶标志为“1”时,学习模块20将叶权重(w)(可以是分支条件数据的一部分)而不是特征量号和阈值写入模型内存40。与分开的容量相比,这可以减少模型内存40的容量。
[0209] 对每个层(深度)执行上面图6至图12示出的处理以完成整个决策树(决策树被学习)。
[0210] 当决策树的学习完成时
[0211] 图13是示出当根据实施例的学习及判别装置中决策树的学习完成时,更新所有样本数据的状态信息时的模块的操作的示意图。
[0212] 当完成构成GBDT的一个决策树的学习时,需要计算对应于每个训练数据的误差函数的一阶梯度g和二阶梯度h,以及每个训练数据的叶权重w以便用于提升(这里,梯度提升)到下一个决策树。如图13所示,控制单元11触发通过分类模块50的上述计算的启动。分类模块50对所有训练数据的所有深度(层级)中的节点执行分支确定处理,并计算对应于每个训练数据的叶权重。然后,分类模块50基于标签信息为所计算的叶权重计算状态信息(w,g,h),并将计算的状态信息写回到状态内存33的原地址。这样,使用更新的状态信息下一个决策树被学习。
[0213] 如上所述,在根据本实施例的学习及判别装置1中,学习模块20包括用于读取输入样本数据的特征量的单独存储器(例如,SRAM)。利用这种配置,可以通过单次访问来读取样本数据的所有特征量,并且可以通过增益计算模块21一次执行对所有特征量的处理。这种配置可以大幅加速决策树学习过程。
[0214] 在根据本实施例的学习及判别装置1中,指针内存31配置有两个存储体:存储体A和存储体B,在其中交替执行读取和写入。因此可以有效地使用内存。以简单的形式,特征内存32和状态内存33可以各自配置有两个存储体。然而,指示特征内存32中的地址的数据通常小于样本数据。因此,可以通过如本实施例中的方法来节省内存使用,其中准备指针内存31并间接指定地址。当确定向节点的左侧分支时,分类模块50从两个存储体的写存储体的较低地址开始按顺序写入训练数据的地址,当确定向节点的右侧分支时,从写存储体的较高地址开始按顺序写入训练数据的地址。以这种方式,在写存储体中,地址可以分开写入,使得向节点的左侧分支的训练数据的地址写在较低的地址中,而向节点的右侧分支的训练数据的地址是写在较高的地址。
[0215] 修改
[0216] 图14是示出根据修改的学习及判别装置中的模型内存的示例性配置的示意图。参考图14,描述根据本修改的学习及判别装置1中的模型内存40中的决策树的每个深度(层级)都具有内存的配置。
[0217] 如图14所示,根据本修改的学习及判别装置1中的模型内存40包括用于深度0的内存41_1,用于深度1的内存41_2,...,用于深度(m-1)的内存41_m,用于为学习的决策树的模型数据的每个深度(层级)存储数据(具体地,分支条件数据)。这里,m是等于或大于决策树模型的深度(层级)的数目的数。换句话说,模型内存40具有独立的端口,用于同时检索所学习决策树的模型数据的每个深度(层级)(深度0节点数据,深度1节点数据,...,深度(m-1)节点数据)的数据。因此,分类模块50可以基于决策树中的初始节点处的分支的结果,在所有深度(层级)中并行地读取与下一个节点相对应的数据(分支条件数据),并为一片样本数据(判别数据)在一个时钟中同时在每个深度(层级)执行分支处理而不经过内存(流水线处理)。因此,分类模块50中的分类处理仅需要对应于样本大小的时间,从而大幅加快了分类处理。相比之下,在传统技术中,由于对于每个节点样本数据被复制到新的内存区,内存写入/读取时间影响速度,具体地,分类过程需要时间(样本大小×深度(层级)数量)。如上所述的根据本修改的分类处理是非常优越的。
[0218] 图15是示出根据修改的学习及判别装置中的分类模块的示例性配置的示意图。如图15所示,分类模块50包括节点0判别器51_1、节点1判别器51_2、节点2判别器51_3.......特征内存32每个时钟提供一片样本数据作为特征量。如图15所示,特征量首先输入到节点0判别器51_1。节点0判别器51_1从模型内存40的深度0相应的内存41_1接收节点的数据(深度0节点数据)(要使用的特征量号和向右或向左的条件)。节点0判别器51_1根据条件确定相应的样本数据是向右还是向左。这里,假设每个深度的内存(深度0的内存41_1、深度1的内存41_2、深度2的内存41_3,......)具有一个时钟的延迟。取决于节点0判别器51_1的结果,在下一个深度1的内存41_2中,寻址要去的节点,并且提取相应节点的数据(深度1节点数据)并将其输入到节点1判别器51_2。
[0219] 由于深度0的内存41_1具有一个时钟的延迟,所以特征量也延迟一个时钟并输入到节点1判别器51_2。下一个样本数据的特征量在同一时钟输入到节点0判别器51_1。以这种方式,通过流水线处理进行判别,其中假设同时为每个深度输出数据,一片样本数据可以作为整体在一个决策树中的一个时钟中判别。深度0的内存41_1仅需要一个地址,因为深度0中只有一个节点,深度1的内存41_2需要两个地址,因为深度1中有两个节点。同样,深度2的内存41_3需要四个地址,并且深度为3的内存(未示出)需要八个地址。尽管该分类模块50对整个树进行判别,但是当学习节点时可以仅使用节点0判别器51_1,从而可以通过使用相同的电路来减小电路规模。
[0220] 第二实施例
[0221] 以下主要说明与在第一实施方式中的学习及判别装置1的区别。在第一实施例中,在假设存在一个存储样本数据的数据存储器30的前提下,说明了GBDT的学习处理和判别处理。本实施例描述了通过将数据存储器划分为多个部分以实现对多个样本数据进行并行的学习处理的操作。
[0222] 数据并行
[0223] 图16是示出应用了数据并行的学习及判别装置的模块结构的示例的示意图。参照图16,下面描述将学习及判别装置1a作为用于实现数据并行的配置的示例。
[0224] 为了对样本数据(学习数据或判别数据)实现数据并行,首先,如图16所示,可以将数据存储器划分为两个数据存储器30a和30b以将样本数据划分开。尽管数据存储器30b未在图16中示出,但是类似于数据存储器30a,数据存储器30b也包括指针存储器31,特征存储器32和状态存储器33。然而,划分存储样本数据的存储器是不够的,需要用于对划分后的样本数据的片并行处理(学习处理,判别处理等)的机制。如图16所示的配置示例中,进行判判别处理的模块的数量与划分后的数据存储器的数量相同。学习及判别装置1a具有分类模块50a,50b,该分类模块50a,50b对分别存储在两个数据存储器30a,30b中的各样本数据进行并行的判别处理。聚焦于每个单独的模块,假定通过特征并行执行处理,当采用如上所述的数据并行时,模块的配置几乎没有改变,因而更便于实现。
[0225] 用于提高学习处理(即,学习模块20执行的处理)的速度的数据并行存在以下问题:由于将数据存储器划分为用于保存划分的样本数据的两个数据存储器30a和30b,导致电路规模增大了。以及正如之前描述的那样,存储了学习处理的过程中计算出的特征量的直方图(以下有时也称为“梯度直方图”)和梯度信息(参照上述式(11))的存储器会随着数据存储器的划分数的增加而成比例地增加。
[0226] 利用梯度直方图计算分支得分的方法
[0227] 首先,下面描述通过学习模块20计算分支得分的方法。在这种情况下,假设样本数据(在这种情况下,为学习数据)的特征量被量化为具有特定的位宽。例如,在一种情况,其中所述特征量是8比特(256种模式值)和特征量的维数是100,学习模块20计算分支得分256×100=25600模式。在这种情况下,阈值的候选数为256。
[0228] 为了计算与某一分支条件(阈值与特征量相对应)相对应的分支得分,需要从当前节点处的学习数据中获得特征量大于或等于阈值的学习数据的梯度信息之和(对应于上述表达式(19)中的GR和HR)。以及特征量小于阈值的学习数据的梯度信息之和(对应于上述表达式(19)中的GL和HL)。此时如以下(表1)所示,具体到4条学习数据,特征量的维数为1并且其值为3模,梯度信息为一阶梯度g。
[0229] 表1样本数据数 特征量 G
1 0 0.1
2 1 0.2
3 1 0.1
4 2 -0.3
[0230] 如表1所示,特征量存在3种模式,即0、1和2,因此阈值也分别为0、1和2,每个阈值处的梯度信息之和如下表(表2)所示,且计算得到与3种模式的每个阈值相对应的分支得分。
[0231] 表2阈值 GL GR
0 0 0.1+0.2+0.1-0.3=0.1
1 0.1 0.2+0.1-0.3=0
2 0.1+0.2+0.1=0.4 -0.3
[0232] 为了获得特定阈值的梯度信息之和,需要参考当前节点处的所有学习数据。如果每次都应针对所有阈值执行此处理,则将花费很长时间。例如,在特征量是8位(256个模式)的情况下,阈值也有256个模式,因此需要获得梯度信息的总和(当前节点的学习数据量×256)次。这花费了非常长的时间,因此通过预先获得针对每个特征量值(梯度直方图)的梯度信息总和和梯度信息的总和,简化了分支得分的计算处理,并得到梯度直方图的累积和。
[0233] 在由上述(表1)描述的样本数据的情况下,针对每个特征量值(梯度直方图)的梯度信息的总和,如下(表3)所示。
[0234] 表3特征量 梯度直方图
0 0.1
1 0.2+0.1=0.3
2 -0.3
[0235] 每个特征量值的梯度信息的总和为0.1+0.2+0.1-0.3=0.1。在这种情况下,梯度信息总和GL通过获得梯度直方图的累积和获得,梯度信息GR通过从梯度信息总和中减去GL的总和获得,每个阈值的梯度信息总和GL和梯度信息GR如下(表4)所示。
[0236] 表4阈值 GL(梯度直方图的累积总和) GR(总和-GL)
0 0 0.1
1 0.1 0
2 0.1+0.3=0.4 -0.3
[0237] 使用这种方法,每次引用一次当前节点上的学习数据就足够了,然后,可通过参考与阈值数量相对应的梯度直方图来获得所有分支条件的分支得分。在特征量是8位(256个模式)的情况下,执行处理(当前节点处的学习数据量+256)次就足够了。上述情况是在一维特征量的基础上,但是即使特征量具有两个或更多得维度,也可以通过针对特征量的每个维度获得梯度直方图来并行地计算相同的处理。图4示出了在第一实施例中通过特征并行执行学习的学习模块20的配置,图17是基于图4更详细地示出了其配置。下面结合图17详细描述通过学习模块20计算梯度直方图并获得分支条件数据的配置和运算,并且进一步描述在使用数据并行配置的情况下的配置和运算。
[0238] 使用梯度直方图获取分支条件数据的学习模块的配置示例
[0239] 图17是示出学习模块的具体模块配置的示意图。参照图17,下面将更进一步得描述图4所示的学习模块20的配置和运算。
[0240] 图17所示的学习模块20包括:增益计算模块21_1,21_2,...,21_n,以及最佳条件导出模块22。在这种情况下,n是至少大于或等于样本数据(此处为学习数据)的特征量的类型数量。当参考任何给定的增益计算模块时或者当整体参考增益计算模块21_1、21_2,...和21_n时,增益计算模块21_1,21_2,...,21_n简称为“增益计算模块21”。
[0241] 增益计算模块21_1至21_1n中的每个模块均使用上述表达式(19)针对输入样本数据中包括的特征量的对应特征量,计算每个阈值的分支得分。增益计算模块21_1包括梯度直方图计算模块61_1,累积梯度计算模块62_1和计算模块63_1。
[0242] 梯度直方图计算模块61_1使用输入样本数据的特征量的每个值作为直方图的容器,通过积分与样本数据相对应的梯度信息的值来计算梯度直方图。
[0243] 累积梯度计算模块62_1通过获得针对特征量的每个阈值的梯度直方图的累积和来计算梯度信息的总和(GL,GR,HL,HR)。
[0244] 计算模块63_1基于上述表达式(19)并使用由累积梯度计算模块62_1计算出的梯度信息之和来计算每个阈值处的分支得分。
[0245] 类似地,增益计算模块21_2包括梯度直方图计算模块61_2,累积梯度计算模块62_2和计算模块63_2,并且它们同样适用于增益计算模块21_n。当参考任何给定的梯度直方图计算模块时或者当整体参考梯度直方图计算模块61_1,61_2,...,61_n时,梯度直方图计算模块61_1,61_2,...,61_n简称为“梯度直方图计算模块61”。当参考任何给定的累积梯度计算模块时或者当整体参考累积梯度计算模块62_1,62_2,...,62_n时,累积梯度计算模块
62_1,62_2,...,62_n简称为“累积梯度计算模块62”。当参考任何给定的计算模块时或者当整体参考计算模块63_1,63_2,...,63_n时,计算模块63_1,63_2,...,63_n简称为“计算模块63”。
[0246] 最佳条件导出模块22接收与从各个增益计算模块21输出的每个阈值和每个特征量相对应的分支得分,然后导出阈值和分支得分最高的特征量数。最佳条件导出模块22将导出的特征量数和阈值作为对应节点的分支条件数据(节点的数据的示例)写入模型存储器40。
[0247] 梯度直方图计算模块的配置和运算
[0248] 图18是示出学习模块的梯度直方图计算模块的模块结构的示意图。参照图18,接下来进一步描述学习模块20中的梯度直方图计算模块61的配置和运算。图18示出了假设特征量为一维且梯度信息包括一阶梯度g和二阶梯度h的情况,在某些情况下可以简称为梯度信息g和梯度信息h。
[0249] 如图18所示,梯度直方图计算模块61包括数据计数器201,加法器202,延迟器203,梯度直方图存储器204,总和存储器205,加法器206,延迟器207,梯度直方图存储器208,以及总存储器209。
[0250] 数据计数器201输出用于从数据存储器30中读出要进行学习处理的样本数据(特征量)以及相应的梯度信息g和h的地址。
[0251] 加法器202将从梯度直方图存储器204读出的相加的梯度信息g与从数据存储器30新读出的梯度信息g相加。
[0252] 延迟器203延迟输出从数据存储器30读出的特征量以使其与由加法器202写入梯度直方图存储器204的梯度信息g定时匹配。
[0253] 梯度直方图存储器204使用特征量的值作为地址连续存储加入的梯度信息g并最终存储特征量的每个值(容器)的梯度直方图。
[0254] 总和存储器205存储从数据存储器30读出的梯度信息g的总和。
[0255] 加法器206将从梯度直方图存储器208读出的相加的梯度信息h与从数据存储器30新读出的梯度信息h相加。
[0256] 延迟器207延迟输出从数据存储器30读出的特征量以使其与由加法器206写入梯度直方图存储器208的梯度信息h定时匹配。
[0257] 梯度直方图存储器208使用特征量的值作为地址连续存储加入的梯度信息h并最终存储特征量的每个值(容器)的梯度直方图。
[0258] 总和存储器209存储从数据存储器30读出的梯度信息h的总和。
[0259] 下面简单描述梯度直方图计算模块61计算梯度直方图的运算过程。首先,梯度直方图计算模块61使用从数据计数器201输出的地址读取存储在数据存储器30中的当前节点的一条学习数据(特征量,梯度信息)。加法器202使用从数据存储器30中读出的特征量作为地址从梯度直方图存储器204中读出梯度信息g(相加的梯度信息g)。然后,加法器202将从梯度直方图存储器204中读出的梯度信息g(相加的梯度信息g)与从数据存储器30中读出的梯度信息g相加,接着,使用从数据存储器30读出的特征量作为地址,将相加后的梯度信息g写入(更新)到梯度直方图存储器204中。总和存储器205每当从数据存储器30中读出梯度信息g时就将多个梯度信息g相加,并存储梯度信息g的总和。对于梯度信息h,则由加法器206,延迟器207,梯度直方图存储器208和总和存储器209执行相同的运算。目前,对所有现有节点上的学习数据重复上述运算。
[0260] 累积梯度计算模块的配置和操作
[0261] 图19是示出学习模块的累积梯度计算模块的模块结构的示意图。参照图19,接下来进一步描述学习模块20中的累积梯度计算模块62的配置和运算。图19示出了假设特征量为一维且梯度信息包括一阶梯度g和二阶梯度h的情况。
[0262] 如图19所示,累积梯度计算模块62包括阈值计数器210,累加器211,延迟器212,差计算器213,累加器214,延迟器215和差计算器216。
[0263] 阈值计数器210输出阈值,该阈值是用于从梯度直方图存储器204和208中读出针对特征量的每个值所添加的梯度信息(g,h),即每个特征量值的梯度直方图。
[0264] 累加器211从梯度直方图存储器204中读取与从阈值计数器210输出的与阈值(地址)相对应的梯度信息g的梯度直方图,进一步将梯度直方图累加在当前存储的梯度直方图的累加和上,并保存为梯度直方图的新的累加和。
[0265] 延迟器212延迟输出从累加器211读取的梯度信息g的梯度直方图的累加以作为梯度信息g的和GL,用来与从差计算器213输出的的梯度信息g的总和GR定时匹配。
[0266] 差计算器213通过将从总和存储器205中读取的梯度信息g的总和减去从累加器211读取的梯度信息g的累加梯度直方图总和(也就是,梯度信息g的总和GL),来计算梯度信息g的梯度直方图的总和GR。
[0267] 累加器214从梯度直方图存储器208中读取与从阈值计数器210输出的与阈值(地址)相对应的梯度信息h的梯度直方图,进一步将梯度直方图累加在当前存储的梯度直方图的累加和上,并保存为梯度直方图的新的累加和。
[0268] 延迟器215延迟输出从累加器214读取的梯度信息h的梯度直方图的累加以作为梯度信息h的和HL,用来与从差计算器216输出的的梯度信息h的总和HR定时匹配。
[0269] 差计算器216通过将从总和存储器209中读取的梯度信息h的总和减去从累加器214读取的梯度信息h的累加梯度直方图总和(即,梯度信息h的总和HL),来计算梯度信息h的梯度直方图的总和HR。
[0270] 下面简单描述由累积梯度计算模块62执行的计算梯度信息之和(GL,GR,HL,HR)的运算过程。累积梯度计算模块62在梯度直方图计算模块61结束对梯度信息的梯度直方图的计算和存储处理的运算之后开始计算处理。即,在梯度直方图计算模块61结束计算处理之后,梯度直方图存储器204和208中存储来自当前节点处的所有学习数据中计算出的梯度信息g和h的梯度直方图。
[0271] 首先,累积梯度计算模块62使用从阈值计数器210输出的阈值作为地址读取存储在梯度直方图存储器204中的梯度信息g的梯度直方图。累加器211从梯度直方图存储器204中读取与从阈值计数器210输出的与阈值相对应的梯度信息g的梯度直方图,进一步将梯度直方图累加在当前存储的梯度直方图的累加和上,并保存为梯度直方图的新的累加和。差计算器213通过将从总和存储器205中读取的梯度信息g的总和减去从累加器211读取的梯度信息g的累加梯度直方图总和(即,梯度信息g的总和GL),来计算梯度信息g的梯度直方图的总和GR,并将其输出到计算模块63。与此同时,延迟器212将从累加器211读取的梯度信息g的梯度直方图的总和(即,梯度信息g的总和GL)输出到计算模块63。对于梯度信息h(计算梯度信息h的累加总和HL和HR),则由累加器214,延迟器215和差计算器216执行相同的运算。阈值计数器210依次递增计算一轮要输出的阈值,且对所有阈值重复上述运算。
[0272] 实现数据并行的情况下的梯度直方图计算模块
[0273] 图20是示出梯度直方图计算模块数据并行化的模块结构的示意图。参照图20,接下来进一步描述在实现数据并行的情况下梯度直方图计算模块61的配置和运算。图20示出了以下情况:假设数据并行的划分数为2,特征量为一维,且梯度信息仅包括一阶梯度g。
[0274] 如图20所示,为了实现划分数为2的数据并行,数据存储器30a和30b被配置为划分存储器代替图18所示的数据存储器30,梯度直方图计算模块61a和61b被配置代替梯度直方图计算模块61。
[0275] 如图20所示,梯度直方图计算模块61a包括数据计数器201a,加法器202a,延迟器203a,梯度直方图存储器204a和总和存储器205a。梯度直方图计算模块61b包括数据计数器
201b,加法器202b,延迟器203b,梯度直方图存储器204b和总和存储器205b。数据计数器
201a和201b,加法器202a和202b,延迟器203a和203b,梯度直方图存储器204a和204b以及总和存储器205a和205b的功能与上述图18描述的相应功能相同。
[0276] 在简单地配置数据并行的情况下,如图20所示,与数据存储器30类似,所配置的梯度直方图计算模块61的数量可以与划分的数量相同。在这种情况下,梯度直方图存储器的数量等于(特征量的维度′划分数)。如图20所示,特征量为一维,并且划分数为2,因而配置了两个梯度直方图存储器204a和204b。另外,在将用于一阶梯度g和二阶梯度h的各个梯度直方图存储器作为梯度信息的情况下,梯度直方图存储器的所需总容量等于(一个存储器的容量(容器数×比特宽度)×2(一阶梯度g,二阶梯度h)×特征量的维度×划分数)。在大规模数据集中,特征量的维数在许多情况下可以是几百到几千,并且当增加划分数时需要大量的存储器。因此,存储器的容量成为瓶颈,并且导致电路规模增大。例如,在特征量是8位(256个模式)并且具有2000个维度的情况下,梯度信息包括两个梯度,即一阶梯度g和二阶梯度h,以及该梯度直方图的比特宽度是12位,12[位]×256=3072[bits],因此需要一个梯度直方图存储器的存储容量才能满足3072bit。通常基于2的幂来准备存储器,因此,在这种情况下,存储器容量为4096位(4kbits)。因此,在一个划分(即,不划分)的情况下,梯度直方图存储器的总容量表示如下。
[0277] 4[kbits]×2(一阶梯度g,二阶梯度h)×2000[维度=16[Mbits]
[0278] 也就是说,每一个划分(即,不划分)需要16Mbits的存储容量,并在划分存储器的情况下,需要存储器容量为(划分数×16Mbits)。
[0279] 例如,下面考虑赛灵思公司(Xilinx Inc.)生产的名为virtex UltrScale+VU9P的芯片作为高配FPGA的情况。可以用于梯度直方图存储器的电路包括分布式RAM和块RAM。在VU9P中,分布式RAM的最大值为36.1Mbits,而块RAM的最大值为75.9Mbits。因此,在使用分布式RAM作为梯度直方图存储器时两分是极限,而在使用块RAM的情况下,四分是极限。除了用于梯度直方图,分布式RAM和块RAM还可用于其他方面,使得划分数的上限小于上述数目。因此,在特征量和梯度信息的集合被并行输入的情况下,需要一种能与图17至图20中所描述的学习模块20的配置相比的以较小规模的电路来计算和存储梯度直方图的配置。下面参考图21至图26描述根据本实施例的学习模块的配置和运算。
[0280] 根据第二实施例的学习模块的配置
[0281] 图21是示出根据第二实施例的学习及判别装置的示例性模块结构的示意图。参照图21,下面描述根据本实施例的学习和判别设备(学习设备的示例)的学习模块20a的配置和运算。在图21中,假设数据并行的划分数为2,特征量为一维。
[0282] 如图21所示,本实施例的学习模块20a包括梯度直方图计算模块71,累积梯度计算模块72,计算模块73和最佳条件推导模块22。
[0283] 梯度直方图计算模块71是使用输入的样本数据的特征量的每个值作为直方图的容器,通过对与样本数据相对应的梯度信息的值进行积分来计算梯度直方图的模块。梯度直方图计算模块71包括梯度输出模块301a和301b,加法模块302,累加器模块303和总和存储器304。
[0284] 梯度输出模块301a和301b均包括与特征量的每个值相对应的输出端口,从数据存储器30a和30b接收特征量和梯度信息的值并且通过输出端口输出与接收到的特征量的值对应的梯度信息。
[0285] 加法模块302是针对特征量的每个值(容器)对要输出的相应梯度信息进行加法的模块。
[0286] 累加器模块303是将从加法模块302输入的梯度信息与当前针对特征量的每个值(容器)对应的梯度信息相加的模块,并且最终存储每个容器的梯度信息梯度直方图。
[0287] 总和存储器304是存储由加法模块302计算出的梯度信息的总和的存储器。
[0288] 累积梯度计算模块72是通过每个特征量的阈值获得梯度直方图的累积和来计算梯度信息的和(GL,GR,HL,HR)的模块。
[0289] 计算模块73是基于上述表达式(19)并使用由累积梯度计算模块72计算出的梯度信息之和来计算每个阈值处的分支得分的模块。
[0290] 最佳条件导出模块22是接收与从计算模块73输出的每个特征量(在图21中为一个特征量)和每个阈值相对应的分支得分,并导出阈值和分支得分最高的特征量数的模块。最佳条件导出模块22将导出的特征量数和阈值作为对应节点的分支条件数据(节点的样本数据)写入模型存储器40中。
[0291] 如图21所示,为了在划分数为2的情况下实现数据并行,将存储器分为两个存储器,即数据存储器30a和30b,并且将梯度直方图计算模块71分为两个模块,即梯度输出模块301a和301b。在图21中,物理划分单元被表示为“划分1”和“划分2”。
[0292] 梯度直方图计算模块的配置和运算
[0293] 图22是示出根据第二实施例的学习模块的梯度直方图计算模块的模块结构的示意图。参照图22,下面描述根据本实施例的学习模块20a中的梯度直方图计算模块71的配置和运算。图21示出了以下情况:假定数据并行的划分数为2,特征量为一维,且梯度信息仅包括一条信息(例如,一阶梯度g)。
[0294] 如图22所示,梯度直方图计算模块71除了以上参考图21描述的配置之外,还包括数据计数器311a和311b。
[0295] 数据计数器311a输出从数据存储器30a中读取的要进行学习处理的样本数据(特征量)和对应的梯度信息的地址。
[0296] 如图22所示,梯度输出模块301a包括比较器312_1,312_2,...,312_N以及多路复用器313_1,313_2,...,313_N。在这种情况下,N可以由特征量获取的值的数量,并且是梯度直方图中的容器数。当参考任何给定的比较器时或者当整体参考比较器312_1,312_2,...,312_N时,比较器312_1,312_2,...,312_N简称为“比较器312”。当参考任何给定的多路复用器时或者当整体参考多路复用器313_1,313_2,...,313_N时,多路复用器313_1,313_
2,...,313_N简称为“多路复用器313”。
[0297] 比较器312接收从数据存储器30a读取的特征量的值和特定容器的特征量的值,并且将这些值相互比较。如果这些值相同,则比较器312将结果(例如,电压电平的ON输出)输出到多路复用器313。例如,在特征从数据存储器30a读出的数据量等于容器1的特征量的值,比较器312_1将相同这一结果输出到多路复用器313_1。
[0298] 多路复用器313接收输入的0和由比较器312从数据存储器30a读取的与特征量(学习数据)相对应的梯度信息,并根据比较器312_1比较的结果输出梯度信息或0。例如,多路复用器313_1接收输入的0和与由比较器312_1从数据存储器30a读出的特征量相对应的梯度信息,当比较器312_1比较结果相同时,输出梯度信息作为容器1的梯度信息,结果不同时输出0。即,在这种机制中,从多路复用器313输出的与特征量相对应的梯度信息,与从数据存储器30a中读出的特征量的值相对应,并且从另一个多路复用器313输出0。
[0299] 数据存储器30b,数据计数器311b和梯度输出模块301b的功能分别与上述数据存储器30a,数据计数器311a和梯度输出模块301a的功能相同。
[0300] 加法模块302针对特征量的每个值,即针对每个容器,将从多路复用器313输入的梯度信息相加,并且将相加的梯度信息输出至累加器模块303。加法模块302包括加法器321_1,321_2,...,321_N,以及加法器322。
[0301] 每一个加法器321_1,321_2,...,321_N将从多路复用器313输入的每一个容器1、2,...和N对应的梯度信息相加,并且将相加后的梯度信息输出到累加器模块303。例如,加法器321_1将与梯度输出模块301a中的容器1对应的多路复用器313_1输出的梯度信息加到与梯度输出模块301b中的容器1对应的多路复用器313_1输出的梯度信息梯度上,并将所增加的梯度信息输出至累加器模块303(容器1对应的累加器331_1稍后说明)。
[0302] 加法器322接收输入的要求和的梯度信息,并分别由梯度输出模块301a和梯度输出模块301b从数据存储器30a和30b读取梯度信息。然后,加法器322将相加的梯度信息输出到总和存储器304。
[0303] 累加器模块303将从加法模块302输入的梯度信息与当前每个特征量的值(容器)所对应的梯度信息相加,并最终存储每个容器梯度信息的梯度直方图。累加器模块303包括容器1累加器331_1,容器2累加器331_2,...,容器N累加器331_N。
[0304] 容器1累加器331_1,容器2累加器331_2,...和容器N累加器331_N将从各个加法器321_1,321_2,...,321_N输入的梯度信息相加到当前的相加梯度信息中。例如,容器1累加器331_1将从加法器321_1输入的相加梯度信息与当前存储的相加梯度信息相加,并存储容器1梯队信息的梯度直方图。
[0305] 总和存储器304将从加法器322输出的梯度信息与当前存储的相加梯度信息相加。即,总数存储存储器304存储与所有学习数据相对应的梯度信息的总和。
[0306] 下面简单描述由根据本实施例的梯度直方图计算模块71执行的计算梯度直方图的运算过程。数据计数器311a(311b)输出用于从数据存储器30a读取的要进行学习处理的样本数据(特征量)和对应的梯度信息的地址。梯度输出模块301a(301b)的比较器312接收从数据存储器30a(30b)读出的特征量和特定容器的特征量的值,并且将这些值进行比较。如果这些值相同,则比较器312将比较相同的结果输出到多路复用器313。多路复用器313接收输入的0和由比较器312从数据存储器30a(30b)读出的与特征量(学习数据)相对应的梯度信息,并根据比较器312输出的比较结果输出0或梯度信息。加法模块302的各个加法器
321_1,321_2,...和321_N将从多路复用器313输入的每个容器1,2,...,N的梯度信息相加。
并将累加的梯度信息输出到累加器模块303。累加器模块303的容器1累加器331_1,容器2累加器331_2,...,容器N累加器331_N将从各个加法器321_1,321_2,...,321_N输入的梯度信息相加加入当前每个容器1,2,...,N所存储的梯度信息中,并最终为每个容器的梯度信息存储对应的梯度直方图。对当前节点上的所有学习数据重复执行上述操作。
[0307] 在如上所述的根据本实施例的梯度直方图计算模块71的配置中,梯度直方图针对特征量的每个容器被存储在对应的寄存器(累加器)中,而不是如图20所示出的配置那样被存储在存储器中。图22所示的梯度直方图计算模块71的配置可以用数量等于(特征量的容器数×特征量的维数(在图22中,维数假定为一))的寄存器来实现。即,存储梯度直方图所需的总容量表示为(特征量的容器数×位宽×2(一阶梯度g,二阶梯度h)×特征量的维数),而不是取决于划分数。因此,如图20所示,可以大大减小用于存储梯度直方图的电路容量。另外,在根据本实施例的梯度直方图计算模块71的配置中,电路规模不取决于划分数,因此,只要其他电路模块允许,就可以增加数据并行的划分数,并可提高学习处理的速度。
[0308] 例如,在特征量是8位(256个模式)并且具有2000个维度的情况下,并且梯度信息包括两个梯度,即第一阶梯度g和第二阶梯度h,该数量所需寄存器的表示如下。
[0309] 256(容器数)×2(第一阶梯度g,第二阶梯度h)×2000[维度]=1024000[寄存器][0310] 在使用上述名为VU9P的芯片的情况下,寄存器的最大数量为2364000,因此根据本实施例的直方图计算模块71可以将保持梯度直方图所需的寄存器数量控制为梯度配置中最大寄存器数量的一半。
[0311] 图23是示出根据第二实施例的学习模块中将划分数设为3的情况下的梯度直方图计算模块的模块结构的示意图。参照图23,下面描述在假设用于数据并行的划分数为3的情况下的梯度直方图计算模块71的配置示例。图23示出了假设特征量为一维且梯度信息为一条信息(例如,一阶梯度g)的情况。
[0312] 例如,在图23中,加法模块302包括加法器321_1_1,...,321_N_1,加法器321_1_2,...,321_N_2以及加法器322_1,322_2。如在图23中所示的梯度直方图计算模块71,加法模块302可以逐步积分(累加)多条梯度信息。例如,关于容器1,加法器321_1_1将从“分区1”输出的梯度信息与从“分区2”输出的梯度信息相加,以输出至加法器321_1_2。加法器321_
1_2将从加法器321_1_1输出的相加值与从“分区3”输出的梯度信息相加,以输出至累加器模块303的容器1累加器331_1。
[0313] 累积梯度计算模块的配置和运算
[0314] 图24是示出根据第二实施例的学习模块的累积梯度计算模块的模块结构的示意图。参照图24,下面描述根据本实施例的学习模块20a中的累积梯度计算模块72的配置和运算。图24示出了以下情况:假定数据并行的划分数为1,特征量为一维,梯度信息包括两条信息(例如,一阶梯度g和二阶梯度h)。
[0315] 图19中所示的累积梯度计算模块62使用来自阈值计数器210的输出(阈值)作为地址来访问梯度直方图存储器204(208)。在图24中,梯度直方图由寄存器(累加器)针对每个容器保持,使得经由多路复用器从每个容器仅提取与阈值计数器的阈值相对应的值。
[0316] 如图24所示,累积梯度计算模块72包括阈值计数器340,累加器341,延迟342,差计算器343,累加器344,延迟345,差计算器346以及多路复用器347和348。在图24中,假定累加器模块303g和总和存储器304g分别对应于一阶梯度g的累加器模块303和总和存储器304。假定累加器模块303h和总和存储器304h分别对应于二阶梯度h的累加器模块303和总和存储器304。
[0317] 阈值计数器340输出用于从累加器模块303g和303h中读取的添加到特征量的每个值(容器)上的梯度信息(g,h)的阈值,即每个特征量的值的梯度直方图。
[0318] 多路复用器347从阈值计数器340接收阈值,以及累加器模块303g中的每个累加器(容器1累加器331_1,容器2累加器331_2,...,容器N累加器331_N)对应的存储值(梯度直方图)。然后,多路复用器347将与各个容器的输入梯度直方图中的与阈值计数器340相对应的梯度直方图输出到累加器341。
[0319] 多路复用器348从阈值计数器340接收阈值,以及累加器模块303h中每个累加器(容器1累加器331_1,容器2累加器331_2,...,容器N累加器331_N)的存储值(梯度直方图)的输入。然后,多路复用器348将与各个容器的输入梯度直方图中的与阈值计数器340相对应的梯度直方图输出到累加器344。
[0320] 累加器341从多路复用器347接收与从阈值计数器340输出的阈值相对应的梯度信息g的梯度直方图,将输入的梯度直方图加入在当前存储的梯度直方图的累积和上,并将其存储为梯度直方图的新累积和。
[0321] 延迟器342延迟输出从累加器314读取的梯度信息g的梯度直方图的累加以作为梯度信息g的和GL,用来与从差计算器343输出的的梯度信息g的总和GR定时匹配。
[0322] 差计算器343通过将从总和存储器304g中读取的梯度信息g的总和减去从累加器341读取的梯度信息g的累加梯度直方图总和(即,梯度信息g的总和GL),来计算梯度信息g的梯度直方图的总和GR。
[0323] 累加器344从多路复用器348接收与从阈值计数器340输出的阈值相对应的梯度信息h的梯度直方图,将输入的梯度直方图加入在当前存储的梯度直方图的累积和上,并将其存储为梯度直方图的新累积和。
[0324] 延迟器345延迟输出从累加器344读取的梯度信息h的梯度直方图的累加以作为梯度信息h的和HL,用来与从差计算器346输出的的梯度信息h的总和HR定时匹配。
[0325] 差计算器346通过将从总和存储器304h中读取的梯度信息h的总和减去从累加器344读取的梯度信息h的累加梯度直方图总和(即,梯度信息h的总和HL),来计算梯度信息h的梯度直方图的总和HR。
[0326] 下面简单描述由累积梯度计算模块72执行的计算梯度信息之和(GL,GR,HL,HR)的操作过程。累积梯度计算模块72在梯度直方图之后开始计算处理。计算模块71结束梯度信息的梯度直方图的计算和存储处理。即,在梯度直方图计算模块71结束计算处理之后,累加器模块303g和303h存储从当前节点的所有学习数据中计算出的各个梯度信息g和h的梯度直方图。
[0327] 首先,多路复用器347从阈值计数器340接收阈值,以及累加器模块303g中的每个累加器(容器1累加器331_1,容器2累加器331_2,...,容器N累加器331_N)对应的存储值(梯度直方图)。然后,多路复用器347将与各个容器的输入梯度直方图中的与阈值计数器340相对应的梯度直方图输出到累加器341。累加器341从多路复用器347接收与从阈值计数器340输出的阈值相对应的梯度信息g的梯度直方图,将输入的梯度直方图加入在当前存储的梯度直方图的累积和上,并将其存储为梯度直方图的新累积和。延迟器342延迟输出从累加器314读取的梯度信息g的梯度直方图的累加以作为梯度信息g的和GL,用来与从差计算器343输出的的梯度信息g的总和GR定时匹配。差计算器343通过将从总和存储器304g中读取的梯度信息g的总和减去从累加器341读取的梯度信息g的累加梯度直方图总和(即,梯度信息g的总和GL),来计算梯度,并且将和GR输出到计算模块73。这同样适用于由多路复用器348,累加器344,延迟器345和差计算器346执行的梯度信息h的运算(求和HL和HR计算处理)。阈值计数器340依次递增计算一轮要输出的阈值,且对所有阈值重复上述运算。
[0328] 这样,在梯度直方图计算模块71预先进行了梯度信息的梯度直方图的计算和存储处理之后,累积梯度计算模块72和计算模块73进行处理。因此,可以提高由学习模块20a执行的分支得分(收益)的计算处理的速度。
[0329] 维度数为2时学习模块的配置
[0330] 图25是示出根据第二实施例的学习及判别装置中将特征量的种类数设为2时的学习模块的模块结构的示意图。图26是示出根据第二实施例的学习模块中将特征量的种类数设为2时的梯度直方图计算模块的模块结构的示意图。参照图25和图25。下面描述根据本实施例的学习及判别装置(学习装置的示例)的学习模块20b的配置和运算图25示出了假设数据并行的划分数为2的情况。
[0331] 如图25所示,学习模块20b包括梯度直方图计算模块71,累积梯度计算模块72_1和72_2,计算模块73_1和73_2以及最佳条件导出模块22。梯度直方图计算模块71包括梯度输出模块301a_1、301a_2,301b_1和301b_2,加法模块302_1和302_2,累加器模块303_1和303_
2以及总和存储器304_1和304_2。如图26所示,梯度直方图计算模块71除了图26所示的配置之外还包括数据计数器311a和311b。
[0332] 如图26所示,每个梯度输出模块301a_1,301a_2,301b_1和301b_2包括比较器312_1,312_2,...,312_N,以及多路复用器313_1,313_2,...,313_N。每个加法模块302_1和302_
2包括加法器321_1,321_2,...,321_N以及加法器322。每个累加器模块303_1和303_2包括容器1累加器331_1,容器2累加器331_2,...,容器N累加器331_N。
[0333] 如图25和图26所示,梯度输出模块301a_1和301b_1,加法模块302_1,累加器模块303_1,总和存储器304_1,累积梯度计算模块72_1和计算模块73_1用于与“特征量1”相对应的处理。另一方面,梯度输出模块301a_2和301b_2,加法模块302_2,累加器模块303_2,总和存储器304_2,累积梯度计算模块72_2和计算模块73_2用于对应于“特征量2”相对应的处理。每个模块的操作与以上参考图22和图24描述的操作相同。
[0334] 如上所述,用于存储梯度直方图所需的容量被表示为(容器数×比特宽度×2(第一阶梯度g,二阶梯度h)×特征量的维度),因此,需要数量与特征量的维度相对应的累加器模块303(在图25中,累加器模块303_1和303_2)。然而,容量不取决于划分数,因此,尽管图25和图26示出了划分数为2的情况,即使特征量的尺寸为2,即使划分数等于或大于3,也可以配置两个累加器模块303。
[0335] 如上所述,在根据本实施例的学习及判别装置的学习模块20a(20b)中,梯度直方图计算模块71将梯度直方图存储在针对特征量的每个容器的对应寄存器(累加器)中,而不是如图20所示,将梯度直方图存储在存储器中。梯度直方图计算模块71的配置可以用寄存器,其数目等于(特征量的容器数×特征量的维数)。也就是说,存储梯度直方图所需的总容量表示为(容器数×位宽×2(一阶梯度g,二阶梯度h)×特征量的维数),与划分数无关。因此,与图20所示的配置相比,它具有以下优点:可以极大地减小存储针对并行输入的特征量创建的梯度直方图的信息和梯度信息的存储器(累加器,寄存器)的电路规模。另外,在根据本实施例的梯度直方图计算模块71的配置中,电路规模不依赖于划分数,因此,只要其他电路模块允许,就可以增加数据并行的划分数,并可提高学习处理的速度。
[0336] 第三实施例
[0337] 以下,主要说明与第二实施方式的学习及判别装置的不同点的第三实施方式的学习及判别装置。本实施例描述了控制模块的硬逻辑配置,该控制模块在将节点处的学习数据划分成多部分以使得GBDT进行的学习处理中并行执行学习(即,在通过数据并行执行学习的情况)。
[0338] 学习及判别装置的配置
[0339] 图27是示出根据第三实施例的学习及判别装置的模块结构的示意图。图28是示出作为下一个学习对象的节点学习数据的地址计算的示意图。参照图27和图28,描述根据本实施例的学习及判别装置1b(学习装置的示例)的模块配置。根据本实施例的学习及判别装置通过数据并行来对学习数据执行地址计算,但是在下面的描述中,图27中示出的学习及判别装置1b没有采取数据并行,而是首先由接下来进行说明的地址存储器12执行计算地址操作。
[0340] 如图28所示,本实施方式的学习及判别装置1b包括控制模块15,学习模块20,数据存储器30,模型存储器40以及分类模块50。其中,学习模块20,数据存储器30,模型存储器40和分类模块50可选的由FPGA构成。控制模块15可以经由总线执行与FPGA的数据通信。除了图27所示的组件之外,学习及判别装置1b还可以包括其他组件,例如,存储各种数据(计算机程序等)的辅助存储设备以及可选的用于与外部设备进行通信的通信I/F。学习模块20,数据存储器30,模型存储器40和分类模块50的配置和操作与第一实施例和第二实施例中描述的相同。
[0341] 控制模块15是运算模块,其整体上控制GBDT的学习。控制模块15包括CPU 10和地址管理器12(管理器)。CPU10包括控制单元11。
[0342] 控制单元11控制包括学习模块20,数据存储器30,模型存储器40和分类模块50的各个模块。控制单元11由CPU10执行计算机程序所实现。
[0343] 地址管理器12是硬逻辑模块,其从控制单元11接收节点地址(如下所述,用于区分每个深度处的节点的编号),用于指定存储体A或存储体B的选择信号,以及来自已经结束判别处理的分类模块50的中间地址,并且计算用于执行下一节点的学习的起始地址和结束地址。下面参考图28描述由地址管理器12执行的计算地址的具体运算。
[0344] 如上所述,GBDT的学习处理以节点为单位进行。当节点的学习结束时,将学习数据用于下一个节点的学习,通过分类模块50使学习数据分支以更新指针存储器,并且计算上述中间地址。为了识别存储在指针存储器31中的用于在下一节点的学习中进行学习的学习数据的地址范围,需要从起始地址,结束地址(第一地址)以及由地址管理器12作为模块执行的要存储的当前节点(第一节点)的中间地址(第二地址)开始计算范围。
[0345] 此时GBDT的目标是二叉树,因此地址管理器12在指针存储器31上计算与在学习一个节点之后分支到左右分支的节点的各个学习数据相对应的地址。即,地址管理器12从当前节点的起始地址,结束地址和中间地址的下两个节点(第二节点)相对应的两个起始地址(第三地址)和两个结束地址(第三地址)开始计算。图28是示出作为下一个学习对象的节点学习数据的地址计算的示意图。在图28中,start_address,end_address和mid_address分别表示当前节点的起始地址,结束地址和中间地址,根据这三个地址,可通过以下表达式(23)计算出start_address_1和start_address_2作为接下来的两个节点的起始地址,以及end_address_1和end_address_2作为两个结束地址。start_address_1=start_address
end_address_1=mid_address
start_address_2=mid_address+1
[0346] end_address_2=end_address   (23)
[0347] 如上所述,地址管理器12执行的地址计算处理本身很简单,并且可以通过诸如PicoBlaze和MicroBlaze的软处理器来计算地址。但是,在通过数据并行执行学习的情况下,需要为每个分区计算地址。例如,在将学习数据划分为100条的情况下,每个节点需要进行100次地址计算处理。在通过软处理器计算地址的情况下,需要几小时到几十小时,因此在通过数据并行执行学习的情况下,地址计算所需的时常成为瓶颈。在使用硬逻辑同时包括一个地址管理器的情况下,当将学习数据分为100条时,需要直接执行100次地址计算。因此,在本实施例中,通过硬逻辑来实现计算地址的功能,并且如后所述,提供由硬逻辑针对每个分区配置的地址管理器12以提高地址计算处理的速度。稍后将参考图29至图32描述地址管理器12的硬逻辑的具体配置。
[0348] 地址管理器的配置
[0349] 图29是示出根据第三实施例的地址管理器的模块结构的示意图。图30是示出根据第三实施例的地址计算部121的模块结构的示意图。图31是示出节点地址的示意图。图32是示出根据第三实施例的地址存储器的结构示意图。下面参考图29至图32描述地址管理器12的配置。
[0350] 地址管理器12包括地址计算器121,地址存储目的地控制单元122,地址存储器123和输出选择器124。
[0351] 地址计算器121基于从控制单元11接收的与当前节点(称为节点n)的节点地址(称为节点地址n)和从分类模块50接收的在学习了当前节点之后确定的中间地址,以及节点n的起始地址和结束地址,计算与上述表达式23所提到的接下来的两个节点相对应的两个起始地址和两个结束地址。具体地,地址计算器121计算节点2n的起始地址和结束地址,以及节点2(n+1)的起始地址和结束地址。然后,地址计算器121将计算出的地址和表示地址存储目的地的存储地址(节点地址2n,2(n+1))传输至地址存储目的地控制单元122。
[0352] 具体地,如图30所示,地址计算器121包括乘法器131,加法器132和加法器133。
[0353] 乘法器131是输出通过将输入节点地址n乘以2而获得的节点地址2n的算术电路。加法器132是将由乘法器131计算出的节点地址2n加1以输出节点地址2n+1的算术电路。加法器133是输出通过将输入的中间地址加1而将得到的地址作为节点2(n+1)的起始地址的算术电路。
[0354] 地址计算器121输出节点n的输入起始地址作为节点2n的起始地址。地址计算器121还输出输入的中间地址作为节点2n的结束地址。地址计算器121输出节点n的输入结束地址作为节点2(n+1)的结束地址。通过上述地址计算器121的配置和运算来实现基于上述表达式(23)的算术运算。
[0355] 地址存储目的地控制单元122是将由地址计算器121计算出的每个地址存储在由控制单元11接收的选择信号指定的存储体(存储体A或存储体B)相对应的地址存储器123的每个存储器(用于存储体A的起始地址存储器123A_ST和用于存储体A的结束地址存储器123A_ED,或用于存储体B的起始地址存储器123B_ST和用于存储体B的结束地址存储器
123B_ED)中的存储地址所指示的存储区域中的模块。例如,当选择信号指示存储体A并且存储地址指示节点地址0、1时,地址存储目的地控制单元122存储体A的起始地址存储器123A_ST和存储体A的结束地址存储器123A_ED中,在由节点地址0指示的每个存储区域中存储作为下一节点的节点0的起始地址和结束地址。与此同时,地址存储目的地控制单元122还在存储体A的起始地址存储器123A_ST和存储体A的结束地址存储器123A_ED中,在由节点地址
1指示的每个存储区域中存储作为下一节点的节点1的起始地址和结束地址。
[0356] 地址存储器123是存储与由地址计算器121计算出的接下来的两个节点相对应的两个起始地址和两个结束地址的存储器。地址存储器123包括用于存储体A的起始地址存储器123A_ST,用于存储体B的起始地址存储器123B_ST。存储体A的结束地址存储器123A_ED和存储体B的结束地址存储器123B_ED。
[0357] 用于存储体A的起始地址存储器123A_ST存储与下一节点相对应的起始地址作为用于参考存储体A的地址。用于存储体B的起始地址存储器123B_ST存储与下一节点相对应的起始地址作为用于存储单元B的地址。用于存储体A的结束地址存储器123A_ED存储对应于下一个节点的结束地址作为用于参考存储体A的地址。用于存储体B的结束地址存储器123B_ED存储对应于存储体B的结束地址。
[0358] 例如,图32示出了用于存储体A的起始地址存储器123A_ST的配置。用于存储体A的起始地址存储器123A_ST包括存储区域,每个存储区域由被称为节点地址的地址指定。如图32所示,用于存储体A的起始地址存储器123A_ST的存储区域分别由节点地址0、1,...和N组成。用于存储体B的起始地址存储器123B_ST,用于存储体A的结束地址存储器123A_ED以及用于存储体B的结束地址存储器123B_ED均与图32所示的配置相同。
[0359] 下面参考图31描述节点地址。如图31所示的决策树中,正如以上在第一实施例中所述,假定层次的顶部被称为“深度0”,低于该顶部的层次被称为“深度1”,“深度2”,...。依次将特定层次级别上最左边的节点称为“节点0”,将其右侧的节点依次称为“节点1”,“节点2”...。在这种情况下,用于指示决策树中特定层次级别的节点的地址是节点地址。例如,节点地址1是表示从左至下的特定层次级别的第二节点即节点1的地址。假设当前节点的节点地址为n,则下一个节点的节点地址为2n和2n+1,它们由地址计算器121按照如上计算所得。
[0360] 输出选择器124是从包括在地址存储器123中的四个存储器中,基于从控制单元11接收到的节点地址和选择信号指定的存储器的存储区域中读取与下一节点相对应的起始地址和结束地址,并将起始地址和结束地址输出到学习模块20的模块。例如,当从控制单元11接收的表示存储体B和节点地址2的选择信号时,输出选择器124从存储体B的起始地址存储器123B_ST中的由节点地址2指定的存储区域中读出起始地址,从存储体B的结束地址存储器123B_ED中由节点地址2指定的存储区域中读出结束地址,并输出起始地址和结束地址。
[0361] 地址管理器执行地址管理
[0362] 下面参考图33至图37,具体描述由地址管理器12执行的地址管理。
[0363] 在深度为0的节点0的学习之前
[0364] 图33是示出根据第三实施例的学习及判别装置进行的深度0,节点0的深度学习之前的地址存储器的状态示意图。
[0365] 如图33所示,在深度为0的节点0学习之前,即在初始状态下,例如,对应于深度为0的存储体A中的起始地址(0)为节点0(决策树顶部的节点)存储在存储体A的起始地址存储器123A_ST中的节点地址0处。存储体A中与深度0相对应的结束地址(max_address),节点0存储在存储体A的结束地址存储器123A_ED中的节点地址0处。在这种情况下,max_address实际上代表了学习数据的总数的值。在图33的初始状态下,起始地址和结束地址均未写入用于存储体B的起始地址存储器123B_ST和用于存储体B的结束地址存储器123B_ED。
[0366] 参照图33至图37,假定将不确定值写入“X”的存储区域。作为引起初始状态的单独的初始化步骤,可以在其中存储某个初始值。参照图33至图37,斜线阴影线的存储区域表示写入数据的存储区域,点阴影线的存储区域表示从中读出数据的存储区域。
[0367] 在深度为0的节点0学习之后
[0368] 图34是示出根据第三实施例的学习及判别装置进行的深度0,节点0的深度学习后的地址存储器的状态的示意图。
[0369] 在深度0,节点0处学习时,存储体A用作读取存储体,而存储体B用作写入存储体。输出选择器124从由节点地址0和从控制单元11接收到的表示存储体A的选择信号所指定的存储区域中读出起始地址(0)和结束地址(max_address),即用于存储体A的起始地址存储器123A_ST和用于存储体A的结束地址存储器123A_ED中的每一个中的节点地址0,并将起始地址(0)和结束地址(max_address)输出到学习模块20。
[0370] 学习模块20基于起始地址和结束地址从存储体A中读出目标学习数据的地址,并基于该地址从特征存储器32中读出学习数据(特征量)以进行学习。学习模块20将通过学习获得的特征量数和阈值作为深度为0,节点0处的分支条件数据写入模型存储器40。
[0371] 分类模块50从地址管理器12接收相同的起始地址和结束地址,基于起始地址和结束地址从存储体A中读出目标学习数据的地址,并根据从特征存储器32中获取的地址读取学习数据(特征量)。分类模块50从模型存储器40中读取深度0,节点0处的分支条件数据(特征量数,阈值)。分类模块50根据分支条件数据确定是使读出的样本数据分支到深度0,节点0的左侧还是右侧,基于结果,分类模块50将特征存储器32中的学习数据的地址写入到用作指针存储器31的写存储体的存储体B中。此时,如果确定分支到节点的左侧,则分类模块50将学习数据的地址以从升序的方式(从起始地址(0)开始)写入存储体B中。如果确定分支被执行到节点的右侧,则分类模块50将学习数据的地址以从降序的方式(从结束地址(max_address)开始)将学习数据的地址写入存储体B中。然后,模块50将与左分支的学习数据的地址和右分支的学习数据的地址的边界相对应的存储体B中的地址(中间地址)返回给地址管理器12。中间地址用于下一个分支处理。
[0372] 地址计算器121基于从控制单元11接收到的当前节点(深度0,节点0)的节点地址0,使用上述表达式(23)来计算与下一层的两个节点相对应的两个起始地址和两个结束地址,从分类模块50接收的中间地址,以及当前节点的起始地址和结束地址。具体而言,地址计算器121计算深度为1的节点0的起始地址和结束地址,以及深度为1的节点1的起始地址和结束地址。然后,地址计算器121将计算出的地址和表示该地址的存储目的地的存储地址(节点地址0,1)发送到地址存储目的地控制单元122中。
[0373] 地址存储目的地控制单元122将由地址计算器121计算出的各个地址存储在与从控制单元11接收到的选择信号所指定的存储体B相对应的存储体B的起始地址存储器123B_ST和结束地址存储器123B_ED中的存储地址(节点地址0,1)所指示的存储区域中。具体而言,地址存储目的地控制单元122将起始地址(0)存储在存储体B的起始地址存储器123B_ST中节点地址0处的深度1,节点0相对应的存储体B中,将结束地址(mid_address_0_0)存储在存储体B的结束地址存储器123B_ED中节点地址0处的深度1,节点0相对应的存储体B中。在这里,“mid_address_a_b”表示在深度a,节点b处的中间地址。此外,地址存储目的地控制单元122将起始地址(mid_address_1_0+1)存储在存储体B的起始地址存储器123B_ST中节点地址1处的深度1,节点1相对应的存储体B中,将结束地址(max_address)存储在存储体B的结束地址存储器123B_ED中节点地址1处的深度1,节点1相对应的存储体B中。
[0374] 在深度1,节点0学习之后
[0375] 图35是示出根据第三实施例的学习及判别装置进行的深度1,节点0的深度学习后的地址存储器的状态的示意图。
[0376] 在深度为1的节点0学习时,存储体B用作读出存储体,存储体A用作写存储体。输出选择器124输出从节点地址0指定存储的起始地址(0)和结束地址(mid_address_0_0)以及存储体B从控制单元11接收到的指示选择信号,即存储体B的每个起始地址存储器123B_ST和结束地址存储器123B_ED的节点地址0,并且将起始地址(0)和结束地址(mid_address_0_0)输出到学习模块20。
[0377] 学习模块20基于起始地址和结束地址从存储体B中读取目标学习数据的地址,并基于该地址从特征存储器32中读取学习数据(特征量)以进行学习。学习模块20将通过学习获得的特征量数和阈值作为深度1,节点0处的分支条件数据写入模型存储器40。
[0378] 分类模块50从地址管理器12接收相同的起始地址和结束地址,并基于起始地址和结束地址从存储体B中读取目标学习数据的地址,并根据该地址从特征存储器32中读取学习数据(特征量)。分类模块50还从模型存储器40中读取深度为1的节点0处的分支条件数据(特征量数,阈值)。分类模块50根据分支条件数据确定将读取的样本数据分支到深度1,节点0的左侧还是右侧,基于结果,分类模块50将特征存储器32中的学习数据的地址写入到用作指针存储器31的写存储体的存储体A中。此时,如果确定分支到节点的左侧,则分类模块50将学习数据的地址以升序的方式(从起始地址(0)开始)写入存储体A中。如果确定分支被执行到节点的右侧,则分类模块50将学习数据的地址以降序(从结束地址(mid_address_0_
0)开始)的方式写入存储体A中。然后,分类模块50将与左分支的学习数据的地址和右分支的学习数据的地址的边界相对应的存储体A中的地址(中间地址)返回给地址管理器12。中间地址用于下一个分支处理。
[0379] 地址计算器121基于从控制单元11接收到的当前节点(深度1,节点0)的节点地址0,使用上述表达式(23)来计算与下一层的两个节点相对应的两个起始地址和两个结束地址,从分类模块50接收的中间地址,以及当前节点的起始地址和结束地址。具体而言,地址计算器121计算深度为2的节点0的起始地址和结束地址,以及深度为2的节点1的起始地址和结束地址。然后,地址计算器121将计算出的地址和表示该地址的存储目的地的存储地址(节点地址0,1)发送到地址存储目的地控制单元122中。
[0380] 地址存储目的地控制单元122将由地址计算器121计算出的各个地址存储在与从控制单元11接收到的选择信号所指定的存储体A相对应的存储体A的起始地址存储器123A_ST和结束地址存储器123A_ED中的存储地址(节点地址0,1)所指示的存储区域中。具体而言,地址存储目的地控制单元122将起始地址(0)存储在存储体A的起始地址存储器123A_ST中节点地址0处的深度2,节点0相对应的存储体A中,将结束地址(mid_address_1_0)存储在存储体A的结束地址存储器123A_ED中节点地址0处的深度2,节点0相对应的存储体A中。此外,地址存储目的地控制单元122将起始地址(mid_address_1_0+1)存储在存储体A的起始地址存储器123A_ST中节点地址1处的深度2,节点1相对应的存储体A中,将结束地址(mid_address_0_0)存储在存储体A的结束地址存储器123A_ED中节点地址1处的深度2,节点1相对应的存储体A中。
[0381] 在深度1,节点1学习之后
[0382] 图36是示出根据第三实施例的学习及判别装置进行的深度1,节点1的学习后的地址存储器的状态的示意图。
[0383] 在深度为1的节点1学习时,存储体B用作读取存储体,存储体A用作写入存储体。输出选择器124输出从节点地址1指定存储的起始地址(mid_address_1_0+1)和结束地址(max_address)以及存储体B从控制单元11接收到的指示选择信号,即存储体B的每个起始地址存储器123B_ST和结束地址存储器123B_ED的节点地址1,并且将起始地址(mid_address_1_0+1)和结束地址(max_address)输出到学习模块20。
[0384] 学习模块20基于起始地址和结束地址从存储体B中读取目标学习数据的地址,并基于该地址从特征存储器32中读取学习数据(特征量)以进行学习。学习模块20将通过学习获得的特征量数和阈值作为深度1,节点1处的分支条件数据写入模型存储器40。
[0385] 分类模块50从地址管理器12接收相同的起始地址和结束地址,并基于起始地址和结束地址从存储体B中读取目标学习数据的地址,并根据该地址从特征存储器32中读取学习数据(特征量)。分类模块50还从模型存储器40中读取深度为1的节点1处的分支条件数据(特征量数,阈值)。分类模块50根据分支条件数据确定将读取的样本数据分支到深度1,节点1的左侧还是右侧,基于结果,分类模块50将特征存储器32中的学习数据的地址写入到用作指针存储器31的写存储体的存储体A中。此时,如果确定分支到节点的左侧,则分类模块50将学习数据的地址以升序的方式(从起始地址(0)开始)写入存储体A中。如果确定分支被执行到节点的右侧,则分类模块50将学习数据的地址以降序(从结束地址(mid_address_0_
0)开始)的方式写入存储体A中。然后,分类模块50将与左分支的学习数据的地址和右分支的学习数据的地址的边界相对应的存储体A中的地址(中间地址)返回给地址管理器12。中间地址用于下一个分支处理。
[0386] 地址计算器121基于从控制单元11接收到的当前节点(深度1,节点1)的节点地址1,使用上述表达式(23)来计算与下一层的两个节点相对应的两个起始地址和两个结束地址,从分类模块50接收的中间地址,以及当前节点的起始地址和结束地址。具体而言,地址计算器121计算深度为2的节点1的起始地址和结束地址,以及深度为2的节点3的起始地址和结束地址。然后,地址计算器121将计算出的地址和表示该地址的存储目的地的存储地址(节点地址2,3)发送到地址存储目的地控制单元122中。
[0387] 地址存储目的地控制单元122将由地址计算器121计算出的各个地址存储在与从控制单元11接收到的选择信号所指定的存储体A相对应的存储体A的起始地址存储器123A_ST和结束地址存储器123A_ED中的存储地址(节点地址2,3)所指示的存储区域中。具体而言,地址存储目的地控制单元122将起始地址(mid_address_0_0+1)存储在存储体A的起始地址存储器123A_ST中节点地址2处的深度2,节点2相对应的存储体A中,将结束地址(mid_address_1_1)存储在存储体A的结束地址存储器123A_ED中节点地址2处的深度2,节点2相对应的存储体A中。此外,地址存储目的地控制单元122将起始地址(mid_address_1_1+1)存储在存储体A的起始地址存储器123A_ST中节点地址3处的深度2,节点3相对应的存储体A中,将结束地址(max_address)存储在存储体A的结束地址存储器123A_ED中节点地址3处的深度2,节点3相对应的存储体A中。
[0388] 在深度为2的节点0学习之后
[0389] 图37是示出根据第三实施例的学习及判别装置进行的深度2,节点0的学习后的地址存储器的状态的示意图。
[0390] 在深度2,节点0处学习时,存储体A用作读取存储体,而存储体B用作写入存储体。输出选择器124从由节点地址0和从控制单元11接收到的表示存储体A的选择信号所指定的存储区域中读出起始地址(0)和结束地址(mid_adress_1_0),即用于存储体A的起始地址存储器123A_ST和用于存储体A的结束地址存储器123A_ED中的每一个中的节点地址0,并将起始地址(0)和结束地址(mid_adress_1_0)输出到学习模块20。
[0391] 学习模块20基于起始地址和结束地址从存储体A中读出目标学习数据的地址,并基于该地址从特征存储器32中读出学习数据(特征量)以进行学习。学习模块20将通过学习获得的特征量数和阈值作为深度为2,节点0处的分支条件数据写入模型存储器40。
[0392] 分类模块50从地址管理器12接收相同的起始地址和结束地址,基于起始地址和结束地址从存储体A中读出目标学习数据的地址,并根据从特征存储器32中获取的地址读取学习数据(特征量)。分类模块50从模型存储器40中读取深度2,节点0处的分支条件数据(特征量数,阈值)。分类模块50根据分支条件数据确定是使读出的样本数据分支到深度2,节点0的左侧还是右侧,基于结果,分类模块50将特征存储器32中的学习数据的地址写入到用作指针存储器31的写存储体的存储体B中。此时,如果确定分支到节点的左侧,则分类模块50将学习数据的地址以从升序的方式(从起始地址(0)开始)写入存储体B中。如果确定分支被执行到节点的右侧,则分类模块50将学习数据的地址以从降序的方式(从结束地址(mid_address_1_0)开始)将学习数据的地址写入存储体B中。然后,模块50将与左分支的学习数据的地址和右分支的学习数据的地址的边界相对应的存储体B中的地址(中间地址)返回给地址管理器12。中间地址用于下一个分支处理。
[0393] 地址计算器121基于从控制单元11接收到的当前节点(深度2,节点0)的节点地址0,使用上述表达式(23)来计算与下一层的两个节点相对应的两个起始地址和两个结束地址,从分类模块50接收的中间地址,以及当前节点的起始地址和结束地址。具体而言,地址计算器121计算深度为3的节点0的起始地址和结束地址,以及深度为3的节点1的起始地址和结束地址。然后,地址计算器121将计算出的地址和表示该地址的存储目的地的存储地址(节点地址0,1)发送到地址存储目的地控制单元122中。
[0394] 地址存储目的地控制单元122将由地址计算器121计算出的各个地址存储在与从控制单元11接收到的选择信号所指定的存储体B相对应的存储体B的起始地址存储器123B_ST和结束地址存储器123B_ED中的存储地址(节点地址0,1)所指示的存储区域中。具体而言,地址存储目的地控制单元122将起始地址(0)存储在存储体B的起始地址存储器123B_ST中节点地址0处的深度3,节点0相对应的存储体B中,将结束地址(mid_address_2_0)存储在存储体B的结束地址存储器123B_ED中节点地址0处的深度3,节点0相对应的存储体B中。此外,地址存储目的地控制单元122将起始地址(mid_address_2_0+1)存储在存储体B的起始地址存储器123B_ST中节点地址1处的深度3,节点1相对应的存储体B中,将结束地址(mid_address_1_0)存储在存储体B的结束地址存储器123B_ED中节点地址1处的深度3,节点1相对应的存储体B中。
[0395] 根据图34至图37所示的过程重复执行该处理。
[0396] 数据并行的学习及判别装置的配置
[0397] 图38是示出根据第三实施例的学习及判别装置的数据并行化的模块结构的示意下面参考图38描述根据本实施例的用于实现数据并行的学习及判别设备1c(学习装置的示例)的模块配置。在图38中示出的配置中。在图38中,假设数据并行的划分数被为2,但是划分数不限于此。
[0398] 为了对样本数据(学习数据或判别数据)实现数据并行,如图38所示,将数据存储器划分为两个数据存储器30a和30b以保存储划分的样本数据。尽管未在图38中示出数据存储器30b,但类似于数据存储器30a,数据存储器30b也包括指针存储器31,特征存储器32和状态存储器33。然而,仅划分存储样本数据的存储器是不够的,更需要用于对划分后的样本数据(学习处理,判别处理等)执行并行处理。如图38所示,进行判别处理的配置模块数与被划分的数据存储器数目相同。即,学习及判别装置1c具有用于对存储在两个数据存储器30a,30b中的各样本数据并行地进行判别处理的分类模块50a,50b(判别部)。
[0399] 如上所述,在实现数据并行的情况下,为每个分区提供了由硬逻辑配置的地址管理器12。具体地,如图38所示,用于实现数据并行的学习及判别装置1c包括控制模块15a,控制模块15a包括与每个分区相对应的地址管理器12a和12b。控制模块15a包括具有控制单元11的CPU 10以及地址管理器12a和12b。
[0400] 地址管理器12a对应于数据存储器30a和分类模块50a,并且对数据存储器30a的指针存储器31中的存储体A和B进行地址管理。地址管理器12b对应于数据存储器30b和分类模块50b,并且对数据存储器30b的指针存储器31中的存储体A和B执行地址管理。即使当划分数大于等于3时,也可以为每个划分提供对应的地址管理器12。
[0401] 简要说明用于数据并行地址管理器功能的配置
[0402] 图39是示出根据第三实施例的学习识别装置的数据并行化的地址管理器的功能的结构的示意图。下面参考图39简要说明用于数据并行的地址管理器12的功能的配置。为了给出更概括的描述,假定图39中划分数为N。
[0403] 如图39所示,实现区分数N的学习及判别装置的控制模块15b包括控制单元11和地址管理器12_1,12_2,...,12_N。学习单元100_1被当做具有与第一存储分区,分类模块50和学习模块20的数据存储器30相对应的数据存储器30的学习功能的模块。地址管理器12_1计算并将从输入/输出的存储体中读取和写入的起始地址和结束地址发送至学习单元100_1。然后,地址管理器12_1接收由学习单元100_1的分类模块50计算出的中间地址,并计算下一个节点的起始地址和结束地址。
[0404] 类似地,地址管理器12_2,...,12_N分别向学习单元100_2,...,100_N提供与上述地址管理器12_1提供给学习单元100_1的功能相似的功能。
[0405] 如上所述,在本实施例中,当通过GBDT通过数据并行来学习节点处的学习数据时,即,在将学习数据划分为要并行学习的片段时,提供与划分数以及用于管理学习及判别存储在每个数据存储器30中的学习数据的地址的地址管理器12相对应的地址管理器12。因此,地址计算所需时间与在分区为1时相同,从而大大提高了学习数据的地址计算速度。例如,在划分数为100的情况下,地址计算所需时间为在顺序进行地址计算的情况下的1/100。
[0406] 第四实施例
[0407] 以下的第四实施例,主要针对与第二实施例的学习及判别装置的不同点进行说明。在本实施方式中,为数据并行的每个分区划分模型存储器,并计算表示每个分区的识别性能的索引值。
[0408] 学习及判别装置的整体结构
[0409] 图40是示出第四实施例的学习辨别装置数据并行化的模块结构的示意图。参照图40,下面描述根据本实施例的学习及判别设备1d(学习装置的示例)的结构配置。如图140所示,假设数据并行的划分数为2,但是划分数不限于此。
[0410] 为了对样本数据(学习数据或判别数据)实现数据并行,如图40所示,将数据存储器划分为两个数据存储器30a和30b以保存储划分的样本数据。尽管未在图40中示出数据存储器30b,但类似于数据存储器30a,数据存储器30b也包括指针存储器31,特征存储器32和状态存储器33。然而,仅划分存储样本数据的存储器是不够的,更需要用于对划分后的样本数据(学习处理,判别处理等)执行并行处理。如图40所示,进行判别处理的配置模块数与被划分的数据存储器数目相同。即,学习及判别装置1d具有用于对存储在两个数据存储器30a,30b中的各样本数据并行地进行判别处理的分类模块50a,50b(判别部)。
[0411] 学习及判别装置1d还包括两个模型存储器40a和40b,其数量等于数据并行的划分数从而使得每个分类模块50a和50b可以单独读出节点数据。在这种情况下,分类模块50a和50b需要使用决策树(模型)的相同节点数据来进行针对样本权重的判别处理和更新处理(稍后描述)。因此,假设学习模块20将通过学习处理获得的相同节点数据写入各个模型存储器40a和40b。如图40所示,学习及判别装置1d中包括的学习模块20可以是图21所示的学习模块20a。或是图25中所示的学习模块20b。
[0412] 根据本实施例的学习及判别装置1d的分类模块50a和50b计算曲线下面积(AUC)作为学习模块20学到的决策树(模型)的识别性能的索引值,并将该AUC发送给控制单元11。分类模块50a根据与存储在数据存储器30a中的与划分有关的学习数据相对应的样本权重(稍后描述)等来计算AUC,并将AUC发送给控制单元11。分类模块50b根据与存储在数据存储器30b中的与划分有关的学习数据相对应的样本权重(稍后描述)等来计算AUC。并将AUC发送给控制单元11。稍后将描述用于计算AUC的分类模块50a和50b的具体配置。
[0413] 学习及判别装置中AUC计算器的配置
[0414] 图41是示出在数据并行中假设AUC计算器的数量为1时的结构的示意图。图42是示出针对数据并行的每个划分包括AUC计算器的配置的示意图。参考图41和图42,下面描述用于数据并行的AUC计算器的配置。
[0415] 每当学习模块20执行的决策树学习结束时,分类模块50a和50b更新每条学习数据的样本权重和梯度信息。此时,样本权重作为已学习的每个决策树中相应的学习数据分支的叶子的权重的总和。分类模块50a和50b使用更新后的样本权重对AUC进行计算,作为可以识别已学习的决策树性能的索引值。例如可将由分类模块50a和50b计算出的AUC用于执行早停。早停是在发现评估数据(判别数据)的识别性能停止优化时将学习处理中断的方法,通常在机器学习领域中使用。通过早停来中断学习处理,可以防止学习处理不必要地继续,并且可以在进行过度学习之前中断学习处理。由分类模块50a和50b计算的决策树的可识别性能的索引值不限于AUC,还包括其他用于识别性能的索引值。在本实施例中,在下文中假定计算AUC作为决策树的识别性能的索引值。
[0416] 如上所述,在用于数据并行的配置中,通过划分学习数据来提高学习处理的速度。作为用于学习的决策树的识别性能索引值的AUC的计算,需要比较所有学习数据的样本权重和标签,并且处理时间与学习数据的数量成比例地延长,这可能成为提高数据并行处理速度的瓶颈。标签标注了由每条学习数据定义的正确数据。
[0417] 图41示出了包括一个AUC计算器81的配置,该AUC计算器81使用数据并行中的所有学习数据的样本权重来计算AUC。图41中所示的学习单元100_1被当做具有与第一存储分区,分类模块50a和学习模块20的数据存储器30a相对应的数据存储器30a的学习功能的模块。学习单元100_2被当做具有与第二存储分区,分类模块50b和学习模块20的数据存储器30b相对应的数据存储器30b的学习功能的模块。AUC计算器81接收与每个存储分区有关的学习数据,即,来自学习单元100_1和100_2的所有学习数据的样本权重,并计算AUC。如图41所示,通过数据并行将学习数据划分成并行的学习部分可以缩短学习的处理时间,但是需要通过使用所有学习数据的样本权重来计算AUC。因此,用于计算的处理时间与学习数据的条数成比例地延长。
[0418] 因此,根据本实施例的学习及判别装置1d包括用于每个分区的AUC计算器。图42中示出的示例是在划分数为2的情况下的配置,并且设置分别与学习单元100_1和100_2相对应的AUC计算器81a和81b(性能计算器)。因此,AUC计算器81a和81b可以使用各个划分的学习数据的样本权重并行地计算AUC,从而不需要AUC计算器81a和81b整体参与计算,大大提高了AUC的计算速度。参考图43,下面描述包括AUC计算器81a和81b的学习及判别装置1d的具体配置。
[0419] 图43是示出根据第四实施例的学习及判别装置的主要部分的结构的示意图。参照图43,分类模块50a包括上述的AUC计算器81a,样本权重更新单元82a和梯度信息更新单元83a。分类模块50b包括上述的AUC计算器81b,样本权重更新单元82b和梯度信息更新单元
83b。控制单元11包括确定器13。
[0420] 样本权重更新单元82a是每当学习模块20执行完一次针对决策树的学习时,便对存储在数据存储器30a中的与划分有关的每条学习数据的样本权重进行更新的模块。具体地,样本权重更新单元82a通过使用以下表达式(24)来针对分区存储的的每条学习数据来更新样本权重。
[0421]
[0422] 表达式(24)与表达式(8)中的第四表达式相同。如表达式(24)所示,第i条学习数据的样本权重是已经学习的每个决策树中的分支的叶子权重的总和。表达式(24)右侧的第一项表示到此为止的样本权重,第二项表示当前正在学习的决策树中目标学习数据的叶权重。在已学习的每个决策树中进行类似于图15所示的分类模块50所进行的分支运算。即,样本权重更新单元82a从数据存储器30a读取特征量,将其与模型存储器40a从决策树的每个节点读取的节点数据进行对比。作为对比结果,并根据低于学习数据分支到的当前节点的节点,样本权重更新单元82a根据学习数据分支到的当前节点的下一层节点从模型存储器40a中读取学习数据分支到的节点的节点数据。因此,对于每条学习数据,样本权重更新单元82a需要多次从模型存储器40a中读取与决策树的深度相对应的节点数据。样本量更新单元82a用计算出的样本量来更新存储在数据存储器30a中的原始样本量。样本权重更新单元
82a根据低于学习数据分支的当前节点的节点,从模型存储器40a中读出学习数据分支的节点的节点数据。因此,对于每条学习数据,样本权重更新单元82a需要多次从模型存储器40a中读取与决策树的深度相对应的节点数据。样本量更新单元82a用计算出的样本量来更新存储在数据存储器30a中的原始样本量。样本权重更新单元82a根据低于学习数据分支的当前节点的节点,从模型存储器40a中读出学习数据分支的节点的节点数据。
[0423] 梯度信息更新单元83a是基于表达式(11)使用样本权重更新单元82a更新的样本权重,计算并更新梯度信息(一阶梯度gi,二阶梯度hi)的模块。在表达式(11)中,l是可选的损失函数。例如,在交叉熵误差函数的情况下,可以通过以下表达式(25)来计算梯度信息。
[0424]
[0425] 在表达式(25)中,pi是通过使用S形函数将表达式(24)的右侧的第一项标准化为0-1而获得的值。梯度信息更新单元83a用计算出的梯度信息来更新存储在数据存储器30a中的原始梯度信息。
[0426] AUC计算器81a是通过使用从数据存储器30a读出的学习数据的标签和由样本权重更新单元82a计算出的样本权重来计算AUC的模块。AUC计算器81a将计算出的AUC输出到控制单元11的确定器13中。
[0427] 样本权重更新单元82b是每当学习模块20执行完一次针对决策树的学习时,便对存储在数据存储器30b中的与划分有关的每条学习数据的样本权重进行更新的模块。样本权重更新单元82b计算样本权重的具体方法与上述样本权重更新单元82a执行的运算相同。
[0428] 梯度信息更新单元83b是基于表达式(11)使用样本权重更新单元8b更新的样本权重,计算并更新梯度信息(一阶梯度gi,二阶梯度hi)的模块。梯度信息更新单元83b计算梯度信息的具体方法与上述样本权重更新单元82b执行的运算相同。
[0429] AUC计算器81b是通过使用从数据存储器30b读出的学习数据的标签和由样本权重更新单元82b计算出的样本权重来计算AUC的模块。AUC计算器81b将计算出的AUC输出到控制单元11的确定器13中。
[0430] 在这种情况下,通过使用所有学习数据而计算出的AUC不必等于由每个AUC计算器81a和81b使用与每个分区有关的学习数据所计算出的AUC。如果用于计算AUC的其中一组学习数据有所不同,则AUC也会变为不同的值。但是,当使用AUC作为通过上述的早停来中断学习处理的索引值时,足以确定AUC是否得到了改善,从而不需要通过使用所有学习数据严格计算AUC。
[0431] 确定器13是基于由AUC计算器81a和81b计算出的各个AUC来确定是否对由学习模块20执行的针对决策树的学习处理执行早停的模块。例如,如果确定由AUC计算器81a和81b计算出的任一个AUC值、平均值或总值等稳定的大于预定值,则确定器13确定执行早停。作为用于确定AUC是否稳定的标准,例如,当AUC大于预定值的状态持续预定轮数时,确定器13可以确定执行早停。作为用于早停的特定方法,例如,当控制单元11重新执行决策树的学习时,指针存储器31将会停止初始化,并且输出到学习模块20和分类模块50a和50b的触发将会停止输出。
[0432] 假定控制单元11包括确定器13,但是不一定必须包括确定器13。在这种情况下,可以做如下配置:例如,由AUC计算器81a和81b计算出的AUC可以输出到外部。也可以这样配置:分类模块50a和50b均包括与确定器13相对应的模块来代替控制单元11包括确定器13的配置,并且当该模块确定是否执行早停时,将其确定结果发送到控制单元11。
[0433] 所有的AUC计算器81a和81b,样本权重更新单元82a和82b以及梯度信息更新单元83a和83b不必都配置为硬件模块。
[0434] 例如,在分类模块50a和50b中,样本权重更新单元82a和82b以及梯度信息更新单元83a和83b不必作为独立模块存在。即,分类模块50a和50b可以被配置为整体上具有样本权重更新单元82a和82b以及梯度信息更新单元83a和83b的功能。
[0435] 每个分区均包括AUC计算器的效果
[0436] 图44是示出在只设置一个AUC计算器和每个分区均设有一个AUC计算器时的处理时间的对比结果的示意图。参考图44,下面描述在每个分区提供一个AUC计算器时和仅提供AUC计算器用于计算AUC的处理时间时的对比结果。
[0437] 例如,假定划分数为2,并且将学习数据均等地划分存储在数据存储器30a和30b中。在每个分区均包括AUC计算器的情况下,即,在如图44的(b)所示为每个分区计算AUC的情况下,与图44中的(a)所示包括一个AUC计算器的情况相比,可以减少用于计算AUC的时间并且提高处理速度。即针对所有学习数据一次性计算AUC的情况。
[0438] 在这种情况下,通过使用所有学习数据而计算出的AUC不必等于使用与每个分区有关的学习数据所计算出的AUC。如果用于计算AUC的其中一组学习数据有所不同,则AUC也会变为不同的值。但是,当使用AUC作为通过上述的早停来中断学习处理的索引值时,足以确定AUC是否得到了改善,从而不需要通过使用所有学习数据严格计算AUC。如上所述,如果确定器13可基于由AUC计算器81a和81b计算出的任一个AUC值、平均值或总值来确定是否执行早停。以这种方式,通过早停来中断学习处理,可以防止学习处理不必要地继续,并且可以在进行过度学习之前中断学习处理。
[0439] 如上所述,在根据本实施例的学习及判别装置1d中,用于数据并行的划分数不限于2,可以大于或等于3。在这种情况下,与包括一个AUC计算器的情况相比,每个分区均包括AUC计算器足够了,并且用于AUC的计算处理的处理时间可以减少为“1/分区数”。
[0440] 每个分区包括模型存储器的效果
[0441] 图45是示出在只设置一个模型存储器和每个分区均设置一个模型存储器时的处理时间的对比结果的示意图。参考图45,下面描述在每个分区提供一个模型存储器时和仅提供一个模型存储器的处理时间时的对比结果。
[0442] 如上所述,样本权重更新单元82a和82b参考模型存储器40a和40b中的节点数据对与学习数据相对应的样本权重进行更新处理。如果状态为将学习数据分为多个部分的数据并行,并且只有一个模型存储器,则在对样本权重进行更新处理时,不能按每个分区访问模型存储器,并且产生每条数据的等待时间。例如,在划分数为3且仅有一个模型存储器(模型存储器40)的情况下,每个分区无法独立访问模型存储器40。如图45的(a)所示,模型存储器40需要被连续地访问。
[0443] 另一方面,在如图40所示的学习及判别装置1d中,针对每个分区包括模型存储器(模型存储器40a,40b)的情况下,可以在样本权重的更新处理时并行访问每个分区的模型存储器。例如,在划分数为3并且为每个划分提供模型存储器(模型存储器40a至40c)的情况下,如图45中的(b)所示,可以并行访问每个分区的模型存储器(模型存储器40a至40c),从而提高处理速度。因此,为每个分区配置模型存储器可以加快学习处理的时间。
[0444] 第五实施例
[0445] 本实施例描述将样本数据等存储在作为数据存储器的外部存储器中而不是存储在处理芯片内部的SRAM中的情况下的运算。
[0446] 如上所述,假定包括在学习及判别装置中的数据存储器(数据存储器30等)是能够进行随机存取的处理芯片内的SRAM。然而,作为处理芯片内的数据存储器的SRAM的数据容量受到限制,使得SRAM无法进行具有大规模样本数据(学习数据)的学习处理。本实施例描述了在将布置在处理芯片外部的具有大容量的动态随机存取存储器(DRAM)用作数据存储器的情况下,高速学习决策树的配置。
[0447] 图46是示出根据第五实施例的学习及判别装置的整体结构的示意图。图47是示出根据第五实施例的学习及判别装置的一个学习单元的模块结构的示意图。图48是示出根据第五实施例的学习及判别装置的外部存储器中存储样本数据的方式的示意图。参照图46至图48,对本实施方式的学习及判别装置1e的结构以及运算进行说明。假定根据本实施例的学习和辨别设备1e是在用于数据并行的划分数为3的情况下的配置。
[0448] 如图46所示,根据本实施例的学习及判别装置1e包括分配单元401,先进先出(FIFO)单元402_1至402_3,学习单元100_1至100_3,FIFO单元403_1至403_3,左缓冲单元404L(第一缓冲单元),右缓冲单元404R(第二缓冲单元)和数据存储器30D(数据存储单元)。
学习及判别装置1e还包括如图47所示的CPU 10。在图46中,为了简化描述,数据存储器30D布置在左侧和右侧,但是属于一个存储器。由于并发访问使得速度提升,可配置左侧和右侧的数据存储器30D是多个不同的存储器。学习及判别装置1e可以包括其他组成元件,例如,用作CPU 10的工作区的RAM,存储CPU10所运行的计算机程序等的ROM,存储各种数据(计算机程序等)辅助存储装置以及如图46所示的构成要素与外部设备进行通信的通信I/F。
[0449] 数据存储器30D是一个由DRAM构成的存储样本数据(包括学习数据和判别数据)和状态信息(w,g,h)的存储器。数据存储器30D存储诸如图48所示的定址模式的样本数据和状态信息。作为示例,图48示出在样本数据的特征量的数量为8,每个特征量的位长为8位,相对于每条采样数据的状态信息的位长为32位的情况下,存储样本数据和状态信息的初始定址模式。也就是说,在初始状态下,特征量和状态信息随着样本数据数量的升序顺序存储。如上所述,数据存储器30D由DRAM实现,因而无需对数据存储器30D上的每个地址进行读写,而以连续地址为块来进行读写。因此,与对每个地址进行单独访问的情况相比,可以提高处理速度。
[0450] 例如,在数据存储器30D以16字节为单位进行访问时,假定处理速度为最高的情况下,在图48中以行为单位进行访问时,处理速度最高。在这种情况下,分配单元401对数据存储器30D的每行(假设每行是1块)进行读取,并针对读取出的行中包含的样本数据的每个数据编号,将样本数据和状态信息分配给各个学习单元(学习单元100_1至100_3)。每个学习单元对决策树的每个节点进行学习,并得出分支得分最高的分支条件。
[0451] 如图47所示,数据存储器30D包括存储体a(存储体区域)和存储体b(存储体区域)。从存储体a和存储体b中读取/写入数据的操作等同于上述的指针存储器31针对存储体A和存储体B中读取/写入数据的操作。然而,与存储体A和存储体B不同,存储体a和存储体b没有存储样本数据的存储地址,而是直接存储了样本数据和状态信息本身。因此,数据存储器
30D不包括管理样本数据存储地址的指针存储器31。与存储体A和存储体B的情况类似,将从存储体a和存储体b中读取数据的存储体称为读取存储体(用于读取的存储体区域),将写入数据的存储体称为写入存储体(用于写入的存储体区域)。在下面的描述中,假设样本数据是用于学习决策树的学习数据。
[0452] 分配单元401是从数据存储器30D的存储体a或存储体b中读取每个块的样本数据和状态信息,并将样本数据和状态信息分配给包括在该块中的样本数据的每个数据编号的各个学习单元(学习单元100_1至100_3)的模块。以此方式,通过以块为单位从数据存储器30D中读取数据,可以实现作为外部存储器的数据存储器30D的足够速度。
[0453] FIFO单元402_1至402_3是缓冲以FIFO格式从分配单元401分配的样本数据和状态信息,并在每个学习单元100_1到100_3执行处理的定时输出样本数据和状态信息的模块。
[0454] 如图47所示,学习单元100_1表示具有对应于第一分区的学习功能20、分类模块50和模型存储器40的学习功能的模块。类似地,学习单元100_2对应于第二分区,学习单元100_3对应于第三分区。上面已经描述了学习模块20,分类模块50和模型存储器40的操运算。例如,基于由学习模块20导出的分支条件,在使与分支条件相对应的节点处的样本数据向左右分支的情况下,使与分支条件相对应的节点处的样本数据向左和向右分支的情况下,分类模块50再次通过FIFO单元402_1至402_3从数据存储器30D中读出数据,使样本数据在分支条件下分支,并在经由左缓冲单元404L和右缓冲单元404R读取(后述)时,将分支的样本数据和状态信息写入与存储体(读取存储体)不同的另一存储体(写入存储体)中。
[0455] 在图47中,学习单元100_1至100_3被统称为“学习单元100”,并且为了简化描述,分配单元401,FIFO单元402_1至402_3,FIFO单元403_1至403_3,左缓冲单元404L右缓冲单元404R和右缓冲单元404R均未示出。学习模块20可包括用于数据并行的每个分区的学习单元100,或者可以相当于与如上所述的学习模块20a和20b相应的用于数据并行的每个分区的处理的内部配置。例如,分类模块50可以被包括在如图16或图38所示的用于数据并行的每个分区的学习单元100中。模型存储器40可以被包括在如图16或图38所示的用于数据并行的每个分区的学习单元100中,或者如图40所示的用于数据并行的每个分区中。
[0456] 如图47所示,与数据存储器30D不同,模型存储器40不是外部存储器。这是因为模型存储器40所需的数据容量小,并且在由分类模块50执行的判别处理时随机存取是必不可少的,从而诸如DRAM的外部存储器的读写速度变得非常低。因此,模型存储器40优选地由处理芯片内的SRAM构成。
[0457] FIFO单元403_1至403_3是以FIFO格式缓冲通过学习单元100_1至100_3的分类模块50的功能和作为学习单元100_1至100_3的输出的关于分支方向的信息来区分在其作为学习目标的节点处的分支方向的样本数据。FIFO单元403_1至403_3根据对应的分支方向的信息,以FIFO格式将缓冲的样本数据适当地输出到左缓冲器单元404L或右缓冲器单元404R。
[0458] 以这种方式,通过将上述的FIFO单元402_1至402_3布置在学习单元100_1至100_3的输入侧并且将FIFO单元403_1至403_3布置在其学习侧,学习单元100_1至100_3的工作频率(图46所示的引擎时钟区)可以与学习单元100_1至100_3以外的模块的工作频率分开(数据存储器30D,分配单元401,左缓冲单元404L和右缓冲单元404R)(图46所示的内存时钟区)。因此,可以使内存时钟区中的工作频率最大化,并且可实现对数据存储器30D的足够的读写速度。
[0459] 左缓冲单元404L是从FIFO单元403_1至403_3接收分支到节点左侧的作为处理目标的样本数据,并按时间顺序对样本数据进行缓冲的模块。左缓冲器单元404L包括地址计数器和数据编号计数器(未示出)。每当向左分支的样本数据被输入到左缓冲单元404L时,地址计数器和数据编号计数器均相应的增加计数(+1)。当数据编号计数器指示具有预定数据容量的样本数据被缓冲时,左缓冲器单元404L利用地址计数器所指示的地址,按照地址的升序针对每个块将具有数据容量的样本数据写入作为写入存储体a和存储体b之一中。在将所有缓冲的样本数据全部写入存储体之后,左缓冲单元404L重置数据编号计数器。
[0460] 右缓冲单元404R是从FIFO单元403_1至403_3接收分支到节点右侧的作为处理目标的样本数据,并按时间顺序对样本数据进行缓冲的模块。右缓冲器单元404R包括地址计数器和数据编号计数器(未示出)。每当向右分支的样本数据被输入到右缓冲单元404R时,数据编号计数器相应的增加计数(+1),地址计数器相应的减少计数(-1)。当数据编号计数器指示具有预定数据容量的样本数据被缓冲时,右缓冲器单元404R利用地址计数器所指示的地址,按照地址的降序针对每个块将具有数据容量的样本数据写入作为写入存储体a和存储体b之一中。即,通过后进先出(LIFO)将在右缓冲单元404R中缓冲的采样数据写入存储体中。在将所有缓冲的样本数据全部写入存储体之后,右缓冲单元404R重置数据编号计数器
[0461] 在这种情况下,假设右缓冲器单元404R也以地址的升序将样本数据写入写存储体,如果所有样本数据分支到节点的左侧,写存储体需要与所有样本数据的数量相对应的存储容量。左缓冲单元404L也是一样。因此,在这种情况下,左缓冲器单元404L用于写入样本数据的容量和右缓冲器单元404R用于写入样本数据的容量的总和需两倍于所有样本数据数量的存储容量。然而,在本实施例中,类似于将地址存储在上述的指针存储器31中的作为写入存储体的存储体A和存储体B的操作,从左缓冲器单元404L输出的分支到节点的左侧的样本数据以地址的升序被写入到作为写入存储体的存储体a和存储体b中,从右缓冲器单元404R输出的分支到节点的右侧的样本数据以地址的降序被写入到作为写入存储体的存储体a和存储体b中。因此,写存储体,即存储体a和存储体b中的均需要有与所有样本数据的数量相对应的存储容量。
[0462] 作为左缓冲器单元404L和右缓冲器单元404R将数据写入数据存储器30D的存储体a或存储体b中的定时的基础,预定数据容量是可利用其有效地对数据存储器30D执行写入的最佳容量。例如,该预定数据容量是与要使用的数据存储器30D的突发长度相对应的容量(例如,数据存储器30D中(比特宽度)×(突发长度)的整数倍等)。基本上,至少需要一个与物理存储器中的一个地址相对应的位宽的缓冲区。例如,在每个地址具有1024位宽度的物理存储器上,至少需要以128字节为单位执行写入操作。最重要的是,优选具有与数据存储器30D相对应的,用于突发读取/写入的地址数量的缓冲器,并以该缓冲器为单位执行写入。例如,在每个地址具有1024位宽度且突发长度为4的存储器上以128字节×4=512字节为单位执行写入是有效的。也就是说,可以在累积与上述块相对应的样本数据的情况下执行写入操作。在同一存储器(数据存储器30D)上进行读取/写入的情况下,存在切换的开销。因此,可以以较大的读取/写入单位来减少开销,但是在这种情况下,左缓冲器单元404L和右缓冲器单元404R需要更大的缓冲器。例如,假设读取和写入每一个突发访问16次切换,读取和写入可以以512字节×16=8192字节为单位进行切换。
[0463] 作为预定数据容量,例如,可以将预先确定的固定值设置为左缓冲器单元404L和右缓冲器单元404R的数据数量计数器的阈值。可替代地,作为预定数据容量,例如,可以将预先确定的一些比如由CPU 10等选择的设置值设为阈值。在这种情况下,当学习及判别装置1e执行的学习处理的操作停止时可选择预先确定的设定值中的任何一个,或者在学习处理的操作期间可动态地选择设定值。当(预定的数据容量)≥(块的容量)时,能够针对每个块有效地执行写入。
[0464] 以这种方式,利用根据本实施例的学习及判别装置1e,在学习和判别决策树时,不需要一直以样本数据为单位将诸如实时分支的样本数据之类的信息写入数据存储器30D。与上面参考图5至图13描述的处理步骤类似,能够以节点为单位并且以步骤为单位反映样本数据就足够了。可以采取措施使由数据存储器30D执行的写入处于待机状态,直到在左缓冲单元404L和右缓冲单元404R中累积样本数据达到有效数据容量为止。这样,当样本数据被累积到一定数据容量并且以一定大小(块)为单位执行读/写时,可以防止细分的随机访问,并且可以实现作为外部存储器的数据存储器30D的足够速度。
[0465] 例如,如图38中所示的地址管理器(12a,12b,...)可以执行用于通过分配单元401从数据存储器30D的读存储体中读取样本数据的地址管理,以及针对数据并行的每个分区,将样本数据从左缓冲单元404L和右缓冲单元404R写入数据存储器30D的写入存储体中。
[0466] 分类模块50执行判别处理时,分类模块50需要在从数据存储器30D读出样本数据的同时将在目标节点处分支的样本数据写入数据存储器30D。在这种情况下,按时间顺序划分用于一个数据存储器30D的读取和写入操作,可以实现对数据存储器30D的读取/写入操作。此时,在某些情况下,在数据存储器30D的读取模式和写入模式之间切换需要花费很长时间,但是可以通过切换每个块的模式或在存储器中切换模式或者增加FIFO单元402_1至402_3,FIFO单元403_1至403_3,左缓冲器单元404L和右缓冲器单元404R的容量使得以更长单元切换模式的方式来减少该开销。具体地,可以针对每个数据量切换读取模式和写入模式,最大程度地将数据传输到数据存储器30D。实施例不限于按照时间顺序对一个数据存储器30D的进行读取和写入,还可以对存储体a的数据存储器和存储器b的数据存储器独立地实现读取和写入。因此,能够同时进行对一个存储体的读出处理和对另一存储体的写入处理,并且能够以更高的速度进行处理。
[0467] 在上述第一至第四实施例中,指针存储器31被部署在数据存储器30中,并且样本数据的地址被存储在存储体A和B中,因而特征存储器32和状态存储器33的容量是与可以存储在存储体A和B中的任何一个中的所有地址相对应的样本数据的总容量就足够了。然而,在每个节点处读取或写入样本数据的信息时,存储在存储体A和B中的特征存储器32和状态存储器33上的地址变得离散,因此需要随机访问,并且在将DRAM用作数据存储器30的情况下降低了存取速度。相反,在本实施例中,两个存储体,即,在没有使用指针存储器31的情况下将样本数据和状态信息写入其中的存储体a和b。因此,虽然增加了数据容量,但是即使DRAM被用作数据存储器30D使用,也可以高速地进行处理。之所以使用这种方式,是因为以存储在连续地址处的块为单位执行样本数据和状态信息的读取或写入。
[0468] 如上所述,在根据本实施例的学习及判别装置1e中,以预定块为单位从作为外部存储器的数据存储器30D中读取或写入数据(样本数据和状态信息),左缓冲单元404L和右缓冲单元404R将由学习单元100在特定节点处分支的样本数据缓冲到预先确定的容量,当样本数据累积到最大容量时,针对每个预定块将样本数据写入数据存储器30D中的连续地址。因此,可以将DRAM等用作数据存储器30D,并且对于大量的样本数据可以提高学习决策树的速度。
[0469] 假设根据上述第五实施例的学习及判别装置1e具有划分数为3的数据并行配置。或者,划分数可以是任何其他数,或者划分数可以是1。也就是说,可以采用分区据并行之外的配置。
[0470] 第六实施例
[0471] 下面,主要说明与第二实施例的学习及判别装置的不同点的第六实施例的学习及判别装置。本实施例描述了一种配置,其中学习模块包括至少两个梯度直方图存储器,以并行地在各个节点处执行学习处理。
[0472] 如以上在第二实施例中所述,累积梯度计算模块62在梯度直方图计算模块61(61a,61b)运算完成之后进行运算。此时,当输入到一个学习模块20的学习数据的个数比直方图的容器数多很多时,(梯度直方图计算模块所需的处理时长)>>(累积梯度计算模块所需的处理时长),因此可以实现数据并行操作而不会出现问题。然而,在每一个节点的学习数据的数量少的情况下,例如在决策树的更深处学习一部分的情况以及在学习数据整体的数量少的情况,存在累积梯度计算模块62进行算术运算的时间相对占比较大的问题。随着数据并行的划分数量的增加和并行化的进行,分配给一个学习模块的学习数据的数量减少,从而上述问题变得严重,并且仅通过使用数据并行无法解决该问题。为了解决这个问题,在本实施例中,设计了学习模块的内部设计。具体地,布置两个或更多个梯度直方图计算模块,并且当累积梯度计算模块在相同深度的第一节点处执行算术运算(以下称为“累积梯度计算处理”)时,梯度直方图计算模块在下一个节点处并行的执行算术运算(以下有时称为“梯度直方图计算处理”)。假定依次切换由多个梯度直方图计算模块执行的处理,并且假定在后级的累积梯度计算模块将来自梯度直方图计算模块的输出切换为输入。下面详细描述用于实现上述操作的配置以及该操作本身。梯度直方图计算模块在下一个节点并行执行算术运算(以下有时称为“梯度直方图计算处理”)。假定依次切换由多个梯度直方图计算模块执行的处理,并且假定在后级的累积梯度计算模块将来自梯度直方图计算模块的输出切换为输入。下面详细描述用于实现上述运算的配置以及该运算本身。
[0473] 学习模块的配置和运算
[0474] 图49是示出根据第六实施例的梯度直方图计算模块的模块结构的示意图。参照图49,下面描述根据本实施例的学习和判别装置的学习模块中包括的梯度直方图计算模块
61a和61b的配置和运算。如图49所示,假设学习模块包括两个梯度直方图计算模块,特征量为一维,且仅将一阶梯度g视为梯度信息。在本实施例的描述中,假设不执行数据并行的分区。包括如图49中所示的梯度直方图计算模块61a和61b以及如图50中所示的(稍后描述)累积梯度计算模块62和计算模块63的学习模块被称为“学习模块20c”。
[0475] 如图49所示,由于不进行数据并行的分区,所以本实施方式的学习及判别装置包括一个数据存储器30,学习模块20c包括具有用于访问该数据的梯度直方图计算模块61a,61b。梯度直方图计算模块61a和61b的配置与图20所示的梯度直方图计算模块61a和61b的配置相同。
[0476] 梯度直方图计算模块61a和61b访问一个数据存储器30,并且在学习时由学习模块20c经由一个端口对数据存储器30执行的访问处理期间,可以在区分时由分类模块50经由另一端口对其进行访问处理。因此,学习模块20c在学习时具有一个可以访问数据存储器30的端口,这样,梯度直方图计算模块61a和梯度直方图计算模块61b中的任何一个都可以访问数据存储器30。
[0477] 图50是示出根据第六实施例的累积梯度计算模块和计算模块的模块结构的示意图。参考50,下面描述根据本实施例的学习及判别装置的学习模块中包括的累积梯度计算模块62和计算模块63的配置和运算。
[0478] 如图50所示,学习模块20c还包括累积梯度计算模块62和计算模块63。
[0479] 在本实施例中,累积梯度计算模块62仅假设梯度信息为一阶梯度g,因此,在图19中所示的累积梯度计算模块62的配置中,仅将第一梯度g作为梯度信息。未示出与二阶梯度相对应的累加器214,延迟器215和差计算器216。也就是说,在本实施例中,累积梯度计算模块62包括阈值计数器210,累加器211,延迟器212和差计算器213。阈值计数器210,累加器211,延迟器212,差计算器213和差计算器213与图19描述的运算相同。如上所述,累积梯度计算模块62将来自梯度直方图计算模块(在图50中为梯度直方图计算模块61a和61b)的输出切换为输入。即,累积梯度计算模块62在梯度直方图存储器204a(直方图存储单元,第一直方图存储单元,第二直方图存储单元)和总和存储器205a之间切换,以及梯度直方图存储器204b(直方图存储单元,第一直方图存储单元,第二直方图存储单元)和总和存储器205b之间切换的同时进行访问。在这种情况下,可以在梯度直方图计算模块61a和61b的输出之间插入一个切换模块以用于输入到累积梯度计算模块62。
[0480] 计算模块63的运算也与图19所示的计算模块63的运算相同。
[0481] 决策树的学习处理
[0482] 图51是示出根据第六实施例的学习及判别装置进行的学习及判别进程的时序图的示意图。参考图51,下面描述在本实施例中在决策树的学习处理时由分类模块50执行的判别和由学习模块20c执行的学习的并行处理的时序图。
[0483] 图51(a)示出了在不执行常规并行处理的情况下按照顺序交替执行学习及判别时的时序图。在图51(a)所示的时序图中,在结束每一层每一个具体节点的学习及判别后,执行该节点的下一节点处的学习及判别。
[0484] 另一方面,图51的(b)示出了由本实施例的学习及判别装置并行进行学习及判别时的时序图。在图51(b)所示的时序图中,由梯度直方图计算模块61a和61b执行的梯度直方图计算处理的相互执行定时,由累积梯度计算模块62执行的累积梯度计算处理以及由分类模块50执行的判别处理之间的关系。
[0485] 如图51(b)所示,使得能够在与深度1的节点和随后的深度对应的节点处执行并行处理。例如,深度为0的节点仅有节点0,因此不能执行学习及判别的并行处理。在如图51(b)所示的学习处理中包括梯度直方图的图表旁边添加的数字用于区分梯度直方图计算模块61a和61b的。即,“(1)”表示由梯度直方图计算模块61a执行的梯度直方图计算处理,而“(2)”表示由梯度直方图计算模块61b执行的梯度直方图计算处理。在表示学习处理中包括的累积梯度计算处理的图表附近添加的数字“(1)”表示由累积梯度计算模块62执行的累积梯度计算处理。
[0486] 在深度1处,由梯度直方图计算模块61a对节点0进行的梯度直方图计算处理结束后,开始由累积梯度计算模块62使用存储在梯度直方图存储器204a中的添加的梯度信息来对节点0的累积梯度进行计算处理。此时,由梯度直方图计算模块61a执行的对数据存储器30的访问处理结束,从而通过由梯度直方图计算模块61b执行的针对节点1的梯度直方图计算处理与由累积梯度计算模块62执行的针对节点0的累积梯度计算处理并行进行。在由梯度直方图计算模块61b执行的针对节点1的梯度直方图计算处理比由累积梯度计算模块62进行的针对节点0的累积梯度计算处理更早结束的情况下,因为存在一个累积梯度计算模块62,所以要求节点1处于待机状态,直到由累积梯度计算模块62执行的针对节点0的累积梯度计算处理结束为止。在针对节点0的累积梯度计算处理结束之后,可以由累积梯度计算模块62与针对分类0的对节点0的判别处理并行地执行针对节点1的累积梯度计算处理。
[0487] 在深度2和随后的深度处的操作与在深度1处的操作相同。梯度直方图计算模块61a和梯度直方图计算模块61b交替地执行梯度直方图计算处理。学习模块20执行的处理(包括梯度直方图计算处理和累积梯度计算处理)和分类模块50执行的判别并行处理。另外,由梯度直方图计算模块61a或梯度直方图计算模块61b执行的使下一个节点的梯度直方图计算处理,与由累积梯度计算模块62执行的用于特定节点的累积梯度计算处理并行进行。此外,数据存储器30包括用于学习的端口和用于判别的端口,从而可以开始由梯度直方图计算模块61a与针对节点0的判别处理并行地执行针对节点2的梯度直方图计算处理。例如,由分类模块50执行。
[0488] 通过如上所述的运算,与如图51(a)所示的不执行并行处理的情况相比,可以提高处理速度,并且可以提高对决策树的学习处理速度。
[0489] 根据本实施例的学习模块20c包括两个梯度直方图计算模块(61a,61b),但是实施例不限于此。学习模块20c可以包括两组梯度直方图存储器和总和存储器(即,梯度直方图存储器204a和204b以及总和存储器205a和205b),并且可以配置一个算术电路作为梯度直方图计算模块的其他算术电路。因此,如图49所示,与包括两个梯度直方图计算模块(61a,61b)的配置相比,可以减小电路规模。
[0490] 在图49所示的配置示例中,布置了两个梯度直方图计算模块61a和61b,但是配置不限于此,并且可以布置三个或更多个梯度直方图计算模块。
[0491] 第一修改例
[0492] 本修改例描述了在除了两个或更多个梯度直方图计算模块之外还包括其数量与梯度直方图计算模块的数量相同的累积梯度计算模块的情况下的配置和运算。
[0493] 学习模块的配置和运算
[0494] 图52是示出根据第六实施例的第一修改例的学习及判别装置的学习模块的模块结构的示意图。参考图52,下面描述根据本修改例的学习及判别装置的学习模块20d的配置和运算。如图52所示,下面描述假设学习模块20d包括两个梯度直方图计算模块和两个累积梯度计算模块,特征量为一维,并且梯度信息仅为一阶梯度g。
[0495] 如图52所示,由于没有进行数据并行的分区,所以本修改例的学习及判别装置包括1个数据存储器30,学习模块20d包括用于访问该数据的梯度直方图计算模块61a,61b,数据存储器30,累积梯度计算模块62a和62b(累积梯度计算单元,第一累积梯度计算单元,第二累积梯度计算单元)和计算模块63。梯度直方图计算模块的配置和运算图61a和61b与以上参考图49描述的相同。
[0496] 类似于图50所示的累积梯度计算模块62,其可以包括:累积梯度计算模块62a包括阈值计数器210,累加器211,延迟212和差计算器213。阈值计数器210,累加器211,延迟212和差计算器213的运算与以上参考图19描述的相同。但是,累积梯度计算模块62a的阈值计数器210输出阈值,该阈值是用于读出针对特征量的每个值添加的梯度信息(g)的地址,即,来自梯度直方图计算模块61a的梯度直方图存储器204a的特征量的每个值的梯度直方图(直方图存储单元,第一直方图存储单元,第二直方图存储单元)。累积梯度计算模块62a的累加器211从梯度直方图计算模块61a的梯度直方图存储器204a中读出与从阈值计数器210输出的阈值(地址)相对应的梯度信息g的梯度直方图,将梯度直方图累积在当前存储的梯度直方图的累积和上,并将其作为新的梯度直方图的累积和存储。
[0497] 类似于图50所示的累积梯度计算模块62,其可以包括:累积梯度计算模块62b包括阈值计数器210,累加器211,延迟212和差计算器213。阈值计数器210,累加器211,延迟212和差计算器213的运算与以上参考图19描述的相同。但是,累积梯度计算模块62b的阈值计数器210输出阈值,该阈值是用于读出针对特征量的每个值添加的梯度信息(g)的地址,即,来自梯度直方图计算模块61b的梯度直方图存储器204b的特征量的每个值的梯度直方图(直方图存储单元,第一直方图存储单元,第二直方图存储单元)。累积梯度计算模块62b的累加器211从梯度直方图计算模块61b的梯度直方图存储器204b中读出与从阈值计数器210输出的阈值(地址)相对应的梯度信息g的梯度直方图,将梯度直方图累积在当前存储的梯度直方图的累积和上,并将其作为新的梯度直方图的累积和存储。
[0498] 计算模块63是使用由累积梯度计算模块62a和62b计算的梯度信息之和并基于上述表达式(19)来计算每个阈值处的分支得分的模块。在这种情况下,计算模块63将来自累积梯度计算模块62a和62b的输出切换为输入。可以插入将累积梯度计算模块62a和62b的输出切换为到计算模块63的输入的切换模块。
[0499] 决策树的学习处理
[0500] 图53是示出根据第六实施例的第一修改例的学习及判别装置进行的学习及判别进程的时序图的示意图。参考图53,下面描述在本修改例中在决策树的学习处理时,并行执行的分类模块50执行的判别和学习模块20d执行的学习处理的时序图。
[0501] 图53(a)示出了在不执行常规并行处理的情况下按照顺序交替执行学习及判别时的时序图。在图53(a)所示的时序图中,在结束每一层每一个具体节点的学习及判别后,执行该节点的下一节点处的学习及判别。
[0502] 另一方面,图53的(b)示出了由本实施例的学习及判别装置并行进行学习及判别时的时序图。在图53(b)所示的时序图中,由梯度直方图计算模块61a和61b执行的梯度直方图计算处理的相互执行定时,由累积梯度计算模块62执行的累积梯度计算处理以及由分类模块50执行的判别处理之间的关系。
[0503] 如图53(b)所示,使得能够在与深度1的节点和随后的深度对应的节点处执行并行处理。例如,深度为0的节点仅有节点0,因此不能执行学习及判别的并行处理。在如图53(b)所示的学习处理中包括梯度直方图的图表旁边添加的数字用于区分梯度直方图计算模块61a和61b的。即,“(1)”表示由梯度直方图计算模块61a执行的梯度直方图计算处理,而“(2)”表示由梯度直方图计算模块61b执行的梯度直方图计算处理。在表示学习处理中包括的累积梯度计算处理的图表附近添加的数字表示由累积梯度计算模块62a和61b执行的累积梯度计算处理。即,“(1)”表示由累积梯度计算模块61a执行的梯度直方图计算处理,而“(2)”表示由累积梯度计算模块61b执行的梯度直方图计算处理。
[0504] 在深度1处,由梯度直方图计算模块61a对节点0进行的梯度直方图计算处理结束后,开始由累积梯度计算模块62a使用存储在梯度直方图存储器204a中的添加的梯度信息来对节点0的累积梯度进行计算处理。此时,由梯度直方图计算模块61a执行的对数据存储器30的访问处理结束,从而通过由梯度直方图计算模块61b执行的针对节点1的梯度直方图计算处理与由累积梯度计算模块62a执行的针对节点0的累积梯度计算处理并行进行。区别于第六实施例所描述的,尽管在由梯度直方图计算模块61b执行的针对节点1的梯度直方图计算处理比由累积梯度计算模块62a进行的针对节点0的累积梯度计算处理更早结束的情况下,在结束节点1的梯度直方图计算处理之后,可以由累积梯度计算模块62b连续开始执行累积梯度计算处理。累积梯度计算模块62b针对节点1的累积梯度计算处理可与的分类模块50针对对节点0的判别处理并行地执行。
[0505] 在深度2和随后的深度处的操作与在深度1处的操作相同。只要执行梯度直方图计算处理,就可以并行执行梯度直方图计算模块61a和累积梯度计算模块62a的学习处理以及梯度直方图计算模块61b和累积梯度计算模块62b的学习处理。梯度直方图计算模块61a进行的梯度直方图计算处理与梯度直方图计算模块61b进行的梯度直方图计算处理不重叠。例如,由于累积梯度计算模块62a和累积梯度计算模块62b指的是不同的,所以可以并行执行由累积梯度计算模块62a进行的累积梯度计算处理和由累积梯度计算模块62b进行的累积梯度计算处理。梯度直方图存储器(204a,204b)。即,在由累积梯度计算模块62a执行的累积梯度计算处理结束之前,可以开始由累积梯度计算模块62b执行累积梯度计算处理。另外,能够执行由学习模块20执行的学习的并行处理(包括梯度直方图计算处理和累积梯度计算处理)以及由分类模块50执行的判别。此外,数据存储器30包括用于学习的端口和用于判别的端口,从而可以开始由梯度直方图计算模块61a与针对节点0的判别处理并行地执行针对节点2的梯度直方图计算处理。例如,由分类模块50执行。但是,在由累积梯度计算模块
62a执行的对节点0的累积梯度计算处理和由梯度直方图计算模块61a进行的针对节点2的梯度直方图计算处理中,累积梯度计算模块62a和梯度直方图计算模块61a访问梯度直方图存储器204a。因此,需要由梯度直方图计算模块61a执行的针对节点2的梯度直方图计算处理处于待机状态,直到由累积梯度计算模块62a进行的针对节点0的累积梯度计算处理结束为止。
[0506] 通过如上所述的运算,与如图53(a)所示的不执行并行处理的情况相比,可以提高处理速度,并且可以提高对决策树的学习处理速度。另外,与上述第六实施例中的图49和图50中所示的配置相比,本修改例的结构包括累加梯度计算模块,其数量与梯度直方图计算模块的数量相同,并且在梯度直方图执行处理之后,开始由与梯度直方图计算模块相对应的累加梯度计算模块执行处理计算模块,因此与根据第六实施例的配置相比,可以进一步提高学习处理的速度。
[0507] 根据本实施例的学习模块20d包括两个梯度直方图计算模块(61a,61b),但是实施例不限于此。学习模块20d可以包括两组梯度直方图存储器和总和存储器(即,梯度直方图存储器204a和204b以及总和存储器205a和205b),并且可以配置一个算术电路作为梯度直方图计算模块的其他算术电路。因此,如图52所示,与包括两个梯度直方图计算模块(61a,61b)的配置相比,可以减小电路规模。
[0508] 在图52所示的配置示例中,布置了两个与梯度直方图计算模块62a和62b相对应的累积梯度计算模块62a和62b,但是配置不限于此,即,在包括三个或更多个梯度直方图计算模块的情况下,可以布置与各个梯度直方图计算模块相同数量的累积梯度计算模块。
[0509] 第二修改例
[0510] 在本修改例中,除了包括上述的两个梯度直方图计算模块(61a,61b)和两个累积梯度计算模块(62a,62b)的结构以外,还描述了基于第一修改例配置第三累积梯度计算模块的情况下的结构和运算。
[0511] 学习模块的配置和运算
[0512] 图54是示出根据第六实施例的第二修改例的学习及判别装置的学习模块的模块结构的示意图。参考图54,下面描述根据本修改例的学习及判别装置的学习模块20e的配置和运算。如图54所示,下面描述假设学习模块20e包括三个梯度直方图计算模块和两个累积梯度计算模块,特征量为一维,并且梯度信息仅为一阶梯度g。
[0513] 如图54所示,由于没有进行数据并行的分区,所以本修改例的学习及判别装置包括1个数据存储器30,学习模块20e包括用于访问该数据的梯度直方图计算模块61a,61b,61c,数据存储器30,累积梯度计算模块62a和62b(累积梯度计算单元,第一累积梯度计算单元,第二累积梯度计算单元)和计算模块63。梯度直方图计算模块的配置和运算图61a和61b与以上参考图49描述的相同。梯度直方图计算模块61c的配置和运算也与之相同。在此,将梯度直方图计算模块61c中包括的梯度直方图存储器称为“梯度直方图存储器204c”,将梯度直方图计算模块61c中所包括的总和存储器称为“总和存储器205c”。
[0514] 假设梯度直方图计算模块61a至61c访问一个数据存储器30,并且在学习时由学习模块20e经由一个端口对数据存储器30执行的访问运算期间,可以通过对数据存储器30进行访问处理。分类模块50通过另一个端口进行分类。因此,在学习时,学习模块20e可以使用一个端口访问数据存储器30,从而梯度直方图计算模块61a至61c中的任何一个都可以访问数据存储器30。
[0515] 类似于图50所示的累积梯度计算模块62,其可以包括:累积梯度计算模块62a包括阈值计数器210,累加器211,延迟器212和差计算器213。阈值计数器210,累加器211,延迟器212和差计算器213的运算与以上参考图19描述的相同。但是,累积梯度计算模块62a和62b从已经结束梯度直方图计算处理的梯度直方图计算模块61a至61c中的任何一个接收输出的输入,即,访问梯度直方图存储器204a至204c中的任何一个分别包括在梯度直方图计算模块61a至61c中的存储单元。
[0516] 在这种情况下,计算模块63将来自累积梯度计算模块62a和62b的输出切换为输入。可以插入将累积梯度计算模块62a至62c的输出切换为到计算模块63的输入的切换模块。
[0517] 计算模块63的操作与图52所示的计算模块63的操作相同。
[0518] 决策树的学习处理
[0519] 图55是示出根据第六实施例的第二修改例的学习及判别装置进行的学习及判别进程的时序图的示意图。参考图55,下面描述在本修改例中在决策树的学习处理时,并行执行的分类模块50执行的判别和学习模块20e执行的学习处理的时序图。
[0520] 图55(a)示出了在不执行常规并行处理的情况下按照顺序交替执行学习及判别时的时序图。在图55(a)所示的时序图中,在结束每一层每一个具体节点的学习及判别后,执行该节点的下一节点处的学习及判别。
[0521] 另一方面,图55的(b)示出了由本实施例的学习及判别装置并行进行学习及判别时的时序图。在图55(b)所示的时序图中,由梯度直方图计算模块62a至62c执行的梯度直方图计算处理的相互执行定时,由累积梯度计算模块62执行的累积梯度计算处理以及由分类模块50执行的判别处理之间的关系。
[0522] 如图55(b)所示,使得能够在与深度1的节点和随后的深度对应的节点处执行并行处理。例如,深度为0的节点仅有节点0,因此不能执行学习及判别的并行处理。在如图55(b)所示的学习处理中包括梯度直方图的图表旁边添加的数字用于区分梯度直方图计算模块62a至62c的。即,“(1)”表示由梯度直方图计算模块61a执行的梯度直方图计算处理,“(2)”表示由梯度直方图计算模块61b执行的梯度直方图计算处理,“(3)”表示由梯度直方图计算模块61c执行的梯度直方图计算处理。在表示学习处理中包括的累积梯度计算处理的图表附近添加的数字表示由累积梯度计算模块62a和61b执行的累积梯度计算处理。即,“(1)”表示由累积梯度计算模块61a执行的梯度直方图计算处理,而“(2)”表示由累积梯度计算模块
61b执行的梯度直方图计算处理。
[0523] 在深度1处,由梯度直方图计算模块61a对节点0进行的梯度直方图计算处理结束后,开始由累积梯度计算模块62a使用存储在梯度直方图存储器204a中的添加的梯度信息来对节点0的累积梯度进行计算处理。此时,由梯度直方图计算模块61a执行的对数据存储器30的访问处理结束,从而通过由梯度直方图计算模块61b执行的针对节点1的梯度直方图计算处理与由累积梯度计算模块62a执行的针对节点0的累积梯度计算处理并行进行。区别于第六实施例所描述的,尽管在由梯度直方图计算模块61b执行的针对节点1的梯度直方图计算处理比由累积梯度计算模块62a进行的针对节点0的累积梯度计算处理更早结束的情况下,在结束节点1的梯度直方图计算处理之后,可以由累积梯度计算模块62b连续开始执行累积梯度计算处理。累积梯度计算模块62b针对节点1的累积梯度计算处理可与的分类模块50针对对节点0的判别处理并行地执行。在图55所示的示例中,仅执行在深度1针对两个节点(节点0,1)的处理,从而梯度直方图计算模块61c无需执行运算。
[0524] 在深度2和随后的深度处的操作与在深度1处的操作相同。在由学习模块20e执行的学习处理中,由梯度直方图计算模块61a进行的梯度直方图计算处理,由梯度直方图计算模块61b进行的梯度直方图计算处理以及由梯度直方图计算模块61c进行的梯度直方图计算处理只要这些处理彼此不重叠,就可以并行运算。例如,因为累积梯度计算模块62a和累积梯度计算模块62b分别引用不同的梯度直方图存储器(204a,204b),累积梯度计算模块62a对节点0的累积梯度计算处理和累积梯度计算模块62b对节点1的累积梯度计算处理可以并行运算。梯度直方图存储器204c访问由梯度直方图计算模块61c执行的针对节点2的梯度直方图计算处理,梯度直方图存储器204a访问由累积梯度计算模块62a执行的针对节点0的累积梯度计算处理。因此,在梯度直方图存储器204a访问由累积梯度计算模块62a执行的针对节点0的累积梯度计算处理结束之前,梯度直方图存储器204c可以开始访问由梯度直方图计算模块61c执行的针对节点2的梯度直方图计算处理。然而,由累积梯度计算模块62a执行的针对节点0的累积梯度计算处理和由累积梯度计算模块62a执行的针对节点2的累积梯度计算处理是由同一模块执行的处理。因此,由累积梯度计算模块62a执行的针对节点2的累积梯度计算处理需要处于待机状态,直到由累积梯度计算模块62a执行的针对节点0的累积梯度计算处理结束为止。
[0525] 通过如上所述的运算,与如图55(a)所示的不执行并行处理的情况相比,可以提高处理速度,并且可以提高对决策树的学习处理速度。另外,与上述第六实施例中的图52中所示的配置相比,本修改例中还设置了一个梯度直方图计算模块,因此,在由累积梯度计算模块62a执行的针对节点0的累积梯度计算处理结束之前,可以开始由梯度直方图计算模块61c执行针对节点2的梯度直方图计算处理。因此,与根据第一修改例的配置相比,可以进一步提高学习处理的速度。
[0526] 根据本实施例的学习模块20e包括三个梯度直方图计算模块(61a至61c),但是实施例不限于此。学习模块20e可以包括三组梯度直方图存储器和总和存储器(即,梯度直方图存储器204a至204c以及总和存储器205a和205b),并且可以配置一个算术电路作为梯度直方图计算模块的其他算术电路。因此,如图54所示,与包括两个梯度直方图计算模块(61a至61c)的配置相比,可以减小电路规模。
[0527] 在图54所示的配置示例中,布置了三个与梯度直方图计算模块62a至61c以及两个累积梯度计算模块62a和62b,但是配置不限于此,即,在包括四个或更多个梯度直方图计算模块的情况下,可以布置与各个梯度直方图计算模块相同数量的累积梯度计算模块。
[0528] 在第六实施例以及上述的第一和第二修改例中,假定处理在每一层深度是以节点0,1,...的顺序执行的,但是实施例不限于此。即,可以按照学习数据的数量彼此接近的节点的顺序在每一层深度处执行运算。例如,当在某一深度的学习及判别处理结束时,可以按照学习数据的数量的降序(或升序)对下一深度的各个节点进行排序,以使该数量在相邻节点处的学习数据彼此接近,并且可以按节点具有更大(或更小)数量的学习数据的顺序来执行学习处理。因此,可以减少每个处理的等待时间,并且可以进一步提高学习处理的速度。
[0529] 在第六实施例以及上述的第一和第二修改例中,示出了不执行通过数据并行的分区的情况,但是实施方式不限于此。可设置多个学习模块(20C至20E),多个数据存储器30(数据存储单元),以及多个分类模块50,数据并行的分区数可以大于或等于2。在数据并行的情况下,模型存储器40也可以具有与上述第四实施例相同的划分配置。
[0530] 第六实施例以及上述第一和第二修改例中的配置也可以应用于第五实施例。
[0531] 上述实施例是说明性的,而非限制本发明。因此,鉴于上述实施例,可以有许多附加的修改和变化。例如,在本公开和所附权利要求的范围内,本文中不同说明性和示例性实施例的至少一个元素可彼此组合或互相替换。此外,实施例的组件的特征,例如数量,位置和形状不限于实施例,因此可以优选地设置。因此,应理解,在所附权利要求的范围内,本发明的公开内容可以不同于本文具体描述的方式实践。
[0532] 本文描述的方法步骤、处理或操作不应被解释为必须要求它们以所讨论或说明的特定顺序执行,除非明确地标识为执行顺序或通过上下文清楚地标识。还应理解,可以采用另外的或替代的步骤。
[0533] 此外,任何上述装置,设备或单元可以实施为硬件装置,例如专用电路或装置,或者实施为硬件/软件组合,例如运行软件程序的处理器。
[0534] 此外,如上所述,本发明的上述和其他方法中的任何一个可以以存储在任何种类的存储介质中的计算机程序的形式实现。存储介质的示例包括但不限于软盘、硬盘、光盘、磁光盘、磁带、非易失性内存、半导体内存、只读内存(ROM)等。
[0535] 或者,本发明的上述和其他方法中的任何一个可以通过专用集成电路(ASIC)、数字信号处理器(DSP)或现场可编程门阵列(FPGA)来实施,通过互连适当的方式来准备。传统组件电路的网络或其组合与一个或多个传统的通用微处理器或相应编程的信号处理器的组合。
[0536] 所描述的实施例的每个功能可以由一个或多个处理电路或电路实施。处理电路包括编程处理器、因为处理器包括电路。处理电路还包括例如专用集成电路(ASIC)、数字信号处理器(DSP)、现场可编程门阵列(FPGA)和用于执行所述功能的传统电路部件的装置。

当前第1页 第1页 第2页 第3页