最近做數據時,使用神經網絡建模。在神經網絡中,會用到激發函數(activation function)。
典型的激發函數有Sigmod函數:
雙曲正切函數:
這兩個都涉及到指數函數,在C中,為求指數函數,使用exp()函數。
在數次出錯后找到問題,原來是我的指數值過大,數據中有時會出現超過1000的數字,這導致在求值過程中,即使使用double型,也使得結果溢出。
解決方法是定義一個指數函數,當指數值超過一定界限便指定一個相對無窮大的值,這樣也符合數學定義。在我的處理中,將界限設定為15,當該值大于15時,返回3000000;當界限值小于-15時,返回0。