機器學習和深度學習知識路線及知識點總結
資料預處理
1、深度學習中的資料預處理有哪些方式?
1、 資料歸一化。包括高斯歸一化、最大最小值歸一化等。
2、 白化。許多深度學習演算法都依賴於白化來獲得更好的特徵。所謂的白化,以PCA白化來說,就是對PCA降維後的資料的每一列除以其特徵值的根號。
2、為什麼需要對資料進行歸一化處理,歸一化的方式有哪些?
1. 為了後面資料處理的方便,歸一化的確可以避免一些不必要的數值問題。
2. 為了程式執行時收斂加快。(如果)
3. 同一量綱。樣本資料的評價標準不一樣,需要對其量綱化,統一評價標準。這算是應用層面的需求。
4. 避免神經元飽和。啥意思?就是當神經元的啟用在接近 0 或者 1 時會飽和,在這些區域,梯度幾乎為 0,這樣,在反向傳播過程中,區域性梯度就會接近 0,這會有效地“殺死”梯度。
5. 保證輸出資料中數值小的不被吞食。
詳細請參考:https://blog.csdn.net/code_lr/article/details/51438649
歸一化的方式主要有:線性歸一化、標準差歸一化、非線性歸一化
線性歸一化:
標準差歸一化:
非線性歸一化:
適用範圍為:經常用在資料分化比較大的場景,有些數值很大,有些很小。通過一些數學函式,將原始值進行對映。該方法包括指數,正切等。
3、資料增強的方式有哪些?
翻轉、旋轉、縮放、裁剪、平移、尺度變換、新增噪聲、色彩抖動、亮度調整、對比度增強。
注意:在資料量比較少的情況下,資料增強的方式對模型效果的提升(泛化能力)很有效。
資料增強可以分為兩類,一類是離線增強,一類是線上增強。
離線增強:直接對資料集進行處理,資料的數目會變成增強因子乘以原資料集的數目,這種方法常常用於資料集很小的時候。
線上增強:這種增強的方法用於,獲得 batch 資料之後,然後對這個 batch 的資料進行增強,如旋轉、平移、翻折等相應的變化,由於有些資料集不能接受線性級別的增長,這種方法長用於大的資料集,很多機器學習框架已經支援了這種資料增強方式,並且可以使用 GPU 優化計算。
物體檢測中的資料增強:其實和正常的資料增強一樣的,資料本身增強後,對box進行一定的平移旋轉即可。
4、深度學習如何解決資料樣本不均衡?你在專案中是怎麼解決的?
1、資料增強
2、使用Focal loss
深度學習中的名詞解釋
1、奧卡姆剃刀的思想?
在所有可能選擇的模型中,我們應該選擇能夠很好地解釋已知資料並且十分簡單的模型。
換句話說,同等效果下,選擇較為簡單的模型。
奧卡姆剃刀思想用在哪裡呢?其實就是深度學習中的正則化。
2、梯度消失和梯度爆炸?
兩種情況下梯度消失經常出現,一是在深層網路中,二是採用了不合適的損失函式,比如sigmoid。
梯度爆炸一般出現在深層網路和權值初始化值太大的情況下。
由鏈式法則可知,當採用sigmoid這類函式時,深層網路引數更新時,往往會出現梯度消失現象。當初始引數大時,也會出現梯度爆炸。
詳細請參考:https://blog.csdn.net/qq_25737169/article/details/78847691
3、鞍點、區域性最小值和全域性最小值?如何區分它們?如何跳出鞍點和區域性最小值?
鞍點和區域性極小值、全域性最小值的梯度都相等,均為0,不同在於在鞍點附近Hessian矩陣是不定的(行列式小於0,行列式必須是方陣),而在區域性極小值附件的Hessian矩陣是正定的。
關於正定矩陣,是特徵值都不小於0的實對稱矩陣,關於負定矩陣是特徵值都小於0的實對稱矩陣,關於不定矩陣是特徵值既有大於0又有小於0的值。
跳出鞍點或者區域性最小點一般有以下幾種方式:
1、 以多組不同引數值初始化多個神經網路,按標準方法訓練後,取其中誤差最小的解作為最終引數。這相當於從多個不同的初始點開始搜尋,這樣就可能陷入不同的區域性極小,從中進行選擇有可能獲得更接近全域性最小的結果。
2、 使用“模擬退火”技術。模擬退火在每一步都以一定的概率接受比當前解更差的結果,從而有助於“跳出”區域性極小。在每步迭代過程中,接受“次優解”的概率要隨著時間的推移而逐漸降低,從而保證演算法穩定。
3、 使用隨機梯度下降,與標準梯度下降法精確計算梯度不同,隨機梯度下降法在計算梯度時加入了隨機因素。於是,即便現如區域性極小點,它計算出的梯度仍可能不為零,這樣就有機會跳出區域性極小繼續搜尋。
4、深度學習中的超引數有哪些?
超引數 : 在機器學習的上下文中,超引數是在開始學習過程之前設定值的引數,而不是通過訓練得到的引數資料。通常情況下,需要對超引數進行優化,給學習機選擇一組最優超引數,以提高學習的效能和效果。
超引數指的是會影響到最終引數的引數,主要包括卷積核大小和數量、是否採用BN和池化操作、遷移學習、引數的初始化方式、學習率、損失函式、啟用函式、是否採用自適應學習率、優化器的選擇等等。
5、如何尋找超引數的最優值?
在使用機器學習演算法時,總有一些難調的超引數。例如權重衰減大小,高斯核寬度等等。這些引數需要人為設定,設定的值對結果產生較大影響。常見設定超引數的方法有:
1. 猜測和檢查:根據經驗或直覺,選擇引數,一直迭代。
2. 網格搜尋:讓計算機嘗試在一定範圍內均勻分佈的一組值。
3. 隨機搜尋:讓計算機隨機挑選一組值。
4. 貝葉斯優化:使用貝葉斯優化超引數,會遇到貝葉斯優化演算法本身就需要很多的引數的困難。
5. MITIE方法,好初始猜測的前提下進行區域性優化。它使用BOBYQA演算法,並有一個精心選擇的起始點。由於BOBYQA只尋找最近的區域性最優解,所以這個方法是否成功很大程度上取決於是否有一個好的起點。在MITIE的情況下,我們知道一個好的起點,但這不是一個普遍的解決方案,因為通常你不會知道好的起點在哪裡。從好的方面來說,這種方法非常適合尋找區域性最優解。稍後我會再討論這一點。
6. 最新提出的LIPO的全域性優化方法。這個方法沒有引數,而且經驗證比隨機搜尋方法好。
6、訓練集、驗證集、測試集和交叉驗證
一般來說,訓練集、驗證集、測試集對中型資料來說,一般劃分的比例為6:2:2,但是對於特別大的資料集,比如100w的級別,這個時候,完全沒有必要再按照6:2:2的方式,可以加大訓練量,使模型得到更充足的訓練,此時可以調整為8:1:1的比例,甚至給驗證集和測試集更小的比例。
K折交叉驗證:把資料分成K份,每次拿出一份作為驗證集,剩下k-1份作為訓練集,重複K次。最後平均K次的結果,作為誤差評估的結果。與前兩種方法對比,只需要計算k次,大大減小演算法複雜度,被廣泛應用。一般情況將K折交叉驗證用於模型調優,找到使得模型泛化效能最優的超參值。找到後,在全部訓練集上重新訓練模型,並使用獨立測試集對模型效能做出最終評價。
如果訓練資料集相對較小,則增大k值。
增大k值,在每次迭代過程中將會有更多的資料用於模型訓練,能夠得到最小偏差,同時演算法時間延長。且訓練塊間高度相似,導致評價結果方差較高。
如果訓練集相對較大,則減小k值。
減小k值,降低模型在不同的資料塊上進行重複擬合的效能評估的計算成本,在平均效能的基礎上獲得模型的準確評估。
7、線性分類器的三個最佳準則
感知準則函式、支援向量機、Fisher準則。
8、KL散度和JS散度
KL散度又稱之為KL距離,相對熵:
當P(X)和Q(X)的相似度越高,KL散度越小。
KL散度主要有兩個性質:
(1) 不對稱性
儘管KL散度從直觀上是個度量或距離函式,但它並不是一個真正的度量或者距離,因為它不具有對稱性,即
(2) 非負性
相對熵的值是非負值,即
JS散度
JS散度也稱JS距離,是KL散度的一種變形。
轉自:https://www.zhihu.com/people/18301926762/posts?page=14
https://zhuanlan.zhihu.com/p/97311641