1. 程式人生 > >【學習筆記】【Coursera】【MachineLearning】Large scale machine learning

【學習筆記】【Coursera】【MachineLearning】Large scale machine learning

1、背景

  • 大量的資料勝過最好的演算法
  • 低偏差/高方差的學習演算法 + 大量資料 = 一個高效的機器學習系統
    • 模型高偏差時,選擇增加特徵或新增隱藏神經元更有效
  • 產生問題:計算量太大
    • 梯度下降演算法需要計算微分項(對所有m個訓練樣本求和)

2、梯度下降演算法

  • 2.1、普通的梯度下降演算法又稱批量梯度下降演算法(Batch Gradient Descent)
    • Jtrain(θ)=12mmi=1(hθ(x(i))y(i))2
    • Repeat {
      θj:=θjα1mmi=1(hθ(x(i))y(i))x(i)j
      (for every j=0,...,n)
      }
    • 每一次迴圈計算所有樣本的
      θj
      Jtrain(θ)
  • 2.2、隨機梯度下降演算法(Stochastic Gradient Descent)
    • 重寫 cost(θ,(x(i),y(i)))=12(hθ(x(i))y(i))2
    • Jtrain(θ)=1mmi=1cost(θ,(x(i),y(i)))
    • 演算法操作之前,需要將資料集打亂,即重新排列
    • Repeat {
      for i:=1,...,m
      θj:=θjα(hθ(x(i))y(i))x(i)j
      (for every j=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 {
      for i=1,11,21,31,...,991 {
      θj:=θjα1
      10
      i+9k=i(hθ(x(k))y(k))x(k)j

      (for every j=0,...,n)
      }
      }
    • 每一次內層迴圈使用b個樣本進行計算
    • b為mini-batch size,通常取值為2-100
    • 向量化實現平行計算b個樣本,效率可以比批量和隨機更高

3、線上學習

線上學習系統,能更好地適應使用者的習慣

4、MapReduce和資料並行