【學習筆記】【Coursera】【MachineLearning】Large scale machine learning
阿新 • • 發佈:2019-02-06
1、背景
- 大量的資料勝過最好的演算法
- 低偏差/高方差的學習演算法 + 大量資料 = 一個高效的機器學習系統
- 模型高偏差時,選擇增加特徵或新增隱藏神經元更有效
- 產生問題:計算量太大
- 梯度下降演算法需要計算微分項(對所有m個訓練樣本求和)
2、梯度下降演算法
- 2.1、普通的梯度下降演算法又稱批量梯度下降演算法(Batch Gradient Descent)
Jtrain(θ)=12m∑mi=1(hθ(x(i))−y(i))2 - Repeat {
θj:=θj−α1m∑mi=1(hθ(x(i))−y(i))x(i)j
(for everyj=0,...,n )
} - 每一次迴圈計算所有樣本的
∂
- 2.2、隨機梯度下降演算法(Stochastic Gradient Descent)
- 重寫
cost(θ,(x(i),y(i)))=12(hθ(x(i))−y(i))2 Jtrain(θ)=1m∑mi=1cost(θ,(x(i),y(i))) - 演算法操作之前,需要將資料集打亂,即重新排列
- Repeat {
fori:=1,...,m
θj:=θj−α(hθ(x(i))−y(i))x(i)j
(for everyj=0,...,n )
}
} - 每一次內層迴圈使用一個樣本進行計算,改變
Jtrain(θ) - 只能保證總體朝最小值改變而具體每一步無法保證
- 演算法會從某個點開始,然後曲折地逼近最小值,但它不會真的收斂,而是一直在最小值附近徘徊,因此最終得到的引數,實際上只是接近全域性最小值,而不是真正的全域性最小值(解決方法但不推薦:逐漸減小學習率,需要額外的工作)
- 外層迴圈次數:1-10次,具體取決於資料集大小
- 保證演算法收斂:
- 每一次使用
(x(i),y(i)) 更新θ 前,計算對應的cost - 每迴圈1000次計算前1000次的平均cost,畫出迴圈次數與平均cost之間的函式曲線
- 減小學習率會導致收斂速度變慢,但能得到更好的最小值,或解決演算法不收斂的問題
- 增大計算平均cost的迴圈次數(如5000)會使函式曲線更加平滑,但會失去對細節的描述,以及延遲演算法的反饋
- 每一次使用
- 重寫
- 2.3、小批量梯度下降演算法(Mini-Batch Gradient Descent)
- Say
b=10,m=1000
Repeat {
fori=1,11,21,31,...,991 {
θj:=θj−α1
(for everyj=0,...,n )
}
} - 每一次內層迴圈使用b個樣本進行計算
- b為mini-batch size,通常取值為2-100
- 向量化實現平行計算b個樣本,效率可以比批量和隨機更高
- Say
3、線上學習
線上學習系統,能更好地適應使用者的習慣