系列文章:
吳恩達《Machine Learning》精煉筆記 1:監督學習與非監督學習
吳恩達《Machine Learning》精煉筆記 2:梯度下降與正規方程
吳恩達《Machine Learning》精煉筆記 3:迴歸問題和正則化
吳恩達《Machine Learning》精煉筆記 4:神經網路基礎
吳恩達《Machine Learning》精煉筆記 5:神經網路
吳恩達《Machine Learning》精煉筆記 6:關於機器學習的建議
吳恩達《Machine Learning》精煉筆記 7:支援向量機 SVM
吳恩達《Machine Learning》精煉筆記 8:聚類 KMeans 及其 Python實現
吳恩達《Machine Learning》精煉筆記 9:PCA 及其 Python 實現
吳恩達《Machine Learning》精煉筆記 10:異常檢測
吳恩達《Machine Learning》精煉筆記 11:推薦系統
本週主要是介紹了兩個方面的內容,一個是如何進行大規模的機器學習,另一個是關於圖片文字識別OCR 的案例
- 大規模機器學習
- 圖片文字識別OCR
大規模機器學習(Large Scale Machine Learning)
在低方差的模型中,增加資料集的規模可以幫助我們獲取更好的結果。但是當資料集增加到100萬條的大規模的時候,我們需要考慮:大規模的訓練集是否真的有必要。獲取1000個訓練集也可以獲得更好的效果,通過繪製學習曲線來進行判斷。
隨機梯度下降法Stochastic Gradient Descent
如果需要對大規模的資料集進行訓練,可以嘗試使用隨機梯度下降法來代替批量梯度下降法。隨機梯度下降法的代價函式是
具體演算法的過程為
先對訓練集進行隨機的洗牌操作,打亂資料的順序
重複如下過程:
隨機梯度下降演算法是每次計算之後更新引數θ,不需要現將所有的訓練集求和。
演算法可能存在的問題
不是每一步都是朝著”正確”的方向邁出的。因此演算法雖然會逐漸走向全 局最小值的位置,但是可能無法站到那個最小值的那一點,而是在最小值點附近徘徊。
小批量梯度下降 Mini-Batch Gradient Descent
小批量梯度下降演算法是介於批量梯度下降演算法和梯度下降演算法之間的演算法。每計算常數b次訓練例項,便更新一次引數θ。引數b通常在2-100之間。
隨機梯度下降收斂
隨機梯度下降演算法的除錯和學習率α的選取
- 在批量梯度下降演算法中,可以令代價函式JJ為迭代次數的函式,繪製圖表,根據圖表來 判斷梯度下降是否收斂;大規模的訓練集情況下,此舉不現實,計算代價太大
- 在隨機梯度下降中,更新θ之前都計算一次代價,然後迭代X後求出X對訓練例項的計算代價的平均值,最後繪製次數X和代價平均值之間的影像
隨著不斷地靠近全域性最小值,通過減小學習率,迫使演算法收斂而非在最小值最近徘徊。
對映化簡和資料並行Map Reduce and Data Parallelism
對映化簡和資料並行對於大規模機器學習問題而言是非常重要的概念。如果我們能夠將我們的資料集分配給不多臺 計算機,讓每一臺計算機處理資料集的一個子集,然後我們將計所的結果彙總在求和。這樣 的方法叫做對映簡化。
如果任何學習演算法能夠表達為對訓練集的函式求和,那麼便能將這個任務分配給多臺計算機(或者同臺計算機的不同CPU核心),達到加速處理的目的。比如400個訓練例項,分配給4臺計算機進行處理:
圖片文字識別(Application Example: Photo OCR)
問題描述和流程圖
影像文字識別應用所作的事是從一張給定的圖片中識別文字。
基本步驟包含:
1.文字偵測(Text detection)——將圖片上的文字與其他環境物件分離開來
2.字元切分(Character segmentation)——將文字分割成一個個單一的字元
3.字元分類(Characterclassification)——確定每一個字元是什麼 可以用任務流程圖來表
每項任務可以有不同的團隊來負責處理。
滑動視窗Sliding windows
圖片識別
滑動視窗是一項用來從影像中抽取物件的技術。看一個栗子:
如果我們需要從上面的圖形中提取出來行人:
- 用許多固定尺寸的圖片來訓練一個能夠準確識別行人的模型
- 用上面訓練識別行人的模型時所採用的圖片尺寸在我們要進行行人識別的圖片上進行剪裁
- 剪裁得到的切片交給模型,讓模型判斷是否為行人
- 重複迴圈上述的操作步驟,直至將圖片全部檢測完。
文字識別
滑動視窗技術也被用於文字識別。
- 首先訓練模型能夠區分字元與非字元
- 然後運用滑動視窗技術識別字元
- 完成字元的識別,將識別得出的區域進行擴充套件
- 將重疊的區域進行合併,以寬高比作為過濾條件,過濾掉高度比寬度更大的區域
上述步驟是文字偵察階段,接下來通過訓練出一個模型來講文字分割成一個個字元,需要的訓練集由單個字元的圖片和兩個相連字元之間的圖片來訓練模型。
訓練完成之後,可以通過滑動視窗技術來進行字元識別。該階段屬於字元切分階段。
最後通過利用神經網路、支援向量機、或者邏輯迴歸等演算法訓練出一個分類器,屬於是字元分類階段。
獲取大量資料和人工資料
如果我們的模型是低方差的,那麼獲得更多的資料用於訓練模型,是能夠有更好的效果。
獲取大量資料的方法有
- 人工資料合成
- 手動收集、標記資料
- 眾包
上限分析Ceiling Analysis
在機器學習的應用中,我們通常需要通過幾個步驟才能進行最終的預測,我們如何能夠 知道哪一部分最值得我們花時間和精力去改善呢?這個問題可以通過上限分析來回答。
回到文字識別的應用中,流程圖如下:
我們發現每個部分的輸出都是下個部分的輸入。在上限分析中,我們選取其中的某個部分,手工提供100%爭取的輸出結果,然後看整體的效果提升了多少。
- 如果提升的比例比較明顯,可以考慮在這個方向投入更過的時間和經歷
- 如果提升的效果微乎其微,意味著某個部分已經做的足夠好了
本文首發於公眾號:AI有道(ID: redstonewill),歡迎關注!