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