開啟深度學習/TensorFlow的前期準備工作和數學知識
阿新 • • 發佈:2018-12-11
一、安裝環境
我使用macbook僅是用來測試一些流程性問題,實際操作的話不建議使用MAC OS系統,MAC OS系統使用GPU不太方便(雖然網上有許多macbook外接GPU的教程,但總歸是很心疼的)。實際跑深度學習工程時,我會放在ubuntu伺服器上。
二、安裝TensorFlow
三、複習數學知識
應該是針對性地學習。主要分為原理類和調參類的數學知識。
Part1.線性代數
- 向量
- 矩陣
- 集合
- 標量
- 張量
- 範數
- 內積
- 向量正交
- 正交基
- 特徵值分解
- 奇異值分解
- 矩陣分解
- 總結:前面的都是基礎概念性的內容,後面的三個分解很重要,奇異值分解也屬於矩陣分解裡的一種,在很多應用中其實都會用到,譬如推薦系統,主題模型等。在一些其他的演算法思想裡其實也有用到,我們求特徵向量的時候,其實也是在做特徵值分解,主成分分析/因子分析 其實都用到了矩陣分解。尤其是當資料量比較小的時候,可以先不上深度學習,先用簡單又基礎的方法試一下,看看效果怎麼樣,作為baseline,加大資料集後,再採取更深層次的演算法來做。
Part2.概率論
- 條件概率
- 聯合概率
- 全概率公式
- 逆概率
- 貝葉斯公式
- 貝葉斯定理
- 先驗概率
- 後驗概率
- 似然概率
- 最大似然估計法
- 最大後驗概率法
- 離散型隨機變數
- 連續型隨機變數
- 概率質量函式
- 概率密度函式
- 兩點分佈
- 二項分佈
- 泊松分佈
- 均勻分佈
- 指數分佈
- 正態分佈
- 數字特徵
- 數學期望
- 方差
- 協方差
- 總結:概率論的內容也非常重要,掌握好了才能理解我們在機器學習/深度學習裡經常出現的一些概念。它包含在我們演算法的很多方面,譬如,資料是否符合正態分佈/泊松分佈,什麼情況下可以用最大似然估計法等等,貝葉斯的定理除了運用在貝葉斯演算法中,還有沒有其他的演算法有運用到這個思想的,條件概率個聯合概率等,在後續的資訊理論出現的作用是什麼?都需要我們隊每個知識點好好掌握。重點掌握我加粗的知識點。
Part3.數理統計
- 樣本
- 總體
- 統計量
- 引數估計
- 假設檢驗
- 置信區間
- 區間估計
- 泛化能力
- 泛化誤差
- 欠擬合
- 過擬合
- 噪聲
- 偏差
- 總結:同樣,前面是基礎知識,後面的幾點更為關鍵。泛化能力和泛化誤差是我們衡量這個模型跑完了能否拿到實際場景中去應用的一個重要指標;欠擬合 or 過擬合 也是我們在模型訓練的過程中需要注意和解決的兩點;偏差方差等也屬於評價指標,我們需要達到一個trade-off,所以如何平衡也是需要關注的。其實也可以這樣看,如果資料中出現了噪音,迭代次數過少(或者一些其他原因),導致模型欠擬合,那麼它的偏差大,方差小,如果過擬合,則偏差小,方差大,不管哪種情況,這個模型的泛化能力都不行,沒法拿到真實場景中去用,所以我們需要對其進行調整,這個時候我們就會關注到資料本身和模型調參上。資料本身如果有噪音和異常點應該如何找到並去除,模型跳槽應該如何避免欠擬合和過擬合,都是我們在掌握這些知識點時需要重點關注的點。
Part4.優化相關
- 目標函式
- 全域性最小值
- 區域性極小值
- 無約束優化
- 約束優化
- 拉格朗日函式
- KKT條件與對偶函式
- 梯度下降法
- 一階導數
- 二階導數
- 牛頓法
- 泰勒展開
- 線性搜尋方法
- 置信域方法
- 啟發式演算法
- 總結:優化部分的內容也是非常重要的一環。當我們設定了目標函式後,就會採取各種優化演算法來去優化目標函式的值,使目標函式的值最小(/最大,一般是最小,根據具體情況而定),如何使目標函式的值下降的最快,這時我們就引出了梯度下降,因為沿著負梯度下降的方向是函式值減小的最快方向,由此我們可以引出多種梯度下降的方法,包括批梯度,隨機梯度,mini-batch等等。當然,這是針對一階函式優化來說的,如果是二階函式,我們就會考慮到用牛頓法,什麼時候會出現二階函式呢?在xgboost裡針對目標函式的優化我們就會涉及到二階函式的優化。而在這些優化函式的計算中,都會涉及到泰勒展開,在SVM裡又會因為要求支援向量所以會引出拉格朗日乘子法和KKT條件,從一點去發散,我們可以發現很多知識點。所以在針對具體的演算法學習過程中再去掌握這些數學知識點,高效而且有用。在深度學習中涉及到的優化演算法相對就少一些,沒有機器學習裡的那麼多,但是這些基礎性的東西還是需要掌握的。
Part5.資訊理論
- 資訊熵
- 互資訊
- 資訊增益
- KL 散度
- 最大熵原理
- 交叉熵和相對熵的對比
- 各種熵之間的關係
- 總結:資訊理論這一章非常重要,基本上每個知識點都是重點,因為很多情況下我們都會使用交叉熵作為損失函式,所以得弄明白它的原理和為什麼我們經常使用它做損失函式的原因。對於一些特殊的情況,可以做出哪些變型,也是在掌握了這些基礎上才會做的,所以大家要好好掌握。