利用計算機實現數值計算,指的通常是利用迭代過程更新解來解決數學問題,而不是通過解析過程推到數學公式求解。常見得數值計算主要包括優化問題求解和解線性方程組。
上溢和下溢
通常實數在計算機內不能精確保存,利用計算機保存實數時,幾乎總會引入一些近似誤差。在許多情況下,這僅僅是舍入誤差,舍入誤差會導致一些問題。特別是在一些復合操作下, 理論上可行的算法,如果在實際中沒有考慮到舍入誤差的累積,在實際算法運用過程中也會導致算法的失效。
其中一種情況就是下溢。即有些逼近零的數,如零除或者對零取對數時,得到-,如果對負無窮進一步運算,則會得到非數字;
還有一種情況就是上溢。即大量級的數被近似為正負無窮時,發生上溢。發生上溢后,這些數值也會變為非數值。
解決數值上溢和下溢方法的一個實例是使用softmax函數。
定義為:
考慮一下,當所有xi都等於一個常數C。則softmax函數的值為1/n。
如果C很大,exp(c)的上溢會導致整個表達式未定義;
如果C是一個很小的負數,exp(c)會下溢;
解決方法,計算softmax(z)
如此,上溢的問題可以得到解決。下溢的情況也由於分母不為零解決。
But,有個小問題,當計算Log(softmax(z))時,softmax(z)可能為0,從而導致不可解。
解決方法,使用相同的技巧來解log(softmax(z))。
不過在多數情況下,可以簡單地依賴保證數值穩定地底層庫。當需要自己實現算法的時候,則需要考慮數值穩定性的問題。