深度學習成長的煩惱
【編者按】 深度學習盡管對當前人工智能的發展作用很大,然而深度學習工作者并非一帆風順。Chris Edwards發表于Communications of the ACM的這篇文章,通過不同的深度學習研究人員的現身說法,列舉了深度學習在不同場景下面臨的一些挑戰以及目前的解決方案。CSDN翻譯此文,希望對國內深度學習從業者有借鑒意義。
理論和計算機硬件的進步促使神經網絡成為在線服務的核心部分,如微軟的Bing,采用神經網絡驅動圖像搜索和語音識別系統。這些公司提供這樣的能力是希望在未來該技術能驅動更先進的服務,因為他們擴展了神經網絡來處理更復雜的問題。
神經網絡從50年前的最初設想,到成為信息技術應用的公認部分,花了很長的時間。上世紀90年代,在一陣混亂的興趣之后,部分支持通過發展高度專業化的集成電路設計來克服傳統計算機性能的不足,神經網絡在各類算法中脫穎而出,比如在圖像處理中的支持向量機以及語音識別中的高斯模型。
舊版簡單的神經網絡最多使用三層結構,分為輸入層、中間“隱藏”層和輸出層。神經元跨層高度關聯。每個神經元將其輸出饋送到下一層的每個神經元。該網絡是這樣訓練的:迭代地調整每個神經元施加到其輸入的數據,來盡量減少整個網絡的輸出與所希望的結果之間的誤差。
雖然神經科學表明人腦具有涉及多個隱藏層的更深結構,但是這類系統的早期實驗結果比淺層網絡更糟糕。2006年,Geoffrey Hinton和Ruslan Salakhutdinov在多倫多大學的工作使得深度架構的研究獲得一個顯著的提升。他們開發的訓練技術能更有效地用于包含多個隱藏層的網絡。 其中一種技術是“預訓練(pre-training)”,用于在移動之前獨立地調整每一層的輸出以優化整個網絡的輸出。該方法使得上層能夠提取可用于下面的隱藏層有效地進行數據分類的高級特征。
即使訓練有所改善,規模還是深度學習的一個問題。充分互連的神經元,特別是在較高的層,需要巨大的計算能力。用于圖象處理應用程序的第一層可能就需要分析一百萬個像素。深度網絡的多個層連接的數量將會大幾個數量級。總部位于瑞士Manno的Dalle Molle Institute人工智能研究院(IDSIA)研究員Dan Cire?an認為,“每個圖像有幾十億甚至上千億的連接待處理”,訓練這樣的大型網絡需要數千萬億(quadrillions)的浮點運算。
Cire?an這樣的研究人員發現,可以使用非傳統的計算機體系架構來大規模加快處理速度。 諸如AMD和nVidia公司的圖形處理單元(GPU)提供了并行執行上百個浮點運算的能力。 先前加快神經網絡訓練的努力圍繞較慢但更容易編程的集群工作站。在一個深度神經網絡訓練用于尋找生物細胞分裂視覺特征的實驗中,Cire?an認為在傳統的CPU上訓練階段花費五個月,“它在GPU上只花了三天時間。”
非死book人工智能研究技術總監、紐約大學數據科學中心創始人Yann LeCun認為:“以前,神經網絡沒有打破識別連續語音的記錄;它們還不夠大。當人們更換為深度神經網絡的高斯模型,誤差率又一路下跌。”
根據他們的介紹,深度神經網絡顯示了超過三分之一的改善,將帶有少量背景噪聲的語音識別的錯誤率從35%減小至25%以下,并且進一步優化還有更大的改進。
這種學習形式有一些限制。總部位于倫敦、在2014年年初被谷歌以4億美元收購的DeepMind,使用電腦游戲來評估深度神經網絡面對不同類型問題的性能。谷歌研究員Volodymyr Mnih認為,該系統無法處理類似穿越迷宮這樣的情況,即獎勵只在成功地完成若干階段后發放。在這些情況下,當網絡嘗試各種隨機初始操作并且失敗時,基本什么都學不到。深度神經網絡在如Breakout和Virtual Pinball等游戲中表現比較好,這些游戲成就可能會推遲,但它可以從隨機響應學習。
在商業應用中部署深度網絡,團隊都轉向定制計算機的設計,使用現場可編程門陣列(FPGA)。這些實現的自定義電子電路使用可編程邏輯查找表,硬連線算術邏輯單元優化數字信號處理,以及存儲器單元矩陣來定義所有這些元件如何連接。
中國搜索引擎和網絡服務公司百度(使用深度神經網絡來提供語音識別、圖像搜索,并服務于語境廣告)決定服務器生產中使用FPGA而不是GPU。百度高級架構師Jian Ouyang表示,雖然個別的GPU提供峰值浮點性能,在百度使用的深度神經網絡的應用中,相比相同的性能水平FPGA消耗更少的功率,并可以安裝在刀片式服務器上,完全由連接在主板上的PCI Express總線供電。 FPGA的一個主要優點是:因為一個計算得到的結果可以被直接饋送到下一個而無需在主存儲器臨時保存,存儲器帶寬需求比使用GPU或CPU實現時低得多 。
“使用FPGA,我們不需要修改服務器設計和環境,所以很容易大規模部署。我們需要許多功能來支持那些無法在同一時間部署到FPGA中的。但是,我們可以使用他們的可重配置在FPGA中按需移入和移出功能。重構時間小于10μs。” Ouyang說。
百度團隊通過使用一個簡化的浮點引擎來進一步節省空間。“處理器提供的標準浮點實現可以處理所有可能的異常。但以我們的情況來看,我們并不需要處理所有IEEE[754]標準以外的情況。”
還有,設法使用更有效的處理器,研究人員正試圖利用分布式處理來構建更廣泛的深度學習網絡以應對更大的數據集。通過網絡傳送的等待時間嚴重影響訓練速度。然而,與一個提供更低延遲的從以太網絡到互聯結構的轉換一起重新整理訓練算法,使得來自斯坦福大學的團隊在2013年為多個并行的GPU實現近線性的加速。在最近的工作中使用CPU集群而不是GPU,微軟開發出一種放松同步要求的訓練方法,允許跨數千機器執行。
更具擴展性的網絡使得百度有可能實現一個名為Deep Speech的“端到端”語音識別系統。該系統不依賴于傳統語音處理算法的輸出,例如使用隱式的馬爾可夫模型來提高有噪聲輸入時的性能。在一個噪音頻發的數據集上,相比于2014年年底最佳商業系統錯誤率可達到的30.5%,它將單詞識別的錯誤率減少到剛剛超過19%。
然而, 預處理數據以及合并從多個較小網絡得到的結果比純粹依靠神經網絡更有效。 Cire?an已聯合使用圖像扭曲和小網絡“委員會”來減少相比較大單一深度學習網絡的錯誤率。在交通標志識別的一個測試中,技術的結合產生了比人類觀察者更好的性能。
決定為一個給定模式的類使用扭曲需要人工干預。Cire?an認為,網絡自主學習扭曲的最佳組合是困難的,但對于人來說設置系統通常是一個容易的決定。
謝菲爾德大學計算機科學系機器學習教授Neil Lawrence認為, 傳統深度學習的一個潛在的問題是數據的訪問 。他說,當數據集很好地表示并且可以在大量的適當標簽數據上訓練時,深度模型往往表現良好。“然而,激勵我的其中一個領域是臨床數據,并不是這種情況。對于臨床數據,大多數人大部分時間并沒有大量的臨床試驗來使用。此外,臨床試驗也在不斷發展,就像患者的疾病一樣。這是一個‘大量丟失的數據’的例子。”
Lawrence等人曾建議使用概率論中的高斯過程層代替神經網絡,以提供對較小數據集的有效學習,對于應用程序,神經網絡表現并不良好,比如那些相互連接貫穿于許多不同數據庫的數據,這是醫療的情況。 因為數據可能不會呈現在某些數據庫作為一個給定的候選,概率模型處理這種情況要比傳統的機器學習技術更好。這項工作落后于神經網絡,但研究人員已開始著手于有效的訓練技術,以及擴大處理來工作在如多核GPU機器一樣的平臺上。
“我們有額外的算法負擔,即圍繞網絡傳播不確定性,”Lawrence說。“這就是算法問題的開始,但也是在這里,我們已經有大部分的突破。”
Lawrence表示,基于高斯過程的深度學習系統可能會要求更高的計算性能,但系統能夠自動判斷網絡內部需要層,這是基于神經網絡的系統目前所不能實現的。“這種類型結構的學習是非常令人興奮的,并且是考慮這些模型的原始動機之一。”
對于目前更廣泛的神經網絡系統,Ciresan提到去除更多限制建造更大、更有效的模型的工作正在進行,“但我想說,我們最想要的是更好地理解深度學習為什么能實現。”
原文鏈接: Growing Pains for Deep Learning (翻譯/王瑋 責編/周建丁)