指数(底数为e)近似实现及性能评估-v1.0

        在深度学习算法中,e^{x}是部分非线性算子组成部分,如tanh,cosh,sinh等,所以指数基于嵌入式的快速实现,是高性能算法的基础之一。e^{x}实现包含: 

1. e的含义

数学常数e的含义 - 阮一峰的网络日志

2.指数的科学实现

(1)泰勒级数展开;(2)多项式拟合;(3)快速算法。

2.1 指数实现描述

1). 指数的快速实现包含泰勒级数展开,多项式拟合,指数近似计算等,本文介绍级数的泰勒级数展开。

e^{x} = \sum\frac{x^{n}}{n!}

泰勒级数展开时,此处保留四阶多项式,如下,

e^{x} = 1 + \frac{x}{1} + \frac{x^{2}}{2} + \frac{x^{3}}{6} + \frac{x^{4}}{24}

import os
import numpy as np

def tylor_exp(in_data, py_num):
    c = 1
    i = 1
    b = 0
    d = 1
    f = np.zeros(py_num);
    for i in range(1,py_num):
        c = c * i
        d = d * in_data
        b = b + d/c;
        f[i] = b + 1
    b = b + 1
    return b;

if __name__ == '__main__':
    cc = tylor_exp(-10.9001, 50)
    pp = np.exp(-10.9001)
    print(cc)
    print(pp)

泰勒级数收敛的比较慢,收敛慢就说明对计算资源的消耗比较大。

 2) 多项式线性拟合

                                                    y = a0 + a1*x + a2*x^2

  对于多项式拟合的话,我认为初步是确定好参数ai,多项式的项数和确定好表示精度。

  选用最小二乘方法进行拟合。

     e^{x}是单调递增的,若x为bf16的数据类型,首先bf16的数据format为1,8,7,则可表示的精度为1/2^7,  x的取值范围-2^128 ~ 2^128,

      其实就是x二进制表示的研究。

      本文档根据最小二乘法进行拟合,拟合的范围为[-5, 5], 间隔0.1进行取点。

       最小二乘法(least sqaure method) - 知乎, 最小二乘的讲解。最小二乘的含义就是预测值与真实值的差的平方和最小。

import os
import numpy as np
import matplotlib.pyplot as plot


x = np.arange(-5, 5, .1)
y = np.exp(x)
y1 = y + np.random.normal(2, 8, y.shape[0])

#residuals

order = 4
a = np.zeros((x.shape[0], order));
for j in range(x.shape[0]):
    b = 1.0
    for i in range(order):
        b = b*x[j]
        a[j][i] = b

p = np.dot(a.T,a)
A = np.matrix(p)
p_i = A.I

pp = np.dot(p_i, a.T)

result = np.dot(pp,y1)

print(result)

y_y = np.dot(a,result.T)

plot.figure()
plot.plot(x,y)
plot.plot(x,y_y)
plot.scatter(x,y1)
plot.show()
~              

  

        拟合的曲线。

        y = 1.77755771 + 0.27540385*x + 0.12655702*x^2 + 0.101314*x^3  + 0.01278928*x^4

             overfitting.

3) 快速算法

这个求指数函数exp()的快速近似方法的原理是什么? - 知乎下面的代码可以快速求出指数函数exp()的近似解, 里面用到了reinterpret_cast以及两个神奇数, 它…https://www.zhihu.com/question/51026869

     Fast approximate exponential function · GitHub

     

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值