最近做数据时,使用神经网络建模。在神经网络中,会用到激发函数(activation function)。
典型的激发函数有Sigmod函数:
双曲正切函数:
这两个都涉及到指数函数,在C中,为求指数函数,使用exp()函数。
在数次出错后找到问题,原来是我的指数值过大,数据中有时会出现超过1000的数字,这导致在求值过程中,即使使用double型,也使得结果溢出。
解决方法是定义一个指数函数,当指数值超过一定界限便指定一个相对无穷大的值,这样也符合数学定义。在我的处理中,将界限设定为15,当该值大于15时,返回3000000;当界限值小于-15时,返回0。