自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

深度學習應用實踐指南:七大階段助你創(chuàng)造最佳新應用

開發(fā) 開發(fā)工具
近日來自美國海軍研究室人工智能應用研究中心的 Leslie N.Smith 總結了一份報告,本報告對希望在沒有用過深度學習算法應用軟件上進行深度神經(jīng)網(wǎng)絡嘗試的人群提供了實用建議。

近日來自美國海軍研究室人工智能應用研究中心的 Leslie N.Smith 總結了一份報告,本報告對希望在沒有用過深度學習算法應用軟件上進行深度神經(jīng)網(wǎng)絡嘗試的人群提供了實用建議。為了使項目更易于管理,這些建議被分成了幾個階段,每個階段都包含了幫助新手的大量建議和見解。

來自美國海軍研究室人工智能應用研究中心的 Leslie N.Smith 總結了一份報告

本報告針對的群體是應用程序的主題專家,但是在深度學習方面還是新手。它對希望在沒有用過深度學習算法的應用軟件上進行深度神經(jīng)網(wǎng)絡嘗試的人群提供了實用建議。為了使你的項目更易于管理,我們建議將其分成幾個階段。對于每個階段,本報告包含了幫助新手的大量建議和見解。

導語

雖然我的研究重點是深度學習 ( DL ),但是我發(fā)現(xiàn)我越發(fā)頻繁地被要求幫助沒有多少深度學習經(jīng)驗卻想要在其全新應用中嘗試深度學習的團體。這個 NRL 報告的動機來自于我注意到對所有這些群體的大部分建議和指導是相似的。因此,本報告討論了更普遍相關的深度學習應用的方面。

雖然有幾個有用的機器學習***實踐建議資源 [1-5],但與本報告所涉及的深度學習有一些差異。不過,我建議讀者閱讀并熟悉這些參考資料,因為其中包含許多寶貴的信息。此外,有很多關于軟件工程和敏捷方法學(agile methodology)(我認為讀者已經(jīng)熟悉)的***實踐資源(例如 [6,7])。本報告中最為重要的內(nèi)容可參見「深度學習」第 11 章「實踐方法論」,但我在本報告中還討論了該教材未涵蓋的若干因素和見解。

你可以在下面看到,一個深度學習的應用項目被分為若干個階段。然而,在實踐中,你可能會發(fā)現(xiàn)回到較早的階段會更有幫助。例如,在階段 3 中找到類比時,你可能會發(fā)現(xiàn)你在第 1 階段未考慮過的新指標。在項目進行時所有這些***實踐都暗示著通過迭代返回某個階段以及持續(xù)的提升。

階段 1:開始準備

在本報告中,我假設你是(或可以取得)應用程序的主題專家。你應該熟悉解決相關問題的文獻和研究,并了解***進的解決方案和性能水平。我建議你從一開始考慮這一點,如果深度學習解決方案是值得的。你必須考慮現(xiàn)有技術的性能水平很高,是否值得在本報告中提出的建議下進行逐步改進。不要因為只是看起來像***最偉大的方法而進行深度學習。你還應該考慮你是否有計算機資源,因為每個訓練一個深度網(wǎng)絡的進程可能需要幾天或幾周時間。我在自己的研究中充分利用了國防部的 HPC 系統(tǒng)。此外,你應該考慮機器學習是否合適——請記住,訓練深度網(wǎng)絡需要大量標簽數(shù)據(jù),如階段 2 中所述。

***步是量化地定義成功的情形。無論是由人類還是機器完成,如果它是成功的,你會看到什么?這有助于定義你的評估指標。想想哪些指標很重要?哪些不太重要?你需要指定在本項目成功中發(fā)揮作用的所有定量值,并確定如何權衡其中的每一個的權重。你還需要為你的指標定義目標;你的目標是否超過了人類的表現(xiàn)?你的目標將強烈影響項目進展。從數(shù)量上了解人在這一任務中的表現(xiàn)是什么將有助于指導你的目標;***進的技術與人類的表現(xiàn)相比如何?同樣,了解人類如何解決這個任務將提供有關機器如何解決其任務的有價值信息。

這些指標中的一些也可以用來設計損失函數(shù)(loss function),這有助于指導網(wǎng)絡訓練。不要僅僅使用 softmax / cross 熵/ log,因為這是最常見的損失函數(shù),盡管你應該從它們開始。從定義上看,你的評估指標是對你的應用程序重要的數(shù)量。準備好將這些指標作為損失函數(shù)的加權組成部分進行測試,以指導訓練(見階段 6)。

盡管你可能出于其強大能力而考慮深度學習,那么考慮一下如何使網(wǎng)絡的「工作」盡可能簡單。這是反直覺的,但由于它是深度網(wǎng)絡的力量,可能會激勵你嘗試。然而,網(wǎng)絡必須執(zhí)行的工作越簡單,訓練越容易,性能越好。你(或***進的技術)目前使用的啟發(fā)法/物理學是否可以在這里使用?可以預處理數(shù)據(jù)嗎?雖然網(wǎng)絡可以學習復雜的關系,但請記住:「網(wǎng)絡工作越簡單,執(zhí)行效果就越好」。所以值得花時間考慮從以前的工作你可以借鑒的內(nèi)容以及網(wǎng)絡需要為你做些什么。假設你希望改進物理學高度近似的復雜過程(即「球形?!骨闆r);你可以選擇將數(shù)據(jù)輸入深度網(wǎng)絡,以便(希望)輸出所需的結果,或者你可以訓練網(wǎng)絡以在近似結果中查找更正。后一種方法幾乎肯定會超過前者。另一方面,不要依賴人工努力來定義潛在的啟發(fā)法——最稀缺的資源是人力時間,所以讓網(wǎng)絡學習它的表征,而不需要任何固定的人工預處理。

此外,你可能需要記下你對這一***進的過程的任何假設或期望,因為它將證明自己的效果。

階段 2:準備你的數(shù)據(jù)

深度學習需要大量的訓練數(shù)據(jù)。你可能想知道「我需要多少訓練數(shù)據(jù)」。網(wǎng)絡中的參數(shù)數(shù)量與訓練數(shù)據(jù)的數(shù)量相關。訓練樣本的數(shù)量將在第 6 階段限制你的架構選擇。訓練數(shù)據(jù)越多,網(wǎng)絡就越大而準確。因此,訓練數(shù)據(jù)的數(shù)量取決于你在階段 1 中定義的目標。

除了訓練數(shù)據(jù)之外,你還需要更少的標簽驗證或測試數(shù)據(jù)。該測試數(shù)據(jù)應與訓練數(shù)據(jù)相似但不一樣。網(wǎng)絡沒有對測試數(shù)據(jù)進行訓練,但它用于測試網(wǎng)絡的泛化能力。

如果訓練數(shù)據(jù)量非常有限,則考慮遷移學習(transfer learning)[9] 和域適應(domain adaptation)[10,11]。如果這是合適的,下載最接近你的數(shù)據(jù)的數(shù)據(jù)集用于預訓練。另外,考慮創(chuàng)建合成數(shù)據(jù)。合成數(shù)據(jù)具有可以創(chuàng)建大量樣本并使其多樣化的優(yōu)點。

項目目標也指導訓練數(shù)據(jù)樣本的選擇。確保訓練數(shù)據(jù)與任務直接相關,并且它的多樣性足以覆蓋問題空間。研究每個類別的統(tǒng)計數(shù)據(jù)。例如,類別是否平衡?平衡類別的一個例子是貓與狗,而不平衡的類別是貓與所有其它哺乳動物(如果你的問題本質(zhì)上是不平衡的,向深度學習專家請教)。

什么預處理是可能的?你可以零均值并歸一化數(shù)據(jù)嗎?這使得網(wǎng)絡的工作更容易,因為它消除了學習平均值的工作。通過在訓練樣本之間建立更大的相似性,歸一化也使網(wǎng)絡的工作更容易。

如上所述,調(diào)查是否有辦法使用先驗知識或已知啟發(fā)法(heuristic)降低數(shù)據(jù)的維度。你不需要花時間人工確定啟發(fā)法,因為目標是節(jié)省人力時間,你可以讓網(wǎng)絡學習自己的表征。只要知道網(wǎng)絡必須篩選的無關數(shù)據(jù)越多,需要的訓練數(shù)據(jù)就越多,訓練網(wǎng)絡的時間就越長。所以充分利用現(xiàn)有的技術。

階段 3:找出你的應用程序與最相近的深度學習應用程序之間的相似點

專家知道不能每個項目都從頭開始。這就是為什么他們被稱為專家的原因。他們再使用以前的解決方案、搜索其他研究人員的深度學習文獻來解決問題。即使沒有人做過你想做的事情,你仍然需要利用專家的長處。

深度學習已被應用于各種應用。為了創(chuàng)建你的基線模型(baseline model)——即你的起點——你需要找到與你的應用程序相似的應用程序。你應該搜索深度學習文獻,并考慮各種應用程序解決的「問題」與你在應用程序中需要解決的「問題」進行比較。找出這些問題之間的相似之處和類比。此外,請注意你的新應用程序與深度學習應用程序之間的差異,因為這些差異可能需要在階段 6 中更改架構。

當你找到最相近的應用程序時,請查找代碼并下載。許多研究人員在開源環(huán)境中公開發(fā)表了他們的代碼,使代碼可重復用于研究。你的***個目標是在最接近的應用程序的論文中復制結果。然后在「了解」階段修改各塊代碼,看看其對結果的影響。如果你幸運的話,會有幾個代碼可用,你應該復制所有代碼的結果。這個對比將為你提供足夠的信息,以便你可以在階段 4 中創(chuàng)建基線。

有幾種「經(jīng)典」的深度學習應用程序和眾所周知的解決方案。這些包括圖像分類/對象識別(卷積網(wǎng)絡)、處理如語言處理的順序數(shù)據(jù)(RNN/LSTM/GRU)和復雜的決策制定(深度強化學習)。還有一些常見的其它應用,如圖像分割(image segmentation)和超分辨率(super-resolution)(全卷積網(wǎng)絡)以及相似匹配(孿生網(wǎng)絡/Siamese network)。附錄 A 列出了許多最近的深度學習應用程序和它們使用的架構以及描述應用程序的論文的鏈接。這些可以提供一些想法,但不應該作為尋找深度學習應用程序的來源。你應該仔細搜索谷歌學術(https://scholar.google.com)和 arXiv(https://arxiv.org)以獲取深度學習的應用程序。

階段 4:創(chuàng)建簡單的基線模型

開始時始終保持簡單、小巧和容易。使用比你預期需要的更小的架構。從共同的目標函數(shù)開始,使用超參數(shù)的常用設置,僅使用部分訓練數(shù)據(jù)。這是一個能夠部分實踐敏捷軟件方法論的好地方,如簡單設計、單元測試(unit testing)和簡短發(fā)布(short release)?,F(xiàn)在只需要獲得基本功能,并在階段 6 中進行改進。也就是說,計劃小步驟、持續(xù)更新、并迭代。

只選擇一種常見的框架,如 Caffe、TensorFlow 或 MXnet。計劃僅使用一種框架和一種計算機語言來***限度地減少由不必要復雜度帶來的錯誤。選擇框架和語言可能會受到在階段 3 中執(zhí)行的復制工作的驅(qū)動。

如果網(wǎng)絡將成為較大的框架的一部分,那么這里是檢查框架 API 正常工作的好地方。

階段 5:創(chuàng)建可視化和調(diào)試工具

了解模型中發(fā)生的情況將會影響項目的成功。木匠有一個說法「測量兩次,切割一次」。你應該「編碼一次,測量兩次」。除了評估輸出外,你還應該可視化你的架構并測量內(nèi)部實體(internal entity),以了解為什么獲得這樣的結果。離開模型診斷,你將很難解決問題或提高性能。

你應該對與高偏差(收斂于錯誤的結果)對高方差(收斂差)相關的問題有一個一般的了解,因為每種類型的問題都有不同的解決方案;例如,你可能會用更大的網(wǎng)絡修復高偏差問題,但是你可以通過增加訓練數(shù)據(jù)集的大小來處理高方差問題。

可視化你的模型,以便你可以盡可能多地監(jiān)視架構的進化過程。在可能的情況下,為每次代碼修改設置單元測試(unit test)。你應該將訓練錯誤與測試錯誤進行比較,并將兩者與人工表現(xiàn)進行比較。你可能會發(fā)現(xiàn)你的網(wǎng)絡會表現(xiàn)得很奇怪,你需要確定架構進化中發(fā)生的事情以及原因。首先開始調(diào)試最差的問題。了解問題是否與訓練數(shù)據(jù)、架構或損失函數(shù)有關。

請記住,誤差分析會試圖解釋當前性能與***性能之間的差異。銷蝕分析(ablative analysis)試圖解釋一些基線表現(xiàn)與當前表現(xiàn)之間的差異。使用一種或另一種或兩種分析可能是有用的。

使用 TensorFlow 作為框架的一個動機是它有一個名為 TensorBoard 的可視化系統(tǒng),它是框架的一部分。你可以從 TensorFlow 輸出必要的文件,TensorBoard 可用于可視化你的架構,并監(jiān)控權重和特征映射(feature map),探索網(wǎng)絡創(chuàng)建的嵌入空間(embedded space)。因此,在框架中可用調(diào)試和可視化工具。如果使用其它框架,你需要找到這些工具(通常可以在線獲得)或創(chuàng)建自己的工具。

階段 6:微調(diào)你的模型

這個階段可能需要大部分時間。你應該廣泛地實驗。并且不要僅使用你認為會改善結果的因素,而是嘗試改變每一個因素以學習當其變化時發(fā)生了什么。改變架構設計、深度、寬度、路徑、權重初始化、損失函數(shù)等。更改每個超參數(shù),了解提高或降低數(shù)值時的效果。我建議使用學習速率范圍測試(learning rate range test)[12] 了解你的網(wǎng)絡在不同學習速率下的行為。可以進行類似的程序來研究其它超參數(shù)的影響。

嘗試各種正則化方法,如數(shù)據(jù)增強(augmentation)、dropout 和權重衰減。泛化(generalization)是深度網(wǎng)絡的關鍵優(yōu)勢之一,所以一定要測試正則化方法,以便***限度地提高概括不可見情況的能力。

你應該測試損失函數(shù)。你在基線中使用了簡單的損失函數(shù),但也創(chuàng)建了多個你關心并達到(定義)成功的評估指標。評估指標和損失函數(shù)之間的唯一差異在于用于測試數(shù)據(jù)的測量指標和用于訓練網(wǎng)絡的訓練數(shù)據(jù)的損失函數(shù)。更復雜的損失函數(shù)可以產(chǎn)生更成功的結果嗎?你可以向損失函數(shù)添加加權項,以反映每個指標對結果的重要性。但是要非常小心,不要因不重要的標準而使損失函數(shù)復雜化,因為它是你模型的核心。

早些時候,你發(fā)現(xiàn)應用程序與現(xiàn)有的深度學習應用程序之間的類比,并選擇最接近的作為你的基線?,F(xiàn)在比較第二個或第三個最接近的應用程序。如果你按照另一個類比并使用該架構,會發(fā)生什么?你能設想結合兩者來測試嗎?

一開始,你應該從一些容易的取得成功。隨著你不斷深入,提高性能將變得更加困難。你在階段 1 中定義的目標將決定你希望的性能改進的程度?;蛘吣憧赡芟胍薷闹岸x的目標。

階段 7:端到端訓練、集成與其他復雜度

如果你有時間和預算,你可以探索更復雜的方法,實際上有很多復雜的方法可供選擇。有大量深度學習的文獻,每天都在出現(xiàn)更多的論文。大多數(shù)這些論文以一種或另一種方式宣布了新的***進的結果,有些可能幫助你提升性能。這個部分可以單獨作為一份長的報告,因為有這么多架構和其它選擇可以考慮,但如果你處于這個階段,請考慮與具有大量深度學習專長的人交談,因為在這個階段的建議可能對你的應用程序是***的。

但是,你可能會考慮兩種常用的方法:端到端的訓練和集成。

作為一般規(guī)則,連接系統(tǒng)的端到端訓練將優(yōu)于具有多個部分的系統(tǒng),因為具有端到端訓練的組合系統(tǒng)允許每個部分獨立適應任務。因此,如果與你的應用相關,考慮這些組合的部分是有用的。

各種學習器的集合(即裝袋(bagging)、提升(boosting)、堆疊(stacking))也可以提高單個模型的性能。但是,這將需要你訓練和維護集合中的所有學習器。如果你的性能目標值得這樣做,那么值得測試一個集合的方法。

總結

當你在以前沒有使用過深度學習的應用程序上實驗時,本報告為你提供了許多因素作為參考。并不是每個項目都與這些因素相關,但我希望本文能涵蓋在項目期間你應該考慮的大多數(shù)因素。祝你成功!

【本文是51CTO專欄機構機器之心的原創(chuàng)譯文,微信公眾號“機器之心( id: almosthuman2014)”】

戳這里,看該作者更多好文

責任編輯:趙寧寧 來源: 51CTO專欄
相關推薦

2018-04-11 14:13:29

物聯(lián)網(wǎng)信息技術互聯(lián)網(wǎng)

2019-07-04 14:25:53

機器學習金融大數(shù)據(jù)

2018-09-27 11:48:51

2011-08-01 09:51:20

云計算

2009-12-01 14:35:06

Linux忠告

2009-06-23 14:12:00

javaJSP絕招

2024-07-31 16:04:14

2013-03-01 15:36:08

企業(yè)級移動應用2013

2016-10-12 19:14:31

2020-11-23 18:39:54

容器Kubernetes架構

2015-08-06 08:58:08

CA Technolo應用經(jīng)濟

2017-07-05 14:21:30

框架TensorFlowTheano

2022-11-07 14:31:26

物聯(lián)網(wǎng)IoT

2010-03-26 11:01:31

災備虛擬化

2017-03-01 13:36:41

TensorFlowTheano框架

2020-02-25 15:04:48

深度學習編程人工智能

2016-11-08 22:47:09

大數(shù)據(jù)英國政府大數(shù)據(jù)應用

2017-09-04 18:02:58

應用程序APP移動設備

2022-12-12 12:34:47

2014-08-13 09:17:41

大數(shù)據(jù)應用案例
點贊
收藏

51CTO技術棧公眾號