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