深度学习入门笔记(十七):深度学习的极限在哪?
歡迎關注WX公眾號:【程序員管小亮】
專欄——深度學習入門筆記
聲明
1)該文章整理自網上的大牛和機器學習專家無私奉獻的資料,具體引用的資料請看參考文獻。
2)本文僅供學術交流,非商用。所以每一部分具體的參考資料并沒有詳細對應。如果某部分不小心侵犯了大家的利益,還望海涵,并聯系博主刪除。
3)博主才疏學淺,文中如有不當之處,請各位指出,共同進步,謝謝。
4)此屬于第一版本,若有錯誤,還需繼續修正與增刪。還望大家多多指點。大家都共享一點點,一起為祖國科研的推進添磚加瓦。
文章目錄
- 歡迎關注WX公眾號:【程序員管小亮】
- 專欄——深度學習入門筆記
- 聲明
- 深度學習入門筆記(十七):深度學習的極限在哪?
- 1、為什么是人的表現?
- 2、可避免偏差
- 3、理解人的表現
- 4、超過人的表現
- 推薦閱讀
- 參考文章
深度學習入門筆記(十七):深度學習的極限在哪?
1、為什么是人的表現?
思考一個問題,在過去的幾年里,更多的機器學習團隊一直在討論如何比較機器學習系統和人類的表現,為什么呢?
主要有兩個原因:
- 首先是因為深度學習系統的進步,機器學習算法突然變得更好了。在許多機器學習的應用領域已經開始見到算法已經可以威脅到人類的表現了。
- 其次,事實證明,當試圖讓機器做人類能做的事情時,可以精心設計機器學習系統的工作流程,讓工作流程效率更高,所以在這些場合,比較人類和機器是很自然的,或者要讓機器模仿人類的行為。
一起來看幾個這樣的例子,在很多機器學習任務中,一些團隊或一些研究小組正在研究一個問題,當在一個問題上付出了很多時間之后(xxx 軸是時間),可能是很多個月甚至是很多年。如果開始往 人類水平 努力時,進展是很快的,但是過了一段時間,當算法表現比人類更好時,那么進展和精確度的提升就變得更慢了,也許它還會越來越好,但是在超越人類水平之后,它的性能增速(即準確度上升的速度這個斜率)會變得越來越平緩,雖然我們都希望能達到理論最佳性能水平,但是隨著時間的推移,當繼續訓練算法時,可能模型會越來越大,數據會越來越多,但是性能就是無法超過某個理論上限,這就是所謂的貝葉斯最優錯誤率(Bayes optimal error)!!!
貝葉斯最優錯誤率有時寫作 Bayesian,即省略 optimal,就是從 xxx 到 yyy 映射的理論最優函數,永遠不會被超越,所以貝葉斯最優錯誤率一般認為是理論上可能達到的最優錯誤率,就是說沒有任何辦法設計出一個 xxx 到 yyy 的函數,讓它能夠超過一定的準確度。
例如,對于語音識別來說,如果 xxx 是音頻片段,有些音頻就是這么嘈雜,基本不可能知道說的是什么,所以完美的準確率可能不是100%。又或者對于貓圖識別來說,也許一些圖像非常模糊,不管是人類還是機器,都無法判斷該圖片中是否有貓。所以,完美的準確度可能不是100%。
那么我們就應該不會感到意外,因為無論在一個問題上工作多少年,永遠不會超越貝葉斯錯誤率或者貝葉斯最佳錯誤率,事實證明也是如此。
那么為什么機器學習的進展會呈現這種增長趨勢呢?
我認為主要有兩個原因:
- 第一個原因是人類水平在很多任務中離貝葉斯最優錯誤率已經不遠了,人們非常擅長看圖像,分辨里面有沒有貓或者聽寫音頻,所以,當超越人類的表現之后也許沒有太多的空間繼續改善了。
- 第二個原因是,只要表現比人類的表現更差,就可以使用某些工具來提高性能,但是一旦超越了人類的表現,這些工具就沒那么好用了。
解釋一下我的意思,對于人類相當擅長的任務,包括看圖識別事物,聽寫音頻,或閱讀語言等等,人類是很擅長處理這些自然數據的。
- 只要機器學習算法比人類差,就可以讓人幫忙或者花錢請人幫助標記數據,這樣就有更多的數據可以喂給學習算法,算法的效果就會更好。
- 只要機器學習算法比人類差,就可以讓人類幫助查看算法處理的例子錯誤出在哪里,并嘗試了解為什么人能做對,算法做錯。
只要機器學習算法比人類差,就有這些重要策略可以改善算法,而一旦算法做得比人類好,這些策略就很難利用了,所以這可能是另一個和人類表現比較的好處,特別是在人類做得很好的任務上。
2、可避免偏差
前面最開始的時候就討論過,我們希望學習算法能在訓練集上表現良好,但有時并不想做得太好。那么這個時候,你就得知道人類水平的表現是怎樣的,可以確切告訴算法在訓練集上的表現到底應該有多好,或者有多不好,不然它怎么能懂你是什么意思?
我們經常使用貓分類器來做例子,這次還是如此,比如人類具有近乎完美的準確度,所以人類水平的錯誤是1%。在這種情況下,如果學習算法達到8%的訓練錯誤率和10%的開發錯誤率,那么你也許想在訓練集上得到更好的結果。這可能是算法對訓練集擬合的并不好。所以從減少偏差和方差的工具這個角度看,在這種情況下,建議把重點放在減少偏差上(深度學習入門筆記(九):深度學習數據處理),即訓練更大的神經網絡,或者跑久一點的梯度下降等等,試試能不能在訓練集上做得更好。
但現在同樣的訓練錯誤率和開發錯誤率,假設人類的表現不是1%(在不同的應用或者說用在不同的數據集上人類的表現水平也不一定),實際上是7.5%,這也許數據集中的圖像非常模糊,即使人類都無法判斷這張照片中有沒有貓,那么顯然這個例子稍微復雜一些,因為人類其實很擅長看照片,包括分辨出照片里有沒有貓。在這種情況下,即使你的訓練錯誤率和開發錯誤率和其他例子里一樣,你也知道,也許你的系統在訓練集上的表現還好,因為它只是比人類的表現差一點點。在第二個例子中,建議專注減少學習算法的方差,也許可以試試正則化,讓開發錯誤率更接近訓練錯誤率。
在之前(深度學習入門筆記(九):深度學習數據處理)關于偏差和方差的討論中,一個主要的假設是有一些任務的貝葉斯錯誤率幾乎為0。
要解釋這個貓分類器出現的情況,用人類水平的錯誤率估計或代替貝葉斯錯誤率或貝葉斯最優錯誤率,對計算機視覺而言相當合理,因為人類實際上是非常擅長計算機視覺任務的,根據定義,人類水平錯誤率比貝葉斯錯誤率高一點,因為貝葉斯錯誤率是理論上限,但人類水平錯誤率離貝葉斯錯誤率不會太遠。
在這兩種情況下,具有同樣的訓練錯誤率和開發錯誤率,為什么一個是決定專注于減少偏差的策略而另一個是減少方差的策略?
左邊的例子中,8%的訓練錯誤率真的很高,但是你認為可以把它降到1%,那么減少偏差的手段可能有效;而在右邊的例子中,如果你認為貝葉斯錯誤率是7.5%(這里使用 人類水平錯誤率 來替代 貝葉斯錯誤率),就知道沒有太多改善的空間,不能繼續減少訓練錯誤率了,并且你也不會希望它比7.5%好得多,因為這種情況下只能通過提供更進一步的訓練才能做到。而這邊,就還(訓練誤差和開發誤差之間)有更多的改進空間,可以將這個2%的差距縮小一點,使用減少方差的手段應該可行,比如正則化,或者收集更多的訓練數據。
所以要給這些概念命名一下,這不是廣泛使用的術語,只是這么說會讓你思考起來比較流暢,貝葉斯錯誤率或者對貝葉斯錯誤率的估計和訓練錯誤率之間的差值稱為 可避免偏差。雖然你可能希望一直提高訓練集表現,直到接近貝葉斯錯誤率,但實際上同時你也不希望做到比貝葉斯錯誤率更好,因為理論上是不可能超過貝葉斯錯誤率的,除非過擬合,而這個訓練錯誤率和開發錯誤率之前的差值,就大概說明你的算法在方差問題上還有多少改善空間。
可避免偏差 這個詞說明了一些別的偏差或者錯誤率有個無法超越的最低水平,即如果貝葉斯錯誤率是7.5%。那么實際上并不想得到低于該級別的錯誤率,所以不會說訓練錯誤率是8%,應該說,可避免偏差可能在 8% - 7.5% = 0.5% 左右,或者0.5%是可避免偏差的指標。而這個 10% - 8% = 2% 是方差的指標,所以要減少這個2%比減少這個0.5%空間要大得多。而在左邊的例子中,這 8% - 1% = 7% 衡量了可避免偏差大小,而 10% - 8% = 2% 衡量了方差大小,所以在左邊這個例子里,專注減少可避免偏差可能潛力更大。
小結:
- 訓練錯誤率 - 貝葉斯錯誤率(人類錯誤率)= 可避免偏差
- 開發錯誤率 - 訓練錯誤率 = 方差
3、理解人的表現
人類水平表現 這個詞雖然在論文里經常隨意使用,但是這個詞的更準確的定義,特別是使用人類水平表現這個詞的定義尤其重要,可以幫助推動機器學習項目的進展!!!上面我們用過這個詞 人類水平錯誤率 用來估計貝葉斯誤差,那就是理論最低的錯誤率,任何函數不管是現在還是將來,能夠到達的最低值,這是不是準確呢?
先通過一個醫學圖像分類例子來看一看。
假設要觀察上圖這樣的放射科圖像,然后作出分類診斷:
- 一個普通的未經過訓練的人類,在此任務上可以達到3%的錯誤率。
- 一個普通的醫生,也許是普通的放射科醫生,能達到1%的錯誤率。
- 一個經驗豐富的醫生可以做得更好,錯誤率為0.7%。
- 如果有一個經驗豐富的醫生團隊,讓他們都看看這個圖像,然后討論并辯論,那么達成共識的意見達到0.5%的錯誤率。
所以有一個問題是,應該如何界定人類水平錯誤率?人類水平錯誤率3%,1%,0.7%還是0.5%?
你也可以暫停思考一下,要回答這個問題,我想請你記住,思考人類水平錯誤率最有用的方式之一是,把它作為貝葉斯錯誤率的替代或估計!!!(前面講過,忘了的自己去翻)
這里我就直接給出人類水平錯誤率的定義了,因為有一隊經驗豐富的醫生討論和辯論之后,可以達到0.5%的錯誤率,所以貝葉斯錯誤率是小于等于0.5%,雖然也許有一個更大的團隊,更有經驗的醫生能做得更好,也許比0.5%好一點,但是最優錯誤率不能高于0.5%,那么在這個背景下,就可以用0.5%估計貝葉斯錯誤率。如果是為了發表研究論文或者部署系統,也許人類水平錯誤率的定義不一樣,可能只要超越了一個普通醫生的表現,系統就能達到實用了,就有部署價值了。但是如果目標是替代貝葉斯錯誤率,那么這個定義(經驗豐富的醫生團隊——0.5%)就是合適的了。
所以,在定義人類水平錯誤率時,要弄清楚目標所在!!!
要了解為什么這個很重要,一起來看一個錯誤率分析的例子。
比方說,在醫學圖像診斷例子中,訓練錯誤率是5%,開發錯誤率是6%,人類水平表現(將它看成是貝葉斯錯誤率的替代品,取決于是否將它定義成普通單個醫生的表現,還是有經驗的醫生或醫生團隊的表現)可能會用1%或0.7%或0.5%,同時回想一下,貝葉斯錯誤率或者說貝葉斯錯誤率的估計和訓練錯誤率直接的差值就衡量了所謂的 可避免偏差,這個指標衡量或者估計學習算法的方差問題。
所以在這個例子中,無論做出哪些選擇,可避免偏差 大概是 5% - 1% = 4%(如果取1%就是4%,如果取0.5%就是4.5%…),而方差差距(訓練誤差與開發誤差之間的差值)是 6% - 5% = 1%,所以在這個例子中,不管怎么定義人類水平錯誤率,使用單個普通醫生的錯誤率定義,還是單個經驗豐富醫生的錯誤率定義或經驗豐富的醫生團隊的錯誤率定義,可避免偏差 明顯都比方差問題更大,所以這種情況下應該專注于減少偏差的技術,例如訓練更大的網絡等等。
現在來看看第二個例子,比如說訓練錯誤率是1%,開發錯誤率是5%,人類水平表現是1%或0.7%還是0.5%其實也不怎么重要,因為不管使用哪一個定義,方差問題的差距是 5% - 1% = 4%,比任何一種定義的可避免偏差都大。所以這種情況下建議,主要使用減少方差的工具,比如正則化或者去獲取更大的訓練集等等。
最后看一下第三個例子:比如訓練錯誤率是0.7%,已經算是做得很好的了,開發錯誤率是0.8%。在這種情況下,用0.5%還是別的來估計貝葉斯錯誤率影響就很大了,因為此時的 可避免偏差 是 0.7% - 0.5% = 0.2% 是方差問題 0.8% - 0.7% = 0.1% 的兩倍,這表明也許偏差和方差都存在問題,但是,可避免偏差 的問題更嚴重。如果貝葉斯錯誤率的最佳估計用0.7代替,那么 可避免偏差 基本上是 0.7% - 0.7% = 0%,可能就可以忽略可避免偏差了,當然這種情況下你應該試試能不能在訓練集上做得更好。
通過這三個例子,你是不是能看出一些問題?是不是對【為什么機器學習問題上取得進展會越來越難,當你接近人類水平時進展會越來越難】這個問題有點概念!!!
- 當遠離人類水平時,將優化目標放在偏差或方差上可能更容易有所進步一點;
- 一旦訓練錯誤率接近人類錯誤率(雖然可能無法知道離貝葉斯錯誤率有多遠),只能盡量減少 可避免偏差,不然很難有所進步。
現在,深度學習的令人興奮的發展之一就是對于越來越多的任務,我們的系統實際上可以超越人類了!!!比如人臉識別:
- 人眼的識別準確率97.53%;
- 算法的識別準確率99.99%;
千分之一誤識率內,通過率99%;萬分之一誤識率內,通過率96%(標準數據集LFW, 通過率>99.82%±0.0007)。
4、超過人的表現
很多團隊都會因為機器在特定的識別分類任務中超越了人類水平而激動不已,那么都有哪些方面超過了人類呢?
例如:
- 網絡廣告,估計某個用戶點擊廣告的可能性,學習算法做到的水平已經超越任何人類了。
- 產品建議,向某人推薦電影或書籍之類的任務,今天的網站做到的水平已經超越了最親近的朋友了。
- 物流預測,旅途中從 AAA 到 BBB 開車需要多久,或者預測快遞車從 AAA 開到 BBB 需要多少時間。
- 還款預測,預測某人會不會償還貸款,這樣就能判斷是否批準貸款。
這幾個問題都是今天的機器學習遠遠超過了單個人類的表現的問題。
請注意這四個例子,它們都是從結構化數據中學習得來的,可能有個數據庫記錄用戶點擊的歷史,購物歷史數據庫,或者從A到B需要多長時間的數據庫,以前的貸款申請及結果的數據庫,這些并不是自然感知問題,不是計算機視覺問題,或語音識別,或自然語言處理任務等等。而人類在自然感知任務中往往表現非常好,所以有可能對計算機來說在自然感知任務的表現要超越人類要更難一些。
最后,這些問題中,機器學習團隊都可以訪問大量數據,其中最好的系統看到的數據量可能比任何人類能看到的都多,所以這樣就相對容易得到超越人類水平的系統,因為計算機可以檢索那么多數據,所以它可以比人類更敏銳地識別出數據中的統計規律。
除了這些問題,今天已經有語音識別系統超越人類水平了,還有一些計算機視覺任務,一些圖像識別任務,計算機已經超越了人類水平。另外,還有一些醫療方面的任務,比如閱讀 ECG 或診斷皮膚癌,或者某些特定領域的放射科讀圖任務,這些任務計算機做得非常好了,也許超越了單個人類的水平。
雖然人類對這種自然感知任務非常擅長,計算機想要達到那種水平的難度要大得多,但是在最新進展中,一個振奮人心的方面是,即使在自然感知任務中,在某些情況下,計算機已經可以超越人類的水平了!!!
要達到超越人類的表現往往不容易,但如果有足夠多的數據,已經有很多深度學習系統,在單一監督學習問題上已經超越了人類的水平,這對你,對開發的應用來說,是非常有意義的。
希望有一天你我也能夠搭建出超越人類水平的深度學習系統。
推薦閱讀
- 深度學習入門筆記(一):深度學習引言
- 深度學習入門筆記(二):神經網絡基礎
- 深度學習入門筆記(三):求導和計算圖
- 深度學習入門筆記(四):向量化
- 深度學習入門筆記(五):神經網絡的編程基礎
- 深度學習入門筆記(六):淺層神經網絡
- 深度學習入門筆記(七):深層神經網絡
- 深度學習入門筆記(八):深層網絡的原理
- 深度學習入門筆記(九):深度學習數據處理
- 深度學習入門筆記(十):正則化
- 深度學習入門筆記(十一):權重初始化
- 深度學習入門筆記(十二):深度學習數據讀取
- 深度學習入門筆記(十三):批歸一化(Batch Normalization)
- 深度學習入門筆記(十四):Softmax
- 深度學習入門筆記(十五):深度學習框架(TensorFlow和Pytorch之爭)
- 深度學習入門筆記(十六):計算機視覺之邊緣檢測
- 深度學習入門筆記(十七):深度學習的極限在哪?
- 深度學習入門筆記(十八):卷積神經網絡(一)
- 深度學習入門筆記(十九):卷積神經網絡(二)
- 深度學習入門筆記(二十):經典神經網絡(LeNet-5、AlexNet和VGGNet)
參考文章
- 吳恩達——《神經網絡和深度學習》視頻課程
總結
以上是生活随笔為你收集整理的深度学习入门笔记(十七):深度学习的极限在哪?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: x58和x79服务器性能,Intel X
- 下一篇: 电子信息工程跨考计算机武大,我考研的一些