線性迴歸:是利用數理統計中迴歸分析,來肯定兩種或兩種以上變量間相互依賴的定量關係的一種統計分析方法。 html
對於通常訓練集:算法
參數系統爲:機器學習
線性模型爲: 函數
損失函數最小的目標就是求解全局最小值,loss函數定義爲學習
目標:min Φ(θ),loss函數最小。估計最優係數(θ0, θ1, θ2, …, θn)。優化
1. 梯度降低法(最速降低法) spa
顧名思義,梯度降低法的計算過程就是沿梯度降低的方向求解極小值。.net
具體過程以下(如圖1所示):3d
圖1 梯度降低描述(來自於斯坦福大學,《機器學習》公開課[2]) htm
過程2)能夠表示爲:
其中α爲步長。
因爲咱們每進行一次參數更新須要計算總體訓練數據的梯度,批量梯度降低會變得很慢,而且會遇到內存吃不下數據就掛了。同時批量梯度降低也沒法支持模型的在線更新,例如,新的樣本不停的到來。
2. SGD (隨機梯度降低算法,Stochastic gradient descent)
在梯度降低中,對於θ的更新,全部的樣本都有貢獻,也就是參與調整θ,其計算獲得的是一個標準梯度。若是數據量很是大,那麼運算速度很慢。而隨機梯度降低算法的隨機也就是說我用樣本中的一個例子來近似我全部的樣本,來調整θ。這樣速度更快,可是更容易陷入局部極小。隨機梯度降低算法能夠表示爲:
每次只選用第i個樣本,m爲樣本數量。
3. AdaGrad(自適應梯度,Adaptive Gradient)
自適應梯度與SGD相似,AdaGrad的更新速率是可變的。更新速率必定,不必定適合全部的更新階段。因此AdaGrad調整的是Gradient,對於全部的參數,隨着更新的總距離增多,學習速度隨之變緩。能夠表示爲:
其中(θi)t是t步的參數,ε很小,保證非0。
缺點:學習率單調遞減,訓練後期學習率很是小;須要手動設置全局學習率;更新 θt時,左右兩邊單位不統一。
參考文獻:Duchi, E. Hazan, and Y. Singer. Adaptive Subgradient Methods for Online Learning and Stochastic Optimization
4. AdaDelta
AdaDelta基本思想是用一階的方法,近似模擬二階牛頓法,是對AdaGrad的缺點進行改進。可表示爲:
?
5. RMSprop
RMSprop和Adadelta是在差很少的時間各自獨立產生的工做,目的都是爲了緩解Adagrad的學習速率減小的問題。實際上RMSprop和咱們在Adadelta中推到的第一個更新向量是相同的:
其中,ρ建議取0.9,α建議取0.001。
6. NAG
這個算法嚴格的說來是凸優化中的算法,具備O(1/t^2)的收斂率,收斂速度比較快。由於 DNN是一個non-convex的model,因此NAG方法並不能達到這個收斂速度。caffe文檔中指出,這個方法對於某些deeplearning 的 architecture是很是有效的。與SGD相似,具體更新過程以下:
7. Adam(我的認爲通常都合適的caffe的solver方法)
Adaptive Moment Estimation(Adam) 也是一種不一樣參數自適應不一樣學習速率方法,與Adadelta與RMSprop區別在於,它計算曆史梯度衰減方式不一樣,不使用歷史平方衰減,其衰減方式相似動量,以下[4]:
Wt與Vt分別是梯度的帶權平均和帶權有偏方差,初始爲0向量,Adam的做者發現他們傾向於0向量(接近於0向量),特別是在衰減因子(衰減率)ρ1,ρ2接近於1時。爲了改進這個問題,對Wt與Vt進行誤差修正(bias-corrected):
最終,Adam的更新方程爲:
[1] http://www.cnblogs.com/denny402/
[2] http://open.163.com/movie/2008/1/M/C/M6SGF6VB4_M6SGHFBMC.html
[3] http://blog.sina.com.cn/s/blog_eb3aea990102v41r.html
[4] http://blog.csdn.net/heyongluoyao8/article/details/52478715?locationNum=7