吳恩達機器學習筆記60-大規模機器學習(Large Scale Machine Learning)

1、隨機梯度降低算法  算法

  以前瞭解的梯度降低是指批量梯度降低;若是咱們必定須要一個大規模的訓練集,咱們能夠嘗試使用隨機梯度降低法(SGD)來代替批量梯度降低法。網絡

在隨機梯度降低法中,咱們定義代價函數爲一個單一訓練實例的代價:函數

隨機梯度降低算法爲:首先對訓練集隨機「洗牌」,而後:學習

下面是隨機梯度降低算法的過程以及和批量梯度降低算法的異同:優化

隨機梯度降低算法是先只對第1個訓練樣本計算一小步的梯度降低,即這個過程包括調參過程,而後轉向第2個訓練樣本,對第2個訓練樣本計算一小步的梯度降低,這個過程也包括調參,接着轉向第3個訓練樣本.......網站

  批量梯度降低和隨機梯度降低算法的收斂過程是不一樣的,實際上,隨機梯度降低是在某個靠近全局最小值的區域內徘徊,而不是真的逼近全局最小值並停留在那個點,不過其最終也會獲得一個很接近全局最小值的參數。這對於絕大多數的實際應用的目的來講,已經足夠了。spa

  隨機梯度降低算法收斂比較快。3d

 

2、隨機梯度降低算法的收斂 blog

  在批量梯度降低中,咱們能夠令代價函數𝐽爲迭代次數的函數,繪製圖表,根據圖表來判斷梯度降低是否收斂。可是,在大規模的訓練集的狀況下,這是不現實的,由於計算代價太大了。產品

  所以在批量梯度降低算法中,根據J的收斂判斷,在隨機梯度降低算法中,如果1000次迭代,咱們使用每次迭代的最後1000個樣本的平均值爲點做圖,對於圖形對應的分析以下:

圖①中:

藍色的曲線在A點,說明算法已經趨於收斂,因隨機梯度降低算法不直接收斂於最小值,所以最後會來回震盪。

若減少學習速率α的值,則可能會出現紅色的曲線,其收斂於B點,因α變小,因此收斂速度變慢,且由於α較小,最後震盪的幅度也比較小

圖②中:
1000個訓練樣本獲得了藍色的曲線,若將樣本數從1000增長到5000,則會出現紅色的更加平滑的曲線。

圖③中:

藍色的直線一直很平坦,說明算法並無很好地學習。

若增大樣本數量到5000,可能會出現紅色曲線。若增大樣本數量,仍然獲得紫色曲線(即仍然是平坦的),則說明算法確實沒有學習好,須要調整α或者改變特徵等。

圖④中:

若出現不降反增的狀況,說明算法正在發散,須要減少α的值

總結:

  1. 之因此曲線是來回震盪的,是由於有噪音

  2. 若曲線看起來噪音很大,或是總是上下波動,則試試增大你要平均的樣本數量

  3. 若發現代價值在上升,那就換一個小點的α值

  咱們知道,隨機梯度降低算法最後不會收斂於某一個最優值,而是會在最優值邊緣來回震盪,在大多數的隨機梯度降低算法中,學習速率α通常是保持

不變的,若你確實想要隨機梯度算法收斂於全局最優值,能夠隨時間的變化減少學習速率α的值,因此,一種典型的方法設置α的值是:

  在這個公式中,隨着迭代次數的增長,α的值愈來愈小,所以每一步愈來愈小,直到最終收斂到全局最小值。可是調整const1和const2比較繁瑣,若可以獲得一個很好的結果,則算法在最小值處的震盪越來

越小。 

  通常狀況下,咱們會直接給α一個常數,而不是給出const1和const2,由於肯定const1和const2這2個常數比較繁瑣,並且在平時的實踐應用中,結果

在最小值處震盪的狀況咱們能接受,可以知足咱們的須要。

 

3、小批量梯度降低算法

 小批量梯度降低算法是介於批量梯度降低算法和隨機梯度降低算法之間的一個算法。

  • 批量梯度降低算法:每次迭代中使用全部(m個)樣本
  • 隨機梯度降低算法:每次迭代中使用1個樣本
  • 小批量梯度降低算法:每次迭代中使用b個樣本(b在2~100之間)

假設b取10,則小批量梯度降低算法以下:

使用小批量梯度降低算法,在處理了前10個樣本以後,就能夠開始優化參數θ,所以不須要掃描整個訓練集,所以小批量梯度降低算法比批量梯度降低算法

小批量梯度降低算法在有好的向量化實現時,比隨機梯度降低算法好,在這種狀況下,10個樣本求和可使用一種更向量化的方法實現,容許部分並行計算10個樣本的和。

 

4、在線學習機制

實例1:

  假設有一個在線包裹系統,用戶將包裹從A地運往B地,網站會給出一個價格,用戶可能會接受此價格(y=1)或者不接受(y=0)。 

特徵x用於存儲用戶的屬性、出發地、目的地和網站給出的價格,咱們但願去學習P(y=1|x;θ)去優化價格,咱們可使用Logistic迴歸或者神經網絡來學 

習,先來考慮logistic迴歸。 

  假設你有一個連續運行的網站,則在線學習的流程以下:

  算法之因此沒有使用,是由於在線學習機制將某同樣本完以後,就丟棄這個樣本。所以若你有不少連續的數據流,在線學習機制將會很是有效,而若你只有少許數據,則選擇其餘的算法而不選擇在線學習。

在線學習算法能夠對正在變化的用戶偏好進行調適,特別地,隨着時間的變化,大的經濟環境發生變化,用戶們可能會對價格變得很是敏感,而後願意

支付更高的價格,又或者,有一批新的類型的用戶涌入網站,在線學習算法能夠根據變化着的用戶偏好進行調適,並且從某種程度上能夠跟進變化着的用戶羣體所願意支付的價格。

  在線學習系統可以產生這種做用的緣由是隨着時間的變化,參數θ不斷變化和更新,會逐漸調適到最新的用戶羣體所應該體現出來的參數。

實例2: 

  產品搜索:經過用戶搜索的關鍵詞推薦用戶最有可能點擊的10部手機。 

x用於存儲手機的的特徵、用戶搜索匹配這部手機名稱的詞數、用戶搜索匹配這部手機描述的詞數等。 若用戶點擊這部手機, y=1;不然,y=0。 

學習P(y=1|x; θ)。

實例3:

  學習應該展現給用戶什麼特別地優惠信息、選擇用戶感興趣的新聞文章......

  在線學習機制與隨機梯度降低算法很是類似,只是在線學習不是使用一個固定的數據集,而是從一個樣本中學習以後丟棄這個樣本,若是你有一個連續 的數據流,那麼這個算法很是值得考慮。 

  在線學習的優勢:若你有一個變化的用戶羣,又或者你正在預測變化的事情,在線學習能夠慢慢調適到好的假設以便適應用戶的最新行爲。

 5、Map Reduce and Data Parallelism(映射約減和數據並行)

  若是咱們用批量梯度降低算法來求解大規模數據集的最優解,咱們須要對整個訓練集進行循環,計算偏導數和代價,再求和,計算代價很是大。若是咱們可以將咱們的數據集分配給很少臺計算機,讓每一臺計算機處理數據集的一個子集,而後咱們將計所的結果彙總在求和。這樣的方法叫作映射簡化。

  上述例子是將數據分散到4臺機器上,這樣運行效率理論上會增長4倍,可是實際上由於網絡延遲等一些其餘的緣由,效率增長不到4倍。

上面的狀況是利用若干臺機器,將數據的計算分散到各臺機器上,實際上,咱們也能夠在一臺計算機上實現Map Reduce,即利用現代計算機的多核系

統,將訓練樣本分紅幾份,每個核處理其中一部分,也能實現並行的效果,並且由於數據始終仍是在一臺機器上運行的,所以不存在網絡延遲的影

響。

  不少高級的線性代數函數庫已經可以利用多核CPU 的多個核心來並行地處理矩陣運算,這也是算法的向量化實現如此重要的緣故(比調用循環快)。

相關文章
相關標籤/搜索