360副總裁顏水成博士:技術與產品並重,1×1卷積讓深度學習更出彩 | CCF-GAIR 2017
7 月 7 日,由中國計算機學會(CCF)主辦,雷鋒網與香港中文大學(深圳)承辦的CCF-GAIR 2017全球人工智慧與機器人峰會在深圳大中華喜來登酒店如期開幕。奇虎360副總裁、首席科學家、IEEE Fellow、IAPR Fellow顏水成博士帶來了主題為《深度學習:精度極限VS用戶體驗》的演講。這是大會首日最後一場演講。
作為360 人工智慧研究院院長,顏水成博士曾在新加坡國立大學領導機器學習與計算機視覺實驗室,他的主要研究領域是計算機視覺、機器學習與多媒體分析,其團隊提出的「Network in Network」 對深度學習產生了很大的推動力。
以下內容由雷鋒網整理自顏水成教授的報告,有刪減:
這次我希望對過去5年我在學術和工業界對深度學習的一些觀察進行簡單介紹。深度學習的研究有兩種不同的目標,一個目標是追求精度的極限,另一種是追求產品的體驗極限,我將從這兩方面來進行介紹。然後我將圍繞1×1卷積及相關分析,來思考如何設計更好的網路,分別追求精度極限和體驗極限。
學術界的人工智慧深度學習
在學術界研究深度學習,一般是針對一個具體的問題去探索新的演算法。我們可以去設計更好的模型結構,用更多的模型去融合,另一方面,我們也會思考用更好的訓練平台和更多的資源實現分散式多機多卡的訓練。也會思考利用海量的數據,通過預測學習的方式先預先訓練模型,然後利用有標註數據訓練好模型之後,又可以利用baby-learning或增強學習等後處理的方式進一步增強模型的性能。
工業界的人工智慧深度學習
在工業界不再只是追求純粹的演算法,一定要思考產品和應用的場景。人工智慧本身不是一個產品,它必須跟具體的場景相結合才有它內在的價值。最好的做法是演算法和數據形成一個閉環,先訓練出初始的模型,然後再到具體的應用場景中去挖掘模型失效的數據,用這些數據進一步提升模型的精度,然後再把模型應用到場景中,不斷地迭代,最終達到最好的體驗。另外演算法科學家和產品工程師必須相互協作,才能讓不完美的演算法有機會產生完美的用戶體驗。
演算法科學家和產品工程師相互合作的例子
有一個很明顯的例子就是萌臉演算法。之前有很多團隊思考通過人臉分析,把人臉進行替換,但是這個模式沒有成功,因為演算法不完美,會產生抖動等問題。但是如果只是把一個花環、帽子或項鏈掛在人的頭上,即使有抖動,用戶的體驗還是非常不錯的。這個就是工程師和科學家完美合作的結果。
在工業界如果要思考產品,一是要考慮應用場景能否滿足高頻剛需,二是要思考技術是否成熟,三是要思考技術是否能形成壁壘。如果沒有技術壁壘,你今天做出一個產品,不久之後更大的公司可能會很快做出類似產品,你的生存空間就不存在了。
深度學習研發的目標之一:精度極限
把這些觀察放在一起,我們就會發現深度學習的研發有兩個不同的目標,第一個目標是學術界在驅動,如果用四元分析的方法,即用場景、演算法、計算和數據分析的方法來看,場景和數據是固定的,在不考慮計算資源限制的情況下,去追求演算法最優能達到的上限。在這種假設下很多演算法沒法商業化,因為沒有思考在真實應用場景下資源消耗是什麼樣的。
深度學習研發的目標之二:產品體驗
另外一方面是追求產品的體驗,這是由業界在驅動的。同樣用四元分析的方法,這時候場景和計算已經固定。例如要做陪護機器人,其應用場景和它能提供的計算能力是固定的,這時候唯一的做法就是把演算法和數據形成閉環,在迭代中去產生最好的體驗。這時候不僅僅只是演算法的設計,有很多方面都需要思考,比如說數據的清洗標註、模型速度、各種微創新等等。
深度學習兩種研究目標的對比
第一種研究更多的是用腦,第二種研究更多的是用心,它們倆是相輔相成的。比如說在追求精度極限的時候,一些前沿的成果會激發去設計一些新穎的產品,同時,在追求產品體驗的時候,也會提煉出很多核心的問題,然後送到學術界中做深入的研究。這兩種目標都非常重要,很多公司這兩種目標都在追求,因此建立了自己的AI lab,一方面去瞄準前沿研究,為未來打下基礎,另一方面追求產品體驗,保證產品能在當前的場景落地。
兩種目標結合的實例
一個具體的例子是物體的分割。在2016年,大家都覺得分類和檢測已經可以在工業界中很好地使用,但是從來沒有人覺得物體分割已經到了可以使用的階段。我的研究組以前就做了很多人體分割的工作,任務是給定一個圖象,輸出每個像素具體是什麼東西,我們花了兩年的時間把它的性能從44%提升到了86%。同時領域內有很多分割演算法取得了很好的成果,去年年底工業界開始思考,確實有很多的應用場景可以受益於這種分割的技術,於是很多人開始思考怎麼樣去對模型進行加速,保證在一些限定的場景下的性能能滿足產品化的需求。
從今年開始,比如美圖秀秀和Snapchat把人的頭髮和臉分割出來,可以產生很好的頭髮美化的效果,360和其他一些公司則提供人體分割的技術,可以把人實時從自拍的視頻裡面分割出來,疊加到動態的場景,產生很多好玩、好看的效果。這是一個典型的因為追求精度極限達到一定程度時,就激發了新的產品形態的創新。
下面我將圍繞1×1卷積來做一個深度學習研究的漫談。我將仔細分析1×1卷積是什麼、1×1卷積在不同的模型裡面能帶來什麼有價值的分析結果,以及1×1卷積可以幫助產生哪些更新的模型結構來進一步提升視覺分析的性能。這些工作一部分在追求精度極限,另一部分在追求體驗極限。
1×1卷積
最早的1×1卷積是我的學生LIN Min博士在Network in Network裡面提出來的,當時覺得純粹的內積不能很好地模擬人的神經元的複雜工作方式,卷積可以用更複雜的微型網路結構來替代,當這種複雜的結構是多層感知機的時候,對應的後面的操作就是1×1卷積。
當1×1卷積跟3×3、5×5卷積疊加在一起,就會產生更複雜的抽象過程。當時的一個好處就是這個模型的參數可以降到傳統模型的十分之一甚至更少,這樣就為我們把深度學習往端上遷移提供了可能性,同時當時這個模型也在ImageNet 2014比賽的物體檢測任務中取得了最好的性能。之後1x1卷積逐步成為各種後續經典深度學習模型的標準組件之一,比如說GoogleNet, ResNet, ResNext等。
用1×1卷積分析傳統網路的內在機理
基於1x1卷積的張量逼近分析可以很好地解釋當前各種流行網路結構,如GoogleNet、ResNet、 ResNext,裡面局部微觀結構的內在合理性。
比如要在一個固定的位置,把一個256個feature maps卷積的空間域是3×3的數據塊,卷積完以後變成仍然是256個feature maps。這樣需要的參數是256×256×3×3這樣一個四階的Tensor,它的參數量實在太大了。
學術界的一種研究是把一個高階的Tensor用一些小size的Tensor,通過從不同維度做乘積的方式升維到原來size的Tensor。你可以用一個Tensor,也可以用多個Tensor相加的形式來擬合原來的Tensor。
具體到我們這個問題,如下圖,對應的C的部分就等價於從256個feature maps降到更少量的feature maps,G相當於在更少量的feature maps的基礎上做3×3的卷積,D等價於把更少量的feature maps升維到更多的feature maps,C和D則對應到1×1卷積。
有了這種理解之後,ResNet的經典版本則對應於用一個low-complexity的Tensor來擬合,ResNext則對應於用多個low-complexity的Tensor來擬合。同時把多層的卷積Tensors放在一起做low-complexity tensor逼近,我們可以得到一個cross-layer信息共享的網路,可以減少參數個數,從而提升模型推廣性能。基於這種簡單的擴展,只需要一個50層的ResNet網路的參數數目,就能達到一個200層的ResNet網路所能具備的分類性能。
用1×1卷積分析ResNet和Densely Connected Network
下面我們用1×1卷積來分析ResNet和Densely Connected Network (DenseNet)。ResNet是在當前feature maps的基礎上,做1×1卷積、3×3卷積、再1x1卷積,或者運行其它微觀結構,把出來的結果跟現有的結果相加。DenseNet是前面每一層卷積的結果都要放到後面的層去,跟它拼接起來。假設給定的feature map在不同層做1×1卷積的參數是一樣的,你會發現DenseNet和ResNet是等價的,差別是在於一個是事後計算1×1卷積,一個是事先計算1×1卷積。
這兩種網路的內在目標完全不一樣。從局部來看,ResNet更多是希望對特徵進行改進,DenseNet則更多探索新的特徵來補充已有的特徵。一種自然的想法是把這兩種特徵的優勢都利用起來,我們設計了一個網路結果,通過微觀結構把這兩種網路揉和在一起,最後出來的特徵,一部分去改進已有的特徵,一部分作為新特徵的探索。很有趣的事情是,雖然ResNet是DenseNet的特例,新提出的網路結構是一種新的結構,無法再直接解釋成DenseNet。
這個網路結構我們叫Dual-path Network, 實現的時候只需在現有的網路結構里加入拼接和分割的操作就可以得到新的模型結構。這種模型結構看似簡單,效果非常明顯。
在Object Detection任務上,從ResNet到ResNeXt能升3.7個點的話,在DPN上可以提升達到6.1個點;在Object Segmentation任務上,從ResNet到ResNeXt能升0.5個點的話,在DPN上能提升達到1.7個點。
當前在學術界已經驗證的最好的單模型精度的網路的單模型錯誤率是4.25%,在DPN上如果我們用131層的網路,它的錯誤率能降到4.16%,同時可以保證這個網路的訓練和測試時間都比前者要快很多。同時,如果把很多的模型做融合,在ImageNet上的錯誤率就可以從最好的2.99%降到2.74%。在ImageNet的Object Localization任務上效果也非常明顯,只需要用三個模型的融合,就可以從去年的最好模型(6個模型)得到的結果7.58% 降到6.03%。
360的相關產品
在360,追求精度極限的應用主要是放在雲端,比如說360小水滴裡面的人臉認證,我們在保持1%的FAR的情況下,把它的TPR從77%升到98%。雖然只是98%,但在這種監控場景下,你可能會碰到不同光照、姿勢、尺度的圖象,分類的難度是非常大的,它與在銀行裡面用戶配合的場景下做人臉識別的差別非常大。
另一方面,360有很多智能硬體。智能硬體的特點是在固定應用場景和計算資源受限的情況下,希望把人工智慧的技術應用到具體場景裡面,這時候在比較低端的晶元上,讓深度學習能夠發揮最好的效能就變得非常重要。所以我們也一直在思考,有哪些方法可以從演算法的角度把計算的複雜度降低下來。我們其中一個工作是用1×1卷積,希望能實現更複雜的網路結構,但是計算複雜度反而會進一步降低。這個屬於追求用戶體驗的例子。
利用1×1卷積實現:更複雜的網路結構、但更低的計算複雜度
通過對每一個卷積操作附加一個1x1卷積操作然後再點乘,雖然模型變複雜了,但可以大幅減少前向傳播的計算量。
它的思路非常簡單。舉個例子,任何一個卷積,在ReLU完了之後,很多時候你會發現大概有40%或者更多的位置上它的輸出是0。如果這個位置輸出是0,它原來的值是什麼就不那麼重要了。進一步思考,有沒有可能用更少的computational cost把這些為0的位置快速估計出來,這樣具體的卷積就不用計算了。如果我們有40%的位置是0,上面有40%的計算量就可以忽略,下面因為是1×1卷積,它的計算量只有大概1/9甚至更少,這樣你就用1/9的時間節省了40%的計算量,所以它是非常值得的。另外一方面,從理論上來說,這種網路結構可以保障潛在的最好分類性能不會降低。
我們在不同的資料庫、不同的模型上做了測試,一般情況下都能提升20%到40%的速度,這在追求產品體驗極限上非常重要。
例如你希望做一個普通老百姓願意接受的後裝ADAS,要做車輛檢測,或者在手機APP上,要做實時的人體摳像,動態疊加到背景中,這時候降低能耗是非常重要的。用晶元來降低能耗成本會貴一些,從深度學習研發的角度來說,如果能從演算法維度上降低它的功耗,價值將非常大。
最後我用這張圖做一個簡單的總結。深度學習的研發有兩個非常不一樣的目標,一種是追求演算法的精度極限,一種是追求產品的體驗極限。它們的差別是一個專註在用腦,一個是專註在用心,同時它們也是相輔相成、相互促進的。
推薦閱讀:
※遇到一個合適的導師有多難?
※鄭博士:屬相一周運勢 8月20-8月26日
※MR.城堡第三場live——工科在讀博士的日常、學習與工作
※如何申請微軟亞洲研究院(MSRA)聯合培養博士生?
※德國醫學博士的申請經驗