近日,CSDN與數字經濟人才發展中心聯合主辦的第一屆CTA核心技術及應用峰會在杭州開啟。首屆CTA核心技術及應用峰會圍繞人工智能,邀請技術領航者,與開發者共同探討機器學習和知識圖譜的前沿研究及應用。在本次機器學習專場中,來自海康威視研究院前研技術部的負責人謝迪為我們帶來了題為《How to Explore in Machine Learning Pipeline》(機器學習流程研究)的精彩演講。
在機器學習時代,AI相關工作都是聚焦于具體的流程,如數據收集、模型訓練、模型配置等。AI從業/從事人員眾多,但大家做的事情很多都大同小異,這其實可以總結成一個標準的pipeline。但是,如何在機器學習的流水線上做出和別人不一樣的工作,還是需要很多技巧。這次,謝迪將會為大家分享如何在標準的機器學習流水線上,通過多年積累獲得的洞見,提升對于具體應用的認識。
標準機器學習Pipeline
如圖所示,這是一個標準的機器學習流水線,我們可以收集數據、提取特征、訓練分類器等。幾年前深度學習還沒有火的時候,我們靠人工提取算子,之后進行訓練,最后得到我們想要的模型,去解決具體問題。
隨著深度學習的興起,中間的兩塊已經被神經網絡統一,但是我們認為在工業界,要得到真正工作的機器學習pipeline,還有兩個環節我們需要特別注意。其中包括數據的環節,因為數據并不是現成的,實際上現在人工智能深入發展,對公司來說很大部分的工作還是集中在數據標定上,有了標定的數據之后才能進行訓練,最后得到一個模型。在海康威視,很多的應用以前是放在后端的,但現在都在逐漸向往邊緣端轉移,所以我們有相當一部分的工作是在邊緣端的深度神經模型以及工業機器人的配置上。
機器學習pipeline實踐
今天,我將和大家分享三個方面的工作,聚焦于標注、訓練和部署,這三個環節分別代表了信息的生成、提煉、重新整合以及信息的去冗余。
▌1. 標注
通用函數近似器
這是第一項工作。我們知道,深度神經網絡相比于傳統的 SVM 或其他的線性模型,更類似于全局函數近似器,即輸入 ground truth,它就能輸出你想要的結果。
我們可以給定一個標注,輸入更多信息量,比如一個人在圖中的位置、關鍵點集合,甚至是一個非常稠密的網格。這是一個信息從少到多的過程,無論信息多復雜,在神經網絡下都可以輸出你想要的結果。換一個角度理解,神經網絡對數據是非常敏感的。
多尺度對GT的影響
在安防場景中,我們最關心的是人和車。以行人檢測為例,在一個場景中,我們會關心各個尺度的行人,但是神經網絡對不同對象比較敏感,我們現在檢測的框架是基于邊界框的,對于大尺度的行人來說,紅框標定行人沒有問題,但是小尺度的行人標定存在兩個問題,第一個問題是小尺度的對象本身提供的信息非常有限,第二個是小尺度對象的真值框差異非常大。
如右圖所示,我們做了一個實驗,讓10個標定人員進行標定,藍色表示 Bounding-box (邊界框)標定方法,黃色是基于線段的標定方法,對于大尺度對象和小尺度對象,ground truth 的平均 IOU顯示如圖所示。可以看到,大尺度對象明顯優于小尺度對象。基于神經網絡對信息產生的方式非常敏感的前提來說,我們認為影響小目標檢測的問題之一,可能是在于信息生成方式的歧義性。
TLL小尺度行人檢測
為此我們提出了TLL。它的核心想法非常簡單,即 Bounding-box 表示方法會影響極小目標的檢出率,所以我們需要為小目標單獨設計一種生成信息的方式,我們通過 Bounding-box 上下兩點中心,做了一個連線,即把原來用一個 Bounding-box 表示一個物體的表示方式,變成了用一個線段表示一個人體,上端表示頭,下端表示人與頭之間的中心。
網絡結構我們使用了 Hourglass 的沙漏結構。當然,多尺度是影響目標檢測的原因,所以我們也是使用了多尺度信息聚合的方式。
我們的網絡輸出是三個特征圖,分別表示人頭、兩腳和人體的分圖。最后,我們用后處理的方法,通過二分圖匹配得到最終的匹配結果,即圖中虛線所示直線。
但在實際場景中,我們發現當人群密度比較密的時候,使用二分圖匹配會出現如圖所示的交叉結果,所以我們引入了馬爾科夫隨機場,不鼓勵交叉情況的產生,這樣就可以獲得更好的結果,有效地避免了交叉產生。
在測試中,我們希望小目標的分辨率能夠在10像素以下,越小越好,因為越小越能體現算法的優勢,而對于檢測過程中的幀漏檢,相比基于光流的顯示聚合方法,隱式的信息聚合方法可以進一步的提高檢出率。
這是量化的結果,顯示性能非常好。有個非常有趣的現象,我們僅僅是簡單地改變了標注的方式,本質上即信息生成的方式,在嚴重遮擋的情況下,依然取得了更好的性能。
可以看到,無論在嚴重遮擋、遠景,還是不規則的長寬比的配置下,這個方法還是有一定的優勢。
這是定性的一些結果,像圖中這樣檢測難度非常大的情況也可以檢測出,稠密的行人也沒有漏檢。我們在一些目標項目中落地了這一方法,如在上海陸家嘴的環形天橋上,攝像頭能夠精確地統計天橋上行人的數量。
這個工作我們從 2017 年開始做,最初的目標檢測用到了兩階段的方法,代表有 FastCNN。一步檢測的代表框架有 SSD 和 YOLO,現在甚至有人在關注 Anchor-free 的方法,包括 FCOS、ReqPoints 等。這都是大家嘗試找到一種不一樣的邊界框產生方式,能夠更好地指導網絡進行訓練,并挖掘出原始數據中有價值的信息并用到具體的應用中。
▌2. 訓練
神經網絡訓練洞見
我分享的第二個工作是如何訓練神經網絡,或者神經網絡的本質是什么。訓練神經網絡有很多初始化方法和優化器,在訓練中對信息進行歸一化。
從信息傳播的角度看,我們認為這些方法本質上是保持訓練過程中或訓練初始階段的恒常性。恒常性可以分為兩種,一種是靜態恒常性,一種是動態恒常性。靜態恒常性一般用在初始階段,也就是初始化即可;動態恒常性就是優化的過程中,每一輪迭代都讓信息的某種統計量保持不變。大家比較熟悉的初始化方法,包括Xavier、MSra、LSUV都屬于靜態恒常性,所有層保持在固定的數量級上,讓初始權重的某些統計量保持在統一數量級上;動態恒常性包括 WN、BN、LN 等。但無論是哪種方式,無非就是設計某種規劃,能夠讓信息的量級在某一個傳播方向上保持不變,當然不是數字上的不變,而是統計量上的不變,因為神經網絡的訓練有點類似于蝴蝶效應,所以恒常性非常重要。
四個觀點
先講我們的四個觀點:
第一,我們訓練一個真正深的網絡,批歸一化是一個必要條件;
第二,相較于靜態恒常性,動態恒常性更加重要;
第三,相較于單個方向保持動態恒常性,在訓練時保持兩個方向,同時保持動態的恒常性,才是解決這個問題的關鍵;
最后,如果模型非常深,可能還需要顯示對傳播的信號進行調控。
退化問題
大家可能說,用了ResNet 好像沒有發生很難訓練的情況,但是康奈爾大學的一篇文章指出,ResNet 本質上是指數級淺網絡的聚合,如左圖所示,我們的工作是對沒有任何殘差結構網絡的訓練方法。這種方法訓練過程中會產生退化問題,即當以網絡的層數作為橫坐標、性能作為縱坐標,結果會如右圖所示,網絡層數小于等于20層時,簡單堆疊網絡層數會產生增益性能,但層數超過20,收斂率會大大下降,性能變差,這就是著名的深度神經網絡訓練退化的問題。我們的工作其實沒有解決這個問題,只是緩解了這一問題,但希望可以給從業人員一些啟發。
內在因素
我們認為原因可能有兩個,第一是批歸一化的偽歸一化問題,前面的信號傳遞沒有問題,在每一層卷積以后,信號雖然有時會被放大,有時會被縮小,但是經過批歸一化以后,分布又能夠被拉回來。但是如果推導反向評估顯示,會發現當層數非常深時,誤差累積的效應會讓反向傳播誤差的分布越來越偏,造成訓練出問題。
第二個原因可能更加深刻一點,我們知道反向傳播的信號其實是和輸出相對于輸入息息相關。一般的工作可能推導到卷積層,我們還考慮了 BN 層,推導如圖所示,在 MXM 層的方陣里面,左上角兩個數值很有可能取到 0 或近似 0。底部的示意圖表示一個信息量比較豐富的信號,在反向傳播時,一層一層往回傳會造成信號特定維度上的信息丟失。我們認為信息的丟失也會破壞動態恒常性,造成沒有殘差結構深度網絡難以訓練。
解決方案1:正規化
找到實用且有效的方法非常難,我們首先想到了一個數學公式,如果線性變化位于一個正交權上,就能獲得輸入和輸出向量之間范數上的幅值等價性。但是我們發現,如果強制要求權重位于正交基上,很大程度會限制神經網絡解空間的范圍。我們用正交正則的思路替代 LR,去解決這個問題。
我們希望在反向傳播時,信號的幅值能夠位于比較穩定的范圍內。由于各種應用不同,卷積神經網絡會對應不同的超參數,輸入和輸出通道的不同等原因也會使得維度上出現一些問題。比如,在三維空間中找到四個相互正交的向量,在數學上是不可行的。對于輸入維度小于輸出的情況,需要要進行分組,讓每個組的 din 大于等于 dout。
解決方案2:調制
第二個解決方案想法比較簡單,就是對信號進行調制。在我們推導的公式中,為每一層設計一個符合該層的放大因子或縮小因子,該因子取值由該層的誤差輸出和輸入的比值決定。此方法可以在訓練一個沒有殘差的一百層網絡的初始階段使用。
實驗結果
這是我們的一些實驗的結果,最左圖是每一層的 weights 相關度的曲線圖,大家可以看到,綠色表示正交正則,藍色表示權重衰減,用了正交正則以后,位置之間的夾角較大,夾角越大,相關度越低,此方法有效地保持了 weights 之間的低相關度。
右邊的兩幅圖是反向傳播的誤差性浮值的曲線。同樣地,藍色是權重衰減的方法,綠色是正交正則方法,可以看到正交正則可以適當放大信號,有效保留反向傳播中有用的信號,這些有用的部分,我們認為是能夠讓網絡正常訓練的關鍵因素。
我們對 SGD、正交正則和其他的一些自適應方法等進行比較,發現我們的方法能夠獲得較好的性能,當層數到達 110 層時,很多方法已經無法訓練了,但我們的方法還是可以繼續收斂,并可以用在殘差網絡里,但是對性能的提升不是很明顯。
在其他人的工作中,我們也發現了類似的結論。BigGan 提到正交正則有利于 Gan 網絡的穩定性。LARS 也提出了分層學習力的思想,只不過它使用了 weight 幅值與其梯度幅值的比值。
部署
▌模型壓縮方法
以下的工作是模型部署。我們有很多攝像頭產品,所以壓縮方法是重中之重。
我今天要講的是輕量級算子的相關工作,動機在于卷積是信息聚合的一種方式,可以分成兩個階段,一個是確定感受野,第二是確定兩個向量之間的內積。3X3 的卷積既能滿足感受野,也能兼顧 flops,所以大多數卷積是 3X3。
但是,我們是否能找到一個 1X1 的方式替代原來的卷積神經網絡呢?答案是有的。那就是Shift操作,它可以把某一層的特征圖進行平移,然后用 1X1 進行信息聚合,好處是沒有額外的計算量。
因為最初的 shift CNN 需要人工確定平移的方向和大小,但我們想要通過自適應去學習平移方向,同時保持特征圖不動,因為特征圖移動會產生一定代價,所以我們用雙向性插值,把平移的量切換為連續的浮點值,然后增加了一個鼓勵稀疏的正則。
我們根據這個基本思想設計了一些基本模塊,結合了下采樣、多尺度融合等。
這是基于Unsigned Block做融合,用 4 領域的 shift 操作代替了 8 領域的 shift 操作。
我們還設計了兼顧效率的網絡結構,以一種反規約的順序進行 shift 卷積,增加了感受野的復雜度和聚合的復雜度,產生更好的效果,效率提升,跑得速度更快。
這是與 Mobilenet 和 ShuffleNet 性能比較。
這是我們對隨機選取的六層網絡進行可視化的結果,圈越大表示特征圖越多,占比越高。統計顯示,約 70% 的分類問題特征圖是不需要移動的,這非常有趣。
這是上個月 MobileNetV3 的工作,我們的想法與之不謀而合:模塊放置在深度濾波器的拓展之后,以將注意力應用于最大的表示......
最后是四點總結:
第一點,我們認為現在的深度學習框架中,模型對信息生成的方式非常敏感,可以考慮在把信息“喂”給模型之前,如何讓信息的呈現方式歧義變小,這樣可以獲得更好的結果。
第二點,邊界框可能已經過時了,我們需要想一些更加優雅、優美的表示方式。
第三點,我們認為訓練神經網絡時,動態恒常性是一個關鍵因素。
最后一點,對于芯片設計者來說,過多的算子會導致電路更復雜,就像檢測框架會趨向于過程簡化,我們認為算子也會進行收斂,以后的神經網絡可能只有 1X1 的卷積,加上其他的操作就能夠進行各種智能應用。
-
AI
+關注
關注
87文章
31528瀏覽量
270342 -
機器學習
+關注
關注
66文章
8439瀏覽量
133087
原文標題:如何在標準的機器學習流程上玩出新花樣?
文章出處:【微信號:rgznai100,微信公眾號:rgznai100】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論