標籤:des style blog class c ext
本欄目來源於Andrew NG老師講解的Machine Learning課程,主要介紹大規模機器學習以及其應用。包括隨機梯度下降法、維批量梯度下降法、梯度下降法的收斂、線上學習、map reduce以及應用執行個體:photo OCR。課程地址為:https://www.coursera.org/course/ml
(一)大規模機器學習
從前面的課程我們知道,如果我們的系統是high variance的,那麼增加樣本數會改善我們的系統,假設現在我們有100萬個訓練樣本,可想而知,如果使用梯度下降法,那麼每次迭代都要計算這100萬訓練集的誤差,計算代價顯然很大。那麼有沒有什麼辦法來解決呢?
隨機梯度下降(Stochastic gradient descent)
之前的批量梯度下降法定義代價函數為所有訓練樣本的誤差和:
對比在前面的梯度下降法,我們重新定義代價函數為一個單一訓練樣本的誤差:
演算法流程:
首先對訓練集隨機“洗牌”,讓訓練資料亂序;
每次迭代只計算單一誤差,然後更新θ,這樣不是每一步都是“正確”的方向,因此演算法雖然會“走近”全域最小,但可能只是在最小值附近徘徊,如所示:
微批量梯度下降法(Mini‐batch gradient descent)
微批量梯度下降法介於批量梯度下降和隨機梯度下降之間,每次迭代計算b個訓練樣本的誤差。
PS:通常令b介於2-200。
隨機梯度下降收斂(Stochastic gradient descent convergence)
在批量梯度下降中,我們可以通過繪製J與迭代次數的函數來判斷是否收斂。但是在大規模機器學習中,計算代價過大。
在隨機梯度下降中,每次迭代前都計算cost(θ,(x(i),y(i))),比如每進行1000次迭代,繪製cost(θ,(x(i),y(i)))的平均值。
- 有時,我們會得到一個顛簸但不明顯減少的映像(左),這樣可以通過增加迭代間隔(比如2000次迭代計算平均)來使映像平緩;如果函數圖仍然木有改善,則說明模型存在錯誤。
- 有時,我們會得到不斷上升的映像(右),這樣可以通過減小學習率α解決。
另外,我們也可以隨迭代次數增加而減小學習率α,可用如下的算式:
這樣在接近最小值點時,通過學習率,我們可以使演算法收斂,如所示:
線上學習(online learning)
假設我們經營一家物流公司,當使用者詢問從A地到B地的快遞費用時,我們會給出報價,使用者可能會接受(y=1)或拒絕(y=0)。現在我們要建立模型,來預測使用者接受報價的可能性。
在online learning中,許多網站都會有持續不斷的使用者流,在構建模型時,我們對單一執行個體進行學習,一旦該執行個體學習完了,便可以丟棄該資料。這樣我們的模型可以很好適應並更新使用者的傾向。
Map reduce 和 並行運算(data parallelism)
如果我們有多台電腦(或有一台多核的電腦),讓每台電腦(或電腦的每個cpu)處理資料一個子集,然後再將計算結果求和,這樣可以加速學習演算法。計算流程如下所示:
例如,有400個訓練樣本和4台電腦,我們可以使用批量梯度下降法將資料分給這4台電腦:
(二)應用執行個體(photo OCR)
問題描述:photo OCR的目標是從一張映像中識別文字。
演算法步驟:
- 文字檢測(Text detection)
- 字元切分(Character segmentation)
- 字元分類(Character classification)
其中每一項任務都由單獨的團隊負責,如下流程:
滑動視窗(Sliding windows)
1. 通過滑動視窗可以從映像中抽取對象,比如要在中識別行人,可以選擇之前訓練得到的行人的圖片尺寸來對該圖進行剪裁,然後對切片進行識別,判斷其是否是行人。
2. 下面進行文字分割,即將文字分割成單個字元,訓練集是單個字元的圖片和兩個相連字號之間的圖片。
3. 最後進行字元識別,可以通過我們之前的神經網路、羅吉斯迴歸演算法來實現。
擷取資料(Getting lots of data: Artificial data synthesis)
對於high variance問題,我們需要擷取更多的訓練資料,那麼怎樣在有限的條件下擷取資料呢?
在OCR問題中,我們可以下載各種字型,然後搭配不同的背景從而創造一些訓練資料;另外,我們也可以通過利用已有的資料,對其進行修改,如對字元圖片進行變形、旋轉、模糊等處理,從而得到大量訓練資料。
下一步該怎樣做?(Ceiling analysis)
在機器學習的一些應用中,通常需要多個步驟來實現最終的預測,那麼我們應該投入精力改善那一部分呢?
以OCR問題為例,流程如下:
我們可以選取每個流程的一部分,手動提供100%的正確輸出結果,然後看看整體的提升效果。假設我們的模型整體效果為72%,若Text detection輸出結果正確,模型效果為89%;若另character segmentation的輸出結果正確,模型效果為90%(即只提高了1%)。這就意味著我們應該投入更大的精力在Text detection上面。
練習
這是本課程的最後一節課,沒有作業,下面就羅列一些練習題目吧: