數值計算中的上溢和下溢


利用計算機實現數值計算,指的通常是利用迭代過程更新解來解決數學問題,而不是通過解析過程推到數學公式求解。常見得數值計算主要包括優化問題求解和解線性方程組。

 

上溢和下溢

通常實數在計算機內不能精確保存,利用計算機保存實數時,幾乎總會引入一些近似誤差。在許多情況下,這僅僅是舍入誤差,舍入誤差會導致一些問題。特別是在一些復合操作下, 理論上可行的算法,如果在實際中沒有考慮到舍入誤差的累積,在實際算法運用過程中也會導致算法的失效。

 

其中一種情況就是下溢。即有些逼近零的數,如零除或者對零取對數時,得到-,如果對負無窮進一步運算,則會得到非數字;

 

還有一種情況就是上溢。即大量級的數被近似為正負無窮時,發生上溢。發生上溢后,這些數值也會變為非數值。

 

解決數值上溢和下溢方法的一個實例是使用softmax函數。

定義為:

考慮一下,當所有xi都等於一個常數C。則softmax函數的值為1/n。

如果C很大,exp(c)的上溢會導致整個表達式未定義;

如果C是一個很小的負數,exp(c)會下溢;

解決方法,計算softmax(z)

如此,上溢的問題可以得到解決。下溢的情況也由於分母不為零解決。

But,有個小問題,當計算Log(softmax(z))時,softmax(z)可能為0,從而導致不可解。

解決方法,使用相同的技巧來解log(softmax(z))。

 

不過在多數情況下,可以簡單地依賴保證數值穩定地底層庫。當需要自己實現算法的時候,則需要考慮數值穩定性的問題。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM