CN109508784B - 一种神经网络激活函数的设计方法 - Google Patents
一种神经网络激活函数的设计方法 Download PDFInfo
- Publication number
- CN109508784B CN109508784B CN201811622849.7A CN201811622849A CN109508784B CN 109508784 B CN109508784 B CN 109508784B CN 201811622849 A CN201811622849 A CN 201811622849A CN 109508784 B CN109508784 B CN 109508784B
- Authority
- CN
- China
- Prior art keywords
- neural network
- bit width
- activation function
- saturation
- fixed point
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/048—Activation functions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
- G06N3/084—Backpropagation, e.g. using gradient descent
Abstract
本发明公开了一种神经网络激活函数的设计方法。所述方法包括设计神经网络框架,选择一种饱和激活函数作为神经网络激活函数;根据神经网络的应用场景选择数据初始的整体定点位宽;根据精度要求及神经网络的数据特征,确定初始的小数部分位宽和初始的整数部分位宽;将小数部分和整数部分进行二进制转换;把转换后的定点格式数据作为输入,进行神经网络训练、记录训练结果;记录训练测试结果;重复步骤二至六,直到找到满足需求的整体定点位宽、小数位宽、整数位宽作为最终的神经网络定点化架构;确定神经网络激活函数的饱和值;实现前向传播函数;实现反向传播函数。本发明节省功耗和成本,很好地解决了定点算法溢出的问题。
Description
技术领域
本发明涉及人工智能神经网络技术领域,相关的算法,软硬件及芯片。特别涉及一种神经网络激活函数的设计方法。
背景技术
人工神经网络是人类仿照生物神经网络的工作方式设计的计算模型。神经元(Neuron)是神经网络的基本单元,也称节点(Node),它从外部或其它节点收到输入(Input),并通过一个激活函数(Activation Function)来计算输出(Output);每一个输入都对应权重(Weight),即这个节点收到的每一个输入的相对重要性;偏置(Bias)可以理解为一种特殊的输入。
深度学习是机器学习的一个领域,研究复杂的人工神经网络的算法、理论、及应用。自从2006年被Hinton等提出以来,深度学习得到了巨大发展,已被成功地应用到图像处理、语音处理、自然语言处理等多个领域,取得了巨大成功,受到了广泛的关注,成为当今具有代表性的IT先进技术。
深度学习本质是复杂的非线性模型的学习,从机器学习的发展史来看,深度学习的兴起代表着机器学习技术的自然演进。1957年,Rosenblatt提出了感知机模型(Perceptron),是线性模型,可以看作是两层的神经网络;1986年,Rumelhart等开发了反向传播算法(Back Propagation),用于三层的神经网络,代表着简单的非线性模型;1995年,Vapnik等发明了支持向量机(Support Vector Machines),RBF核支持向量机等价于三层的神经网络,也是一种简单的非线性模型。2006年以后的深度学习实际使用多于三层的神经网络,又被称为深度神经网络,是复杂的非线性模型。深度神经网络还有若干个变种,如卷积神经网络(Convolutional Neural Network)、循环神经网络(Recurrent NeuralNetwork)。
深度神经网络实际是复杂的非线性模型,拥有复杂的结构和大量的参数,有非常强的表示能力,特别适合于复杂的模式识别问题。
随着深度学习技术的不断发展,需要解决的问题越来越复杂,神经网络必然地走向了网络层次“越来越深”的方向。这就对计算资源提出了极高的要求和挑战。目前的专用GPU已经越来越大,功耗越来越高。另外,在神经网络的设计过程中,通常都是采用浮点数进行运算。但浮点数运算相对于定点运算单元而言,存在占用资源多,面积大、功耗高、成本高等问题。而定点化神经网络,有一个必须解决的问题是数据溢出。
发明内容
为解决溢出会导致的数据错误,使全定点化神经网络可实现,本发明提供了一种神经网络激活函数的设计方法,包括如下步骤:
步骤一:设计神经网络框架,选择一种饱和激活函数作为神经网络激活函数;
步骤二:根据神经网络的应用场景选择数据初始的整体定点位宽;
步骤三:根据精度要求及神经网络的数据特征,确定初始的小数部分位宽和初始的整数部分位宽;
步骤四:将小数部分和整数部分进行二进制转换,把浮点数转化为对应长度的二进制定点格式数据;
步骤五:把转换后的定点格式数据作为输入,用于神经网络的建模和计算,进行神经网络训练,并记录训练结果;
步骤六:记录训练测试结果;
步骤七:重复步骤二至六,直到找到满足需求的整体定点位宽、小数位宽、整数位宽作为最终的神经网络定点化架构。
步骤八:确定神经网络激活函数的饱和值;
步骤九:实现前向传播函数,用于计算神经网络激活值,实现神经网络功能的必要函数;
步骤十:实现反向传播函数。
进一步的,选择饱和激活函数为Saturation Relu,前向传播函数为
x是激活函数输入参数,Ysat是饱和值,y是激活函数的输出。
进一步的,步骤一中,选择饱和激活函数为Saturation PRelu,前向传播函数为
其中系数a取值,0<a<1;
x是激活函数输入参数,Ysat是饱和值,y是激活函数的输出。
进一步的,步骤一中,选择饱和激活函数为Saturation leaky ReLu,,前向传播函数为
其中系数ar是随机值,0<ar<1。
x是激活函数输入参数,Ysat是饱和值,y是激活函数的输出。
进一步的,步骤一中,整体定点位宽为8bit~128bit。
进一步的,步骤二中,初始时,小数部分位宽占整体定点位宽的3/4,整数部分位宽占整体定点位宽的1/4。
进一步的,步骤五中,把转换后的定点格式数据作为输入所计算得到的结果经过一个饱和激活函数进行激活,然后作为下一级神经网络的输入。
进一步的,步骤七中,利用迭代仿真训练选择整体定点位宽,根据测试精度和项目所期望的精度判断对向上还是向下进行迭代:当精度优先,从大的位宽向小的位宽逐步减少;在满足精度要求的前提下,选择一个最小的位宽;当功耗及成本优先,则从小的位宽向大的位宽逐步增加,在功耗及成本满足的前提下,选择一个最大的数据位宽。
进一步的,步骤五中,在神经网络拓扑结构中加入进制转换的代码,把浮点数转化为对应长度的二进制定点,以二进制定点数进行运算。
进一步的,步骤五中,采用误差反向传播算法进行神经网络训练。
与现有技术相比,本发明有以下积极效果:
本发明通过对人工智能神经网络的全定点化设计,可以简化神经网络,提高运算资源利用率,降低面积,节省功耗和成本。提出的激活函数设计方案,把溢出作为神经网络整体设计时考虑的问题,同整体神经网络一起进行设计,迭代训练,从而很好地解决了定点算法溢出的问题。
附图说明
图1为本发明流程图。
具体实施方式
本发明的设计构思为:对人工智能神经网络的全定点化设计,简化神经网络,提高运算资源利用率,降低面积,节省功耗和成本。将全定点化神经网络必然存在数据溢出作为神经网络整体设计时考虑的问题,同整体神经网络一起进行设计,迭代训练,从而很好地解决了定点算法溢出的问题。
本发明包括如下步骤:
步骤一:设计神经网络框架,选择一种饱和激活函数作为神经网络激活函数。
步骤二:根据神经网络的应用场景选择初始的整体定点位宽。
结合精度要求,功耗要求,成本要求,可以选择8bit~128bit作为整体定点位宽。整体定点位宽包括小数部分位宽和整数部分位宽。
步骤三:根据精度要求及神经网络的数据特征,确定初始的小数部分位宽和整数部分位宽。
作为迭代的一个环节,可以根据需要选择初始的小数位定点位宽和整数位定点位宽。例如,可以选择小数位点占3/4位宽,整数位(含符号位)点占1/4位宽。
步骤四:将小数部分和整数部分进行二进制转换,把浮点数转化为对应长度的二进制定点。
采用二进制补码的方式表示,最高位为符号位。本实施例以16bit位宽,8位小数位,7位整数位,1位符号位为例说明。
例如:十进制浮点数转为当前定点的二进制补码:
正数:将十进制的正数转换为二进制。分为整数部分和小数部分分别进行转换。其整数部分除以2,逆向取余数。
如,将浮点数12.67转换为二进制:
12/6=6…0
6/2=3….0
3/2=1….1
1/2=0….1
7位整数位,所以是0001100
小数部分乘2正向取整数部分
0.67x2=1.34
0.34x2=0.68
0.68x2=1.36
0.36x2=0.72
0.72x2=1.44
0.44x2=0.88
0.88x2=1.76
0.76x2=1.52
8位小数位为10101011
另有1位符号位,正数为0,所以结果是0000110010101011
负数:将十进制数的负数转换为二进制。先按正数的方法转化为二进制,再取反加1,高位补符号位1。
例如-12.67,其有效值部分上面转化的结果为000_1100_1010_1011,取反加1:
111_0011_0101_0101,高位补符号位得到1111_0011_0101_0101
步骤五:把转换后的定点格式数据作为输入,用于神经网络的建模和计算,进行神经网络训练,并记录训练结果。
例如:Y’=wx+b,其中,w是权重,x是输入的定点格式数据,b是偏置bias。位宽都是16bit;Y’是32bit。
Y’还需要经过饱和激活函数(如SRelu函数)才能作为下一级神经网络的输入。激活函数如下图所示。Y’低8位直接截位,剩下的二进制数饱和到Ysat得到Y,Y仍然是16bit。
步骤六:记录训练测试结果。
步骤七:重复步骤二至六,直到找到合适的整体定点位宽、小数位宽、整数位宽作为最终的神经网络定点化架构。
数据位宽的选择是一个迭代仿真训练的过程。根据测试精度和项目所期望的精度判断向上还是向下进行迭代。如果精度完全满足要求,则可以尝试减小整体定点位宽,如采用12bit或8bit;如果精度不够,可以增加到24bit、32bit,逐步往上增加。可以微调小数位宽和整数位宽的比例。
当精度优先,从大的位宽向小的位宽逐步减少,如采用12bit或8bit;如果精度不够,可以增加到24bit、32bit,逐步往上增加。在满足精度要求的前提下,选择一个最小的位宽。当功耗及成本优先(例如一些嵌入式应用),则从小的位宽向大的位宽逐步增加,在功耗及成本满足的前提下,选择一个最大的数据位宽。
步骤八:确定神经网络激活函数的饱和值。
饱和值Ysat可以取定点位宽能表示的最大正数。当然,也可以取稍小的值,具体视仿真测试的结果而定。
步骤九:实现前向传播函数。用于计算神经网络激活值,实现神经网络功能的必要函数。
前向传播函数是用于计算神经网络激活值,实现神经网络功能的必要函数。
选择饱和激活函数为Saturation Relu,前向传播函数为
x是激活函数输入参数,Ysat是饱和值,y是激活函数的输出。
进一步的,步骤一中,选择饱和激活函数为Saturation PRelu,前向传播函数为
其中系数a取值,0<a<1。
x是激活函数输入参数,Ysat是饱和值,y是激活函数的输出。
进一步的,步骤一中,选择饱和激活函数为Saturation leaky ReLu,,前向传播函数为
其中系数ar是随机值,0<ar<1。
x是激活函数输入参数,Ysat是饱和值,y是激活函数的输出。
步骤十:实现反向传播函数。
反向传播函数是完成神经网络训练最为重要的函数。其基本原理是定义一个误差函数,对于使得误差最小化的参数被认为是“最合适”参数。从数学上可以证明,用对参数求偏导的方法得到梯度,按梯度方向向“最合适”参数逼近,经过大量数据进行若干批次的“逼近”后,可以得到一个“最合适”参数,用于神经网络的前向预测等功能。
下面以卷积神经网络LeNet结构为例,对上述过程进行举例说明。
第一步:设计神经网络框架,选择饱和激活函数作为神经网络激活函数。
模型输入为32x32灰度图像,第一层为6个5x5卷积核,不扩展边界;第四层为2x2的最大值池化层,步进为2,第五层为展平层,并全连接120个节点;第六层为全连接层,84个节点;第七层为全连接softmax层,输出结果。
每一个卷积层包含一个激活层,该激活层使用饱和激活函数,如SRelu函数(saturation ReLu)进行激活。
第二步:选择整体定点位宽。
作为迭代的一个环节,整体定点位宽可以从16bit开始进行迭代计算。
第三步:确定初始的小数部分位宽和整数部分位宽。
作为迭代的一个环节,初始可以选择小数位点占3/4位宽比例,整数位(含符号位)占1/4位宽比例。
第四步:在神经网络中加入进制转换,以二进制定点数进行运算。
在神经网络拓扑结构中加入进制转换的代码,把浮点数转化为对应长度的二进制定点,以二进制定点数进行运算。
第五步:把转换后的定点格式数据作为输入,用于神经网络的建模和计算,进行神经网络训练。
采用SDG(随机梯度下降)或者类似的误差反向传播算法,交叉熵或者类似的损失函数,进行神经网络训练及测试。
步骤六:记录训练测试结果。
记录当前的训练的整体定点位宽,小数位,整数位,训练测试精度。
根据测试精度和项目所期望的精度判断向上还是向下进行迭代。如果精度完全满足要求,则可以尝试减小整体定点位宽,如采用12bit或8bit;如果精度不够,可以增加到24bit,32bit,逐步往上增加。
可以微调小数位宽和整数位宽的比例。
步骤七:重复步骤二至六,直到找到合适的整体定点位宽、小数位宽、整数位宽作为最终的神经网络定点化架构。
步骤八:确定神经网络激活函数的饱和值。
饱和值Ysat可以取定点位宽能表示的最大正数。当然,也可以取稍小的值,具体视仿真测试的结果而定。
步骤九:实现前向传播函数。
步骤十:实现反向传播函数。
以Saturation PReLu为例推导反向传播函数,由前向传播函数:
根据链式法则得到系数a的每一次取值ai的更新工式。设ε为f(x)的损失函数,对ai求偏导,有:
更新工式:
λ是与学习速率有关的常数,
以上所述的仅为本发明的优选实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在不脱离本发明创造构思的前提下,还可做出若干变形和改进,都应涵盖在本发明的保护范围之内。
Claims (10)
1.一种神经网络激活函数的设计方法,其特征在于,包括如下步骤:
步骤一:设计神经网络框架,选择一种饱和激活函数作为神经网络激活函数;
步骤二:根据神经网络的应用场景选择数据初始的整体定点位宽;
步骤三:根据精度要求及神经网络的数据特征,确定初始的小数部分位宽和初始的整数部分位宽;
步骤四:将小数部分和整数部分进行二进制转换,把浮点数转化为对应长度的二进制定点格式数据;
步骤五:把转换后的定点格式数据作为输入,用于神经网络的建模和计算,进行神经网络训练,并记录训练结果;其中,神经网络训练采用的训练样本为灰度图像样本;
步骤六:记录训练测试结果;
步骤七:重复步骤二至六,直到找到满足需求的整体定点位宽、小数位宽、整数位宽作为最终的神经网络定点化架构;
步骤八:取定点位宽能表示的最大正数或者比该最大正数稍小的数,确定为神经网络激活函数的饱和值,其中,所述比该最大正数稍小的数基于仿真测试的结果而定;
步骤九:实现前向传播函数;
步骤十:实现反向传播函数;
GPU基于所述最终的神经网络定点化架构对灰度图像进行处理。
5.如权利要求1所述的神经网络激活函数的设计方法,其特征在于,步骤一中,整体定点位宽为8bit~128bit。
6.如权利要求1所述的神经网络激活函数的设计方法,其特征在于,步骤二中,初始时,小数部分位宽占整体定点位宽的3/4,整数部分位宽占整体定点位宽的1/4。
7.如权利要求1所述的神经网络激活函数的设计方法,其特征在于,步骤五中,把转换后的定点格式数据作为输入所计算得到的结果经过一个饱和激活函数进行激活,然后作为下一级神经网络的输入。
8.如权利要求1所述的神经网络激活函数的设计方法,其特征在于,步骤七中,利用迭代仿真训练选择整体定点位宽,根据测试精度和项目所期望的精度判断对向上还是向下进行迭代:当精度优先,从大的位宽向小的位宽逐步减少;在满足精度要求的前提下,选择一个最小的位宽;当功耗及成本优先,则从小的位宽向大的位宽逐步增加,在功耗及成本满足的前提下,选择一个最大的数据位宽。
9.如权利要求1所述的神经网络激活函数的设计方法,其特征在于,步骤五中,在神经网络拓扑结构中加入进制转换的代码,把浮点数转化为对应长度的二进制定点,以二进制定点数进行运算。
10.如权利要求1所述的神经网络激活函数的设计方法,其特征在于,步骤五中,采用误差反向传播算法进行神经网络训练。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811622849.7A CN109508784B (zh) | 2018-12-28 | 2018-12-28 | 一种神经网络激活函数的设计方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811622849.7A CN109508784B (zh) | 2018-12-28 | 2018-12-28 | 一种神经网络激活函数的设计方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109508784A CN109508784A (zh) | 2019-03-22 |
CN109508784B true CN109508784B (zh) | 2021-07-27 |
Family
ID=65756666
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811622849.7A Active CN109508784B (zh) | 2018-12-28 | 2018-12-28 | 一种神经网络激活函数的设计方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109508784B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110288087B (zh) * | 2019-06-20 | 2020-11-20 | 湖南长城银河科技有限公司 | 一种实现tanh函数计算的方法、电路、芯片及系统 |
CN110796246A (zh) * | 2019-10-29 | 2020-02-14 | 南京宁麒智能计算芯片研究院有限公司 | 一种基于线性分段的激活函数的硬件实现电路和方法 |
WO2021179281A1 (en) * | 2020-03-13 | 2021-09-16 | Intel Corporation | Optimizing low precision inference models for deployment of deep neural networks |
CN111581593B (zh) * | 2020-04-21 | 2023-09-05 | 天津大学 | 可配置重用的分段式查找表激活函数实现装置 |
CN112836806B (zh) * | 2021-02-26 | 2023-12-22 | 上海阵量智能科技有限公司 | 一种数据格式调整方法、装置、计算机设备和存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107122825A (zh) * | 2017-03-09 | 2017-09-01 | 华南理工大学 | 一种神经网络模型的激活函数生成方法 |
CN107204010A (zh) * | 2017-04-28 | 2017-09-26 | 中国科学院计算技术研究所 | 一种单目图像深度估计方法与系统 |
CN107636697A (zh) * | 2015-05-08 | 2018-01-26 | 高通股份有限公司 | 基于浮点神经网络量化的定点神经网络 |
CN107688849A (zh) * | 2017-07-28 | 2018-02-13 | 北京深鉴科技有限公司 | 一种动态策略定点化训练方法及装置 |
CN108345939A (zh) * | 2017-01-25 | 2018-07-31 | 微软技术许可有限责任公司 | 基于定点运算的神经网络 |
-
2018
- 2018-12-28 CN CN201811622849.7A patent/CN109508784B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107636697A (zh) * | 2015-05-08 | 2018-01-26 | 高通股份有限公司 | 基于浮点神经网络量化的定点神经网络 |
CN108345939A (zh) * | 2017-01-25 | 2018-07-31 | 微软技术许可有限责任公司 | 基于定点运算的神经网络 |
CN107122825A (zh) * | 2017-03-09 | 2017-09-01 | 华南理工大学 | 一种神经网络模型的激活函数生成方法 |
CN107204010A (zh) * | 2017-04-28 | 2017-09-26 | 中国科学院计算技术研究所 | 一种单目图像深度估计方法与系统 |
CN107688849A (zh) * | 2017-07-28 | 2018-02-13 | 北京深鉴科技有限公司 | 一种动态策略定点化训练方法及装置 |
Non-Patent Citations (1)
Title |
---|
激活函数(ReLU,Swish,Maxout);康行天下;《https://www.cnblogs.com/makefile/p/activation-function.html》;20170218;第1-11页 * |
Also Published As
Publication number | Publication date |
---|---|
CN109508784A (zh) | 2019-03-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109508784B (zh) | 一种神经网络激活函数的设计方法 | |
CN107977704B (zh) | 权重数据存储方法和基于该方法的神经网络处理器 | |
CN107862374B (zh) | 基于流水线的神经网络处理系统和处理方法 | |
US10929744B2 (en) | Fixed-point training method for deep neural networks based on dynamic fixed-point conversion scheme | |
CN107818367B (zh) | 用于神经网络的处理系统和处理方法 | |
CN107944545B (zh) | 应用于神经网络的计算方法及计算装置 | |
US20180018555A1 (en) | System and method for building artificial neural network architectures | |
CN109670582B (zh) | 一种全定点化神经网络的设计方法 | |
JP2019032808A (ja) | 機械学習方法および装置 | |
CN112529166A (zh) | 融合神经元模型、神经网络结构及训练、推理方法、存储介质和设备 | |
Zhang et al. | Structadmm: Achieving ultrahigh efficiency in structured pruning for dnns | |
CN107527090A (zh) | 应用于稀疏神经网络的处理器和处理方法 | |
WO2022252455A1 (en) | Methods and systems for training graph neural network using supervised contrastive learning | |
CN114341891A (zh) | 神经网络剪枝 | |
CN113516133A (zh) | 一种多模态图像分类方法及系统 | |
CN108171328A (zh) | 一种卷积运算方法和基于该方法的神经网络处理器 | |
CN108985449B (zh) | 一种对卷积神经网络处理器的控制方法及装置 | |
Abdelsalam et al. | An efficient FPGA-based overlay inference architecture for fully connected DNNs | |
US20210294874A1 (en) | Quantization method based on hardware of in-memory computing and system thereof | |
CN115664899A (zh) | 一种基于图神经网络的信道解码方法及系统 | |
KR0170505B1 (ko) | 다층퍼셉트론 신경회로망의 n비트 데이타 표현에 의한 학습방법 | |
CN113691993A (zh) | 基于图神经网络的5g连通簇基站群流量预测方法及系统 | |
CN111882028B (zh) | 用于卷积神经网络的卷积运算装置 | |
KR20190130443A (ko) | 뉴럴 네트워크의 양자화 방법 및 장치 | |
Jin et al. | Sparse ternary connect: Convolutional neural networks using ternarized weights with enhanced sparsity |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
CB03 | Change of inventor or designer information |
Inventor after: Chen Jingyu Inventor after: Zhang Zhixing Inventor after: Liu Xiangkai Inventor before: Zhen Degen Inventor before: Zhang Zhixing Inventor before: Liu Xiangkai |
|
CB03 | Change of inventor or designer information | ||
GR01 | Patent grant | ||
GR01 | Patent grant |