機器學習中的數學筆記:微分學與梯度下降法
1.簡介:數學在機器學習中的應用
模型建立與選擇:對工程問題進行抽象和量化
• 涉及數學知識:綜合運用微積分,線性代數,概率
統計以及組合數學的知識
• 例如:
o 各類深度模型中的網絡結構與損失函數
o 支持向量機中的向量空間與度量
模型訓練:
• 優化算法:高效穩定的對各類損失函數求極值
• 涉及數學知識:微積分以及優化理論
機器學習基本流程:
2.微分學基本思想和方法
2.1 微分學的核心思想:函數逼近
1.逼近是人類探討複雜問題時經常使用的一種手段,比如:
• 人均GDP:使用常數函數來逼近收入分佈函數
• 平均速度:使用線性函數來逼近實際運動軌跡
• 年化收益率:使用指數函數來逼近收益函數
2.微分學的核心思想:用熟悉且簡單的函數對複雜函數進行局部逼近
3.常用作逼近的簡單函數包括:
• 線性函數:函數的一階導數 y=kx+b
•多項式函數:泰勒級數 y=ax*x+bx+c
2.2 微積分的基礎語言:極限論
2.2.1 極限的表述方式
2.2.2無窮小
2.2.3兩邊夾定理
由兩邊夾定理推導重要極限:
在一個圓中:存在sinx<x<tanx
同時除以x:
得到sinx/x < 1 < sinx/x*1/cosx
得到cosx< sinx/x <1
同時除以cosx:
得到1<=lim sinx/x <=1
得到重要極限:
2.2.4 重要極限
2.3 微分學的基本手法:求導數
2.4 從線性逼近到多項式逼近:泰勒級數
2.5 從低維到高維:多元函數的梯度
3.梯度下降法和牛頓法
3.1 隨機梯度下降
梯度下降法:找到梯度爲0的點(極小值點、極大值點鞍點),不論值的大小。
3.2 隨機梯度下降的問題與挑戰
引入:隨機梯度下降法–解決梯度計算
梯度計算由於隨機梯度下降法的引入,我們通常將梯度下降法分爲三種類型:
- 批梯度下降法(GD)
原始的梯度下降法 - 隨機梯度下降法(SGD)
每次梯度計算只使用一個樣本
• 避免在類似樣本上計算梯度造成的冗餘計算
• 增加了跳出當前的局部最小值的潛力
• 缺點:在逐漸縮小學習率的情況下,有與批梯度下降法類似的收斂速度 - 小批量隨機梯度下降法(Mini Batch SGD)
每次梯度計算使用一個小批量樣本
• 梯度計算比單樣本更加穩定
• 可以很好的利用現成的高度優化的矩陣運算工具
注意:神經網絡訓練的文獻中經常把 Mini Batch SGD 稱爲 SGD
隨機梯度下降法的困難:學習率的選取
- 局部梯度的反方向不一定是函數整體下降的方向
• 對圖像比較崎嶇的函數,尤其是隧道型曲面,梯度下降表現不佳。 - 預定學習率衰減法的問題
• 學習率衰減法很難根據當前數據進行自適應 - 對不同參數採取不同的學習率的問題
• 在數據有一定稀疏性時,希望對不同特徵採取不同的學習率 - 神經網絡訓練中梯度下降法容易被困在鞍點附近的問題
• 比起局部極小值,鞍點更加可怕
3.3 隨機梯度下降的優化算法選講
爲什麼不用牛頓法?
• 牛頓法要求計算目標函數的二階導數(Hessian matrix),在高維特徵情形下這個矩陣非常巨大,計算和存儲都成問題
• 在使用小批量情形下,牛頓法對於二階導數的估計噪音太大
• 在目標函數非凸時,牛頓法更容易收到鞍點甚至最大值點的吸引動量法(Momentum)(適用於隧道型曲面)
梯度下降法在狹長的隧道型函數上表現不佳,如下圖所示:
• 函數主體緩緩向右方下降
• 在主體方向兩側各有一面高牆,導致垂直於主體方向有更大的梯度
• 梯度下降法會在隧道兩側頻繁震盪。
究竟如何選擇算法呢?
• 動量法與Nesterov的改進方法着重解決目標函數圖像崎嶇的問題
• Adagrad與Adadelta主要解決學習率更新的問題
• Adam集中了前述兩種做法的主要優點目前爲止 Adam 可能是幾種算法中綜合表現最好的
動量法:
Nesterov的改進方法:
==Adagrad ==(自動調整學習率,適用於稀疏數據)
梯度下降法在每一步對每一個參數使用相同的學習率,這種一刀切的做法不能有效的利用每一個數據集自身的特點。
Adagrad 是一種自動調整學習率的方法:
• 隨着模型的訓練,學習率自動衰減
• 對於更新頻繁的參數,採取較小的學習率
• 對於更新不頻繁的參數,採取較大的學習率
注意:Adadelta 的第一個版本也叫做 RMSprop,是Geoff Hinton獨立於 Adadelta提出來的。
Adam:目前最好的算法