1. 程式人生 > >深度學習中的數值計算

深度學習中的數值計算

- 本文首發自公眾號:[RAIS](https://ai.renyuzhuo.cn/about) ## 前言 本系列文章為 [《Deep Learning》](https://ai.renyuzhuo.cn/books/DeepLearning) 讀書筆記,可以參看原書一起閱讀,效果更佳。 ## 數值計算 機器學習演算法需要大量的數字計算,並且這些計算包含有一些迭代擬合的過程,在這個計算過程中,由於計算機的侷限,無法完全精確的表示,因此總是存在誤差的,小的誤差經過迭代次數的增多,或者多個誤差的疊加,甚至會使得演算法不可用,系統失效。 ### 上溢和下溢 - 下溢:在現有的精度無法表示那麼小的數的時候,接近零的數四捨五入為零時,會發生下溢。 - 上溢:在現有的精度無法表示那麼大的數的時候,數過大被近似為無限大的時候,會發生上溢。 解決辦法:softmax 函式,也稱 **歸一化指數函式**,是邏輯函式的一種推廣,將任意實數的 K 維向量對映到另外一個 K 維空間內,使得每一個元素都在 (0, 1) 之間。這裡的 **歸一化** 與之前在房價預測中提到的 **標準化** 不是一個概念(標準化對資料進行某種非線性變換,使其服從某一種分佈,歸一化對數值的範圍進行縮放,不改變資料分佈的一種線性變換)。 $$ softmax(x)_i=\frac{e^{x_i}}{\sum_{j=1}^ne^{x_j}} $$ ### 病態條件(poor conditioning) 這個詞我覺得翻譯不準確,但是大家都喜歡這麼叫暫且先這麼叫吧。一般來說這個概念針對的是方程組或矩陣,微小的擾動讓方程組的解發生巨大的變化,這樣的方程組稱為病態方程組,他們的係數組成的矩陣叫病態矩陣。 與之相關的還有一個概念叫 **條件數**:函式相對於輸入的微小變化而變化的程度,可以理解為一種敏感度。計算方法是求矩陣極大和極小特徵值之比。 $$ \max_{i,j}=|\frac{\lambda_i}{\lambda_j}| $$ ### 基於梯度的優化方法 這個概念要分幾步去理解。對於深度學習演算法,往往會定義出很多函式,針對具體的問題,我們往往需要讓某些函式的函式值儘可能的小或大,求最大值極值,我們往往求導(針對多個變數,這裡的求導包括求偏導和方向導數),也會求梯度。**梯度下降** 指的是往梯度方向相反方向移動一個小距離來減小函式值的方法。這裡還有極小值、極大值、駐點、最大值、最小值等概念,不再贅述。 ### 雅可比矩陣(Jacobian) 在向量分析中,雅可比矩陣是一階偏導數以一定方式排列成的矩陣,它的重要性是體現了一個可微分方程與給出點的最優線性逼近。 $$ J_{i,j}=\frac{\partial}{\partial x_j}f(x)_i $$ ### 海森矩陣(Hessian) 函式有多維輸入時,二維導數有很多,將其合為一個矩陣,就是海森矩陣,等價於梯度的雅可比矩陣。 $$ H(f)(x)_{i,j}=\frac{\partial^2}{\partial x_i\partial x_j}f(x)=H(f)(x)_{j,i} $$ 一個點在每個方向上的二階導數是不同的,海森的條件數衡量這些二階導數的變化範圍,當海森的條件數變得很差時,梯度下降法也會表現得很差,在 **牛頓法** 中,我們用海森矩陣指導搜尋,來解決上面這個問題。 - 二階導數測試:一階導數等於 0,二階導數大於零是一個極小值點;一階導數等於 0,二階導數小於零是一個極大值。 - 僅使用梯度資訊的優化演算法稱為 **一階優化演算法**,使用海森矩陣的優化演算法稱為 **二階優化演算法**。 ## 總結 這一部分的內容涉及東西比較多,書中的內容還包括一些推導和解釋,看上文看的不是很清楚的請閱讀原書,那就不是我的筆力所能講清楚的了。 到此本書中關於應用數學相關的內容就結束了,想要放棄了嗎? - 本文首發自公眾號:[RAIS](https://ai.renyuzhuo.cn