美文网首页
Sigmod函数的定点计算

Sigmod函数的定点计算

作者: myth_0c21 | 来源:发表于2017-06-11 18:20 被阅读0次

    Sigmod函数在深度神经网络中是一个很重要的函数,在做嵌入式优化的时候,由于需要计算e^x,倒数等函数,这些非线性函数会极大的影响计算的效率,一般嵌入式设备没有对应的硬件单元,因此需要把这类超越函数转化为乘加的计算,从而节省计算时间(也不可避免的损失精度)。

    1.函数表达式与函数图像

    Sigmod_Function.png
    Sigmod_Image.png

    2.应用

    对于深度神经网络,卷积的计算是乘加,属于线性变化,而各种目标函数是很复杂的非线性函数,需要引入非线性变化,使得深度神经网络能够拟合非线性函数变化。因此,在深度神经网络中引入了激活层(activiation layer),除了Sigmod激活函数外,常用的激活函数有:

    1)RELU:

        函数表达式:                   f(x) = max(0,x)
    

    2)TANH:

       函数表达式:
    
    Tanh.png

    3.Sigmod函数的近似计算

    为了通过乘加的计算,拟合非线性函数Sigmod,可以将该函数进行泰勒展开,通常情况下,只需要进行一次的展开,就可以达到满意的精度,并且最终的计算可以表示为kx+b的形式,适合嵌入式设备进行计算。

    1)泰勒展开一次展开公式(假定在x=a处进行泰勒展开):

        f(x) = f'(a)(x-a)+f(a)
    

    2)Sigmod函数的泰勒展开:

        \frac{e^{-a}}{1+e^{-a}}x + \frac{1+(1-a)e^{-a}}{(1+e^{-a})^2}
    
    Taylor.png

    4.建立查找表

    由sigmod函数的图像可知,在x的取值范围内,(-8,8)之外,sigmod函数的值域已经几乎不会变化。因此建表的范围为(-8,8),取步长为0.25,总计64个数。
    由于计算的结果都是浮点数,需要将浮点数转换为整数,转换公式如下:

    slope_fixed[i] = floor(slope[i]*(1<<16)+0.5)
    

    最终的表格如下:


    Paste_Image.png

    相关文章

      网友评论

          本文标题:Sigmod函数的定点计算

          本文链接:https://www.haomeiwen.com/subject/esnhqxtx.html