最近在搞模型部署发现,推理速度不能满足我们需求,于是最近学习了优化算子技巧,学到了sigmoid,softmax算子优化,真的数学之美。
我们根据sigmoid公式,我们进行求反函数,于是有了上面的等式变化,我们只需要把模型输出的值,直接与阈值比较就可以,比如阈值0.5得分我们可以通过上面等式,换算成模型输出的值,这样模型输出的值,就可以直接比较了,大大减少了运算,少了一层sigmoid。
import numpy as np
def sigmoid(x):
return 1 / (1 + np.exp(-x))
def desigmoid(y):
return -np.log(1 / y -1)
if __name__ == "__main__":
score = sigmoid(0.5)
descore = desigmoid(score)
print(score)
print(descore)
0.6224593312018546
0.5
代码输出结果符号预期
根据上面的公式推导,发现,把sotfmax,做一些变换后,发现是sigmoid函数,于是我们可以借用上面的sigmoid函数优化思路去优化。注意这里面的(y是正样本输出值,x是负样本输出的值,是网络输出的值)
def softmax(x, y):
n, p = np.exp(x), np.exp(y)
return n/(n + p), p / (n + p)
x = 120
y = 54
n, p = softmax(x, y)
p
2.1705220113036395e-29
sigmoid(y - x)
2.1705220113036392e-29
符合我们预期
简单记录本次优化思路。