應用舉例
總結現在機器學習的效能比過去的好,其中乙個原因就是現在擁有大量的資料。
而且其中一種獲得高效能機器學習系統的方法就是設計複雜的模型,然後使用大量資料進行訓練。
2023年的一篇文章就討論了訓練資料和精確率的關係。
在使用大量資料進行學習前,應先檢測現有模型是否足夠複雜,從而使大規模學習能發揮其作用。
檢測的方法是,選取一部分樣本,畫出學習曲線,如果學習曲線如右圖所示,就要先修改模型,而不是直接進行大規模學習。
之前的線性回歸中的梯度下降演算法如下圖所示,在擁有很大的訓練資料時也是能執行良好的,但是每次求梯度都要使用全部的資料花費的時間、記憶體等都太大了。
而隨機梯度下降則是每次只使用乙個資料來進行梯度下降,然後再整個資料集上執行1到10次,這時整體損失抖動可能很厲害(如粉紅色的路徑),但是它最終都會收斂到最小值附近。
ps.在進行隨機梯度下降的演算法之前,最好把訓練資料隨機打亂順序,這樣得到的結果更接近最小值。
批量梯度下降在每次迭代中都使用全部的資料;
隨機梯度下降在每次迭代中只使用乙個資料;
而小批量梯度下降在每次迭代中使用b(2-100)個資料。
在有乙個好的向量化運算(也就是說使用向量進行梯度下降)時,小批量梯度下降有時候會比隨機梯度下降更快收斂,原因在於使用向量其實是在平行計算多個隨機梯度下降。
當然,小批量梯度下降的缺點就是,多了乙個引數b,這是需要花時間去確定的。
如何確定演算法已經收斂到合適的位置和如何確定學習率alpha?
在批量梯度下降的演算法中,每次迭代過後計算一次整體損失,然後畫出學習曲線,這能顯示演算法是否收斂。但是在隨機梯度下降演算法中,不可能每次迭代後停下,計算一次整體損失,這要花費太多時間,而且抖動會很大。可以考慮在每次迭代之前,計算這個資料的損失,在1000次迭代後把這1000個損失的平均當成整體損失,然後畫出學習曲線。
其實就是把資料分成若干份,每個計算機計算乙份,然後再彙總。前提是要確定問題是否能通過分解合併來解決。
另外,在多核計算機中把任務分給不同的核計算也是可以的。
影象光學字元識別流水線如下所示:影象→文字檢測→字母分割→字母識別。有些複雜的光學字元識別還會自動更正識別錯誤,比如:『c1eaning』 → 『cleaning』。
使用滑動視窗和正負字元樣本去做文字檢測。
左下圖中白色的區域就是有字元的區域,希望把這些白色區域和臨近白色區域的連線起來,這就用到了數字影象處理中的腐蝕膨脹。由於多數文字都是橫著排列的,可以考慮去掉豎著排列的和方形的白色區域。
對於字元分割,同樣可以訓練乙個模型來判斷某個滑動視窗是否需要分割。
字元識別在之前的課程已經講了很多了,這裡就不重複了。
通過複雜的模型和大量的資料能夠訓練得到乙個較好的模型,那麼大量的資料如何獲得?
就字元識別的例子來說,可以使用網上的很多字型庫,把它們分成乙個個字元,然後粘在不同的背景上,然後來點模糊,旋轉,仿射等等。
直接對影象進行模糊,旋轉,仿射等等也是可以的。當然,有些變換可能並沒有什麼實際的用處,比如在大片白色的背景下加入少量的白色雜訊。
假設現在模型的準確率是72%,對流水線中的某一步,比如文字檢測,手動把有文字的區域框出來,使這一步達到完美,看看這時候模型的準確率能提公升多少。根據準確率提公升的多少來決定是否花更多時間改進流水線中的這一步。
深度之眼 吳恩達深度學習 打卡學習
理解訓練 驗證 測試集 偏差 方差 正則化以及梯度消失 梯度 梯度檢驗等基本的概念。需重點掌握為什麼正則化可以減少過擬合,以及對梯度消失和梯度 產生的原因和解決的方法。訓練 驗證 測試集,資料量在百萬級以下,可以60 20 20,百萬級,98 1 1就可以了。偏差 方差,偏差vias,方差varia...
吳恩達深度學習第四課配置keras
吳恩達老師的深度學習專項課程,第四課的第二週作業需要用到keras這個高階api框架,所有就去配置了。結果配置安裝包是有順序的,我看了乙個部落格就開始弄,當然啦。順序不對!查了資料,配置分兩步 1.安裝 graphviz 包 進入conda命令窗,輸入 pip install graphviz 2....
吳恩達機器學習筆記 第四周 2 神經網路
在神經網路中,常常把sigmoid 邏輯函式叫做激勵函式 activation function 而把引數 parameter theta叫做權重 weights 有時候可以把x0 bias unit 新增到神經網路裡去,有時候不新增。輸入層 input layer 隱藏層 hidden layer...