機器學習的常見優化方法在最近的學習中常常遇到,可是仍是不夠精通.將本身的學習記錄下來,以備不時之需git
機器學習幾乎全部的算法都要利用損失函數 lossfunction 來檢驗算法模型的優劣,同時利用損失函數來提高算法模型.
這個提高的過程就叫作優化(Optimizer)
下面這個內容主要就是介紹能夠用來優化損失函數的經常使用方法github
1.SGD&BGD&Mini-BGD:
SGD(stochastic gradient descent):隨機梯度降低,算法在每讀入一個數據都會馬上計算loss function的梯度來update參數.假設loss function爲L(w),下同.\[w-=\eta \bigtriangledown_{w_{i}}L(w_{i}) \]
Pros:收斂的速度快;能夠實如今線更新;可以跳出局部最優
Cons:很容易陷入到局部最優,困在馬鞍點.
BGD(batch gradient descent):批量梯度降低,算法在讀取整個數據集後累加來計算損失函數的的梯度
\[w-=\eta \bigtriangledown_{w}L(w)\]
Pros:若是loss function爲convex,則基本能夠找到全局最優解
Cons:數據處理量大,致使梯度降低慢;不能實時增長實例,在線更新;訓練佔內存
Mini-BGD(mini-batch gradient descent):顧名思義,選擇小批量數據進行梯度降低,這是一個折中的方法.採用訓練集的子集(mini-batch)來計算loss function的梯度.\[w-=\eta \bigtriangledown_{w_{i:i+n}}L(w_{i:i+n})\]
這個優化方法用的也是比較多的,計算效率高並且收斂穩定,是如今深度學習的主流方法.算法
5.Adam:(adaptive moment estimation)是對RMSProp優化器的更新.利用梯度的一階矩估計和二階矩估計動態調整每一個參數的學習率.
優勢:每一次迭代學習率都有一個明確的範圍,使得參數變化很平穩.
\[m_{w}^{t+1}=\beta_{1}m_{w}^{t}+(1-\beta_{1}) \bigtriangledown L^{t} ,m爲一階矩估計\]
\[v_{w}^{t+1}=\beta_{2}m_{w}^{t}+(1-\beta_{2}) (\bigtriangledown L^{t})^{2},v爲二階矩估計\]
\[\hat{m}_{w}=\frac{m_{w}^{t+1}}{1-\beta_{1}^{t+1}},估計校訂,實現無偏估計\]
\[\hat{v}_{w}=\frac{v_{w}^{t+1}}{1-\beta_{2}^{t+1}}\]
\[w^{t+1} \leftarrow=w^{t}-\eta \frac{\hat{m}_{w}}{\sqrt{\hat{v}_{w}}+\epsilon}\]
Adam是實際學習中最經常使用的算法
機器學習