1.大型數據集的學習
處理大數據集的算法
近年來機器學習技術的發(fā)展歸因于我們有極其龐大的數據用來訓練我們的算法。
處理如此海量數據的算法谓传?我們?yōu)槭裁匆么蟮挠柧毤兀?/p>
我們已經知道一種獲取高性能的機器學習系統(tǒng)的途徑是采用低偏差的學習算法慷暂,并用大數據進行訓練聘殖。即決定效果好壞的往往不是算法的好壞,而是誰的訓練數據多行瑞。如果你想使用大數據進行訓練奸腺,至少要能獲得大數據集。
大數據學習的問題:計算問題
如果有一億條訓練數據血久,可以和從這一億條數據中隨機抽取一千條數據訓練的結果相同突照,為什么我們不用一千條進行訓練呢?
增大訓練數據是否能提升算法的好壞氧吐?
高效的計算方法用來處理大數據:
1.隨機梯度下降
2.減少映射
2.隨機梯度下降
對于很多機器學習算法讹蘑,例如線性回歸、邏輯回歸和神經網絡筑舅,我們推導算法的方法是提出一個代價函數座慰,或提出一個優(yōu)化目標,然后使用梯度下降的算法求代價函數的最小值翠拣。
當我們的訓練集很大時版仔,梯度下降算法的計算量會變得非常大。對普通梯度下降算法的改進:隨機梯度下降法。
當訓練數據非常大時蛮粮,梯度下降變?yōu)榕刻荻认陆狄娑小E窟@個詞指的是我們每次都需要同時考慮所有的訓練樣本。你要不端的迭代蝉揍,就需要不斷地求和链峭,三億數量的求和,計算需要花費很長時間又沾。
如果每次迭代時不用考慮全部的樣本弊仪,僅僅只需要考慮一個訓練樣本。
1.隨機打亂所有數據
2.代入隨機打亂的的訓練樣本杖刷,對代價函數進行優(yōu)化励饵,直到全局收斂(不需要代入三億數目就會使代價函數最小化)
換個寫法:
迭代會更快,不需要對所有訓練樣本進行求和
每一次迭代只要保證能擬合某一訓練樣本就行了
兩者相比滑燃,收斂方式是不同的役听,隨機梯度下降法就是連續(xù)不斷地在某個區(qū)域內朝著全局最小值徘徊,而不是直接達到全局最小值表窘。但通常我們使用隨機梯度下降就可以達到一個很好的全局最小值典予,這對于算法的實際效果就已經足夠了。
最后乐严,在隨機梯度下降法中有一個外層循環(huán)瘤袖,它決定了內層循環(huán)的執(zhí)行次數,所以外層循環(huán)應該執(zhí)行多少次呢昂验?這取決于訓練集的大小捂敌,通常一次就夠了(1-10次)。
3.Mini-Batch梯度下降
比隨機梯度下降還要快哦既琴!
它的思想是既不使用全部的樣本占婉,也不一次只用一個樣本,而是一次使用b個樣本甫恩。
比方說b = 10時:
完整的算法:
為什么我們使用b個樣本而不是像隨機梯度下降那樣每次只使用一個樣本呢逆济?
因為在向量化的過程中,Mini-Batch梯度下降法可能要比隨機梯度下降法表現(xiàn)要好磺箕,僅當你有一個好的向量化方式纹腌。因為包含了b個樣本更向量化的方式執(zhí)行,將使你在10個樣本內部分并行運算滞磺。換句話說升薯,如何使用合適的向量化方式計算余下的樣本,可以部分使用好的數值代數庫然后對b個樣本進行并行運算击困。
Mini-Batch梯度下降的缺點之一是:當有一個額外的參數b時涎劈,你需要確定Mini-Batch的大小广凸,這可能需要費些時間,不過如果你有優(yōu)秀的向量化方法蛛枚,有時它將比隨機梯度下降運行的更快谅海。
4.隨機梯度下降收斂
運行隨機梯度下降法,你怎么保證調試過程已經完成蹦浦,并且已經收斂到合適的位置了呢扭吁?你怎么調整隨機下降梯度中學習速率α的值呢?
確保算法收斂
選擇合適的學習速率α
回顧之前的批量梯度下降算法盲镶,確保梯度下降已經收斂的一個標準方法就是繪制優(yōu)化代價函數侥袜,這是一個關于迭代次數的函數,要確保代價函數在每一次迭代中都是下降的溉贿。
比起之前需要是不是的計算Jtrain枫吧,那樣就得遍歷所有的訓練樣本,而隨機梯度下降法的步驟只是在更新θ之前計算這些cost函數宇色,并不需要太大的計算量九杂。我們要做的就是在1000次迭代中,求出前1000個cost函數的平均值宣蠕,然后把它畫出來例隆,通過觀察所畫的圖我們就能檢查出隨機梯度下降是否在收斂。
畫圖實例:
如果使用一個更小的學習速率抢蚀,震蕩就會變小裳擎,最終結果也會變好一點(區(qū)別可以忽略)。
增大訓練樣本的數量思币,得到的曲線更平滑。但是速度會變慢羡微。
樣本太少谷饿,噪聲明顯。增大訓練樣本妈倔,曲線會變得優(yōu)化博投,如果沒有變好,說明你需要調整學習速率或調整特征或者算法的其他東西盯蝴。
曲線上升毅哗,需要用更小的學習速率α。
在大多數隨機梯度下降法的典型應用中捧挺,一般你最終得到的參數只是一個全局最小之的接近值虑绵,而不是真正的全局最小值。在大多數闽烙,隨機梯度下降法的典型應用中翅睛,學習速率α一般是不變的声搁,如果你想要最終的收斂結果達到局部最小值,你可以做的就是讓學習速率α的值隨著時間變化逐漸減小捕发。
你的最終值會比較接近全局最小值(每一步都會越精確)疏旨。
5.在線學習
在線學習機制讓我們可以模型化一些問題,就是我們有連續(xù)一波數據或者連續(xù)的數據流扎酷,先要用算法從中學習的這類問題檐涝。
網站用戶數據流,就可以用在線學習機制從數據流中學習用戶的偏好法挨,然后用這些信息優(yōu)化關于網站的決策谁榜。
在在線學習機制中,我們實際上丟棄了固定的數據集這一概念坷剧,取而代之是一個算法惰爬,現(xiàn)在我們獲取一個樣本,然后利用那個樣本以這種方式學習惫企。然后我們丟棄這個樣本撕瞧。因為你有強大的數據流,沒必要反復使用樣本狞尔。
連續(xù)的數據流是關鍵丛版。
這種在線學習機制可以適應變化的用戶偏好。
賣手機的選項供用戶選擇偏序;
CTR:點擊率
產品搜索問題页畦,使用在線學習機制在線學習用戶點擊情況
網站展示特別優(yōu)惠;
新聞網站推薦研儒;
商品推薦豫缨;
...
這些問題中的任何一個都可以被轉變?yōu)闃藴实模瑩碛幸粋€固定的樣本集的機器學習問題端朵『冒牛或許你可以讓網站運行幾天,然后保存一個固定的數據集冲呢,然后轉變?yōu)橐粋€擁有固定數據集的機器學習問題舍败。但是在實際中,大公司的大網站有如此多的數據敬拓,所以真的沒必要保存一個固定的數據集邻薯。可以使用在線學習算法乘凸,來連續(xù)的學習厕诡,從這些用戶不斷產生的數據中來學習。
優(yōu)點:如果你有一個變化的用戶群营勤,又或者你在嘗試預測的事情在緩慢變化(用戶品味)木人,在線學習算法可以慢慢地調試你所學習到的假設信柿,將其調整更新為最新的用戶行為。
6.減少映射與數據并行
應用在大規(guī)模機器學習上醒第,MapReduce
你可以將學習算法應用到隨機梯度下降不能解決的規(guī)模更大的問題渔嚷。
把訓練集分成10份或者100份...計算完成后再返回到一個服務器上。
這個公式完全等同于批量梯度下降算法稠曼,只是不需要在一臺機器上計算形病。
示意圖:
只要學習算法可以表示成一系列的求和形式,或者表示成在訓練集上對函數的求和形式霞幅,你就可以使用MapReduce技巧來并行化學習算法漠吻,使得其可以應用于非常大的數據集。
計算機可以有多個CPU司恳,CPU又有多個核心途乃,如果你有很大的數據集,且你有一個四核電腦扔傅,可以用MapReduce分共工作耍共,然后每個核心計算四分之一訓練樣本的總和。還不用擔心數據傳輸和網絡延遲猎塞。有些線性代數庫可以自動在一臺機器上不同核心上進行并行代數運算试读。而且如果你的學習算法有非常好的向量化表示,你就可以直接以向量化的形式應用標準學習算法荠耽,不用擔心并行钩骇。你的線性代數庫會幫你處理的很好,所以你可以不應用MapReduce铝量。
應用舉例:照片OCR
第一百四十七課:問題描述與OCR pipeline
照片OCR技術:
1.復雜倘屹。一個復雜的機器學習系統(tǒng)是如何被組裝起來的。
2.機器學習流水線慢叨。如何分配資源來對下一步計劃做出決定
自己開發(fā)/團隊開發(fā)
3.機器學習中很多有用的想法和概念 纽匙。
如何將機器學習應用到計算機視覺問題中!2宓!
人工數據合成
照片OCR技術:照片光學字符識別(讀取圖片中的文字信息)
步驟:
1.掃描圖片请梢,找處照片中的文字信息
2.重點關注文字區(qū)域赠尾,并對區(qū)域中的文字進行識別
3.顯示和記錄文字
文字檢測
字符分割
文字分類
像這樣一個系統(tǒng),我們稱之為機器學習流水線:
如果你要設計一個機器學習系統(tǒng)毅弧,你要作出的最重要的決定之一就是你要怎么設計這個流水線的各個模塊气嫁。(如何將這個問題分成一系列不同的模塊,這會影響到你算法的最終表現(xiàn))
第一百四十八課:滑動窗口
流水線中每個獨立組件的工作原理够坐?
文字識別是長寬不同的矩形寸宵,所以先看個行人檢測的例子崖面。
為了建立一個新人檢測系統(tǒng),我們要做的是從數據集中收集一些正樣本和負樣本(包含行人和不包含行人)梯影。然后你可以在你的網絡中訓練巫员,或者使用其他學習算法,來對y進行分類甲棍,來劃分每個圖塊是否包含一個行人简识。
監(jiān)督學習
移動綠色滑塊(一定步長移動),每次移動都是用分類器進行分類感猛,遍歷圖片中的不同位置七扰,并且通過分類器進行分類,判斷圖片中是否有行人陪白。
這就是你如何訓練一個監(jiān)督學習分類器颈走,然后使用一個滑動窗口分類器或者說滑動窗口檢測器找出圖中所有的行人。
回到文字檢測:
正負樣本訓練
滑動窗口檢測
繪制矩形
擴大白色區(qū)域
丟棄不適用長寬比
現(xiàn)在獲得了文字區(qū)域咱士,轉到流水線下一步:
識別文本
再次使用監(jiān)督學習算法
尋找字符分割立由,訓練分類器,再次使用滑動窗口
訓練26個字母司致,識別出字母拆吆。
第一百四十九課:獲取大量數據和人工數據?
從哪獲取這么多訓練數據呢脂矫?
人工數據合成
假如這個想法適用于你的機器學習模型枣耀,有時它能為你的學習算法輕松得到大規(guī)模的訓練集。
人工數據合成主要包括兩種形式:
第一種:自己創(chuàng)造數據
第二種:我們已經有小的標簽訓練集庭再,然后以某種方式擴充訓練集(較小的訓練集轉換成一個較大的訓練集)
假如我們收集到了一個大的標簽數據集捞奕,我選用了一個正方形的長寬比,目標是輸入一個圖像塊然后識別出圖像塊中央的字符拄轻。
現(xiàn)代計算機有一個龐大的字體庫颅围,任意字體粘貼到一個任意的背景中,應用一點模糊算子或者仿射變換恨搓,縮放和旋轉操作就生成了一個人工數據集院促。
使用合成的數據,你實際上能為你的人工訓練合成提供無限的訓練數據樣本斧抱。
使用現(xiàn)有的樣本生成數據:
實際圖片:人工扭曲
語音識別:
人工添加失真常拓,引入不同的背景聲音,就可以擴充樣本數辉浦。
人工合成要合理弄抬。
當你在決定該添加那種失真時,認真考慮一下宪郊,添加什么樣的失真才是有意義的掂恕?怎么樣才能使你生成的樣本至少有一定的代表性拖陆?
1.在合成大量的人工樣本之前,要確保你的分類器偏差較低懊亡,這樣的話更多的訓練數據才有意義依啰,標準的做法是繪制一個學習曲線來確保你有一個低偏差、高方差的分類器斋配。如果你的分類器偏差太高孔飒,那么你可以嘗試持續(xù)增加分類器的特征數量或者增加神經網絡隱藏單元的數量直到偏差值降低。
2.獲得比我目前的數據量多10倍的數據量艰争,需要花費多少努力坏瞄?
此外,
自己增加數據/添加標簽
眾包
第一百五十課:天花板分析(下一步工作的pipeline)
上限分析甩卓,它通常能夠提供一個很有價值的信號鸠匀,很好的指導你,你的工作流中的哪一部分最值得你花時間去研究逾柿?
一個有效的方法是對學習系統(tǒng)使用一個數值評估度量(文本識別正確的比例)缀棍。
上限分析的主要度量:
首先我們關注這個機器學習工作流中的第一個模塊,對于每一個測試樣本机错,都給它提供一個正確的文本檢測結果(直接給出正確答案)爬范。繼續(xù)運行,使用跟之前一樣的評價度量指標弱匪,來測量系統(tǒng)的準確率青瀑。如果用這個完美的文本檢測系統(tǒng),準確率提升了萧诫。
接著人工輸入其他模塊正確標簽斥难。
就能得到它們各自的上升空間是多大。
通過這種分析帘饶,你可以知道提升每個模塊的潛在效果如何哑诊?或者說一個模塊近乎完美時,系統(tǒng)性能增益多少及刻?這就像給系統(tǒng)表現(xiàn)加上了一個提升的上限值镀裤。
工作流非常常用,卻又很復雜的機器學習應用缴饭。上限分析可以用來衡量模塊的表現(xiàn)暑劝,找到能提升算法性能的關鍵問題。
第一百五十一課:總結和感謝
我們學了什么茴扁?
監(jiān)督學習算法
線性回歸铃岔、邏輯回歸汪疮、神經網路和支持向量機(SVM)
在這些例子中峭火,你會有帶標簽的數據和樣本
無監(jiān)督學習算法
K均值算法毁习、主成分分析法用來降維、異常檢測算法
在這些算法中卖丸,你只有無標簽的數據和樣本
此外纺且,異常檢測算法也可以在有標簽的樣本中對算法進行評估
特定的應用和話題
推薦系統(tǒng)、大規(guī)模機器學習系統(tǒng)稍浆、并行和映射-化簡算法
滑動窗口分類器(計算機視覺)
如何構建機器學習系統(tǒng)的建議
什么東西使得機器學習算法工作或是不工作载碌?
談論了方差和偏差、如何使用正則化來解決方差問題
如何決定下一步要做什么衅枫?
當你開發(fā)一個機器學習系統(tǒng)時應該如何合理分配你的時間嫁艇?
學習算法的評估方法?
召回率和F1分數這樣的評價指標
實踐方面的評測方法(訓練集弦撩、交叉驗證集和測試集)
如何調試算法步咪?
確保算法能夠正常工作
診斷算法?
學習曲線益楼、誤差分析猾漫、上限分析等
我希望不僅僅認識了這些工具,更重要的是怎么有效的使用它們來構建強大的機器學習系統(tǒng)感凤。
如果你跟著這么課學到現(xiàn)在悯周,那么你可以自信地認為你已經成了機器學習方面的專家。如你所知陪竿,機器學習是一門在科學禽翼、技術和產業(yè)方面都有著深遠影響的學科,現(xiàn)在你已經具備了使用這些機器學習的工具來發(fā)揮巨大作用的能力萨惑。
希望你們中能有很多人能夠利用這些機器學習工具來構建出色的系統(tǒng)和應用以及出色的產品捐康,并且希望你們能夠利用機器學習,不僅僅是為了自己庸蔼,更是為了有朝一日能夠造福其他人的生活解总。
我還想告訴大家,給大家教這門課真的很有趣姐仅,所以謝謝你們花枫。最后,在結束之前掏膏,我還想多說幾句劳翰,在不久之前,我也是一個學生馒疹,甚至到了現(xiàn)在佳簸,我也盡可能擠出一些時間去上一些課,學一些新的東西,所以我很能體會你們學這門課的辛苦生均,因為你們可能也是很忙的人听想,生活中有很多很多事情要處理,即便如此你也還是擠出時間來觀看這些課程視頻马胧。我知道這些視頻長達數個小時汉买,但你還是能夠拿出時間來做這些復習題,并且很多人還愿意花時間去做那些編程練習題佩脊,那些題目都很長而且很難蛙粘。所以我要對大家說一聲謝謝。我知道威彰,很多人學這門課都非常努力出牧,很多人都在這門課上花了大量時間,很多人把自己整個人都扎進了課程歇盼,我希望你們能從中收貨很多知識崔列。在這最后,我要說:感謝你們能來當我的學生旺遮。