一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

用于采用微结构化权重剪枝和权重统一进行神经网络模型压缩的方法及装置与流程

2022-06-12 06:38:35 来源:中国专利 TAG:

用于采用微结构化权重剪枝和权重统一进行神经网络模型压缩的方法及装置
相关申请的交叉引用
1.本技术要求于2021年5月13日提交到美国专利和商标局的美国专利申请第17/319,313号的优先权,该美国专利申请要求于2020年6月17日提交的美国临时专利申请第63/040,216号、于2020年6月17日提交的美国临时专利申请第63/040,238号以及于2020年6月23日提交的美国临时专利申请第63/043,082号的优先权,这些专利申请公开的全部内容通过引用并入本技术。


背景技术:

2.深度神经网络(deep neural networks,dnn)在诸如语义分类、目标检测/识别、目标追踪、视频质量增强等大范围视频应用中的成功,引起了对压缩dnn模型的需求。因此,运动图像专家组(motion picture experts group,mpeg)正积极致力于神经网络标准(neural network standard,nnr)的编码表示,该标准用于对dnn模型进行编码,以节省存储和计算量。


技术实现要素:

3.根据实施例,一种神经网络模型压缩的方法,由至少一个处理器执行,该方法包括接收输入神经网络和输入掩膜;以及使用深度神经网络减少输入神经网络的参数,该深度神经网络通过以下训练:从深度神经网络的、被输入掩膜所掩膜(masked)的输入权重的多个块中,选择待剪枝的剪枝微结构块(pruning micro-structure blocks);基于选择的剪枝微结构块,对输入权重进行剪枝;从被输入掩膜所掩膜的输入权重的多个块中,选择待统一的统一微结构块;以及基于选择的统一微结构块,对已剪枝的输入权重的多个块中的一个或多个块中的多个权重进行统一,以得到所述深度神经网络的已剪枝且已统一的输入权重。该方法进一步包括:基于所述输入神经网络和所述深度神经网络的所述已剪枝且已统一的输入权重,得到具有减少的参数的输出神经网络。
4.根据实施例,一种用于神经网络模型压缩的装置包括:至少一个存储器,所述存储器被配置为存储程序代码,以及至少一个处理器,所述处理器被配置为读取程序代码并按照程序代码的指示进行操作。所述程序代码包括接收代码,所述接收代码被配置为使所述至少一个处理器接收输入神经网络和输入掩膜;以及减少代码,所述减少代码被配置为使用深度神经网络使所述至少一个处理器减少所述输入神经网络的参数;所述深度神经网络通过以下训练:从所述深度神经网络的、被所述输入掩膜所掩膜的输入权重的多个块中,选择待剪枝的剪枝微结构块;基于选择的剪枝微结构块,对所述输入权重进行剪枝;从被所述输入掩膜所掩膜的输入权重的多个块中,选择待统一的统一微结构块;以及基于选择的统一微结构块,对所述已剪枝的输入权重的多个块中的一个或多个块中的多个权重进行统一,以得到所述深度神经网络的已剪枝且已统一的输入权重。所述程序代码进一步包括:获取代码,所述获取代码被配置为使所述至少一个处理器基于所述输入神经网络和所述深度
神经网络的已剪枝且已统一的输入权重来输出具有减少的参数的输出神经网络。
5.根据实施例,一种非暂时性计算机可读介质,所述介质存储有指令,当被至少一个处理器执行用于神经网络模型压缩时,所述指令使所述至少一个处理器:接收输入神经网络和输入掩膜;使用深度神经网络减少所述输入神经网络的参数,所述深度神经网络通过以下训练:从所述深度神经网络的、被所述输入掩膜所掩膜的输入权重的多个块中,选择待剪枝的剪枝微结构块;基于选择的剪枝微结构块,对所述输入权重进行剪枝;从被所述输入掩膜所掩膜的输入权重的多个块中,选择待统一的统一微结构块;以及基于选择的统一微结构块,对所述已剪枝的输入权重的多个块中的一个或多个块中的多个权重进行统一,以得到所述深度神经网络的已剪枝且已统一的输入权重。所述指令,当被所述至少一个处理器执行时,进一步使所述至少一个处理器基于所述输入神经网络和所述深度神经网络的所述已剪枝且已统一的输入权重,得到具有减少的参数的输出神经网络。
附图说明
6.图1是根据实施例的可以实现本文描述的方法、装置和系统的环境的图。
7.图2是图1的一个或多个装置的示例组件的框图。
8.图3是根据实施例的用于神经网络模型压缩的系统的功能框图。
9.图4a是根据实施例用于采用微结构化权重剪枝(micro-structured weight pruning)的神经网络模型压缩的训练装置的功能框图。
10.图4b是根据其他实施例用于采用微结构化权重剪枝的神经网络模型压缩的训练装置的功能框图。
11.图4c是根据又一些实施例用于采用权重统一的神经网络模型压缩的训练装置的功能框图。
12.图4d是根据再一些实施例用于采用微结构化权重剪枝和权重统一的神经网络模型压缩的训练装置的功能框图。
13.图4e是根据又一些实施例用于采用微结构化权重剪枝和权重统一的神经网络模型压缩的训练装置的功能框图。
14.图5是根据实施例采用微结构化权重剪枝和权重统一进行神经网络模型压缩的方法的流程图。
15.图6是根据实施例用于采用微结构化权重剪枝和权重统一进行神经网络模型压缩的装置的框图。
具体实施方式
16.本公开与神经网络模型压缩有关。更具体地,本文描述的方法和装置涉及采用微结构化权重剪枝和权重统一的神经网络模型压缩。
17.本文描述的实施例包括:通过在迭代网络再训练/微调框架中使用微结构化权重剪枝正则化来对dnn模型进行压缩的一种方法和装置。通过迭代再训练/微调过程(iterative retraining/finetuning process),对剪枝损失连通原始网络训练目标进行联合优化。
18.本文描述的实施例进一步包括:通过在迭代网络再训练/微调框架中使用结构化
的统一正则化,对dnn模型进行压缩的一种方法和装置。权重统一损失包括压缩率损失、统一失真损失和计算速度损失。通过迭代再训练/微调过程,对权重统一损失与原始网络训练目标进行联合优化。
19.本文描述的实施例进一步包括:通过在迭代网络再训练/微调框架中使用微结构化联合权重剪枝和权重统一正则化,对dnn模型进行压缩的一种方法和装置。通过迭代再训练/微调过程,对剪枝损失和统一损失以及原始网络训练目标进行联合优化。
20.存在几种学习压缩的dnn模型的途径。目标在于去除不重要的权重系数,假设权重系数的值越小其重要性就越小,并且去除这些权重对预测性能的影响就越小。为了实现这一目标,提出了几种网络剪枝方法。例如,非结构化权重剪枝方法在网络训练目标中加入稀疏性促进正则化(sparsity-promoting regularization)项,得到非结构化分布的零值权重,这样可以减小模型尺寸,但不能减少推理时间。结构化权重剪枝方法随机地强制整个权重结构进行剪枝,比如行或列。移除的行或列不参与推理计算,减小了模型尺寸和推理时间。然而,移除整个权重结构(如行和列)可能会导致原始dnn模型的性能大幅下降。
21.几种网络剪枝方法在网络训练目标中加入了稀疏性促进正则化项。非结构化权重剪枝方法在网络训练目标中加入稀疏性促进正则化项并得到非结构化分布的零值权重。结构化权重剪枝方法随机地强制选择的权重结构进行剪枝,比如行或列。从压缩dnn模型的角度来看,在学习一个压缩的网络模型后,通过量化及后续的熵编码,权重系数可以被进一步压缩。这样的进一步压缩过程可以显著减小dnn模型的存储尺寸,该dnn模型用于在移动设备、芯片等上面进行模型部署。
22.本文描述的实施例包括一种用于微结构化权重剪枝的方法和装置,其目的在于减小模型尺寸并加速推理计算,而几乎不牺牲原始dnn模型的预测性能。采用迭代网络再训练/精炼(retraining/refining)框架,对原始训练目标和权重剪枝损失进行联合优化。根据与底层硬件设计相一致(align with)的小的微结构,对权重系数进行剪枝,从而极大地减小了模型尺寸,极大地保留了原始目标预测性能,并极大地加快了推理计算速度。该方法和装置可以用于对原始预先训练过的密集dnn模型进行压缩。该方法和装置也可以作为附加的处理模块,通过其他非结构化或结构化的剪枝方法,对预剪枝(pre-pruned)的稀疏dnn模型进行进一步压缩。
23.本文描述的实施例进一步包括:一种用于结构化的权重统一正则化的方法和装置,其目的在于提高后续压缩过程中的压缩效率。采用迭代网络再训练/精炼框架,对原始训练目标与包括压缩率损失、统一失真损失和计算速度损失的权重统一损失进行联合优化,使得学习后的网络权重系数保持了原始目标性能,适用于进一步压缩,并且使用学习后的权重系数能够加快计算速度。该方法和装置可以用于对原始预先训练过的dnn模型进行压缩。该方法和装置也可以作为附加处理模块,对任意已剪枝的dnn模型进行进一步压缩。
24.本文描述的实施例包括:一种用于联合微结构化权重剪枝和权重统一的方法和装置,其目的在于提高后续压缩过程中的压缩效率,并加速推理计算。采用迭代网络再训练/精炼框架,对原始训练目标和权重剪枝损失及权重统一损失进行联合优化。根据小的微结构对权重系数进行剪枝或统一,学习到的权重系数保持了原始目标性能,适合于进一步压缩,并且使用学习到的权重系数能够加快计算速度。该方法和装置可以用于对原始预先训练过的密集dnn模型进行压缩。该方法和装置也可以作为附加的处理模块,通过其他非结构
化或结构化的剪枝方法,对预剪枝的稀疏dnn模型进行进一步压缩。
25.图1是根据实施例的,可以实施本文所描述的方法、装置和系统的环境100的示意图。
26.如图1所示,环境100可以包括用户设备110、平台120和网络130。环境100的设备可以通过有线连接、无线连接或有线和无线连接的组合进行互连。
27.用户设备110包括一个或多个设备,该一个或多个设备能够接收、生成、存储、处理和/或提供与平台120相关的信息。例如,用户设备110可以包括计算设备(例如,台式计算机、膝上型计算机、平板计算机、手持式计算机、智能扬声器、服务器等)、移动电话(例如,智能电话、无线电话等)、可穿戴设备(例如,智能眼镜或智能手表)或相似设备。在一些实施方式中,用户设备110可以从平台120接收信息和/或向平台120发送信息。
28.平台120包括如本文中其它地方所描述的一个或多个设备。在一些实施方式中,平台120可以包括云服务器或云服务器组。在一些实施方式中,平台120可以被设计成模块化,使得软件组件可以被换入或换出。这样,可以容易地和/或快速地重新配置平台120以具有不同的用途。
29.在一些实施方式中,如图所示,平台120可以被托管(hosted)在云计算环境122中。值得注意的是,虽然本文所述的实施方式将平台120描述为托管在云计算环境122中,但是在一些实施方式中,平台120不是基于云的(即,可以在云计算环境外部实现)或者可以是部分基于云的。
30.云计算环境122包括托管平台120的环境。云计算环境122可以提供计算、软件、数据访问、存储等服务,这些服务不需要终端用户(例如,用户设备110)了解托管平台120的系统和/或设备的物理位置和配置。如图所示,云计算环境122可以包括一组计算资源124(统称为“计算资源(computing resources)124”并分别称为“计算资源(computing resource)124”)。
31.计算资源124包括一个或多个个人计算机、工作站计算机、服务器设备或其它类型的计算和/或通信设备。在一些实施方式中,计算资源124可以托管平台120。云资源可以包括在计算资源124中执行的计算实例、在计算资源124中提供的存储设备、由计算资源124提供的数据传输设备等。在一些实施方式中,计算资源124可以通过有线连接、无线连接或有线和无线连接的组合与其它计算资源124通信。
32.进一步如图1所示,计算资源124包括一组云资源,例如一个或多个应用程序(“app”)124-1、一个或多个虚拟机(“vm”)124-2、虚拟化存储(“vs”)124-3、一个或多个管理程序(“hyp”)124-4等。
33.应用程序124-1包括一个或多个软件应用程序,其可以提供给用户设备110和/或平台120,或由用户设备110和/或平台120访问。应用程序124-1无需在用户设备110上安装和执行软件应用程序。例如,应用程序124-1可以包括与平台120相关的软件,和/或,能够通过云计算环境122提供的任何其它软件。在一些实施方式中,一个应用程序124-1可以通过虚拟机124-2向或从一个或多个其它应用程序124-1发送/接收信息。
34.虚拟机124-2包括机器(例如,计算机)的软件实现,该机器执行程序,类似于物理机。虚拟机124-2可以是系统虚拟机,也可以是进程虚拟机,这取决于虚拟机124-2对任何真实机的使用和对应程度。系统虚拟机可以提供完整系统平台,其支持完整操作系统(“os”)
的执行。进程虚拟机可以执行单个程序,并且可以支持单个进程。在一些实施方式中,虚拟机124-2可以代表用户(例如,用户设备110)执行,并且可以管理云计算环境122的基础架构,例如数据管理、同步或长期数据传输。
35.虚拟化存储124-3包括一个或多个存储系统和/或一个或多个设备,该一个或多个设备在计算资源124的存储系统或设备内使用虚拟化技术。在一些实施方式中,在存储系统的上下文内,虚拟化的类型可以包括块虚拟化和文件虚拟化。块虚拟化可以指逻辑存储从物理存储的抽象(或分离),以便可以在不考虑物理存储或异构结构的情况下访问存储系统。分离可以允许存储系统的管理员灵活地管理终端用户的存储。文件虚拟化可以消除在文件级别存取的数据与物理存储文件的位置之间的依赖性。这可以优化存储使用、服务器整合和/或无中断文件迁移的性能。
36.管理程序(hypervisor)124-4可以提供硬件虚拟化技术,其允许多个操作系统(例如,“客户操作系统”)在诸如计算资源124的主计算机上同时执行。管理程序124-4可以向客户操作系统提供虚拟操作平台,并且可以管理客户操作系统的执行。各种操作系统的多个实例可以共享虚拟化硬件资源。
37.网络130包括一个或多个有线和/或无线网络。例如,网络130可以包括蜂窝网络(例如,第五代(fifth generation,5g)网络、长期演进(long-term evolution,lte)网络、第三代(third generation,3g)网络、码分多址(cdma)网络等)、公共陆地移动网络(public land mobile network,plmn)、局域网(local area network,lan)、广域网(wide area network,wan)、城域网(metropolitan area network,man)、电话网络(例如,公共交换电话网络(public switched telephone network,pstn))、专用网络、自组织网络、内联网、因特网、基于光纤的网络等,和/或这些或其它类型的网络的组合。
38.图1所示的设备和网络的数量和排列被作为示例来提供。实际上,与图1所示的设备和/或网络相比,可以有更多的设备和/或网络、更少的设备和/或网络、不同的设备和/或网络、或排列不同的设备和/或网络。此外,图1所示的两个或更多个设备可以在单个设备内实现,或者图1所示的单个设备可以实现为多个分布式设备。另外或可替代地,环境100的一组设备(例如,一个或多个设备)可以执行被描述为由环境100的另一组设备执行的一个或多个功能。
39.图2是图1中一个或多个设备的示例组件的框图。设备200可以对应于用户设备110和/或平台120。
40.如图2所示,设备200可以包括总线210、处理器220、存储器230、存储组件240、输入组件250、输出组件260和通信接口270。
41.总线210包括允许设备200的组件之间进行通信的组件。处理器220以硬件、固件或硬件和软件的组合来实现。处理器220是中央处理单元(cpu)、图形处理单元(gpu)、加速处理单元(apu)、微处理器、微控制器、数字信号处理器(dsp)、现场可编程门阵列(fpga)、专用集成电路(asic)或另一类型的处理组件。在一些实施方式中,处理器220包括一个或多个能够被编程以执行功能的处理器。存储器230包括随机存取存储器(ram)、只读存储器(rom)和/或另一类型的动态或静态存储设备(例如,闪存、磁存储器和/或光存储器),其存储供处理器220使用的信息和/或指令。
42.存储组件240存储与设备200的操作和使用相关的信息和/或软件。例如,存储组件
240可以包括硬盘(例如,磁盘、光盘、磁光盘和/或固态盘)、光盘(cd)、数字通用盘(dvd)、软盘、盒式磁带、磁带和/或另一类型的非易失性计算机可读介质,以及相应的驱动器。
43.输入组件250包括允许设备200例如通过用户输入接收信息的组件,例如,触摸屏显示器、键盘、小键盘、鼠标、按钮、开关和/或麦克风。另外或可替代地,输入组件250可以包括用于感测信息的传感器(例如,全球定位系统(gps)组件、加速计、陀螺仪和/或致动器)。输出组件260包括提供来自设备200的输出信息的组件,例如,显示器、扬声器和/或一个或多个发光二极管(led)。
44.通信接口270包括类似收发器的组件(例如,收发器和/或单独的接收器和发送器),该组件使设备200能够例如通过有线连接、无线连接或有线和无线连接的组合与其它设备通信。通信接口270可以允许设备200从另一设备接收信息和/或向另一设备提供信息。例如,通信接口270可以包括以太网接口、光接口、同轴接口、红外接口、射频(rf)接口、通用串行总线(usb)接口、wi-fi接口、蜂窝网络接口等。
45.设备200可以执行本文中所描述的一个或多个过程。设备200可以响应于处理器220执行由非易失性计算机可读介质(例如存储器230和/或存储组件240)存储的软件指令来执行这些过程。计算机可读介质在本文中被定义为非易失性存储器设备。存储器设备包括单个物理存储设备内的存储空间或分布在多个物理存储设备上的存储空间。
46.软件指令可以通过通信接口270从另一计算机可读介质或从另一设备读入存储器230和/或存储组件240。当被执行时,存储在存储器230和/或存储组件240中的软件指令可以使处理器220执行本文中所描述的一个或多个过程。另外或可替代地,可以使用硬件连线电路来代替软件指令或与软件指令结合以执行本文中所描述的一个或多个过程。因此,本文中所描述的实施方式不限于硬件电路和软件的任何特定组合。
47.图2所示的组件的数量与布置作为示例提供。在实际中,相比图2中所示的组件,装置200可包括附加的组件、较少的组件、不同的组件或不同布置的组件。另外或可选地,设备200的一组组件(例如,一个或多个组件)可以执行被描述为由设备200的另一组组件执行的一个或多个功能。
48.现在将详细描述用于采用微结构化权重剪枝和权重统一进行神经网络模型压缩的方法和装置。
49.图3是根据实施例的用于神经网络模型压缩的系统300的功能框图。
50.如图3所示,系统300包括参数减少模块310、参数逼近(parameter approximation)模块320、重构模块330、编码器340和解码器350。
51.参数减少模块310减少输入神经网络的一组参数,以得到输出神经网络。神经网络可以包括由深度学习框架(deep learning framework)所指定的参数和体系结构。
52.例如,参数减少模块310可以稀疏化(将权重设置为零)和/或剪除(prune away)神经网络的连接。在另一个示例中,参数减少模块310可以对神经网络的参数张量执行矩阵分解,得到一组较小的参数张量。参数减少模块310可以串行执行这些方法,例如,可以首先对权重进行稀疏化,然后对生成的矩阵进行分解。
53.参数逼近模块320对从输出神经网络提取的参数张量应用参数逼近技术,该输出神经网络是从参数减少模块310得到的。例如,该技术可包括量化、变换和预测中的任意一个或其任意组合。参数逼近模块320输出未被参数逼近模块320修改的第一参数张量、已被
参数逼近模块320修改或逼近的第二参数张量以及相应元数据,该相应元数据被用于由已修改的第二参数张量,重构未被参数逼近模块320修改的原始参数张量。
54.重构模块330使用从参数逼近模块320和/或解码器350得到的相应元数据,由已修改的第二参数张量重构原始参数张量,该已修改的第二参数张量是从参数逼近模块320和/或解码器350得到的。重构模块330可以使用重构的原始参数张量和第一参数张量,对输出神经网络进行重构。
55.编码器340可以对从参数逼近模块320得到的第一参数张量、第二参数张量和相应元数据执行熵编码。该信息可以被编码为到达解码器350的码流。
56.解码器350可以对从编码器340得到的码流进行解码,以得到第一参数张量、第二参数张量和相应元数据。
57.系统300可以在平台120中实现,并且图3的一个或多个模块可以由与平台120分离或包括平台120的一个设备或一组设备(比如用户设备110)来执行。
58.参数减少模块310或参数逼近模块320可以包括dnn,该dnn通过以下训练装置进行训练。
59.图4a是根据实施例用于采用微结构化权重剪枝的神经网络模型压缩的训练装置400a的功能框图。图4b是根据其他实施例用于采用微结构化权重剪枝的神经网络模型压缩的训练装置400b的功能框图。
60.如图4a所示,训练装置400a包括微结构选择模块405、权重剪枝模块410、网络前向计算模块415、目标损失计算模块420、梯度计算模块425和权重更新模块430。
61.如图4b所示,训练装置400b包括微结构选择模块405、权重剪枝模块410、网络前向计算模块415、目标损失计算模块420、梯度计算模块425和权重更新模块430。训练装置400b进一步包括掩膜计算模块435。
62.设表示一个数据集,在该数据集中,目标y被赋值给输入x。设θ={w}表示dnn(例如,参数减少模块310或参数逼近模块320)的一组权重系数。网络训练的目标在于学习权重系数的最优集θ,以使得目标损失能够被最小化。例如,在先前的网络剪枝方法中,目标损失有两部分,即,经验数据损失和稀疏性促进正则化损失
[0063][0064]
其中,λr≥0是对数据损失的贡献和正则化损失的贡献进行平衡的超参数。当λr=0时,只有目标损失只考虑经验数据损失,并且预先训练过的权重系数是密集的。
[0065]
预先训练过的权重系数θ可以进一步经过另一个网络训练过程,在此过程中可以学习到权重系数的最优集,实现进一步的模型压缩和推理加速。实施例包括用以实现该目标的微结构化剪枝方法。
[0066]
具体地,定义了微结构化权重剪枝损失该微结构化权重剪枝损失与原始目标损失一起优化:
[0067]
[0068]
其中,λs≥0是对原始训练目标的贡献和权重剪枝目标的贡献进行平衡的超参数。通过对等式(2)的进行优化,得到权重系数的最优集,该权重系数的最优集可以在很大程度上有助于进一步压缩的有效性。此外,微结构化权重剪枝损失将卷积操作如何作为gemm矩阵乘法过程来执行的底层过程(underlying process)考虑在内,从而产生能够在很大程度上加速计算的优化的权重系数。值得注意的是,权重剪枝损失可以被看作是在具有(当λr》0时)或不具有(当λr=0时)正则化的情况下,目标损失的附加的正则化项。此外,该方法还可灵活地应用于任意正则化损失£r(θ)。
[0069]
为了学习效果和学习效率,执行迭代的优化算法。在第一步骤中,满足期望的微结构的部分权重系数被固定,然后在第二步骤中,通过反向传播训练损失来对权重系数的未固定部分进行更新。通过迭代地进行这两个步骤,可以逐渐地固定越来越多的权重,并且可以有效地对联合损失逐渐地进行优化。
[0070]
此外,在实施例中,每一层被单独压缩,因此可以进一步地写为:
[0071][0072]
其中,ls(wj)是在第j层上限定的剪枝损失,n是该训练过程涉及的层的总数量,wj表示第j层的权重系数。再次,由于针对每一层独立地计算ls(wj),所以在不丧失一般性的情况下可以省略上标j。
[0073]
对于每一个网络层,其权重系数w是具有尺寸(ci,k1,k2,k3,co)的5维(5-dmension,5d)张量。该层的输入是尺寸为(hi,wi,di,ci)的四维(4-dimension,4d)张量a,并且该层的输出是尺寸为(ho,wo,do,co)的四维张量b。尺寸ci、k1、k2、k3、co、hi、wi、di、ho、wo、do是大于或等于1的整数。当尺寸ci、k1、k2、k3、co、hi、wi、di、ho、wo、do中任意一个取值为1时,相应的张量减小到较低的维度。每个张量中的每一项都是浮点数。设m表示与w尺寸相同的5d二进制掩膜,其中,m中的每一项都是二进制数字0/1,0/1指示在预剪枝的过程中相应的权重系数是否被剪枝/保持不变。引入m与w相关联,以应对w来自使用先前的结构化或非结构化剪枝方法的已剪枝dnn模型的情况,在该模型中,网络中神经元之间的某些连接被从计算中移除。当w来自原始未剪枝的密集模型时,m中的所有项取值为1。通过基于a、m和w的卷积运算

计算输出b:
[0074][0074][0075]
l=1,

,hi,m=1,

,wi,n=1,

,di,l

=1,

,ho,
[0076]m′
=1,

,wo,n

=1,

,do,v=1,

,co.
ꢀꢀꢀ
(4)
[0077]
参数hi、wi和di(h0、wo和do)是输入张量a(输出张量b)的高度、权重和深度。参数ci(co)是输入(输出)通道的数量。参数k1、k2和k3分别是对应于高度、权重和深度轴的卷积核的尺寸。也即,对于每个输出通道v=1,

,co,等式(4)中描述的操作可以被看作是与输入a进行卷积的、尺寸为(ci,k1,k2,k3)的4d权重张量wv。
[0078]
可以改变等式(4)中的求和运算的顺序,从而产生输入a、权重w(和掩膜m)的形状的不同配置,以得到相同的输出b。在实施例中,采用两种配置。(1)将5d权重张量重塑
(reshaped)为大小为(c
′i,c
′o,k)的3d张量,其中,c
′i×c′o×
k=ci×co
×
k1×
k2×
k3。例如,该配置为c
′i=ci,c
′o=co,k=k1×
k2×
k3。(2)将5d权重张量重塑为尺寸为(c
′i,c
′o)的2d矩阵,其中,c
′i×c′o=ci×co
×
k1×
k2×
k3。例如,某些实施例为c
′i=ci,c
′o=co×
k1×
k2×
k3或者c
′o=co,c
′i=ci×
k1×
k2×
k3。
[0079]
权重系数的期望的微结构与如何实现卷积运算的底层gemm矩阵乘法过程相一致,从而加快利用学习到的权重系数进行推理计算的速度。在实施例中,在3d重塑的权重张量或2d重塑的权重矩阵的每一层中,使用针对权重系数的逐块(block-wise)微结构。具体地,对于重塑的3d权重张量的情况,将其划分为尺寸为(gi,go,gk)的块,并且对于重塑的2d权重矩阵的情况,将其划分为尺寸为(gi,go)的块。剪枝运算发生在2d或3d块内,即,将块中的已剪枝的权重设置为全零。可以计算块的剪枝损失,以度量由这样的剪枝运算引入的误差。在给定这种微结构的情况下,在迭代期间,基于剪枝损失确定待剪枝的权重系数的部分。然后,在第二步骤中,已剪枝的权重被固定,执行正常的神经网络训练过程,并且通过反向传播机制对剩余的未固定权重系数进行更新。
[0080]
图4a和4b示出了迭代再训练/微调过程的实施例,两个实施例都迭代地交替进行两个步骤以逐渐地优化等式(2)的联合损失。在给定具有权重系数{w}和掩膜{m}的预先训练过的dnn模型的情况下(该dnn模型可以是已剪枝的稀疏模型或未剪枝的非稀疏模型),在第一步骤中,微结构选择模块405首先将每一层的权重系数w(以及相应的掩膜m)重塑为期望的3d张量或2d矩阵。然后,对于每一层,微结构选择模块405通过剪枝微结构选择过程(pruning micro-structure selection process),确定权重将被剪枝的一组剪枝微结构{bs}或剪枝微结构块(pruning micro-structure block,pmb)。存在多种方法以确定剪枝微结构{bs}。在实施例中,对于具有权重系数w和掩膜m的每一层,对于w中的每个块b,计算剪枝损失ls(b)(例如,b中的权重的绝对值的和)。在给定剪枝比例(pruning ratio)p的情况下,该层的块根据ls(b)按照升序进行排序,并且选择前p%的块作为待剪枝的{bs}。在其他实施例中,对于具有权重系数w和掩膜m的每一层,以如上所述的相同方式计算每个块b的剪枝损失ls(b)。在给定剪枝比例p的情况下,将所有层的所有块根据ls(b)按照升序进行排序,并选择前p%的块作为待剪枝的{bs}。
[0081]
在得到该组剪枝微结构后,目标变为通过迭代地对等式(2)中所描述的联合损失进行最小化,以寻找一组已更新的最优权重系数w*和相应的权重掩膜m*。在图4a所示的第一实施例中,对于第t次迭代,存在当前权重系数w(t-1)。此外,在整个训练过程中保持微结构化剪枝掩膜(micro-structurally pruning mask)p(t-1)。p(t-1)具有与w(t-1)相同的形状,从而记录相应的权系数是否被剪枝。然后,权重剪枝模块410通过权重剪枝过程(weight pruning process)计算已剪枝的权重系数w
p
(t-1),其中,所选择的、由p(t-1)掩膜的剪枝微结构被剪枝,从而产生已更新的权重掩膜m
p
(t-1)。
[0082]
然后,在第二步骤中,权重更新模块430对被p(t-1)标记为微结构化已剪枝的权重系数进行固定,然后通过神经网络训练过程对w
p
(t-1)中剩余的未固定的权重系数进行更新,从而产生已更新的w(t)和m(t)。在实施例中,在该网络训练过程期间,被预先训练过的剪枝掩膜m所掩膜的预剪枝的权重系数被强制固定(即,保持为零)。在另一个实施例中,对预剪枝的权重没有这样的限制,并且预剪枝的权重可以在训练过程期间被重置为除零以外的某个值,从而产生与更好的预测性能相关联的不太稀疏的模型,甚至可比原始预先训练
过的模型更好。
[0083]
具体地,设表示训练数据集,其中可以与原始数据集相同,基于得到预先训练过的权重系数w。也可以是与不同的数据集,但是具有与原始数据集相同的数据分布。在第二步骤中,网络前向计算模块415使用当前的权重系数w
p
(t-1)和掩膜m
p
(t-1),使每个输入x经由网络前向计算过程(network forward computation process)通过当前网络,从而生成估计的输出基于真值标注y和估计的输出目标损失计算模块420通过计算目标损失过程(compute target loss process)来计算等式(2)中的目标训练损失然后,梯度计算模块425计算目标损失的梯度g(w
p
(t-1))。tensorflow或pytorch等深度学习框架使用的自动梯度计算方法可以用来计算g(w
p
(t-1))。基于梯度g(w
p
(t-1))和微结构化剪枝掩膜p(t-1),权重更新模块430可以使用反向传播和权重更新过程(back propagation and weight update process)通过反向传播对w
p
(t-1)的未固定权重系数进行更新。再训练过程本身也是一个迭代过程。采用多次迭代对w
p
(t-1)的非固定部分进行更新,例如,直到目标损失收敛。然后,系统进入下一次迭代t,在给定新的剪枝比例p(t)的情况下,通过剪枝微结构选择过程确定一组新的剪枝微结构(以及新的微结构化剪枝掩膜p(t))。
[0084]
在图4b所示出的训练过程的第二个实施例中,通过另一个迭代过程找到一组已更新的最优权重系数w*和相应的权重掩膜m*。对于第t次迭代,存在当前权重系数w(t-1)和掩膜m(t-1)。此外,掩膜计算模块435通过剪枝掩膜计算过程(pruning mask computation process)计算微结构化剪枝掩膜p(t-1)。p(t-1)具有与w(t-1)相同的形状,p(t-1)记录相应的权重系数是否被剪枝。然后,权重剪枝模块410通过权重剪枝过程计算已剪枝的权重系数w
p
(t-1),其中,所选择的被掩膜的剪枝微结构被p(t-1)剪枝,从而产生已更新的权重掩膜m
p
(t-1)。
[0085]
然后,在第二步骤中,权重更新模块430对被p(t-1)标记为微结构化已剪枝的权重系数进行固定,然后通过神经网络训练过程对剩余的未固定的w(t-1)的权重系数进行更新,从而产生已更新的w(t)。类似于图4a的第一个实施例,在给定训练数据集的情况下,网络前向计算模块415使用当前的权重系数w(t-1)和掩膜m(t-1),使每个输入x经由网络前向计算过程通过当前网络,从而生成估计的输出基于真值标注y和估计的输出目标损失计算模块420通过计算联合损失过程(compute joint loss process)计算联合训练损失联合训练损失包括等式(2)中的目标训练损失和残余损失(residue loss)£
res
(w(t-1)):
[0086][0087]

res
(w(t-1))度量当前权重w(t-1)和目标已剪枝权重w
p
(t-1)之间的差值。例如,可以使用l1范数(l
1 norm):
[0088]

res
(w(t-1))=||w(t-1))-w
p
(t-1)||
ꢀꢀꢀ
(6)
[0089]
然后,梯度计算模块425计算联合损失g(w(t-1))的梯度。tensorflow或pytorch等深度学习框架使用的自动梯度计算方法可以用来计算g(w(t-1))。基于梯度g(w(t-1))和微
结构化剪枝掩膜p(t-1),权重更新模块430可以使用反向传播和权重更新过程通过反向传播对w(t-1)的未固定权重系数进行更新。再训练过程本身也是一个迭代过程。采用多次迭代对w(t-1)的未固定部分进行更新,例如,直到目标损失收敛。然后,系统进入下一次迭代t,在给定剪枝比例p(t)的情况下,通过剪枝微结构选择过程确定一组新的剪枝微结构(以及新的微结构化剪枝掩膜p(t))。类似之前图4a的实施例,在该训练过程中,可以将预先训练过的预剪枝掩膜m所掩膜的权重系数强制保持为零,或者可以再次设置为具有非零值。
[0090]
在整个迭代过程中,在第t次迭代,可以通过权重剪枝过程计算已剪枝的权重系数w
p
(t),其中,所选择的被掩膜的剪枝微结构被p(t)剪枝,产生已更新的权重掩膜m
p
(t)。该w
p
(t)和m
p
(t)可用于生成最终的已更新模型w*和m*。例如,w*=w
p
(t)和m*=m
·mp
(t)。
[0091]
在实施例中,超参数p(t)可以在迭代期间随着t的增加而增加自身的值,从而在整个迭代学习过程中越来越多的权重系数将被剪枝和固定。
[0092]
微结构化剪枝方法的目标在于减小模型尺寸,因使用优化的权重系数而加速计算,并保持原始dnn模型的预测性能。它可以应用于预先训练过的密集模型,或者应用于被先前的结构化或非结构化剪枝方法剪枝的预先训练过的稀疏模型,以获得附加的压缩效果。
[0093]
通过迭代的再训练过程,该方法能够有效地保持原始预测目标的性能,并且追求压缩和计算效率。迭代的再训练过程还提供了在不同时间引入不同损失的灵活性,使得系统在优化过程期间关注不同的目标。
[0094]
该方法可以应用于具有不同的数据形式的数据集。输入/输出数据是4d张量,4d张量可以是真实的视频片段、图像或提取的特征图(feature map)。
[0095]
图4c是根据又一些实施例用于采用权重统一的神经网络模型压缩的训练装置400c的功能框图。
[0096]
如图4c所示,训练装置400c包括重塑模块440、权重统一模块445、网络前向计算模块415、目标损失计算模块420、梯度计算模块425和权重更新模块450。
[0097]
稀疏性促进正则化损失对全部权重系数进行正则化,由此产生的稀疏权重与推理效率或计算速度具有弱的关系(weak relationship)。从另一个角度看,在剪枝之后,稀疏权重可以进一步通过另一个网络训练过程,在这个过程中,可以学习到权重系数的最优集,从而提高进一步模型压缩的效率。
[0098]
权重统一损失与原始目标损失一起被优化:
[0099][0100]
其中,λu≥0是对原始训练目标的贡献和权重统一的贡献进行平衡的超参数。通过对等式(7)的进行联合优化,得到权重系数的最优集,该权重系数的最优集可以在很大程度上有助于进一步压缩有效性。此外,权重统一损失将卷积操作如何作为gemm矩阵乘法过程来执行的底层过程考虑在内,从而产生能够在很大程度上加速计算的优化的权重系数。值得注意的是,权重统一损失可以被看作是在具有(当λr》0时)或不具有(当λr=0时)正则化的情况下,目标损失的附加的正则化项。此外,该方法还可灵活地应用于任意正则化损失£r(θ)。
[0101]
在实施例中,权重统一损失£u(θ)进一步包括压缩率损失£c(θ)、统一失真损失
£i(θ)和计算速度损失£s(θ):
[0102]
£u(θ)=£i(θ) λc£c(θ) λs£s(θ),
ꢀꢀꢀ
(8)
[0103]
这些损失术语的详细说明将在后面的章节中介绍。为了学习效果和学习效率,执行迭代优化算法。在第一步骤中,满足期望结构的部分权重系数被固定,然后在第二步骤中,通过反向传播训练损失来对权重系数的未固定部分进行更新。通过迭代地进行这两个步骤,可以逐渐地固定越来越多的权重,并且可以有效地对联合损失逐渐地进行优化。
[0104]
此外,在实施例中,每一层被单独压缩,因此可以进一步地写为:
[0105][0106]
其中,lu(wj)是在第j层上限定的统一损失;n是测量量化损失所在的层的总数量;wj表示第j层的权重系数。再次,由于针对每一层独立地计算lu(wj),所以在本公开的其余部分中,在不丧失一般性的情况下可以省略上标j。
[0107]
对于每一个网络层,其权重系数w是具有尺寸(ci,k1,k2,k3,co)的5维(5-dmension,5d)张量。该层的输入是尺寸为(hi,wi,di,ci)的四维(4-dimension,4d)张量a,并且该层的输出是尺寸为(ho,wo,do,co)的四维张量b。尺寸ci、k1、k2、k3、co、hi、wi、di、ho、wo、do是大于或等于1的整数。当尺寸ci、k1、k2、k3、co、hi、wi、di、ho、wo、do中任意一个取值为1时,相应的张量减小到较低的维度。每个张量中的每一项都是一个浮点数。设m表示与w尺寸相同的5d二进制掩膜,其中,m中的每一项都是二进制数字0/1,0/1指示相应的权系数是否被剪枝/保持不变。引入m与w相关联,以应对w来自已剪枝dnn模型的情况,在该模型中,网络中神经元之间的某些连接被从计算中移除。当w来自原始未剪枝的预先训练过的模型时,m中的所有项取值为1。通过基于a、m和w的卷积运算

计算输出b:
[0108][0108][0109]
l=1,

,hi,m=1,

,wi,n=1,

,di,l

=1,

,ho,
[0110]m′
=1,

,wo,n

=1,

,do,v=1,

,co.
ꢀꢀꢀ
(10)
[0111]
参数hi、wi和di(h0、wo和do)是输入张量a(输出张量b)的高度、权重和深度。参数ci(co)是输入(输出)通道的数量。参数k1、k2和k3分别是对应于高度、权重和深度轴的卷积核的尺寸。也即,对于每个输出通道v=1,

,co,等式(10)中描述的操作可以被看作是与输入a进行卷积的、尺寸为(ci,k1,k2,k3)的4d权重张量wv。
[0112]
可以改变等式(10)中的求和运算的顺序,并且在实施例中,如下执行等式(10)的运算。将5d权重张量重塑为尺寸为(c
′i,c
′o)的2d矩阵,其中,c
′i×c′o=ci×co
×
k1×
k2×
k3。例如,某些实施例为c
′i=ci,c
′o=co×
k1×
k2×
k3或者c
′o=co,c
′i=ci×
k1×
k2×
k3。
[0113]
通过考虑以下两个方面来设计权重系数的期望的结构。第一,权重系数的结构与如何实现卷积运算的底层gemm矩阵乘法过程相一致,从而加快利用学习到的权重系数进行推理计算的速度。第二,权重系数的结构能够帮助提高量化和熵编码效率以进行进一步压缩。在实施例中,在2d重塑的权重矩阵的每一层中,使用针对权重系数的逐块结构。具体地,将2d矩阵划分为尺寸为(gi,go)的块,并且块内的所有系数是已统一的。块中的已统一的权
重被设置为遵循预定义的统一规则,例如,所有值被设置为相同,以便在产生高效率的量化过程中可以使用一个值来表示整个块。可以存在统一权重的多个规则,每个规则与统一失真损失相关联,统一失真损失用于度量采用该规则引入的误差。例如,将权重设置为具有相同的绝对值并保持权重的原始正负号,而不是将权重设置为相同。在给定这种设计结构的情况下,在迭代过程中,通过将统一失真损失、估计的压缩率损失和估计的速度损失考虑在内,来确定权重系数中待固定的部分。然后,在第二步骤中,执行正常的神经网络训练过程,并且通过反向传播机制更新剩余的未固定的权重系数。
[0114]
图4c示出了迭代再训练/微调过程的总体框架,迭代地交替进行两个步骤以逐渐地优化等式(7)的联合损失。在给定具有权重系数w和掩膜m的预先训练过的dnn模型的情况下(该dnn模型可以是已剪枝的稀疏模型或未剪枝的非稀疏模型),在第一步骤中,重塑模块440通过统一方法选择过程(unification method selection process)确定权重统一方法u*。在该过程中,重塑模块440将权重系数w(以及对应的掩膜m)重塑为尺寸为(c
′i,c
′o)的2d矩阵,然后,将重塑后的2d权重矩阵w划分为尺寸为(gi,go)的块。权重统一发生在块内。对于每个块b,使用权重统一器来统一块内的权重系数。可以存在不同的方法来统一b中的权重系数。例如,权重统一器可以将b中的所有权重设置为相同,例如,设置为b中所有权重的平均值。在这种情况下,b中权重系数的ln范数(例如,作为b中权重方差的l2范数)反映了使用均值来表示整个块的统一失真损失£i(b)。此外,权重统一器可以将所有权重设置为具有相同的绝对值,同时保持原始正负号。在这种情况下,b中的权重的绝对值的ln范数可以用来度量li(b)。换句话说,在给定权重统一方法u的情况下,权重统一器可以使用方法u结合相关联的统一失真损失li(u,b)来统一b中的权重。
[0115]
类似地,等式(8)中的压缩率损失£c(u,b)反映了使用方法u来统一b中的权重的压缩效率。例如,当所有权重被设置为相同时,只使用一个数字来表示整个块,压缩率为r
压缩
=gi·go
。£c(u,b)可以被定义为1/r
压缩

[0116]
等式(8)中的速度损失£s(u,b)反映了使用b中已统一的权重系数的估计的计算速度,已统一的权重系数是采用方法u得到的,估计的计算速度是使用已统一的权重系数所进行的计算中乘法运算数量的函数。
[0117]
到目前为止,对于通过权重统一器来统一b中权重的每一种可能的方法u,基于£i(u,b)、£c(u,b)、£s(u,b)计算等式(8)的权重统一损失£u(u,b)。可以采用最小的权重统一损失£u*(u,b)来选择最优的权重统一方法u*。
[0118]
一旦为每个块b确定了权重统一方法u*,目标变为通过迭代地最小化等式(7)中描述的联合损失,来寻找一组已更新的最优权重系数w*和相应的权重掩膜m*。具体地,对于第t次迭代,存在当前权重系数w(t-1)和掩膜m(t-1)。此外,在整个训练过程中保持权重统一掩膜(weight unifying mask)q(t-1)。权重统一掩膜q(t-1)具有与w(t-1)相同的形状,从而记录相应的权重系数是否被统一。然后,权重统一模块445通过权重统一过程(weight unification process)计算统一的权重系数wu(t-1)和新的统一掩膜q(t-1)。在权重统一过程中,这些块基于它们的统一损失£u(u*,b)按照升序进行排序。在给定超参数q的情况下,选择前q%的块进行统一。权重统一器使用相应的确定的方法u*对选择的块b中的块进行统一,从而产生已统一的权重wu(t-1)和权重掩膜mu(t-1)。统一掩膜q(t-1)中的相应条目被标记为已统一的。在实施例中,mu(t-1)与m(t-1)不同,在这种情况下,对于同时具有已剪
枝的权重系数和未剪枝的权重系数的块,原始已剪枝的权重系数将通过权重统一器被再次设置为具有非零值,并且mu(t-1)中的对应项将被改变。在另一个实施例中,mu(t-1)与m(t-1)相同,在这种情况下,对于同时具有已剪枝的权重系数和未剪枝的权重系数的块,将只对未剪枝的权重进行重置,而已剪枝的权重保持为零。
[0119]
然后,在第二步骤中,权重更新模块450对被q(t-1)标记为已统一的权重系数进行固定,然后,通过神经网络训练过程对w(t-1)中剩余的未固定的权重系数进行更新,从而产生已更新的w(t)和m(t)。
[0120]
设表示训练数据集,其中,可以与原始数据集相同,基于得到预先训练过的权重系数w。也可以是与不同的数据集,但是具有与原始数据集相同的数据分布。在第二步骤中,网络前向计算模块415使用当前的权重系数wu(t-1)和掩膜mu(t-1),使每个输入x经由网络前向计算过程通过当前网络,从而生成估计的输出基于真值标注y和估计的输出目标损失计算模块420通过计算目标损失过程来计算等式(7)中的目标训练损失然后,梯度计算模块425计算目标损失的梯度g(wu(t-1))。tensorflow或pytorch等深度学习框架使用的自动梯度计算方法可以用来计算g(wu(t-1))。基于梯度g(wu(t-1))和统一掩膜q(t-1),权重更新模块450使用反向传播和权重更新过程通过反向传播对wu(t-1)的未固定权重系数以及对应的掩膜mu(t-1)进行更新。再训练过程本身也是一个迭代过程。采用多次迭代对wu(t-1)和相应的m(t-1)的未固定部分进行更新,例如,直到目标损失收敛。然后,系统进入下一次迭代t,在给定新的超参数q(t)的情况下,基于wu(t-1)和u*,通过权重统一过程可以计算出新的已统一的权重系数wu(t-1)、掩膜mu(t)以及相应的统一掩膜q(t)。
[0121]
在实施例中,超参数q(t)在每次迭代期间随着t的增加而增加自身的值,从而在整个迭代学习过程中越来越多的权重系数将被统一和固定。
[0122]
统一正则化的目标在于提高对学习到的权重系数进行进一步压缩的效率,因使用优化的权重系数而加速计算。这可以显著减小dnn模型尺寸,加快推理计算速度。
[0123]
通过迭代的再训练过程,该方法能够有效地保持原始训练目标的性能,并且追求压缩和计算效率。迭代的再训练过程还提供了在不同时间引入不同损失的灵活性,使得系统在优化过程中关注不同的目标。
[0124]
该方法可以应用于具有不同的数据形式的数据集。输入/输出数据是4d张量,4d张量可以是真实的视频片段、图像或提取的特征图。
[0125]
图4d是根据再一些实施例用于采用微结构化权重剪枝和权重统一的神经网络模型压缩的训练装置400d的功能框图。图4e是根据又一些实施例用于采用微结构化权重剪枝和权重统一的神经网络模型压缩的训练装置400e的功能框图。
[0126]
如图4d所示,训练装置400d包括微结构选择模块455、权重剪枝/统一模块460、网络前向计算模块415、目标损失计算模块420、梯度计算模块425和权重更新模块465。
[0127]
如图4e所示,训练装置400e包括微结构选择模块455、权重剪枝/统一模块460、网络前向计算模块415、目标损失计算模块420、梯度计算模块425和权重更新模块465。训练装置400e进一步包括掩膜计算模块470。
[0128]
从另一个角度看,预先训练过的权重系数θ可以进一步通过另一个网络训练过
程,在这个过程中可以学习到权重系数的最优集,以提高进一步模型压缩和推理加速的效率。本公开描述了用以实现该目标的微结构化剪枝和统一方法。
[0129]
具体地,定义了微结构化权重剪枝损失和微结构化权重统一损失它们与原始目标损失一起优化:
[0130][0131]
其中,λs≥0和λu≥0是对原始训练目标的贡献、权重统一目标的贡献和权重剪枝目标的贡献进行平衡的参数。通过对等式(11)的进行联合优化,得到权重系数的最优集,该权重系数的最优集可以在很大程度上有助于进一步压缩的有效性。此外,权重统一损失将卷积操作如何作为gemm矩阵乘法过程来执行的底层过程考虑在内,从而产生能够在很大程度上加速计算的优化的权重系数。值得注意的是,权重剪枝损失和权重统一损失可以看作是在具有(当λr》0)或不具有(当λr=0)正则化的情况下,目标损失的附加的正则化项。此外,该方法还可灵活地应用于任意正则化损失£r(θ)。
[0132]
为了学习效率和学习效率,执行迭代优化算法。在第一步骤中,满足期望结构的部分权重系数被固定,然后在第二步骤中,通过反向传播训练损失来对权重系数的未固定部分进行更新。通过迭代地进行这两个步骤,可以逐渐地固定越来越多的权重,并且可以有效地对联合损失逐渐地进行优化。
[0133]
此外,在实施例中,每一层被单独压缩,因此和可以进一步地写为:
[0134][0135]
其中,lu(wj)是在第j层上限定的统一损失;ls(wj)是在第j层上限定的剪枝损失,n是该训练过程涉及的层的总数量,wj表示第j层的权重系数。再次,由于针对每一层独立地计算lu(wj)和ls(wj),在本公开的其余部分中,在不丧失一般性的情况下省略上标j。
[0136]
对于每一个网络层,其权重系数w是具有尺寸(ci,k1,k2,k3,co)的5维(5-dmension,5d)张量。该层的输入是尺寸为(hi,wi,di,ci)的四维(4-dimension,4d)张量a,并且该层的输出是尺寸为(ho,wo,do,co)的四维张量b。尺寸ci、k1、k2、k3、co、hi、wi、di、ho、wo、do是大于或等于1的整数。当尺寸ci、k1、k2、k3、co、hi、wi、di、ho、wo、do中任意一个取值为1时,相应的张量减小到较低的维度。每个张量中的每个项都是一个浮点数。设m表示与w尺寸相同的5d二进制掩膜,其中,m中的每一项都是二进制数字0/1,0/1指示相应的权重系数是否被剪枝/在预剪枝的过程中保持不变。引入m与w相关联,以应对w来自已剪枝dnn模型的情况,在该模型中,网络中神经元之间的某些连接被从计算中移除。当w来自原始未剪枝的密集模型时,m中的所有项取值为1。通过基于a、m和w的卷积运算

计算输出b:
[0137][0137][0138]
l=1,

,hi,m=1,

,wi,n=1,

,di,l

=1,

,ho,
[0139]m′
=1,

,wo,n

=1,

,do,v=1,

,co.
ꢀꢀꢀ
(13)
[0140]
参数hi、wi和di(h0、wo和do)是输入张量a(输出张量b)的高度、权重和深度。参数ci(co)是输入(输出)通道的数量。参数k1、k2和k3分别是对应于高度、权重和深度轴的卷积核的尺寸。也即,对于每个输出通道v=1,

,co,等式(13)中描述的操作可以被看作是与输入a进行卷积的、尺寸为(ci,k1,k2,k3)的4d权重张量wv。
[0141]
可以改变等式(13)中的求和运算的顺序,从而产生输入a、权重w(和掩膜m)的形状的不同配置,以得到相同的输出b。在实施例中,采用两种配置。(1)将5d权重张量重塑为大小为(c
′i,c
′o,k)的3d张量,其中c
′i×c′o×
k=ci×co
×
k1×
k2×
k3。例如,该配置为c
′i=ci,c
′o=co,k=k1×
k2×
k3。(2)将5d权重张量重塑为尺寸为(c
′i,c
′o)的2d矩阵,其中,c
′i×c′o=ci×co
×
k1×
k2×
k3。例如,有些配置为c
′i=ci,c
′o=co×
k1×
k2×
k3或者c
′o=co,c
′i=ci×
k1×
k2×
k3。
[0142]
通过考虑以下两个方面来设计权重系数的期望的微结构。第一,权重系数的微结构与如何实现卷积运算的底层gemm矩阵乘法过程相一致,从而加快利用学习到的权重系数进行推理计算的速度。第二,权重系数的微结构能够帮助提高量化和熵编码效率以进行进一步压缩。在实施例中,在3d重塑的权重张量或2d重塑的权重矩阵中的每一层中,使用针对权重系数的逐块结构。具体地,对于重塑的3d权重张量的情况,将其划分为尺寸为(gi,go,gk)的块,并且块内的所有系数是已剪枝的或已统一的。对于重塑的2d权重矩阵,将其划分为尺寸为(gi,go)的块,并且块内的所有系数是已剪枝的或已统一的。块中的已剪枝的权重被设置为全零。可以计算块的剪枝损失,该剪枝损失度量由这样的剪枝运算引入的误差。块中的已统一的权重被设置为遵循预定义的统一规则,例如,所有值被设置为相同,以便在产生高效率的量化过程中可以使用一个值来表示整个块。可以存在统一权重的多个规则,每个规则与统一失真损失相关联,统一失真损失用于度量采用该规则引入的误差。例如,将权重设置为具有相同的绝对值并保持权重的原始正负号,而不是将权重设置为相同,在给定这种微结构的情况下,在迭代期间,通过将剪枝损失和统一损失考虑在内,来确定权重系数中待剪枝或待统一的部分。然后,在第二步骤中,已剪枝的且已统一的权重被固定,执行正常的神经网络训练过程,并且通过反向传播机制对剩余的未固定权重系数进行更新。
[0143]
图4d和4e是迭代再训练/微调过程的两个实施例,它们都迭代地交替进行两个步骤以逐渐地优化等式(11)的联合损失。在给定具有权重系数{w}和掩膜{m}的预先训练过的dnn模型的情况下(该dnn模型可以是已剪枝的稀疏模型或未已剪枝的非稀疏模型),在第一步骤中,两个实施例首先将每一层的权重系数w(和相应的掩膜m)重塑为期望的3d张量或2d矩阵。然后,对于每一层,微结构选择模块455通过剪枝和统一微结构选择过程(pruning and unification micro-structure selection process),确定权重将被剪枝的一组剪枝微结构{bs}或pmb,并确定权重将被统一的一组统一微结构{bu}或统一微结构块(unification micro-structure block,umb)。确定剪枝微结构{bs}和统一微结构{bu}的方法有多种,这里列出了四种方法。在方法1中,对于具有权重系数w和掩膜m的每一层,对于w中的每一个块b,使用权重统一器对块内的权重系数进行统一(例如,通过将所有权重设置为具有相同绝对值,同时保持原始正负号)。然后计算相应的统一损失lu(b),以度量统一失真(例如,b中权重绝对值的ln范数)。统一损失lu(w)可以被计算为w中所有块的lu(b)之和。基于该统一损失lu(w),dnn模型的所有层根据lu(w)按照升序进行排序。然后,在给定统一比例(unification ratio)u的情况下,被选择的是其微结构块(即,{bu},包括了针对选择的
层的所有块)将被统一的靠前的层(top layers),使得实际统一比例u

(由选择的层的已统一的微结构块的总数量与整个dnn模型的微结构块的总数量之比进行度量)最接近于但仍小于u%。然后,对于剩余层中的每一层,对于每个微结构块b,计算剪枝损失ls(b)(例如,b中权重的绝对值之和)。在给定剪枝比例p的情况下,该层的块根据ls(b)按照升序进行排序,并且选择前p%的块作为待剪枝的{bs}。对于该层的剩余块,可以采取可选的附加步骤,在该附加步骤中,该层的剩余块基于统一损失lu(b)按照升序进行排序,并且选择前(u-u

)%作为待统一的{bu}。
[0144]
在方法2中,对于具有权重系数w和掩膜m的每一层,以与方法1类似的方法计算统一损失lu(b)和lu(w)。然后,在给定统一比例u的情况下,以与方法1类似的方法对靠前的层的微结构块进行统一。然后,用相同方法计算剩余层的剪枝损失ls(b)。在给定剪枝比例p的情况下,所有剩余层的所有块根据ls(b)按照升序进行排序,并选择前p%的块进行剪枝。对于剩余层的剩余块,可以采取可选的附加步骤,在附加步骤中,剩余层的剩余块基于统一损失lu(b)按照升序进行排序,并选择前(u-u

)%作为待统一的{bu}。
[0145]
在方法3中,对于具有权重系数w和掩膜m的每一层,对于w中的每一个块b,以与方法1类似的方法计算统一损失lu(b)和剪枝损失ls(b)。在给定剪枝比例p和统一比例u的情况下,该层的块根据ls(b)按照升序进行排序,并且选择前p%的块作为待剪枝的{bs}。对于该层的剩余块,根据统一损失lu(b)按照升序进行排序,然后选择前u%作为待统一的{bu}。
[0146]
在方法4中,对于具有权重系数w和掩膜m的每一层,对于w中的每一个块b,以与方法1类似的方法计算统一损失lu(b)和剪枝损失ls(b)。在给定剪枝比例p和统一比例u的情况下,dnn模型的所有层中的所有块根据ls(b)按照升序进行排序,并选择前p%的块进行剪枝。对于整个模型的剩余块,根据统一损失lu(b)按照升序进行排序,然后选择前u%进行统一。
[0147]
在获得该组剪枝微结构和该组统一微结构之后,目标变为通过迭代地最小化等式(11)中描述的联合损失,来寻找一组已更新的最优权重系数w*和相应的权重掩膜m*。在图4d所示的第一实施例中,对于第t次迭代,存在当前权重系数w(t-1)。此外,在整个训练过程中保持微结构化统一掩膜u(t-1)和微结构化剪枝掩膜p(t-1)。u(t-1)和p(t-1)都具有与w(t-1)相同的形状,从而分别记录对应的权重系数是已统一的还是已剪枝的。然后,权重剪枝/统一模块460通过权重剪枝和统一过程计算已剪枝且已统一的权重系数w
pu
(t-1),在该过程中,所选择的、由p(t-1)掩膜的剪枝微结构被剪枝,在选择的统一微结构中被掩膜的权重通过u(t-1)进行统一,从而产生已更新的权重掩膜m
pu
(t-1)。在实施例中,m
pu
(t-1)与训练前的剪枝掩膜m不同,在这种情况下,对于同时具有预剪枝的权重系数和非预剪枝的权重系数的块,原始已剪枝的权重系数将通过权重统一器被再次设置为具有非零值,并且m
pu
(t-1)中的对应项将被改变。在另一个实施例中,m
pu
(t-1)与m相同,在这种情况下,对于同时具有已剪枝的权重系数和未剪枝的权重系数的块,将只对未剪枝的权重进行重置,而已剪枝的权重保持为零。
[0148]
然后,在第二步骤中,权重更新模块465对被u(t-1)和p(t-1)标记为微结构化已统一的权重系数或微结构化已剪枝的权重系数进行固定,然后,通过神经网络训练过程对w(t-1)中剩余的未固定的权重系数进行更新,从而产生已更新的w(t)和m(t)。
[0149]
具体地,设表示训练数据集,其中,可以与原始数据集
相同,基于得到预先训练过的权重系数w。也可以是与不同的数据集,但是具有与原始数据集相同的数据分布。在第二步骤中,网络前向计算模块415使用当前的权重系数wu(t-1)和掩膜m,使每个输入x经由网络前向计算过程通过当前网络,从而生成估计的输出基于真值标注y和估计的输出目标损失计算模块420通过计算目标损失过程计算等式(11)中的目标训练损失然后,梯度计算模块425计算目标损失的梯度g(wu(t-1))。tensorflow或pytorch等深度学习框架使用的自动梯度计算方法可以用来计算g(wu(t-1))。基于梯度g(wu(t-1))和微结构化统一掩膜u(t-1)和微结构化剪枝掩膜p(t-1),权重更新模块465使用反向传播和权重更新过程通过反向传播对wu(t-1)的未固定权重系数进行更新。再训练过程本身也是一个迭代过程。采用多次迭代对wu(t-1)的未固定部分进行更新,例如,直到目标损失收敛。然后,系统进行下一次迭代t,在下一次迭代t中,在给定新的统一比例u(t)和剪枝比例p(t)的情况下,通过剪枝和统一微结构选择过程,确定一组新的统一微结构和剪枝微结构(以及新的微结构化统一掩膜u(t)和微结构化剪枝掩膜p(t))。
[0150]
在图4e所示出的训练过程的第二个实施例中,通过另一个迭代过程找到一组已更新的最优权重系数w*和相应的权重掩膜m*。对于第t次迭代,存在当前的权重系数w(t-1)和掩膜m。此外,掩膜计算模块470通过掩膜和统一剪枝计算过程计算微结构化统一掩膜u(t-1)和微结构化剪枝掩膜p(t-1)。u(t-1)和p(t-1)都具有与w(t-1)相同的形状,从而分别记录对应的权重系数是已统一的还是已剪枝的。然后,权重剪枝/统一模块460通过权重剪枝和统一过程计算已剪枝且已统一的权重系数w
pu
(t-1),在该过程中,所选择的、由p(t-1)掩膜的剪枝微结构被剪枝,在选择的统一微结构中被掩膜的权重通过u(t-1)进行统一,从而产生已更新的权重掩膜m
pu
(t-1)。
[0151]
然后,在第二步骤中,权重更新模块465对被u(t-1)和p(t-1)标记为微结构化已统一的权重系数或微结构化已剪枝的权重系数进行固定,然后,通过神经网络训练过程对w(t-1)中剩余的未固定的权重系数进行更新,从而产生已更新的w(t)。类似于图4d的第一个实施例,在给定训练数据集的情况下,网络前向计算模块415使用当前的权重系数w(t-1)和掩膜m(t-1),使每个输入x经由网络前向计算过程通过当前网络,从而生成估计的输出基于真值标注y和估计的输出目标损失计算模块420通过计算联合损失过程来计算联合训练损失联合训练损失包括等式(11)中的目标训练损失和残余损失£
res
(w(t-1)),如等式(5)所示。
[0152]

res
(w(t-1))度量当前的权重w(t-1)与目标已剪枝且已统一的权重w
pu
(t-1)之间的差值。例如,可以使用l1范数:
[0153]

res
(w(t-1))=||w(t-1))-w
pu
(t-1)||
ꢀꢀꢀ
(14)
[0154]
然后,梯度计算模块425计算联合损失g(w(t-1))的梯度。tensorflow或pytorch等深度学习框架使用的自动梯度计算方法可以用来计算g(w(t-1))。基于梯度g(w(t-1))和微结构化统一掩膜u(t-1)以及微结构化剪枝掩膜p(t-1),权重更新模块465使用反向传播和权重更新过程通过反向传播来对w(t-1)的未固定权重系数进行更新。再训练过程本身也是一个迭代过程。采用多次迭代对w(t-1)的未固定部分进行更新,例如,直到目标损失收敛。
然后,系统进行下一次迭代t,在下一次迭代t中,在给定统一比例u(t)和剪枝比例p(t)的情况下,通过剪枝和统一微结构选择过程,确定一组新的统一微结构和剪枝微结构(以及新的微结构化统一掩膜u(t)和微结构化剪枝掩膜p(t))。
[0155]
在整个迭代过程期间,在第t次迭代时,可以通过权重剪枝和统一过程计算已剪枝且已统一的权重系数,在该过程中,所选择的、由p(t)掩膜的剪枝微结构被剪枝,在选择的统一微结构中被掩膜的权重通过u(t)进行统一,从而产生已更新的权重掩膜m
pu
(t)。类似于先前的图4d的实施例,m
pu
(t)可以与剪枝前的掩膜m相同,在这种情况下,对于同时具有已剪枝的权重系数和未剪枝的权重系数的块,原始已剪枝的权重系数将通过权重统一器被再次设置为非零值,并且m
pu
(t)中的对应项将被改变。此外,m
pu
(t)可以与m相同,在这种情况下,对于同时具有已剪枝的权重系数和未剪枝的权重系数的块,将只对未剪枝的权重进行重置,而已剪枝的权重保持为零。该w
pu
(t)和m
pu
(t)可以用于生成最终的已更新模型w*和m*。例如,w*=w
pu
(t)和m*=m
·mpu
(t)。
[0156]
在实施例中,超参数u(t)和p(t)可以在迭代期间随着t的增加而增加各自的值,从而在整个迭代学习过程中越来越多的权重系数将被剪枝、统一和固定。
[0157]
统一正则化的目标在于提高对学习到的权重系数进行进一步压缩的效率,因使用优化的权重系数而加速计算。这可以显著减小dnn的模型尺寸,并加快推理计算速度。
[0158]
通过迭代的再训练过程,该方法能够有效地保持原始训练目标的性能,并且追求压缩和计算效率。迭代的再训练过程还提供了在不同时间引入不同损失的灵活性,使得系统在优化过程期间关注不同的目标。
[0159]
该方法可以被应用于具有不同的数据形式的数据集。输入/输出数据是4d张量,4d张量可以是真实的视频片段、图像或提取的特征图。
[0160]
图5是根据实施例用于对采用微结构化权重剪枝和权重统一的神经网络模型压缩进行训练的方法500的流程图。
[0161]
在某些实施方式中,图5的一个或多个过程块可以由平台120执行。在某些实施方式中,图5的一个或多个过程块可以由与平台120分离或包括平台120的另一个设备或另一组设备(比如用户设备110)来执行。
[0162]
执行方法500以训练深度神经网络,该深度神经网络用于减少输入神经网络的参数,以得到输出神经网络。
[0163]
如图5所示,在操作510中,方法500包括从深度神经网络的、被输入掩膜所掩膜的输入权重的多个块中,选择待剪枝的剪枝微结构块。
[0164]
在操作520中,方法500包括基于选择的剪枝微结构块,对输入权重进行剪枝。
[0165]
在操作530中,方法500包括基于选择的剪枝微结构块,对输入掩膜和剪枝掩膜进行更新,该剪枝掩膜指示输入权重中的每一个是否被剪枝。
[0166]
在操作540中,方法500包括基于已更新的剪枝掩膜,对已剪枝的输入权重和已更新的输入掩膜进行更新,以最小化深度神经网络的损失。
[0167]
对已剪枝的输入权重和已更新的输入掩膜的更新可以包括:使用深度神经网络,减少第一训练神经网络的参数,以估计第二训练神经网络,该深度神经网络的输入权重被已更新的输入掩膜所统一和掩膜;基于估计的第二训练神经网络和真值神经网络(ground-truth neural network),确定深度神经网络的损失;基于已剪枝的输入权重,确定已确定
的损失的梯度;以及基于已确定的梯度和已更新的剪枝掩膜,对已剪枝的输入权重和已更新的输入掩膜进行更新,以最小化已确定的损失。
[0168]
深度神经网络可以通过以下步骤进行进一步训练:重塑被输入掩膜所掩膜的输入权重;将重塑的输入权重划分成输入权重的多个块;对输入权重中、由重塑的输入权重划分成的多个块中的一个或多个块中的多个权重进行统一;基于多个块中的一个或多个块中的已统一的多个权重,对输入掩膜和统一掩膜进行更新,该统一掩膜指示输入权重中的每一个是否被统一;以及基于已更新的统一掩膜,对已更新的输入掩膜和输入权重进行更新,以最小化深度神经网络的损失,在该输入权重中,多个块中的一个或多个块中的多个权重是已统一的。
[0169]
对已更新的输入掩膜和输入权重的更新可以包括:使用深度神经网络,减少第一训练神经网络的参数,以估计第二训练神经网络,该深度神经网络的输入权重被统一并且被已更新的输入掩膜所掩膜;基于估计的第二训练神经网络和真值神经网络,确定深度神经网络的损失;基于输入权重确定已确定的损失的梯度,在该输入权重中,多个块中的一个或多个块中的多个权重是已统一的;以及基于已确定的梯度和已更新的统一掩膜,对已剪枝的输入权重和已更新的输入掩膜进行更新,以最小化已确定的损失。
[0170]
深度神经网络可以通过以下来进一步训练:从被输入掩膜所掩膜的输入权重的多个块中,选择待统一的统一微结构块;基于选择的统一微结构块,对已剪枝的输入权重的多个块中的一个或多个块中的多个权重进行统一,以得到深度神经网络的已剪枝且已统一的输入权重;以及基于多个块中的一个或多个块中的已统一的多个权重,对统一掩膜进行更新,该统一掩膜指示输入权重中的每一个是否被统一。对输入掩膜的更新可以包括:基于选择的剪枝微结构块和选择的统一微结构块,对输入掩膜进行更新,以得到剪枝统一掩膜。对已剪枝的输入权重和已更新的输入掩膜的更新可以包括:基于已更新的剪枝掩膜和已更新的统一掩膜,对已剪枝且已统一的输入权重以及剪枝统一掩膜进行更新,以最小化深度神经网络的损失。
[0171]
对已剪枝且已统一的输入权重以及剪枝统一掩膜的更新可以包括:使用深度神经网络,减少第一训练神经网络的参数,以估计第二训练神经网络,该深度神经网络的已剪枝且已统一的输入权重被剪枝统一掩膜所掩膜;基于估计的第二训练神经网络和真值神经网络,确定深度神经网络的损失;基于输入权重确定已确定的损失的梯度,在该输入权重中,多个块中的一个或多个块中的多个权重是已统一的;以及基于已确定的梯度、已更新的剪枝掩膜和已更新的统一掩膜,对已剪枝且已统一的输入权重以及剪枝统一掩膜进行更新,以最小化已确定的损失。
[0172]
可以基于针对每次迭代待剪枝的该输入权重的预先确定的剪枝比例,从被输入掩膜所掩膜的输入权重的多个块中选择剪枝微结构块。
[0173]
图6是根据实施例用于对采用微结构化权重剪枝和权重统一的神经网络模型压缩进行训练的装置600的图。
[0174]
如图6所示,装置600包括选择代码610、剪枝代码620、第一更新代码630和第二更新代码640。
[0175]
装置600训练深度神经网络,该深度神经网络用于减少输入神经网络的参数,以得到输出神经网络。
[0176]
选择代码610被配置为使至少一个处理器,从深度神经网络的、被输入掩膜所掩膜的输入权重的多个块中,选择待剪枝的剪枝微结构块;
[0177]
剪枝代码620被配置为使至少一个处理器,基于选择的剪枝微结构块,对输入权重进行剪枝。
[0178]
第一更新代码630被配置为使至少一个处理器,基于选择的剪枝微结构块,对输入掩膜和剪枝掩膜进行更新,该剪枝掩膜指示输入权重中的每一个是否被剪枝。
[0179]
第二更新代码640被配置为使至少一个处理器,基于已更新的剪枝掩膜,对已剪枝的输入权重和已更新的输入掩膜进行更新,以最小化深度神经网络的损失。
[0180]
第二更新代码640可以进一步被配置为使至少一个处理器:使用深度神经网络,减少第一训练神经网络的参数,以估计第二训练神经网络,该深度神经网络的输入权重被已更新的输入掩膜所统一和掩膜;基于估计的第二训练神经网络和真值神经网络,确定深度神经网络的损失;基于已剪枝的输入权重确定已确定的损失的梯度;以及基于已确定的梯度和已更新的统一掩膜,对已剪枝的输入权重和已更新的输入掩膜进行更新,以最小化已确定的损失。
[0181]
深度神经网络可以通过以下步骤进行进一步训练:重塑被输入掩膜所掩膜的输入权重;将重塑的输入权重划分成输入权重的多个块;对输入权重中、由重塑的输入权重划分成的多个块中的一个或多个块中的多个权重进行统一;基于多个块中的一个或多个块中的已统一的多个权重,对输入掩膜和统一掩膜进行更新,该统一掩膜指示输入权重中的每一个是否被统一;以及基于已更新的统一掩膜,对已更新的输入掩膜和输入权重进行更新,以最小化深度神经网络的损失,在该输入权重中,多个块中的一个或多个块中的多个权重是已统一的。
[0182]
第二更新代码640可以进一步被配置为使至少一个处理器:使用深度神经网络,减少第一训练神经网络的参数,以估计第二训练神经网络,该深度神经网络的输入权重被统一并且被已更新的输入掩膜所掩膜;基于估计的第二训练神经网络和真值神经网络,确定深度神经网络的损失;基于输入权重确定已确定的损失的梯度,在该输入权重中,多个块中的一个或多个块中的多个权重是已统一的;以及基于已确定的梯度和已更新的统一掩膜,对已剪枝的输入权重和已更新的输入掩膜进行更新,以最小化已确定的损失。
[0183]
深度神经网络可以通过以下步骤进行进一步训练:从被输入掩膜所掩膜的输入权重的多个块中,选择待统一的统一微结构块;基于选择的统一微结构块,对已剪枝的输入权重的多个块中的一个或多个块中的多个权重进行统一,以得到深度神经网络的已剪枝且已统一的输入权重;以及基于多个块中的一个或多个块中的已统一的多个权重,对统一掩膜进行更新,该统一掩膜指示输入权重中的每一个是否被统一。对输入掩膜的更新可以包括:基于选择的剪枝微结构块和选择的统一微结构块,对输入掩膜进行更新,以得到剪枝统一掩膜。对已剪枝的输入权重和已更新的输入掩膜的更新可以包括:基于已更新的剪枝掩膜和已更新的统一掩膜,对已剪枝且已统一的输入权重以及剪枝统一掩膜进行更新,以最小化深度神经网络的损失。
[0184]
第二更新代码640可以进一步被配置为使至少一个处理器:使用深度神经网络,减少第一训练神经网络的参数,以估计第二训练神经网络,该深度神经网络的已剪枝且已统一的输入权重被剪枝统一掩膜所掩膜;基于估计的第二训练神经网络和真值神经网络,确
定深度神经网络的损失;基于输入权重确定已确定的损失的梯度,在该输入权重中,多个块中的一个或多个块中的多个权重是已统一的;以及基于已确定的梯度、已更新的剪枝掩膜以及已更新的统一掩膜,对已剪枝且已统一的输入权重以及剪枝统一掩膜进行更新,以最小化已确定的损失。
[0185]
可以基于针对每次迭代待剪枝的该输入权重的预先确定的剪枝比例,从被输入掩膜所掩膜的输入权重的多个块中选择剪枝微结构块。
[0186]
前述公开提供了说明和描述,但并不旨在详尽列举或将实施方式限制为所公开的确定形式。可以根据上述公开进行修改和变化,或者可以从实施方式的实际操作中获得修改和变化。
[0187]
如本文所使用的,术语组件旨在广义地解释为硬件、固件或硬件和软件的组合。
[0188]
很显然,本文描述的系统和/或方法可以以不同形式的硬件、固件或硬件和软件的组合来实现。用于实现这些系统和/或方法的实际的专用的控制硬件或软件代码并不限制实施方式。因此,本文描述了系统和/或方法的操作和行为,而不参考特定的软件代码——可以理解,软件和硬件可以被设计为实现基于本文描述的系统和/或方法。
[0189]
尽管在权利要求中叙述了特征的组合和/或在说明书中公开了特征的组合,但这些组合并不旨在限制可能的实施方式的公开。事实上,这些特征中的许多可以以权利要求书中未具体叙述和/或说明书中未具体公开的方式进行组合。尽管下面列出的每个从属权利要求可能仅仅直接依赖于一个权利要求,但是可能的实施方式的公开包括每个从属权利要求与权利要求集里的每一个其他权利要求的组合。
[0190]
本文使用的任何元素、行为或指令都不应被解释为关键或必要的,除非被明确描述为关键或必要的。此外,如本文所使用的,冠词“一”和“一个”旨在包括一个或多个项目,并且可以与“一个或多个”互换使用。此外,如本文所使用的,术语“集合”旨在包括一个或多个项(例如,相关项、不相关项、相关和不相关项的组合等),并且可以与“一个或多个”互换使用。如果仅旨在表示一个项目,则使用术语“一个”或类似的语言。此外,如本文所使用的,术语“包括”“具有”等旨在表示开放式术语。进一步地,除非另有明确说明,“基于”一词旨在表示“至少部分基于”。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献