1. 程式人生 > >一起學習《MACHINE LEARNING YEARNING》(1)

一起學習《MACHINE LEARNING YEARNING》(1)

吳恩達老師的網紅新書《Machine Learning Yearning》開放下載啦,趕緊下載來學一波~

附上新書官網:

www.mlyearning.org

英語水平拙略,所以大概翻譯了一下,主要是方便自己學習時能做個筆記,不喜勿噴,謝謝。

 1.Why Machine Learning Strategy

假設你正在構建一個為貓咪愛好者提供貓咪圖片的機器學習應用,使用神經網路建立計算機視覺系統來發現圖片中的貓咪,但不幸的是,你的學習演算法準確率不是很好,你面臨巨大的壓力來對演算法進行改進,該怎麼做呢?

你的團隊有很多ideas,比如說:

1.獲取更多資料:收集更多貓咪的圖片 2.收集更多各種各樣的訓練集:比如說,不尋常花色的貓咪、不尋常姿勢的貓咪以及相機對應各種引數下的貓咪圖片 3.通過多輪梯度下降迭代,花更多的時間訓練演算法 4.構建一個更大的神經網路,有更多的層/隱藏層/引數 5.嘗試小一點的神經網路 6.嘗試著使用正則化(如L2正則化) 7.修改神經網路的架構(啟用函式、隱藏單元的數量等)

如果你從這些ideas中選擇了好的idea,那麼你會建立一個領先的貓咪圖片平臺並獲得成功,如果你選擇了不好的idea,你可能會浪費數月的時間,你會怎麼選呢?

這本書會告訴你答案,大多數ML問題都提供了線索,你根據線索可以瞭解到什麼idea是有用的,而哪些不那麼好。學會發現線索會節省數月甚至數年的開發時間。

2.How to use this book to help your team

讀完這本書,你將對如何決定機器學習專案的技術方向有一個深刻的認識。

3.Prerequisites and Notation

如果你有機器學習或監督學習方面的知識,你就能讀懂這本書。

假設你很熟悉監督學習:使用已標記的例項(x,y),學習一個函式將x對映到y。監督學習演算法包括:線性迴歸、邏輯迴歸和神經網路。機器學習有很多形式,但如今機器學習的實踐價值都來自於監督學習。

將會頻繁地提到神經網路(也叫做深度學習),讀本書只需要對神經網路有基礎理解即可。

4. Scale drives machine learning progress

關於深度學習(神經網路)的概念數十年前就提出了,為什麼這些概念現在才興起呢?

取得進展的2個最強推動者:

1.資料可獲取:人們更多地使用電子裝置,這些裝置產生的海量資料可以滿足我們的學習演算法 2.計算規模增大:現在可以用海量資料訓練足夠大的神經網路

詳細地說,即便你積累了更多資料,傳統學習演算法的效能隨著資料量增多而趨於穩定了。這意味著效能曲線趨於平坦了,也就是說演算法的效能不會隨著更多地資料而改進了。

對於同一個監督學習任務,如果你訓練一個小的神經網路,將會得到些許效能提升:

(這裡小的神經網路指的是隻有少數隱藏層/結點/引數)

如果訓練更大的神經網路,就會得到更好的效能提升:

因此當你(1)訓練一個很大的神經網路(Large NN),(2)擁有海量資料,你就能得到最好的效能。

雖然其他的細節,像神經網路結構也很重要(並且有了很多創新),但改進演算法效能的跟可靠方式是(1)訓練更大的網路(2)獲得更多的資料。

但是做到(1)和(2)是很困難的,本書會討論這些細節,我們將從一些通用策略開始講起,這些策略對於傳統學習演算法和神經網路都很有用,並且為構建深度學習系統逐步建立起最先進的策略。

Setting up development and test sets

5.Your development and test sets

回到最初的貓咪圖片的例子,你發行了一個app,使用者上傳各種事物的圖片到app上,你希望自動發現貓咪的圖片。

你的團隊從網路中獲取了很多貓咪的圖片(positive example)和其他圖片(negative example),將資料劃分成70%訓練集和30%的測試集,使用這些資料建立了一個探測器,對於訓練集和測試集都有很好的效果。

但是當你將分類器構建在app上,你發現它的效能很差!

發生了什麼?

你發現,使用者上傳的圖片和你構成資料集的圖片很不一樣:使用者使用手機上傳圖片,這些圖片解析度低、模糊且光線不足。因為你的訓練集/測試集是從網上下載的圖片,你的演算法在你所關心的分佈(手機圖片)上泛化能力不好。

在大資料時代到來前,機器學習的一個常用規則是使用隨機70%/30%來劃分訓練集和測試集。這個方法能用,但它在越來越多的應用上是一個bad idea,這些應用的訓練分佈和你期望的實際分佈是不同的。

我們通常定義:

1.訓練集:用來訓練學習演算法 2.驗證集:用來調參、選擇特徵以及做其他有關於學習演算法的決策,有時也叫做留存交叉驗證集。 3.測試集:用來評估演算法效能,但是不做引數或其他關於演算法決策的調整。

當你定義了驗證集和測試集,你的團隊會嘗試很多ideas,比方採用不同的學習演算法引數來比較哪種效能最好,驗證集和測試集能使團隊更快地觀察演算法執行的情況。

因此,你應當這麼做:

選擇驗證集和測試集來反映你未來期望得到的、並且在其上有好的表現的資料

 換句話說,測試集不能只是簡單的30%,特別是你預期未來的資料(手機上的圖片)可能和訓練集(網路上的圖片)所用的資料不同。

如果你還沒有釋出app,那可能就沒有使用者,也就不能得到那些精確反映未來預期的資料,不過你可以這樣得到近似的資料:叫你的朋友幫忙拍一些圖片發給你,然後當你的app上線後,你就能得到真實使用者資料構成的驗證集和測試集。

如果你無法獲得任何近似資料,也許你可以使用網路圖片作為開始,但需要意識到風險---這也許會讓系統的泛化能力不好。

需要通過評判來決定在驗證集和測試集的投入多少。但是不要假設訓練分佈和測試分佈相同。選擇那些你最終期望在其上執行的好的測試樣例,而不是那些你碰巧得到的資料。

圖片來源:Machine Learning Yearning