天天看點

實時深度學習的推理加速和連續學習

要将深度學習系統投入生産,有一個方面很重要,就是要能應對輸入和輸出資料的分布随時間的變化。和任何統計機器學習模型一樣,深度神經網絡的可行性和有效性嚴重取決于一個假設——輸入和輸出資料的分布不會随時間發生顯著變化,否則會使得模型原本學習到的模式和複雜關系表現不佳或甚至完全不可用。但是,在真實世界中,這樣的假設很少能夠成立,尤其是在資訊安全等領域,其中基礎資料生成機制的快速演變已然是一種常态(在安全領域的案例中,這是因為防禦方和對手這兩方都要不斷努力改變自己的政策以超越對方,進而利用對手未加防備的漏洞。是以,随着我們在這些領域中應用深度學習來更好解決許多曾經無法解決的問題,深度神經網絡的連續學習問題也就得到了機器學習即服務(MLaaS)提供商和應用架構師的越來越大的關注——我們該怎麼很好地執行連續學習,而不會損害生産品質或提高資源消耗。

在本報告的第二部分,我們将會形式化連續學習場景并介紹一種增量式的微調方法(incremental fine-tuning approach)。然後我們會給出有多個實證研究支援的三大重要發現。本文的目的不是全面調查和描繪連續學習的現狀全景,而是為了啟發更多不同專業背景的人加入到我們的讨論中,并與我們交流知識。

第二部分:連續學習

連續學習場景和增量式微調

微調(fine-tuning)原本一直是指預訓練一個帶有生成式目标(generative objective)的 DNN 的過程,後面跟着帶有一個鑒别式目标(discriminative objective)的額外訓練階段。早期關于預訓練和微調深度信念網絡和深度堆疊自動編碼器的研究成果全都遵循這種方法。研究者期望這種生成式訓練階段能讓網絡學習到資料域的良好分層表征,而鑒别式階段則能利用這種表征,并希望它能在該表征空間中學習到一個更好的鑒别器功能。

最近,研究者已經在使用微調來在 ImageNet 這樣的大型通用資料集上預訓練複雜精細、目前最佳的 DNN 了,然後又在更小的相關資料集上對模型進行微調。這有助于緩解醫療診斷或地理探測等領域内有标簽訓練資料不足的問題,因為在這些領域中,擷取有标簽資料需要密集的勞動或成本高昂。研究者的基本假設是:在大型訓練資料集上得到的相當好的結果已經使該網絡接近參數空間中的局部最優了,是以即使新資料的資料量很小,也能快速将該網絡引導至最優點。

從連續學習的觀點來看,上面兩種方法都是網絡隻接受兩次訓練(初始預訓練和一次更新)的極端案例。連續學習的更一般形式是疊代式地訓練和更新,這就帶來了一個問題:應該怎樣穩健又高效地執行一系列持續的更新?對于生産系統來說,穩健性是很重要的,因為一個實時系統通常不能容忍模型表現突然下降,而該系統的實時本質又必需對資源和時間的高效率利用。為此,在下面的讨論中,我們的重點關注場景是每個更新步驟僅使用少量新資料的情況(相比于原來的完全的訓練資料集),但要求更新後的模型是即時可用的。

1.連續學習場景

連續學習的最一般形式是整個訓練資料集都會随時間演變。但是,為了讓學習可行,我們設定了一個限制,即輸入域保持不變。這并不意味着輸入域中的資料分布是恒定不變的——相反,我們允許多種多樣的資料分布會發生變化的案例,但這些變化總是定義在同一域中。另一方面,我們假設輸入域可以變化。這是為了配合當系統持續運作了相當長時間後出現新标簽的案例。比起輸入域變化的情況,這個假設更有可能實際出現,因為在自動駕駛汽車等大多數生産系統中,如果輸入視訊或雷射雷達圖像急劇改變(由于極端天氣、光照、地形或路況),那我們就不能期望系統還能遠端工作;但我們希望該系統能在連續學習過程中适應新型的不可碰撞的目标,并且能夠應對這種新标簽的類别。是以,我們将我們的連續學習場景中的資料定義為按時間 t 索引的資料集

實時深度學習的推理加速和連續學習

的序列。我們的目标是為每個時間步驟 t 學習一個網絡  

實時深度學習的推理加速和連續學習

。根據  

實時深度學習的推理加速和連續學習

的變化方式,我們有兩種可能場景:

1) 我們不會随時間獲得新類别,但是我們的資料集不斷增長。

實時深度學習的推理加速和連續學習

2) 我們會随時間獲得新類别的樣本。

實時深度學習的推理加速和連續學習

在每個時間步驟 t,我們需要使用新出現的可用資訊更新我們的網絡;這些新資訊即為更新集(update set):

實時深度學習的推理加速和連續學習

。因為我們假設更新集很小,為了避免欠拟合,在時間步驟 t 我們使用上一步收斂的  熱啟動(warm-start)優化。這種技術的可行性取決于一個假設

實時深度學習的推理加速和連續學習

,即 

實時深度學習的推理加速和連續學習

 在資料集擴充時會平滑地改變——是以我們要假設更新步驟小且輸入域恒定。在實際情況中,就算這些假設(部分地)屬實,我們仍還依賴于一個預期:通過在之前一個局部最優點的初始化,帶有不同參數空間情況的新優化問題可以快速且穩定地收斂到一個新的局部最優點。但是,大多數現代 DNN 都太複雜了,是以難以保證這一點——它們的目标函數是高度非線性和非凸的,有時候參數空間中還都是些糟糕的局部條件數(local condition numbers)。即便如此,熱啟動仍然是目前最好的方法之一,肯定比從頭開始更好,而且在實驗上也表現出了最好的潛力。對于場景 2,在每個時間步驟,我們都可能需要為最後的輸入層添加額外的神經元以及與前一層的連接配接權重。

但還存在三個問題。一,每個更新步驟需要多少個 SGD 步驟?二,在每個更新過程中,我們使用多少前一步驟的資料,又使用多少目前步驟的資料?三,這個更新流程是否穩健,能應對标注噪聲嗎?對于生産系統來說,這些問題都很重要,因為正如我們前面談到的,穩健性和效率是很重要的。

實證研究

在實驗中,我們使用了在 ImageNet ILSVRC-2010 上預訓練的 BVLC AlexNet 作為示例網絡。我們将學習率固定為 0.001,L2 權重衰減固定為 0.0005,動量固定為 0.9;并且更新集的大小也固定為

實時深度學習的推理加速和連續學習

,其中的樣本來自同一類别。對于評估,我們使用了 MS-COCO-full-v0.9 和 Stanford40Actions。相比 ImageNet,這兩個資料集都很小,因為我們想使用比初始預訓練小的更新來評估連續學習的表現。對于 MS-COCO,我們使用了 15 個類别,其中每個包含 500 到 1000 個樣本;每個樣本都僅保留 ground truth 邊界框,且寬和高都至少是 256 像素。為了進行評估,我們随機選擇了 10 個類來對 CNN 進行初始化微調。從剩餘的資料中,我們再随機選擇 5 個類别用作全新資料(在每個更新步驟輸入的新資料),并且從每個類别随機選擇了 100 個樣本。每個更新步驟使用的度量都是分類準确度。為了得到無偏差的比較,我們進行了該實驗 9 次。

1.每個更新步驟的 SGD 疊代次數

SGDminibatch 的大小固定為 64,但我們改變了每個更新步驟中 SGD 疊代執行的次數。我們将 SGD 疊代次數表示成了一個相對于總訓練資料大小(即 epoch 數)的比例,以補償不斷增長的訓練資料大小。

實時深度學習的推理加速和連續學習

讓人驚訝的是,即使每次更新的 SGD 疊代少了很多,分類準确度依然穩健,除了那些僅使用了十分之一資料的案例,很可能是因為在這樣小的 epoch 中一些類别代表不足。事實上,我們可以直接将 SGD 疊代的次數固定為一個小常量(比如更新集大小

實時深度學習的推理加速和連續學習

),表現也不會顯著下降。

實時深度學習的推理加速和連續學習

2.每個更新步驟中舊資料與新資料的比例

對于增量式的學習算法,舊資料與新資料的影響的比例是最重要的超參數之一。在 SGD 疊代中,我們根據機率

實時深度學習的推理加速和連續學習

對每個樣本 i 進行了采樣,其中 0≤λ≤1。在極端情況下,λ=0 意味着之前的資料完全被忽視了,而 λ=1 則表示新資料的影響推遲到了下一個更新步驟,因為這是它們在 

實時深度學習的推理加速和連續學習

中結束的時候。

實時深度學習的推理加速和連續學習

我們看到,為了防止在更小的更新集上過拟合,就必需舊資料。我們觀察到一個有趣的結果:因為新的更新集資料被認為是下一步驟 t 中

實時深度學習的推理加速和連續學習

的一部分,是以 λ=0.75 和 λ=1 的表現差不多。

3.在有标注噪聲時保持穩健

在生産場景中,新資料的标簽很少是無噪聲的——由于實時性需求,人類判斷者往往需要做出快但并不準确的決定,而三到五位判斷者之間的不一緻率可能會高達 75%。是以,在有标注噪聲時保持穩健對于連續學習方案而言至關重要。

我們使用 64 的 minibatch 大小在每個更新步驟執行了 10 epoch,并随機污染固定比例的新可用資料——用剩餘類别的樣本替換這些資料,但同時保持它們的标簽不變。如預期一樣,标注噪聲會降低準确度,但我們的連續學習方案對此相對穩健,在存在 10% 的噪聲時準确度僅下降了 2%。

實時深度學習的推理加速和連續學習

第二部分總結

在本報告的第二部分,我們了解了近來連續學習方面的研究成果,并對增量微調的有效性和穩健性進行了一些闡述。我們希望這能激勵讀者加入到對機器學習系統的讨論中,并與不同背景的人交流知識。

加入機器之心 ML 系統與架構小組:

近些年人工智能的突破不僅僅是機器學習算法的努力,更有包含了其所依賴的系統和架構領域的進步。如果你想更加全面的了解機器學習這個領域,對其依賴的上下遊領域的了解會很有幫助。系統和架構就是這樣一個下遊領域。這個方向的工作極大友善了其上遊算法的開發,或許你也是現在諸多 ML 系統産品的使用者之一。但面對一個這樣重要的跨領域的方向,你可能會感到這樣一些困境:

1. 找不到合适的學習資料

2. 有學習動力,但無法堅持

3. 學習效果無法評估

4. 遇到問題缺乏讨論和解答的途徑

不論你是想要獲得相關跨領域的更全面大局觀,還是你隻是想對手中的 ML 系統工具更加了解,你都是機器之心想要幫助和挖掘的對象。基于這個方向現在越來越成為衆多研究人員關注的焦點,機器之心發起了一個互助式學習小組。

是以,為了幫助「 系統與架構新手」進入這一領域,機器之心發起了一個互助式學習小組——「人工智能研學社· ML 系統與架構小組」。本小組将通過優質資料分享、教材研習、論文閱讀、群組讨論、專家答疑、講座與分享等形式加強參與系統與架構和深度學習的了解和認知。

  • 面向人群:有一定的機器學習算法基礎,并且對分布式計算、并行計算等也有所了解,同時想掌握此方向最新成果的人
  • 學習形式:學習資料推薦、統一進度學習(教材或論文)、群組讨論、專家答疑、講座等。
  • 加入方式:

1)添加機器之心小助手微信,并注明:加入系統與架構學習組

實時深度學習的推理加速和連續學習

2)完成小助手發送的入群測試(題目會根據每期内容變化),并送出答案,以及其他相關資料(教育背景 、從事行業和職務 、人工智能學習經曆等)。

3)小助手将邀請成功通過測試的朋友進入「人工智能研學社· ML 系統與架構學習組」。

入群測試 QUIZ 

1)教育背景 2)從事行業和職務 3)人工智能經曆 4)人工智能系統或架構經曆

1. List one or two major differences between DNN training and inference.

2. Why are GPUs widely considered the best hardware for DNN training, but not necessarily inference?

繼續閱讀