Google推出深度學習調優手冊,不到一天狂攬1200星,Hinton轉發|GitHub

豐色 Pine 發自 凹非寺

各位煉丹er們,調參是你們最頭疼的環節嗎?

是你們最頭疼的環節嗎?

現在,一份上線不到一天就狂攬1200+星的《深度學習調優手冊》來了。

來了
數字還在飛速上漲,估計馬上就要登熱榜了

這可能是市面上首個如此全面的煉丹寶典,由5位Google工程師大佬合作總結。

合作總結

這些大佬們都已在深度學習領域「踩坑」多年、工作成果應用從語音識別到天文學都有涉獵。

為了這份手冊,他們總結了自己在訓練網路、帶新工程師、以及和同事交流時get到的各種經驗和技巧。

連「深度學習之父」Geoffrey Hinton都來盛讚:

來看看具體都有些什麼

來看看具體都有些什麼。

Google煉丹寶典,聚焦超參數調整

本手冊適用範圍為:對系統地最大化深度學習模型性能感興趣的工程師和研究人員,包括個人和團隊。

默認翻開這本手冊的都掌握了機器學習基本知識和深度學習概念。

其中內容主要聚焦超參數調整,因為這是作者們在工作中耗時最多、收穫也最多的環節。

具體一共分為四大部分:

開始新項目

第一部分從訓練一個新的模型開始,教大家如何選擇:

(1)模型架構(2)最佳化器(3)batch size(4)初始配置。

比如,在選擇最佳化器時,由於所有類型的機器學習問題和模型架構中都不存在最好的那一個,那麼我們就堅持選擇時下最流行、最成熟的那一個(尤其對於新項目來說)。

這裡作者們推薦(但不限於):SGDM和更通用的Adam、NAdam,特別提醒:Adam有4個可調超參數 ,它們都很重要。

而在選擇batch size時,需要注意它只是決定訓練速度,不應該直接用於調整驗證集的性能。

因為有研究表明,只要所有超參數都經過良好調整(尤其是學習率和正則化超參數)並且訓練步數足夠,任何batch size值都應該可以獲得相同的性能。

通常來說,理想的batch size是可用硬體支持的最大值。

具體如何選擇,手冊在這裡作出了非常詳細的解釋:

初始配置方面,指導原則是找到一個

初始配置方面,指導原則是找到一個簡單、相對快速、資源消耗相對較低的配置,好獲得一個「合理」的結果。

所謂簡單,就是切記不要在開始時就添加一些花裡胡哨的東西,現階段沒用不說還浪費時間。

比如在找到一個合適的學習率之前,就不要想著各種花式的decay schedule。

科學提高模型性能

本部分的經驗建立以下兩點前提之上:

  • 我們已經有一個完全運行的訓練pipeline以及能夠獲得合理結果的配置;

  • 有足夠的計算資源用於進行有意義的調整實驗、用於並行運行多個訓練項目。

具體一共分為7個小部分:

第1部分標題為「逐步調整策略」,即從一個簡單的配置開始,逐步進行改進,需要重複以下四個步驟:

  • 為下一輪實驗確定範圍適當的目標;

  • 設計並運行實驗,朝著目標取得進展;

  • 分析結果;

  • 考慮是否推出新的最佳配置。

後續部分就是圍繞上面四個步驟進行詳細的展開,超參數如何選擇和修改也在本節作為重點出現。

比如不管我們的實驗目標是什麼,我們都需要將超參數分為三類:科學超參數、nuisance超參數和固定超參數。

如果我們的目標是「確定具有更多隱藏層(hidden layer)的模型是否會減少驗證錯誤」,那麼隱藏層數就是一個科學超參數,這是我們在設計新實驗時需要首先確定的。

需要修改的主要是第二類。

當我們進行到第三步,也就是分析結果時,需要額外問自己以下幾個問題:

搜尋空間是否足夠大?是否從裡面取樣了足夠多的點?該模型是否存在最佳化問題?我們可以從最佳試驗的訓練曲線中學到什麼?

具體怎麼判斷和解決這些問題,手冊也有非常詳細的解釋。

最後,當我們確定好了應該調整哪些超參數,就可以善用貝葉斯最佳化工具了。

不同工作負載如何設置訓練步數

在這部分,手冊根據工作負載的不同分了兩部分來展開,分別為:

  • 工作負載為計算密集型(CPU密集型)時,訓練步數如何設置?

  • 工作負載為非計算密集型(IO密集型)時,訓練步數如何設置?

通俗來講,計算密集型與非計算密集型就是受不受計算量的限制。而我們要解決的問題,就是無論在哪種情況下,如何讓模型都能達到最佳效果。

也不多說廢話,直接舉個栗子🌰來看寶典中是如何講的?

當工作負載受計算限制時,也就是說計算資源成為主要的限制因素,首先面臨的問題就是:

如果訓練損失在無限期的改善,有沒有必要這樣一直訓練下去?

寶典給出的答案是:沒有!多輪調整最明智,1~3輪最實用。

並且還附有兩輪調整的具體建議:

  • 第1輪:較短的運行時間以找到好的模型和最佳化器超參數

  • 第2輪:不要在良好的超參數點上長時間運行以獲得最終模型

    (詳見手冊)

關於當工作負載不受計算限制時,調整的部分主要圍繞max_train_steps,具體這裡就不再贅述。

其他補充

到這裡,寶典差不多就接近尾聲了,Google研究員們還貼心地給出了一份pipeline訓練的補充指南,內容包括:

  • 最佳化輸入pipeline

  • 評估模型性能

  • 保存檢查點並回顧性地選擇最佳檢查點

  • 建立實驗跟蹤

  • Batch規範化實現細節

  • multi-host pipelines的注意事項

在「最佳化輸入pipeline」部分,寶典列出了導致輸入pipeline的一些常見原因,並給出了一些小tips。

關於「評估模型性能」,也給出了詳細的操作步驟。

……

……

寶典全文的連結也已附在文末,感興趣的朋友可以扔進收藏夾了。

mem it~

mem it~

關於作者

一共4位Google在職大佬,1位哈佛的在讀博士生(以前也在Google工作了5年多)。

Varun Godbole,目前是GoogleAI的一名軟體工程師,主要經驗集中在建模和構建處理大型資料集的基礎設施方面。

之前,他的研究領域是計算機視覺和醫學圖像的交叉點,合著的論文「International evaluation of an AI system for breast cancer screening」曾登上Nature。

George E. Dahl,是Google大腦團隊的研究科學家,他的研究集中在高度靈活的模型上,並且他還對語言、感知資料以及化學、生物和醫學資料的應用感興趣。

George在多倫多大學攻讀博士學位時,主要解決語音識別、計算化學和自然語言文字處理等問題的深度學習方法,其中包括一些首次成功的深度聲學模型。

Justin Gilmer,Google大腦的研究科學家,他在Google Scholar上引用已經破萬,主要研究方向為深度學習、組合型、隨機圖論。

量子位前不久的《幾十年數學難題被Google研究員意外突破!曾因不想搞數學自學程式設計,當年差點被導師趕出門》講的正是這位科學家。

Christopher Shallue,目前正在攻讀哈佛大學的天體物理學博士學位,在此之前,他曾在Google工作了5年10個月。

在Google工作的那段時間,Shallue有3年多的時間在Google大腦擔任機器學習研究工程師,研究的內容包括:

  • 開發識別系外行星的機器學習技術(包括神經網路首次發現行星)

  • 加快超級計算機規模的機器學習培訓

  • 實證研究機器學習中的最佳化演算法和超參數調整

  • TensorFlow 中的開源參考模型實現(圖像字幕、句子嵌入、系外行星探測)

Zachary Nado,Google大腦的研究工程師,本科就讀期間,曾先後在Google和SpaceX實習,研究領域包括資料探勘與建模、機器智慧、NLP等。

寶典傳送門

寶典傳送門:

https://github.com/google-research/tuning_playbook

相關文章

YOLO 內捲時期該如何選模型?

YOLO 內捲時期該如何選模型?

YOLO 新版本那麼多,到底選哪個? 前不久看到了美團上的宣傳,更新發布了新版 YOLOv6,還放出了 arxiv 論文,更新了之前的 N/...