在深度学习算法中,是部分非线性算子组成部分,如tanh,cosh,sinh等,所以指数基于嵌入式的快速实现,是高性能算法的基础之一。实现包含:
1. e的含义
2.指数的科学实现
(1)泰勒级数展开;(2)多项式拟合;(3)快速算法。
2.1 指数实现描述
1). 指数的快速实现包含泰勒级数展开,多项式拟合,指数近似计算等,本文介绍级数的泰勒级数展开。
泰勒级数展开时,此处保留四阶多项式,如下,
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,多项式的项数和确定好表示精度。
选用最小二乘方法进行拟合。
是单调递增的,若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) 快速算法
Fast approximate exponential function · GitHub