一种softmax函数的硬件实现方法、模块、芯片和系统
技术领域
本发明涉及神经网络多任务分类激活函数的硬件实现
技术领域
,更具体地说,涉及一种softmax函数的硬件实现方法、模块、芯片和系统。背景技术
深度学习作为机器学习的一个子集,通过使用多层数学函数,对数据中的特征进行有效提取与转换。深度学习算法的研究热点之一是激活函数,激活函数给神经元引入了非线性因素,使得神经网络可以任意逼近任何非线性函数,这样神经网络就可以应用到众多的非线性模型中。
softmax函数(归一化指数函数)通常在多分类任务中作为输出层激活函数,作为深度学习中的最后一层用作分类。softmax函数因为具有e指数运算,在DNN的硬件实现中具有相当高的复杂度,同时,在一个高速的神经网络中,需要尽可能少的周期完成softmax函数的计算,即需要尽可能少的时间实现。目前,很多学者研究各种方法来降低其在硬件实现中的复杂度,同时还要兼顾硬件的资源使用和最大程度的降低计算时间。
softmax函数可以用如下公式表达:
由以上公式可知,softmax函数的计算包括e指数运算和除法,所以在硬件系统中并不能直接计算出来。现有技术在函数实现时常使用基于LUT查找表的方法进行计算,查找表方法实现时需要消耗很多的资源;使用基于CORDIC的实现方法相较于查找表的方法,虽然没有消耗很多的资源,但是消耗时间。
综上,现有技术的softmax函数硬件实现,由于函数具有e指数运算和除法计算,带来硬件消耗大和复杂度高的问题,具有硬件不友好型,需要一种硬件友好,性能高的实现方法来支持神经网络的多分类任务问题。
发明内容
1.要解决的技术问题
针对现有技术中存在的softmax函数因为具有e指数运算和除法,硬件实现需消耗过多资源或时间,复杂度高等问题,本发明提供一种softmax函数的硬件实现方法、模块、芯片和系统,对softmax函数进行变换,避免硬件实现中的指数运算和除法运算,实现高性能、低复杂度的softmax函数硬件实现,本发明无需迭代来降低精度,节省计算时间,在神经网络的多分类任务计算时具有较高性能。
2.技术方案
本发明的目的通过以下技术方案实现。
本发明涉及深度学习中用于多分类任务分类激活函数函数实现问题,尤其涉softmax函数的硬件实现。
本发明公开的第一项技术方案,为一种softmax函数的硬件实现方法,在硬件实现前,先对softmax函数进行函数变换,将softmax函数中的底数e换成2,形成E-to-2softmax函数,函数表达式为:
为了避免中间结果数据运算过大问题,对输入数据转化,进行xi-xmax的运算,操作如下:
通过此法可以有效降低中间数据运算过大问题,也可以减小基于2x和log2x的查找表所需要存储数据的范围,进而节省硬件资源。
对转化后的函数再通过2的指数对数变换的形式进行变换,用于避免硬件不友好的除法运算,转化公式为:
整理上述公式得到:
对变换后的函数通过比较器模块得到数据最大值,通过减法器模块对数据做差,通过数据分割模块分割数据,通过镜像数据查找模块在查找表中查找数据对应值,通过移位求和模块实现数据相乘和相加运算,通过数据转化模块对数据进行转换。
进一步的,包括以下步骤:
步骤1:将所有输入数据xi输入至比较器模块进行比较,选择出输入数据最大值xmax;
步骤2:将输入数据xi和输入数据最大值xmax输入减法器模块进行做差运算,得到xi-xmax;
步骤3:将减法器模块计算数据发送至数据分割模块,将其分割成第一部分和第二部分;数据分割模块对进行分离,将数据分割为两个相乘的部分,第一部分数据的表现形式是以2为底,指数为负数整数,用2负整数表示;第二部分数据的表现形式是以2为底,指数为正数小数,用2小数表示,即2负整数+小数=2负整数×2小数,
即
步骤4:将数据分割模块分割的第二部分数据输入镜像查找模块进行查找计算后的值与第一部分数据一起输入移位求和模块,通过移位实现相乘运算,将所述第二部分数据查表确认数值在移位求和模块向右移动负整数位数实现第一部分数据与第二部分数据相乘运算,通过移位来进行实现数据相乘,避免了幂运算和乘法运算,降低复杂度。
对所有移位数据结果求和,由于xi-xmax小于等于0,对其求2的指数运算,所有输入数据的移位结果求和之后的数值范围为(1,N],N表示输入数据个数;
步骤5:数据转化模块将移位求和模块输出的数据转化表现形式,转化后的数据在镜像查找模块查找得到对应值;数据转换模块将数据转化为1.M×2E的形式,E为整数,表现形式如下:
在对数计算过程中将数据转换形式,其中log2 1.M通过镜像查找模块查表计算,镜像查找模块基于log2x镜像查找,查找log2 1.M的值,降低计算复杂度;此时完成εi的计算,即
步骤6:将上述步骤计算值输入镜像查找表中计算得出E-to-2softmax函数的值,步骤5计算的εi数值小于零,将其送入数据分割模块,变为负整数加小数的形式,此时,
重复步骤4内容,将2小数送入镜像查找模块进行查找,查找值与2负整数相乘通过右移负整数位来实现,进而计算出来E-to-2softmax函数的值,完成整个输出。
进一步的,所述镜像查找模块以镜像的方式在查找表查找2x和log2x两个函数。因为2x和log2x这两个函数关于y=x对称,并且本发明所需要查找的区间也是对称的,例如2x对x查找区间是[0,1),对应的函数值为[1,2),而log2x需要对x查找的区间为[1,2),对应的函数值的区间是[0,1),所以为了节省硬件资源,减少面积,本发明构造一个镜像查找表,通过区间划分的方式即可在对称的基础上完成对两个函数的查找。
本发明采用一个查找表复用的方法,以镜像的方式进行查找两个函数值,降低硬件的复杂度和资源的消耗。
本发明公开的第二项技术方案,为一种softmax函数的计算模块,所述计算模块使用所述的一种softmax函数的硬件实现方法,所述计算模块包括比较器模块、减法器模块、数据分割模块、镜像查找模块、移位求和模块和数据转化模块;
比较器模块用于计算输入数据最大值,减法器模块用于计算输入数据与输入数据最大值的差值,数据分割模块用于将数据分割,镜像数据查找模块用于在查找表中查找数据对应值,移位求和模块用于进行数据相乘和相加运算,数据转化模块用于对数据进行转换;
比较器模块的输出端与减法器模块的输入端连接,减法器模块的输出端连接数据分割模块的输入端,数据分割模块的输出端分别连接镜像查找模块的输入端和移位求和模块的输入端,镜像查找模块的输出端也连接移位求和模块的输入端,移位求和模块的输出端连接数据转化模块的输入端,数据转化模块的输出端也连接镜像查找模块的输入端。
本发明利用数学变换以及镜像查找方式,计算模块各部分协同操作完成对E-to-2softmax函数的实现,避免了硬件不友好的求幂运算和除法运算,具有复杂度低、性能高等特点。在神经网络中多任务分类激活函数的硬件实现上,本发明提出的E-to-2softmax函数硬件函数实现方法,并不会改变softmax函数的特性,并通过软件仿真的证明了E-to-2softmax函数的可靠性。
进一步的,数据分割模块将数据分割为为两个相乘的部分,第一部分数据的表现形式是以2为底,指数为负数整数,用2负整数表示;第二部分数据的表现形式是以2为底,指数为正数小数,用2小数表示,即2负整数+小数=2负整数×2小数。
本发明公开的第三项技术方案,为一种芯片,所述芯片包括所述的一种softmax函数的计算模块。
本发明公开的第四项技术方案,为一种softmax函数的硬件系统,所述系统包括所述的一种芯片,所述系统还包括主控制器、数据输入模块和数据输出模块,其中,主控器模块控制配置信息的分发,数据输入模块和数据输出模块负责数据的搬运,芯片所包括的计算模块对数据进行比较、减法、分割、查找、移位、求和、转化等操作。
主控制器与数据输入模块、数据输出模块和芯片均连接;主控制器控制数据通过数据输入模块输入芯片进行计算,芯片将计算结果通过数据输出模块返回主控制器。
3.有益效果
相比于现有技术,本发明的优点在于:
本发明提出的新的E-to-2softmax函数,不改变softmax函数的特性,同时利用函数的数学可变换特性,对E-to-2softmax函数进行数学变换,通过数据变换、数据分割、移位、镜像查找的方法来进行硬件实现。
在神经网络多分类任务的激活函数的实现中,由于softmax具有e指数运算和除法,在硬件实现时会产生硬件消耗大、复杂度高等问题,具有很大硬件不友好性。本发明对softmax激活函数进行优化,提出来了E-to-2softmax激活函数来代替softmax激活函数,并提出基于E-to-2softmax的高性能、低复杂度的硬件实现方法来避免的指数操作和除法操作,极大地解决softmax硬件实现困难的难题,本硬件实现相比于基于LUT查找表的方法,复用一张镜像查找表,在硬件的面积和功耗上节省50%以上,相较于CORDIC的实现方法,本发明不需要迭代来降低精度,节省计算时间。
附图说明
图1是本发明reuters实验下softmax函数作输出层激活函数实验结果图;
图2是本发明reuters实验下E-to-2softmax函数做输出层激活函数实验结果图;
图3是本发明MNIST实验下softmax函数作为输出层激活函数实验结果图;
图4是本发明MNIST实验下E-to-2softmax函数作为输出层激活函数实验结果图;
图5是2x和log2x镜像查找原理示意图;
图6是本发明E-to-2softmax函数硬件架构图。
具体实施方式
下面结合说明书附图和具体的实施例,对本发明作详细描述。
实施例
本实施例基于传统softmax函数进行变换,公开一种E-to-2softmax函数,与softmax函数相比,E-to-2softmax函数在硬件实现上避免了e指数运算和除法操作,只需要进行一些数据变换、数据分割、移位和加法操作就可以实现,具有很高的性能和较低的复杂度。
softmax函数表达公式为:
其中,xi表示数组x中的第i个元素,softmax(i)表示该元素的softmax值,数组x中共有n个元素。
本实施例所述E-to-2softmax函数,将底数e换成2,函数表达式为:
首先对E-to-2softmax函数的可行性进行理论分析。
softmax函数之所以被广泛用于多分类任务的输出层函数中,主要有两点原因:第一是归一化性;第二是其损失函数交叉熵的形式的简洁性。
针对上述两项特性,对E-to-2softmax函数进行详细分析。
首先,对E-to-2softmax函数的归一化特性进行理论分析。
以一个具有n个输入的softmax函数来举例:
公式(3)代表的是第i个元素对应的softmax函数值,将n个输入的softmax函数值进行求和,可以得到:
对n个输入的E-to-2softmax函数进行求和,可以得到:
由公式(5)可得,E-to-2softmax函数保持了softmax函数的归一化特性。
接着,对E-to-2softmax函数的交叉熵形式的简洁性进行理论分析。
在进行梯度优化的时候指定一个目标函数,由于softmax函数的均方差的比较复杂,一般将交叉熵作为目标函数进行优化,由于2x等价于exln2,E-to-2softmax函数继承了softmax函数交叉熵形式简洁的特性,仅仅是在结果前面乘上一个ln2因子。因此,在数学上E-to-2softmax函数用于多分类任务输出层的激活函数是具有与softmax函数同样的数学特性的。
最后,通过两组实验对E-to-2softmax函数的软件可行性进行分析。
实验一、基于Keras包内关于路透社新闻报告的语料包reuters进行多分类。
本次实验分类共有46个主题的区分,在使用reuters数据集进行新闻主题分类时,首先进行数据预处理,每一条新闻的关键词用数字来表示,其中1表示存在该关键词,0代表不存在该关键词,每一条新闻可以用一个0和1组成的一维向量表示。
本实施例设计第一神经网络,以此为例对softmax函数和E-to-2softmax函数的性质进行分析,第一神经网络只是一种可实现形式,可根据计算精度等要求变换结构。所述第一神经网络包括四层,第一层为输入层,第二层为具有64个神经元的以Relu函数为激活函数的隐藏层,第三层仍是一个64个神经元的以Relu函数为激活函数的隐藏层,第四层则是具有46个神经元的以softmax函数作为激活函数的输出层。
图1是该reuters实验使用softmax函数作输出层激活函数实验结果图,每一轮的迭代都在不断地提高神经网络对于预测精度的提升,经实验,20个时期(Epochs)的训练时长约8.57秒。
将实验一神经网络的第四层设计为具有46个神经元的以E-to-2softmax函数作为激活函数的输出层。
图2是该reuters实验使用E-to-2softmax函数作输出层激活函数实验结果图,每一轮的迭代都在不断地提高神经网络对于预测精度的提升,经实验,20个时期(Epochs)的训练时长约8.80秒。
根据实验一计算结果可得,神经网络训练中引入E-to-2softmax函数在准确率与速度上可以达到与softmax函数基本相同的性能。通过进一步的的实验论证,更换为E-to-2softmax函数后训练20个时期(Epochs)的用时从8.57s上升到了8.80s,是由于软件内部并未专门对E-to-2softmax函数进行适配,导致在每次调用时都需要付出额外的运算成本,进而增加了训练时间。
实验二、基于经典的python开源数据集MNIST。
MNIST是一个手写数字数据集,本次实验的训练目标便是识别0-9的数字。在实验中,设计第二神经网络为例对softmax函数和E-to-2softmax函数进行分析,此时第二神经网络只是一种可实现形式,可根据计算精度等要求变换结构。所述第二神经网络包括七层:第一层是输入层,第二层是卷积层,具有32个过滤器,过滤器为(5,5)形式,激活函数为Relu;第三层为(2,2)的池化层;第四层是一个Dropout层,第五层是一个Flatten层,第六层是一个240个神经元的以Relu函数作为激活函数的全连接层;第七层是输出层,由十个神经元组成,激活函数为softmax。
图3是该MNIST实验使用softmax函数作为输出层激活函数实验结果图,由图3可知,十轮迭代便基本可以收敛,经实验,20个时期(Epochs)的总共用时约158.5s。
将上实验二中神经网络的第七层输出层调整为E-to-2softmax函数作为激活函数。
图4是该MNIST实验使用E-to-2softmaxsoftmax函数作为输出层激活函数实验结果图,由图4可知,十轮迭代便基本可以收敛,经实验,20个时期(Epochs)的总共用时约152.6s,即使用E-to-2softmaxsoftmax函数作为输出层激活函数训练用时降低。
由图3和图4可以看出,E-to-2softmax函数实现MNIST识别时候,准确率基本与softmax函数作为激活函数时一致,损失函数下降趋势一致,和softmax激活函数具有相同的功能。
下面详细描述所述E-to-2softmax函数的硬件实现方法,包括以下步骤。
首先构造镜像查找表,镜像对称如图5所示。
根据分子分母同时除以并不会改变函数值的性质,对E-to-2softmax的函数形式变换如下所示:
对变形之后的E-to-2softmax函数进行以2为底取对数操作,E-to-2softmax的函数就变成了如下形式:
对公式(7)进行整理,得到如下形式:
对公式(8)中的εi进行求取,由εi的公式可以知道,我们需要选取最大输入数据的最大值xmax,最大值的选取可以通过比较操作来实现,其中xi-xmax和xj-xmax可以通过减法操作来实现,对于下式
我们把xj-xmax转化为负整数加正数小数的形式,即
其中,小数的范围是[0,1),当xj等于xmax的时候,小数的位置是0;根据小数的范围可确定基于2的x次方镜像的查找x的范围也是[0,1),故可基于此进行查找2小数。与2负整数相乘可以通过查找出来的值进行移位操作来完成,再使用加法操作来对其进行求和。由于xj-xmax小于等于0,因此的值得范围为(1,N],因此,可以将的值转化为1.M×2E,此处E是存储一个转化后的权值,例如,如果求和之后的数据定义为13bit的有符号数,其中小数位6bit,如求和之后的二进制值为0100100.100000,则经过此转化之后的二进制数为1.001001,此时E的值为5,即如下所示:
log2 1.M的值得范围是[0,1],因此可以和2的x次方进行镜像对称查找,计算出值,进而完成εi的计算。
接着求取
由公式(12)可知,εi的值小于0,与公式(10)处理方式相同,我们可以将εi变为负整数加小数的形式,此时上式可以变成如下所示:
基于镜像查找表2x来查找2小数的值,2负整数可以通过查找出来的值进行右移操作来实现,进而得到E-to-2softmax(i),完成整个实现。镜像查找表的实现方法具是,因为需要对2x和log2x两个函数值进行查找,可运用镜像查找的方式进行。因为2x和log2x这两个函数关于y=x对称,并且本实施例所需要查找的区间也是对称的,例如2x对x查找区间是[0,1),对应的函数值为[1,2),而log2x需要对x查找的区间为[1,2),对应的函数值的区间是[0,1),所以为了节省硬件资源,减少面积,本实施例构造一个查找表,通过区间划分的方式即可在对称的基础上完成对两个函数的查找。
根据上述分析,E-to-2softmax函数的硬件实现需包括主控制器、数据输入模块、数据输出模块和计算模块,主控制器与数据输入模块、数据输出模块和计算模块均连接;主控制器控制数据通过数据输入模块输入计算模块进行计算,计算模块将计算结果通过数据输出模块返回主控制器。
所述计算模块包括比较器模块、减法器模块、数据分割模块、镜像查找模块、移位求和模块和数据转化模块;主控制器控制将输入数据输入比较器模块和减法器模块,在比较器模块和减法器模块进行数据比较和做差,再通过数据分割模块分割为小数部分和负整数部分,对于数据分割模块分割的数据通过镜像查找模块查找对应值,然后输入移位求和模块进行移位和求和,再在数据转化模块进行数据转化,最后输出计算结果。在硬件上通过比较、减法、数据分割、移位求和、镜像查找等方法,成功地实现E-to-2softmax函数。
具体应用时,比较器模块用于比较寻找出输入数据最大值;减法器模块用于将输入数据与比较器模块计算出的输入数据最大值做减法求出xi-xmax;数据分割模块用于将经过减法器计算的数据值分离成为第一部分负数整数和第二部分正数小数;镜像查找模块用于将数据分割模块输出的数据输入2x和log2x镜像查找的查找表中,查找出对应的值;移位求和模块用于将镜像查找模块查找出来的值进行移位操作;数据转化模块用于将数据转化为[1,M),数据转化模块将其转化为1.M×2E。
附图6是本发明硬件架构图,下面结合附图6来对硬件实现进行说明,应用时可根据具体的需求和硬件资源情况灵活调整输入数据和输出数据的个数。
如图所示,以输入为8为例,具体实现方式如下:
步骤1)将所有输入数据xi输入至比较器模块,通过比较器模块比较,选择出最大的数xmax,i≤n,n表示输入数据的个数,本实施例中n为8;
步骤2)将输入数据xi和输入数据最大值xmax输入减法器模块,通过减法器模块进行做差运算,计算xi-xmax;
步骤3)将减法器模块计算的输出值发送至数据分割模块,将其分割成负整数Z’和小数D的形式;
步骤4)将小数部分D以2小数即2D输入镜像查找模块进行查找,查找完之后与2负整数一起输入移位求和模块,计算出2负整数×2小数的值,与2负整数相乘可以通过右移负整数位来实现,然后进行一个求和运算,由于xi-xmax的值的范围小于等于0,所以的值的范围是小于等于1且大于0的,并且当xi等于xmax的时候这个值为1,所以8个这样的数求和之后的值的范围为(1,8);
步骤5)将移位求和模块计算之后的数据发送至数据转化模块,数据转化模块将移位求和模块输出数据转化为1.M×2E的形式,E表示转化后的权值,其中2E对以2为底的对数运算可以之间变成E;将数据转换模块输出的结果log2 1.M发送至镜像查找模块中如图5所示的镜像查找表中计算,得到对应值。
步骤6)此时εi已经计算出来,对函数再进行分割,将函数中指数变成负整数加小数的表达形式,重复步骤4将小数部分送入镜像查找表中查找,将查找值与负整数部分在移位求和模块通过右移负整数位实现乘法运算,就可以计算得出E-to-2softmax函数的值,完成整个计算。
本发明对传统softmax函数进行变换,提出的新的E-to-2softmax函数,不会改变softmax函数的特性,同时利用函数的数学可变换特性,对E-to-2softmax函数进行数学变换,通过数据变换、数据分割、移位、镜像查找的方法来进行硬件实现,避免softmax函数实现时的指数运算和除法运算,解决softmax函数硬件实现困难,相比于查找表方法,本发明硬件实现节省50%的硬件面积和功耗,也不需要迭代来降低精度,节省运算时间,是一种硬件友好的函数实现方式。
本发明函数硬件实现方法在所做的reuters实验和MNIST实验证明中,作为神经网络最后一层,用于处理深度学习中多任务分类问题。使用本发明硬件系统函数的识别率准确度不会损失,与现有方法相比,本发明还可以避免除法运算和e指数运算,具有复杂度低、硬件资源消耗少,性能高等优势,与Meiqi Wang等人的“AHigh-Speed and Low-ComplexityArchitectureforSoftmax Function in Deep Learning”的softmax硬件实现方法相比,虽然两种方式在TSMC 28nm的工艺下最大频率均可以支持到2.8GHz,但是本发明在此工艺下的面积仅仅需要4515um2,功耗9.98mW,相对其面积和功耗减少了50%以上,有效提成硬件系统的性能。
本发明在解决softmax的激活函数的硬件复杂度高的问题上具有很大的优势,可以广泛应用于图像处理识别领域等神经网络多任务分类的激活函数计算,用于提高硬件性,降低函数实现复杂度,适合广泛应用。
以上示意性地对本发明创造及其实施方式进行了描述,该描述没有限制性,在不背离本发明的精神或者基本特征的情况下,能够以其他的具体形式实现本发明。附图中所示的也只是本发明创造的实施方式之一,实际的结构并不局限于此,权利要求中的任何附图标记不应限制所涉及的权利要求。所以,如果本领域的普通技术人员受其启示,在不脱离本创造宗旨的情况下,不经创造性的设计出与该技术方案相似的结构方式及实施例,均应属于本专利的保护范围。此外,“包括”一词不排除其他元件或步骤,产品权利要求中陈述的多个元件也可以由一个元件通过软件或者硬件来实现。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。