0
本文作者: 谷磊 | 2017-04-12 10:07 |
AI科技評(píng)論按:本文為曠視科技首席科學(xué)家孫劍日前在 CCF 與 KDD China 聯(lián)合主辦的ADL上做的題為《如何在大公司和創(chuàng)業(yè)公司做好計(jì)算機(jī)視覺(jué)研究》的分享,雷鋒網(wǎng)進(jìn)行了全文整理。以下是第一部分。
傳送門(mén):曠視科技孫劍:如何在大公司和創(chuàng)業(yè)公司做好計(jì)算機(jī)視覺(jué)的研究(二)
曠視科技孫劍:如何在大公司和創(chuàng)業(yè)公司做好計(jì)算機(jī)視覺(jué)的研究(三)
孫劍博士(攝影:雷鋒網(wǎng) 劉芳平)
孫劍,博士,曠視科技(Face++)首席科學(xué)家、研究負(fù)責(zé)人。2003年畢業(yè)于西安交通大學(xué)人工智能與機(jī)器人研究所,畢業(yè)后加入微軟亞洲研究院(Microsoft Research Asia),任至首席研究員。其主要研究方向是計(jì)算攝影學(xué)(computational photography)、人臉識(shí)別(face recognition)和基于深度學(xué)習(xí)的圖像理解(deep learning based image understanding)。自2002年以來(lái)在CVPR、ICCV、ECCV、SIGGRAPH、PAMI五個(gè)頂級(jí)學(xué)術(shù)會(huì)議和期刊上發(fā)表學(xué)術(shù)論文100+篇,Google Scholar 引用 20,000+次,H-index58,兩次獲得CVPR Best Paper Award (2009, 2016)。孫劍博士于2010年被美國(guó)權(quán)威技術(shù)期刊Technology Review評(píng)選為“全球35歲以下杰出青年創(chuàng)新者”。孫劍博士帶領(lǐng)的團(tuán)隊(duì)于2015年獲得圖像識(shí)別國(guó)際大賽五項(xiàng)冠軍(ImageNet分類,檢測(cè)和定位,MS COCO檢測(cè)和分割),其團(tuán)隊(duì)開(kāi)發(fā)出來(lái)的“深度殘差網(wǎng)絡(luò)”和“基于區(qū)域的快速物體檢測(cè)”技術(shù)已經(jīng)被廣泛應(yīng)用在學(xué)術(shù)和工業(yè)界。同時(shí)孫劍帶領(lǐng)的團(tuán)隊(duì)的研究成果也廣泛被應(yīng)用在微軟Windows, Office, Bing, Azure, Surface, Xbox等多條產(chǎn)品線上。目前孫劍博士正在帶領(lǐng)曠視科技的研究團(tuán)隊(duì)推進(jìn)計(jì)算機(jī)視覺(jué)技術(shù)的進(jìn)步和探索其在工業(yè)和商業(yè)上的實(shí)踐。
以下為演講內(nèi)容,主要介紹了近期計(jì)算機(jī)視覺(jué)的發(fā)展現(xiàn)狀,ResNet基本原理和設(shè)計(jì),曠視科技在計(jì)算機(jī)視覺(jué)的研究進(jìn)展等。最后他還分享了一些“如何在大公司和創(chuàng)業(yè)公司做好研究?”的心得。
圖一
計(jì)算機(jī)視覺(jué)發(fā)展現(xiàn)狀
去年夏天我加入曠視科技,就是大家所熟知的Face++,F(xiàn)ace++其實(shí)是早期一款產(chǎn)品的名字,而并非公司名稱。簡(jiǎn)單來(lái)說(shuō)這家公司主要就是用深度學(xué)習(xí)來(lái)做計(jì)算機(jī)視覺(jué)。計(jì)算機(jī)視覺(jué)是目前人工智能中比較熱的一塊。大家目前將人工智能分為感知智能和認(rèn)知智能兩部分,其中語(yǔ)音識(shí)別、計(jì)算機(jī)視覺(jué)是人工智能進(jìn)展最快的技術(shù)。(圖一)右側(cè)NLP和各種通用人工智能,屬于認(rèn)知智能領(lǐng)域,這部分有很大的進(jìn)展,但仍處于很強(qiáng)的探索階段,所以,沒(méi)有(圖一)左側(cè)綠色部分進(jìn)展大。
曠視科技就是做感知智能的計(jì)算機(jī)視覺(jué)部分。當(dāng)然,計(jì)算機(jī)視覺(jué)并不只是純感知智能,它也涉及更高層的理解。但是作為感知智能的第一步,它很大的一部分功能是在做感知部分。
計(jì)算機(jī)視覺(jué)和語(yǔ)音識(shí)別不一樣,語(yǔ)音識(shí)別可能只有一個(gè)應(yīng)用,就是做翻譯。把語(yǔ)音翻譯成文本信號(hào),當(dāng)然還有一個(gè)文本合成的任務(wù),但是它的主要任務(wù)只有一個(gè),就是一直改善文本信號(hào)處理的結(jié)果。
圖二
但是計(jì)算機(jī)視覺(jué)很不一樣,它的應(yīng)用非常多,這里列舉了6個(gè)比較熱且重要的應(yīng)用:
視頻監(jiān)控
人臉識(shí)別
醫(yī)學(xué)圖像分析
自動(dòng)駕駛
機(jī)器人
AR、VR
計(jì)算機(jī)視覺(jué)技術(shù)的內(nèi)容非常豐富,并不是簡(jiǎn)單的圖像識(shí)別,它還涉及很多其他的知識(shí)。
圖三
曠視科技在2011年~2014年做了一個(gè)Face++這樣的人工智能開(kāi)放云平臺(tái),提供人臉識(shí)別、圖像識(shí)別的開(kāi)放服務(wù);從2014年開(kāi)始,公司聚焦在兩個(gè)方向:一個(gè)是互聯(lián)網(wǎng)金融,以提供人臉識(shí)別認(rèn)證服務(wù)為主,另外一方面是IoT,就是智能前端化。往后,我們希望打造最好的智能云和智能機(jī)器。
圖四
曠視怎樣去做視覺(jué)智能呢?
基本路線和很多公司類似。從技術(shù)、到產(chǎn)品、再到數(shù)據(jù),希望這三部分能運(yùn)轉(zhuǎn)起來(lái)。今天深度學(xué)習(xí)的方法需要大量的數(shù)據(jù),更精準(zhǔn)的說(shuō)是大量的標(biāo)注數(shù)據(jù),有大量的數(shù)據(jù),才能把算法做的更好。
很多人會(huì)問(wèn)數(shù)據(jù)如何而來(lái),曠視認(rèn)為最有效的方法還是通過(guò)真實(shí)業(yè)務(wù),不斷地把數(shù)據(jù)從真實(shí)場(chǎng)景回流回來(lái),然后再去驅(qū)動(dòng)算法,自然就可以把第一版算法做不好的事情解決了。
曠視科技研究院的基本任務(wù)是產(chǎn)生核心的技術(shù),這些技術(shù)可以用來(lái)做產(chǎn)品,然后產(chǎn)品落地到市場(chǎng)。
圖五
研究院主要關(guān)心4個(gè)技術(shù):
分類
檢測(cè)
分割
序列學(xué)習(xí)
其中分類技術(shù)是對(duì)圖片做一個(gè)分類,或者對(duì)圖片中的區(qū)域做一個(gè)分類,或者對(duì)圖片的每個(gè)像素都做一個(gè)分類;序列學(xué)習(xí)技術(shù)是輸入一個(gè)視頻,或者一個(gè)有序列的Python(比如一串文字)后,怎樣用序列之間的關(guān)系來(lái)做學(xué)習(xí)和推理。
這里不包含計(jì)算機(jī)視覺(jué)3D感知的部分,一個(gè)公司要做計(jì)算機(jī)視覺(jué),首先要聚焦在一個(gè)具體的方向。
圖六
這4個(gè)方向的主要研究成果有:
圖像分類:現(xiàn)在最強(qiáng)的方法是用深度學(xué)習(xí)來(lái)做。有個(gè)數(shù)據(jù)庫(kù)叫ImageNet,這張PPT展示的是2010年的一個(gè)比賽情況,上面的數(shù)字是Top5的錯(cuò)誤率,意思是大概1000類的物體大概能分多準(zhǔn),這個(gè)數(shù)字越小越好。最大的進(jìn)展發(fā)生在2012年,Geoffrey Hinton和他的學(xué)生Alex第一次用深度學(xué)習(xí)方法把錯(cuò)誤率大幅降低。隨著神經(jīng)網(wǎng)絡(luò)的深度層次越來(lái)越多,錯(cuò)誤率越來(lái)越低。在2015年的時(shí)候,當(dāng)時(shí)我在微軟亞洲研究院的團(tuán)隊(duì)做的ResNet,第一次把網(wǎng)絡(luò)的深度從幾十層提高到100多層,后來(lái)可以做到上千層。后來(lái)在ImageNet的數(shù)據(jù)庫(kù)上,error可以降到比人類還要低的錯(cuò)誤率。
圖七
背后的核心技術(shù)是深度卷積神經(jīng)網(wǎng)絡(luò),這個(gè)網(wǎng)絡(luò)其實(shí)是一切嵌套到非線性函數(shù)的組合,因?yàn)椴粩嗟那短追蔷€性,構(gòu)成了一個(gè)非常復(fù)雜的非線性系統(tǒng)。
深度神經(jīng)網(wǎng)絡(luò)的一個(gè)精髓是要做end-to-end Learning,輸入最好不要涉及feature,因?yàn)橹虚g的很多參數(shù)都希望整個(gè)系統(tǒng)是可求導(dǎo)的。不輸入feature的end-to-end Learning的 ,所有參數(shù)都可以學(xué),從而簡(jiǎn)化了訓(xùn)練過(guò)程,避免了很多人工因素。一個(gè)系統(tǒng)如果非常復(fù)雜的話,但人的能力是非常有限的,人類只能調(diào)有限的參數(shù),所以能簡(jiǎn)化訓(xùn)練的end-to-end Learning顯得尤為重要。
那么問(wèn)題來(lái)了,如果做一個(gè)非線性變換,這相當(dāng)于映射一個(gè)函數(shù),那么研究人員到底要做什么呢?以前研究人員的主要任務(wù)是設(shè)計(jì)feature,設(shè)計(jì)一個(gè)有效的feature是一個(gè)很大的貢獻(xiàn)。有了feature再設(shè)計(jì)分類器,在end-to-end Learning的體系下,你到底可以做什么東西,能夠?qū)nd-to-end Learning有用?
仔細(xì)觀察神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu),有一部分不是learn出來(lái)的,比如網(wǎng)絡(luò)的結(jié)構(gòu)就不是learn出來(lái)的,結(jié)構(gòu)目前還是手工指定的。
不過(guò)現(xiàn)在的一些最新的進(jìn)展,希望通過(guò)RNN的方法或者是深度增強(qiáng)學(xué)習(xí)的方法,來(lái)自動(dòng)探索網(wǎng)絡(luò)結(jié)構(gòu)。目前來(lái)說(shuō),還沒(méi)有很顯著的成果。
圖八
如果你指定一個(gè)卷積神經(jīng)網(wǎng)絡(luò)的話,里面的結(jié)構(gòu)有一些變量是可以來(lái)設(shè)計(jì)的。這個(gè)是時(shí)間復(fù)雜度的公式,這里面有幾個(gè)關(guān)鍵的數(shù)據(jù):Depth(深度),filter number(卷積神經(jīng)網(wǎng)絡(luò)每一層filter的數(shù)目),以及filter size卷積神經(jīng)網(wǎng)絡(luò)每一層filter的大?。┖蚮ilter map size(圖像卷積后的空間分辨率)。這同時(shí)也是決定一個(gè)網(wǎng)絡(luò)計(jì)算復(fù)雜度的公式。
其實(shí)一個(gè)網(wǎng)絡(luò)的能力在很大程度上是被計(jì)算力限制。比如說(shuō)計(jì)算力法則,如果相似體系的一個(gè)網(wǎng)絡(luò),如果計(jì)算力相似的話,不管參數(shù)多也好、少也好,包括上述提到的在變化的參數(shù),大致的filter能力都是相似的。在design space中,我們可以做一些事情,探尋一下怎樣組合這些參數(shù),能夠做一個(gè)更好的網(wǎng)絡(luò)。
圖九
其中有一些設(shè)計(jì)原理,比如在對(duì)圖像分類的時(shí)候,隨著層級(jí)的增加,應(yīng)該把圖像的空間分辨率慢慢縮小,但這同時(shí)也需要在每一層中增加filter number。后來(lái)大家發(fā)現(xiàn),用小的filter size是更經(jīng)濟(jì)的,還有一些則包括用Low-rank逼近的方法,比如說(shuō)在網(wǎng)絡(luò)中持續(xù)的用1*1的filter。
我們?cè)?015年的時(shí)候研究過(guò),哪些參數(shù)是最關(guān)鍵的,當(dāng)時(shí)的結(jié)論是在剛才的4個(gè)參數(shù)里面,深度是非常關(guān)鍵的。如果給定你一個(gè)fixed的計(jì)算代價(jià)的話,你首先要考慮的參數(shù)是深度,深度決定了這個(gè)網(wǎng)絡(luò)的能力。有興趣的話可以參看下面這篇論文。
圖十
2012年,AlexNet是8層網(wǎng)絡(luò),幾層卷積,幾層全連接。當(dāng)時(shí)很多人是不相信深度是有用的。但是兩年后,牛津大學(xué)和谷歌分別做了VGG Net 和Google Net,隨著層級(jí)的增加,性能得到大幅改善。
圖十一
2015年,微軟提出了ResNet,進(jìn)一步將深度從20多層推進(jìn)到152層。ResNet的關(guān)鍵思想是引入了一個(gè)跳層的技術(shù),理論上叫“殘差學(xué)習(xí)”的概念。我們可以將神經(jīng)網(wǎng)絡(luò)理解成嵌套很多層的映射,從輸入到輸出,如果直接映射很難的話,有可能殘差學(xué)習(xí)會(huì)更容易。殘差學(xué)習(xí)的意思是只學(xué)輸出相對(duì)輸入的變化,而不是直接學(xué)習(xí)輸入本身。
舉個(gè)例子,如果一張圖像有些噪點(diǎn),你想學(xué)習(xí)一張沒(méi)有噪點(diǎn)的照片,那你可能只需要學(xué)習(xí)怎樣去掉噪點(diǎn)就行了,而不需要去學(xué)習(xí)怎樣重構(gòu)一張自然的照片。
殘差學(xué)習(xí)的設(shè)計(jì)結(jié)構(gòu)和以前網(wǎng)絡(luò)比起來(lái)非常簡(jiǎn)單,只是加了一些跳層鏈接。
圖十二
這個(gè)網(wǎng)絡(luò)為什么能訓(xùn)練好?這個(gè)是我們官方的解釋,比較直觀。如果從前向角度看,在訓(xùn)練過(guò)程中有一個(gè)動(dòng)態(tài)的特性,整個(gè)訓(xùn)練系統(tǒng)是由淺到深的。在訓(xùn)練的初期,可以認(rèn)為我們是在訓(xùn)練一個(gè)淺層的網(wǎng)絡(luò),后期是深層網(wǎng)絡(luò)。目前神經(jīng)網(wǎng)絡(luò)采用反向傳播算法,梯度反傳過(guò)程中幅度會(huì)逐層衰減。如果網(wǎng)絡(luò)淺還好,如果很深的話會(huì)衰減到非常小,最后相當(dāng)于反向傳播,就傳播不到前面去了,導(dǎo)致訓(xùn)練困難。在新的Design of ResNet里面,大家可以看我們的論文,大概意思就是反向傳播的梯度會(huì)從最后結(jié)果一層直接回饋到很多中間層去。而這個(gè)幅度都是不小的。所以從這個(gè)意義上來(lái)說(shuō)是繞開(kāi)了以前梯度消失的問(wèn)題。
這個(gè)工作為什么會(huì)有這么大的意義?原因是當(dāng)做到20層后,就很難再做下去;當(dāng)再加層的時(shí)候,訓(xùn)練將變得非常困難。加完以后訓(xùn)練錯(cuò)誤和測(cè)試錯(cuò)誤都會(huì)增加,這其實(shí)是個(gè)非常大的優(yōu)化問(wèn)題,ResNet就試圖解決這個(gè)優(yōu)化的問(wèn)題。
圖十三
方法有兩種:
第一種方法尋找是不同于隨機(jī)梯度下降的新方法,這個(gè)可以行的通,但是非常困難。神經(jīng)網(wǎng)絡(luò)發(fā)展這么多年,最有效的還是隨機(jī)梯度下降法,原因未知。
第二個(gè)方法,如果能夠從新定義這個(gè)問(wèn)題,重新修改數(shù)學(xué)的formulation的話,就會(huì)使解決問(wèn)題變得容易。學(xué)解線性系統(tǒng)的時(shí)候我們知道,有一種方法叫做preconditioning,要解方程時(shí),左右兩邊乘另外一個(gè)矩陣,乘完以后整個(gè)系統(tǒng)的解其實(shí)是不變的,但是這樣以后去做優(yōu)化就會(huì)變得容易很多。通過(guò)類比以后,殘差學(xué)習(xí)的reformulation,可以讓優(yōu)化過(guò)程變得更容易,這個(gè)也是引入殘差學(xué)習(xí)最大的意義。
ResNet優(yōu)化的結(jié)果是到今天為止不管設(shè)計(jì)多少層的網(wǎng)絡(luò),只要顯存裝的下,只要能訓(xùn)練起來(lái),這些都沒(méi)有任何問(wèn)題。這就破除了深度學(xué)習(xí)歷史上的一個(gè)魔咒:深到一定程度就訓(xùn)練不了了。在深度學(xué)習(xí)的發(fā)展過(guò)程中,在一定階段是沒(méi)有人相信會(huì)有這么深的訓(xùn)練系統(tǒng)。如果考慮非線性系統(tǒng)的話,這么多的參數(shù),這么高的非線性,怎么能給他訓(xùn)練好呢?現(xiàn)在實(shí)踐做到了,但理論研究很不完善,因?yàn)樗且粋€(gè)高度的非線性系統(tǒng),缺少有效的分析工具,大多數(shù)好的分析工具都是分析線性系統(tǒng)的。
以上是ResNet的基本原理。
圖十四
下一步曠視(Face++)要做的就是如何將ResNet 怎么設(shè)計(jì)的更好,其中一個(gè)方向是要有更高的精度,但是在實(shí)際的工程應(yīng)用中有個(gè)很大的問(wèn)題:就是它的計(jì)算量是非常大的。如果你用參加ImageNet得冠軍的那個(gè)Model來(lái)去做實(shí)際應(yīng)用的話是非常不現(xiàn)實(shí)的。
大家可以看一下這個(gè)圖,x軸是不同的網(wǎng)絡(luò),y軸上每個(gè)bar上的數(shù)字是每個(gè)網(wǎng)絡(luò)的計(jì)算量,單位是GFLOPs??梢钥吹诫m然error下降了,但是計(jì)算量卻在不停的上升。雖然結(jié)果做的很好,但是計(jì)算量非常的大。比如說(shuō)一個(gè)好的網(wǎng)絡(luò)可以到十幾到二十幾的GFLOPs,但是在實(shí)際應(yīng)用中,我們常用的手機(jī)或者嵌入式設(shè)備,能承擔(dān)的GFLOPs可能在0.01,也就是說(shuō)你需要做一個(gè)百分之一或者千分之一計(jì)算復(fù)雜度的Model,才可以在實(shí)際的系統(tǒng)用,所以這是一個(gè)很大的挑戰(zhàn)。
圖十五
目前曠視(Face++)與研究領(lǐng)域在不同的方向探索后找到了一個(gè)解決方案,大致有三類方式可以解決這個(gè)問(wèn)題:設(shè)計(jì)一個(gè)更好的網(wǎng)絡(luò),或者簡(jiǎn)化網(wǎng)絡(luò),再或者對(duì)于如何表述網(wǎng)絡(luò)內(nèi)部的值可以做一些研究。
圖十六
第一,如何更好的設(shè)計(jì)這個(gè)網(wǎng)絡(luò)?這里列了一些最近比較流行的網(wǎng)絡(luò)設(shè)計(jì)。整體網(wǎng)絡(luò)的結(jié)構(gòu)還是ResNet的設(shè)計(jì),但是每一層怎么設(shè)計(jì),每一層怎么設(shè)計(jì)最經(jīng)濟(jì),所以這是一個(gè)非常重要的問(wèn)題。
第二,在簡(jiǎn)化網(wǎng)絡(luò)方面,我們可以做結(jié)構(gòu)的Pruning,這里我大概分了一共有3種方法。
第一種方法叫做稀疏連接,本來(lái)一個(gè)網(wǎng)絡(luò)里有很多連接的。然后基本思想是去除不重要的連接,讓這個(gè)連接變稀疏了。但是這個(gè)方法的問(wèn)題就是它可以減少網(wǎng)絡(luò)的模型大小,但是不一定能夠減少網(wǎng)絡(luò)的運(yùn)行時(shí)間;
第二種就是tensor分解的方法,就是把一個(gè)卷積網(wǎng)絡(luò)通過(guò)tensor分解,用它的低值特性做逼近;
第三種是channel pruning,是我們最近做的一種比較有趣的方法,就是訓(xùn)練好一個(gè)網(wǎng)絡(luò)后,簡(jiǎn)單粗暴的把一些channel 去掉。
圖十七
其中這個(gè)tensor分解的方法,基本思想是a是原來(lái)網(wǎng)絡(luò)設(shè)計(jì)的卷積過(guò)程,然后怎么能夠?qū)⑺ㄟ^(guò)一個(gè)低值分解的方式,拆成中間的channel filter數(shù)目比較小的b。
圖十八
圖十九
第三,就是我們?cè)跁缫暎‵ace++)做的非常多的Low-bit的表示。這張圖大概描述了一下什么是卷積,卷積就是輸入一個(gè)三維的feature map,拿另外一個(gè)卷積核在上面卷,feature map標(biāo)準(zhǔn)的話都是float表示的,卷積核其實(shí)也是一個(gè)三維的矩陣,它也是float表示的。Low-bit的表示方法就是不要用這些float的方式來(lái)表示,而是用一些低精度的表示,比如8位或者更加極端的兩位來(lái)表示。大家可以看到這是之前的兩篇比較著名的工作。一個(gè)是Binary connect,他的思想是把這個(gè)weight都變成01,這也是很夸張的一個(gè)想法。下面是更進(jìn)一步的工作,它是將feature和weight全變成01,這樣的好處是叫XNOR-Net,好處是卷積神經(jīng)網(wǎng)絡(luò)里的矩陣層,可以變成一個(gè)bitcount的指令,就可以完成它想要完成的計(jì)算,這個(gè)是在硬件中很有效的一個(gè)方法,也是Low-bit網(wǎng)絡(luò)非常吸引人的地方。優(yōu)點(diǎn)在于:1.內(nèi)存可以降得非常多;2.潛在的加速比非常大。
這個(gè)(Low-bit)Reoresentation是我們曠視(Face++)研究員做的,它除了能量化weight或feature,還可以量化gridient,就是在反向回傳的過(guò)程中,gridient標(biāo)準(zhǔn)其實(shí)也是float的,他的意義是如果你想做并行訓(xùn)練,主要問(wèn)題是通訊的overfit非常大,也需要傳gridient,或者你想把訓(xùn)練放在FPGA或者芯片上來(lái)做的話,這樣如果你能做weight或feature,gridient的話,你就可以做這樣的訓(xùn)練,所以我們推薦了一個(gè)設(shè)置就是weight用01表示,activation用兩位表示,gridient用4位表示。所以我們同事將它取名為DOReFa-Net。
圖二十
這個(gè)圖表是最近的一個(gè)類似的工作,比較了一下DOReFa-Net和他們的Net的性能差別。
未完待續(xù),請(qǐng)持續(xù)關(guān)注雷鋒網(wǎng)的后續(xù)文章……
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見(jiàn)轉(zhuǎn)載須知。