1. 程式人生 > >不能更通俗易懂的機器學習名詞解釋

不能更通俗易懂的機器學習名詞解釋

 

train? valid? or test?

機器學習最明顯的一個特點是需要大量的資料。特別對監督學習來說,就是需要大量的帶標籤資料(labeled data)。

很多入門的朋友很快就會遇見模型訓練和測試這兩個階段,進而也就瞭解到帶標籤資料是要被劃分成兩個部分的:訓練集(training set)與測試集(test set)。這兩個概念也很直觀,大部分朋友非常快就能接受。

可是到後面,在我們需要為機器學習模型調參的時候,半路殺出來了個交叉驗證(cross validation)階段,這個對應的資料集也有個名字,叫做驗證集(validation set)。

據我觀察,很多入門機器學習的朋友在這個時候就會感到一頭霧水,並且非常困惑:咋又冒出來了個驗證集啊?我們不是有個測試集了嗎?直接在那上面做實驗不就好了麼?又劃分多一個數據集,那就使得能用於訓練和測試的資料都變少了,驗證集是那方神聖啊?...

這裡我給你們來個非常形象的類比!別眨眼!

訓練集 → 題解大全

驗證集 → 模擬考試

測試集 → 高考

是不是非常形象易懂呢?(得意臉)

呃?搞不懂為什麼是這樣的對應關係?別急我還沒說完呢。

機器學習演算法是個笨學生,他沒法直接從人類教師那裡學會抽象的概念,於是唯一有效的策略就是天賦不足勤來補:玩命刷題! 想想看帶標籤的訓練資料,是不是很像你平時做的習題冊呢? 資料本身是題目,標籤是正確答案。所以機器學習演算法能夠通過大量做題來學會抽象概念(但是這個傻孩子實際上只學會了怎麼解答與特定抽象概念相關的問題)。

你說你學會了東西,但空口無憑啊,你得通過考試來證明自己!於是就有了測試集。測試集相當於考試的原因是,你只能看到題目(資料)而無法得知答案(標籤)。你只能在交卷之後等老師給你打分。

於是就有朋友發問了:“那我一遍一遍考試來證明自己不就好?我大學掛科補考還少麼?”。首先心疼你一秒鐘。然後請你思考這個問題,如果那場考試是高考怎麼辦?你耗得起嗎?

所以我們需要模擬考試,也就是驗證集。我們可以獲得驗證集的標籤,但是我們假裝得不到,讓自己以考試的心態去面對,過後也就能通過自己對答案來了解自己到底學會了多少,而這種幾乎沒有成本的考試我們想進行多少次都行!這就是驗證集存在的意義!你的模型只能在測試集上面跑一次,一考定終身!

我們需要驗證集的真正原因是:防止機器學習演算法作弊!我們訓練一個機器學習模型不是為了讓它在那有限的帶標籤資料 high 個夠,而是要將模型應用於真實世界。絕大多數情況下,我們無法直接從真實世界獲得答案,我們能收集到的資料是沒有標籤的裸資料,我們需要高效準確的機器學習模型為我們提供答案。不能直接使用測試集不是因為我們負擔不起在測試集上跑模型的成本(事實上幾乎為0),而是因為我們不能洩露測試集的資訊。試想一下,假如你搞到了真正的高考題和答案,你一遍又一遍地去做這套題目,會發生什麼?也許你會成為高考狀元,可是你真的學會這些知識了嗎?你能夠再去做一套高考題並且拿高分嗎?你能夠去當家教向學弟學妹傳授你的知識和解答他們的問題嗎? 偷窺到了測試集的機器學習模型就是廢品,沒有人需要它,它也做不了任何有用的事情。

切記,你的機器學習模型只能在測試集上跑一次,一考定終身!

切記,你的機器學習模型只能在測試集上跑一次,一考定終身!

切記,你的機器學習模型只能在測試集上跑一次,一考定終身!

切記,你的機器學習模型只能在測試集上跑一次,一考定終身!

切記,你的機器學習模型只能在測試集上跑一次,一考定終身!

超級重要的事情說五次還嫌少,我得加粗了才行。哦還得加大字號,我怕你近視眼看不見!

都說到這個地步了,順便借這個類比說說過擬合(overfit)和欠擬合(underfit)的事吧。過擬合的模型是個真正的書呆子,玩命刷題解大全(Demidovich),但是隻記住了所有的習題和答案,去做模擬考試就直接傻掉了。欠擬合的模型就是個不聽課還懶惰的學渣,連習題冊上的題目都搞不懂,別說模擬考試了。高考?呵呵呵。

accuracy? precision? recall?

accuracy 就是百分制的考試分數,我是想不到要怎麼解釋了。(摳鼻)

precision 和 recall 倒是有兩個非常好的意象。

這裡先說一下 precision 和 recall 哪來的。想象你在做一套全都是判斷題的考試題,你的答案總會跟正確答案有些出入(學神,學霸和 overfit 的書呆子一邊去)。

真陽性、假陽性、假陰性和真陰性

對比上面的表格很容易看出,你做對的題會對應著 真(True) 這個字首,對了就對了,不管啦。而你做錯的題則帶了 假(False) 的字首,做錯的題分兩種:你回答真但答案是假,這是假陽性;你回答為假但是答案為真,則為假陰性。很明顯,陽性陰性是對應著你的回答。

那我們為啥需要這亂七八糟的東西?直接用accuracy來衡量不就好了?

假設你有一個大小為1000的帶布林標籤資料集, 裡面的“真”樣本只有100個不到,剩下的都是“假”樣本。你說這沒什麼啊? 別急,想象你訓練了一個模型,不管輸入什麼資料,它都只給出“假”的預測。這顯然是個失敗模型,也就比停了的鐘好一點(哦不對,是五十步笑百步),但是它在你這個資料上可能能拿到90分以上哦? 很明顯,這個時候accuracy已經失去它的作用了。是時候讓亂七八糟的概念上場了。

precision:嚴謹認真的普通日本人

多做多錯 少做少錯 不做不錯precision 和 recall 一般只在有傾斜資料集的時候出來玩。我們一般把數量較少的樣本叫陽性樣本,一般情況下我們也只關心陽性樣本的預測結果。最常見的傾斜資料例子是癌症檢查,得了癌症的不幸的人就是陽性樣本,相對於健康的大眾,他們是稀少的存在。

精確率 等於 真陽性 與 所有被預測為陽性的樣本 之比。

為什麼說多做多錯少做少錯的理由很明顯了吧? 如果模型預測為陽性的樣本越少,那麼它犯錯的可能性也就越小,也就是說精確率越高了。

思考題:一個精確率超級高的模型有什麼問題?

recall:威武霸氣的川普移民禁令

寧可錯殺,不能放過

召回率 等於 真陽性 與 所有真正的陽性樣本 之比

冤枉你就冤枉你咯,不服來咬我啊? —— 川普

川普爸爸近來又搞了個大新聞,多國移民禁止入境。理由當然是防止恐怖分子混入美利堅大地啦,你們這些國家的人素質太差動不動搞恐怖襲擊,我實在沒精力去一個個查,所以你們通通別來了,我樂得輕鬆。

recall 的公式裡並沒有假陽項,這說明它不關心自己冤枉了多少人,只要假陰的數量越少越好,恐怖分子一定不能漏了。

思考題:召回率與精確率是如何互相掣肘的?

wiki 的配圖也很棒,對比看看吧:

learning rate?

原本計劃弄兩個動圖出來,可是 matplotlib 和 moviepy 死活匯出不了gif(而且知乎文章也不支援),想玩的自己複製程式碼吧。Github Gist 很簡陋,不過這種東西也沒必要做複雜是不是2333

原始碼連結:http://t.cn/RSeGsf0

學習率通常都會用步子的大小來形象比喻:

步子邁大了容易扯著蛋... 你會得到一個發散思維很強的模型...

步子走得太小啊... 你聽說過閃電麼?

好了正經點(一臉嚴肅)。計算完梯度以後,模型就需要更新它的引數了。梯度指出了一個讓loss提升最快的方向(沒錯是提升),學習率控制我們應該朝反方向走多遠,學習率太大了可能會越過最低點,變得難以收斂甚至會發散。學習率調低一般就能迴避overshoot的問題了,但是調太低會讓模型半天不挪窩,於是模型會收斂得很慢。這對小規模的機器學習問題影響不大,但是這個大資料時代是無法接受的。針對當前問題找一個合適的學習率很重要(機器玄學入門第一步),可惜一般只能靠猜靠試,現在有一些能幫你調整的學習率的演算法,太超綱就不說了。

雷鋒網相關閱讀:

“迴歸分析”真的算是“機器學習”嗎?

你在資料預處理上花費的時間,是否比機器學習還要多?

 

開發者專場 | 英偉達深度學習學院現場授課

英偉達 DLI 高階工程師現場指導,理論結合實踐,一舉入門深度學習!

課程連結:http://www.mooc.ai/course/90

 

原文地址:http://tech.sina.com.cn/roll/2017-06-14/doc-ifyhfhrt4144419.shtml