不錯的 Tutorial:html
分享人 | 葉聰(騰訊雲 AI 和大數據中心高級研發工程師)前端
整 理 | Leonode
出 品 | 人工智能頭條(公衆號ID:AI_Thinker)python
剛剛過去的五四青年節,你的朋友圈是否被這樣的民國風照片刷屏?用戶只須要在 H5 頁面上提交本身的頭像照片,就能夠自動生成諸如此類風格的人臉比對照片,簡潔操做的背後離不開計算機視覺技術和騰訊雲技術的支持。git
那麼這個爆款應用的背後用到了哪些計算機視覺技術?掌握這些技術須要經過哪些學習路徑?github
5 月 17 日,人工智能頭條邀請到騰訊雲 AI 和大數據中心高級研發工程師葉聰,他以直播公開課的形式爲你們解答了這些問題,算法
人工智能頭條將主要內容整理以下:數據庫
▌1、朋友圈爆款活動介紹小程序
你們常常在朋友圈看到一些頗有趣的跟圖像相關的小遊戲,包括之前的軍裝照以及今年五四青年節的活動。這個活動很是有意思,你們能夠選擇一張本身以爲拍的最美的照片,而後上傳到 H5 的應用裏面,咱們就會幫你匹配一張近現代比較優秀的青年照片。那張照片是老照片,而你們上傳的是新照片,這就產生了一些比較有意思的對比,這個活動今年也是獲得了強烈的反響,你們很是喜歡。api
全部的這些算法構建完之後,咱們把它上傳到了騰訊雲的 AI 大平臺上去。由於咱們參照了去年軍裝照的流量,因此此次活動咱們預估了 5 萬 QPS,這實際上是很高的一個要求。該活動 5 月 4 日上線,截止 5 月 5 日下線,在短短兩天內,在線 H5 頁面的 PV 達到了 252.6 萬,UV 111.3 萬,服務調用量 420 萬,仍是比較驚人的。
▌2、計算機視覺基礎知識
首先計算機視覺是什麼?計算機視覺研究如何讓計算機從圖像和視頻中獲取高級和抽象信息。從工程角度來說,計算機視覺能夠使模仿視覺任務自動化。
通常來講計算機視覺包含如下分支:
物體識別
對象檢測
語義分割
運動和跟蹤
三維重建
視覺問答
動做識別
這邊額外提一下語義分割,爲何要提這個呢?由於語義分割這個詞也會在包括 NLP、語音等領域裏出現,可是實際上在圖像裏面分割的意思跟在語音和 NLP 裏面都很不同,它實際上是對圖像中間的不一樣的元素進行像素級別的分割。好比最右下角這張圖片,咱們能夠看到行人、車輛、路,還有後面的樹,他們都用不一樣的顏色標註,其實每一種顏色就表明了一種語義。左邊和中間的兩幅圖,可能我不用介紹,你們也應該能猜到了,一個是人臉識別,一個是無人駕駛,都是如今使用很是普遍和熱門的應用。
如何讓機器能夠像人同樣讀懂圖片?人在處理圖像的時候,咱們是按照生物學的角度,從圖像到視網膜而後再存儲到大腦。但機器沒有這套機制,那機器如何把圖片裝載到內存裏面?這個就牽扯到一個叫 RGB-alpha 的格式。
顧名思義,就是紅綠藍三色,而後,alpha 是什麼?若是你們在早期的時候玩過一些電腦硬件,你可能會發現,最先期的顯卡是 24 位彩色,後來出現一個叫 32 位真彩色,都是彩色的,有什麼不一樣嗎?由於在計算機領域,咱們用 8 位的二進制去表示一種顏色,紅綠藍加在一塊兒就是 24 位,基本上咱們把全部顏色都表示出來了。
爲何還出現 alpha?alpha 是用來表示一個像素點是否是透明的,但並非說 alpha 是 1 的時候它就是透明,是 0 的時候就不透明。只是說阿爾法通道至關於也是一個矩陣,這個矩陣會跟 RGB 的其餘的矩陣進行一種運算,若是 alpha 的這個點上是 1,它就不會影響 RGB 矩陣上那個點的數值,它就是之前原來的顏色,若是是 0,這個點就變成透明的。這也是咱們怎麼用 RGB 加 alpha 通道去描述世界上全部的圖片的原理。
好比右上角,這張圖片是黑白圖,中間是彩色圖,下面一張是有些透明效果,右下角基本上沒有像素點,這就是一個很好的例子,去理解 RGB 是怎麼一回事。
除了 RGB-alpha 這種表達方式,咱們還有不少不一樣的顏色表達方式。包括若是咱們搞印刷的話,你們可能接觸到另一種色系,叫 CMYK,這個也是一種顏色的表示方式。這邊還會有一些其餘類型的圖片,包括紅外線圖片,X 光拍攝的圖片,紅外熱成像圖,還有顯微鏡拍攝的細胞圖,這些加在一塊兒都是咱們計算機能夠處理的圖像的範圍,不只僅是咱們以前看到,用手機、攝像機拍攝的圖片。
咱們在計算機視覺中常常會提到 stages,爲何叫 stages?
這邊咱們看到,有 Low level,Mid level,High level,這裏澄清一下,並非說 Low Level 這些應用就比較低級,High level 就比較高端,這個描述的維度實際上是從咱們看問題的視野上來講的,Low level 表明咱們離這個問題很是近,High level 表明比較遠。
舉一個簡單例子,好比 Low Level 上面咱們能夠作圖像的降噪、優化、壓縮、包括邊緣檢測,無論是哪一條,咱們都是能夠想象一下,咱們是離這個圖片很是近的去看這個細節。High level 是什麼?包括情景理解、人臉識別、自動駕駛,它基本上是從一個比較遠的角度來看這個大局。
因此其實你們能夠這麼想,在解決問題的時候,咱們要離圖片的視覺大概保持多遠的距離,High 表明比較遠,Low 表明比較近,並非說 High 比 Low 要難,或者說要高端。
Mid level 介於 High 跟 Low 之間的,包括分類、分割、對象檢測,後面還有情景分割,這邊的情境分割跟分割還不太同樣,應該說是更深度的分割問題,後面我會詳細解釋。
這邊有一些例子是幫你們去理解 Low level Processing。好比左上那張是咱們拍 X 光會看到的圖,上面那張圖是原始的 X 光的圖片,你們能夠看到,很是的不清晰,很難去理解到裏面的骨骼,血管在什麼位置。但經過 Low Level Processing 的降噪和優化,就能很是清晰的看到這個病人的全部的骨骼及內臟的位置。
中間這個是一個 PCB 板,一些工業領域爲了檢測 PCB 板就會拍攝照片,作圖像處理,並用這種方式去找到板上的一些問題,而後去修復它。有的時候也爲了質量品控,看到中間這張的 PCB 板原始的圖片上面充滿了噪音,通過優化、降噪之後就獲得一張很清晰的照片。
這個是 Mid level Processing,目前這塊的技術比較成熟。這塊的應用包括分類、分割、目標檢測,也包括情景檢測、情景分割,甚至還有意圖檢測,就是經過看圖片裏面的一些物體和他們目前在作的一些行爲來判斷他們的意圖。
底下有幾張小貓咪和小狗的圖,從左到右是一個進階的方向。首先最容易想到的一個應用,就是怎麼能用機器學習的方法讀懂一張圖片裏面的內容,那這個方法如何去實現它呢?其實就是用了一個分類,由於左邊那張圖片若是給了機器,分類算法會告訴你裏面有一隻貓,可是僅此而已。
那若是咱們想知道,這裏面有只貓,但這隻貓在哪裏呢?這個問題,咱們就須要在這個基礎上加上定位,也就是第二張圖片,那咱們就能夠定位到,原來這裏是貓咪所在的範圍,只是在這個方框範圍內,並無精確到像素級別。
再進一步,若是這張圖片裏面不只僅有貓,可能會有不少其餘的東西,我但願把全部的東西都標識出來,應該怎麼辦?這個任務叫作叫對象檢測,就是把圖片裏面全部的這些對象所有標註檢測出來。
再進一步,我不但想把裏面的對象所有標註出來,我還要精確的知道,它們在圖像的什麼位置,這種狀況下我可能想把它們剝離出來,把背景去掉。通常狀況下,這種被咱們框出來的對象叫作前景,其餘的這些部分叫作後景。咱們若是想把前景弄出來,那咱們就須要這種對象分割的技術,從左到右,咱們就完成了分類、定位、檢測、對象分割的所有流程,從頭至尾也是一個慢慢晉升的過程。由於定位是須要分類的基礎的,對象檢測是須要有分類基礎的,情景分割也須要有檢測的基礎,它是一個由淺入深的一個過程。
最右邊就是一個情景分割的例子,以前我也簡單介紹過,如今的技術已經能夠精確的把咱們這張圖片上的幾乎全部的元素很精確的給分出來,包括什麼是人、車、路、景色、植物、大樓等所有都能分出來,咱們的技術目前在 Mid level Processing 這塊已經很成熟了。
接下來簡單介紹一下 High level Processing,也是目前很是熱門和有前景,可是應該說遠遠還未達到成熟的技術。可能目前,你們作最好的 High level Processing 就是人臉檢測。
左下角那張是無人駕駛,也能夠叫作高智能的輔助駕駛,不一樣的車廠,不一樣的定義,基本上就是對象檢測的一個複雜應用,包括檢測到路上的全部狀況,包括不一樣的地上標識,周圍的建築,還有在你前面的全部車輛,甚至行人,各類信息,還包括跟他們的距離,它是一個相對來講多維度的,是個複雜的對象檢測的應用。
中間的是兩個小朋友在打網球,這張圖片也是兩我的物,跟以前Mid level Processing有什麼區別嗎?其實從右邊那個對象樹上,咱們就能判斷,它是對這個圖片理解的深度有了很是本質的區別。前一個那個例子,咱們知道圖片上有貓有狗,僅此而已。而這張圖片上,咱們除了判斷到,圖片上有兩個孩子之外,還對他們的各類穿着,都進行了精確的分割和定義,包括他們手上的這些持有的球拍,咱們都有個很是詳細的描述,因此High level圖像的理解並非簡單的說有哪些東西,而是他們之間的聯繫、細節。High level自己不只能識別咱們的圖上有什麼東西,它還能識別,應該作什麼,他們的關係是什麼。
右邊那張圖片是一個醫學的應用,一個心血管的虛擬圖。它是英國皇家醫學院跟某個大學合做的一個項目,咱們經過計算機視覺去模擬一個病人的心血管,幫助醫生作判斷,是否要作手術,應該怎麼去作手術方案,這個應該是計算機視覺在醫學上的很好的一個應用的例子。
這裏有一些比較常見的計算機視覺的應用,平時咱們也會用到,包括多重的人臉識別,如今有些比較流行的照片應用,不知道你們平時會不會用到,包括好比像 Google photos,基本上傳一張照片上去,它就會對一樣的照片一樣的人物進行歸類,這個也是目前很是常見的一個應用。
中間那個叫 OCR,就是對文本進行掃描和識別,這個技術目前已經比較成熟了。照片上這張是比較老的技術,當時我記得有公司作這個應用,有個掃描筆,掃描一下就變成文字,如今的話,基本上已經不須要這麼近的去掃描了,你們只要拍一張照片,若是這張照片是比較清晰的,通過一兩秒鐘,通常咱們如今算法就能夠直接把它轉換成文字,並且準確率至關高,因此圖片上的這種 OCR 是一個過期的技術。
右下角是車牌檢測,開車的時候不當心壓到線了,闖紅燈了,收到一張罰單,這個怎麼作到呢?也是計算機視覺的功勞,它們能夠很容易的就去識別這個照片裏的車牌,甚至車牌有必定的污損,通過計算機視覺的加強都是能夠把它給能夠優化回來的,因此這個技術也是比較實用的。
下面聊幾個比較有挑戰性的計算機視覺的任務。首先是目標跟蹤,目標跟蹤就是咱們在連續的圖片或者視頻流裏面,想要去追蹤某一個指定的對象,這個聽起來對人來講是一個很是容易的任務,你們只要目不轉睛盯着一個東西,沒有人能逃脫咱們的視野。
實際上對機器來講,這是一個頗有挑戰性的任務,爲何呢?由於機器在追蹤對象的時候,大部分會使用最原始的一些方法,採起一些對目標圖片進行形變的匹配,就是比較早期的計算機識別的方法,而這個方法在實際應用中間是很是難以實現的,爲何?由於須要跟蹤的對象,它因爲角度、光照、遮擋的緣由包括運動的時候,它會變得模糊,還有類似背景的干擾,因此咱們很難利用模板匹配這種方法去追蹤這個對象。一我的他面對你、背對你、側對你,可能景象徹底不同,這種狀況下,一樣一個模板是沒法匹配的,因此說,頗有潛力但也頗有挑戰性,由於目前對象追蹤的算法徹底沒有達到人臉識別的準確率,還有不少的人在不斷的努力去尋找新的方法去提高。
右邊也是一個例子,就是簡單的一個對咱們頭部的追蹤,也是很是有挑戰性的,由於咱們頭能夠旋轉,尺度也可能發生變化,用手去遮擋,這都給匹配形成很大的難度。
後面還有一些比較有挑戰性的計算機視覺任務,咱們歸類把它們叫作多模態問題,其中包括 VQA,這是什麼意思?這個就是說給定一張圖片,咱們能夠任意的去問它一些問題,通常是比較直接的一些問題,Who、Where、How,相似這些問題,或者這個多模態的模型,要可以根據圖片的真實信息去回答咱們的問題。
舉個例子,好比底下圖片中間有兩張是小朋友的,計算機視覺看到這張圖片的時候它要把其中全部的對象所有分割出來,要了解每一個對象是什麼,知道它們其中的聯繫。好比左邊的小朋友在喝奶,若是把他的奶瓶分出來之後,它必需要知道這個小朋友在喝奶,這個關係也是很重要的。
屏幕上的問題是「Where is the child sitting?」,這個問題的複雜度就比單純的只是解析圖像要複雜的多。他須要把裏面全部信息的所有解析出來,而且能準確的去關聯他們的關係,同時這個模型還要可以理解咱們問這個問題究竟是什麼個用意,他要知道問的是位置,並且這個對象是這個小孩,因此這個是包含着計算機視覺加上天然語言識別,兩種這種技術的相結合,因此才叫多模態問題,模態指的是像語音,文字,圖像,語音,這種幾種模態放在一塊兒就叫多模態問題。
右邊一個例子是 Caption Generation,如今很是流行的研究的領域,給定一張圖片,而後對圖片裏面的東西進行描述,這個還有一些更有趣的應用,待會我會詳細介紹一下。
▌3、曾經的圖像處理——傳統方法
接下來咱們聊一聊,過去了不少年,你們積累的傳統的計算機視覺的圖像處理的方法。
首先提到幾個濾波器,包括空間濾波器,傅里葉、小波濾波器等等,這些都是咱們常常對圖像進行初期的處理使用的濾波器。通常狀況下,通過濾波之後,咱們會對圖像進行 Feature Design,就是咱們要從圖片中提取一些咱們以爲比較重要的,能夠用來作進一步的處理的一些參照的一個信息,而後利用信息進行分類,或者分割等等,這些應用,其中一些比較經典的一些方法,包括 SIFT、Symmetry、HOG,還有一些就是咱們分類會常常用到的一個算法,包括 SVM,AdaBoost,還有 Bayesian 等等。
進一步的分割還有對象檢測還有一些經典算法,包括 Water-shed、Level-set、Active shape 等。
首先咱們作 Feature Design,提取一個圖片中間對象的特色,最簡單能想到的方法,就是把這個對象的邊緣給分離出來,Edge Detection 也確實是很早期的圖像信息提取方法。
舉個例子,硬幣包括上面的圖案,都會通過簡單的 Edge Detection 所有提取出來,但實際上Edge Detection 在一些比較複雜的狀況上面,包括背景複雜的狀況下,它是會損失不少信息的,不少狀況下咱們看不到邊緣。
這樣狀況下你們還想出另一個方法叫 Local Symmetry,這種方法是看對象重心點,利用重心點去表明着這個圖像的一些特徵。
這個叫 Haar Feature,至關於結合了前面邊緣特徵,還有一些其餘的一些特徵的信息。Haar Feature 通常分爲三類
邊緣特徵
線性特徵
中心對角線特徵
經過處理,把圖片中全部的邊緣信息提取出來之後,就會對圖片整理得到一個特徵模板,這個特徵模板由白色和黑色兩種矩形組成,通常狀況下定義模板的特徵值爲白色的矩形像素和減去黑色像素矩形像素和。Haar Feature 實際上是反映了圖像的一個灰度變化的狀況,因此臉部的一些特徵,就能夠用矩形的模板來進行表述,好比眼睛要比臉頰顏色要深,鼻樑兩側比鼻樑顏色要深,嘴巴比周圍顏色深等等。咱們利用這些矩形就對圖像的一些細節進行了提取。
SIFT 尺度不變特徵變換,當對象有角度、特徵位置的變化時,咱們如何去持續的可以知道它們是一樣的一個東西,這個就要利用到 SIFT。SIFT 是一種局部檢測的特徵算法,這個算法是經過求圖片中的一些特徵點,對圖像進行匹配,這是很是老的一個算法,大概在 2000 年時候就提出來了,目前已是一個經常使用的非深度學習的一個圖像的一種匹配的算法。
另一個比較流行的方法叫 HOG 方向梯度直方圖,好比像這張圖片上顯示,在圖像中間,局部目標的表象和形狀可以對灰度的梯度、還有邊緣方向的密度有很好的表示。好比像這張圖像,人身上的梯度就是向着上下方向。而對於背景,因爲背景光的緣由,若是咱們作灰度的分析,會發現它的梯度是偏水平方向的,利用這種方式咱們就很容易的能夠把背景跟前景進行分割。另外若是不少小框裏的梯度方向幾乎一致的話,咱們就能夠認爲它是一個對象,這個方法是很好的能夠塑造一個分割的效果。實際上很早期的目標檢測就是 Feature Design,因此說檢測是基於分類的,也是這個意思。如今深度學習引入之後,不少理論也發生了一些變化,待會詳細介紹一下。
這個也是一個很是經典的分割方法,叫分水嶺算法,就是把這個圖像想象成一個地理上的地形圖,而後咱們對其中的各個山谷很是無差異的統一往裏面放水,總會有一些山谷先被填滿漫出來,那咱們爲了阻隔他們水流的流動就要建一些這種堤壩,這也是分水嶺算法的名字的由來。利用這種方式,咱們建壩的地方就是很好的一個圖像的分割的這種界線,你們能夠想象一下,把左邊這張圖和右邊的邊界聯繫起來,就會理解到這個算法是個很是巧妙的事。
常規的分水嶺算法仍是有些缺點的,好比因爲圖像上的一個噪音,常常會形成局部的一些過分分割,也會有一些圖像中的部分元素由於顏色相近不會被分割出來,因此常常會出現一些誤判,這也是分水嶺算法的一些侷限性。
ASM,中文名叫可變模板匹配,或者叫主觀形狀模型。這個翻譯聽起來都怪怪的,其實很好理解,它是對人臉上的一些特徵進行提取,採用的方式是在人臉上尋找一些邊角的地方進行繪點,通常繪製大概 68 個關鍵特徵點。而後利用這些特徵點,咱們去抽取一個原始的模型出來。
原始的模型抽出來以後,是否是能直接用呢?沒有那麼簡單,由於人臉有可能會因爲角度變化會發生一些形變,若是隻是單純的對比這 68 個點,是否是在新的圖片上面還有一樣的位置,大部分狀況都是 No。這時咱們要對這些特徵點進行一些向量的構建,咱們把那 68 個點提取出來,把它向量化,同時咱們對咱們須要比對的點,比對的那個臉部也進行一樣的工做,也把它向量化。而後咱們對原始圖片上的這種向量點和新圖片上的點進行簡單化匹配,能夠經過旋轉縮放水平位移,還有垂直位移這種方式,尋找到一個等式,讓它們儘可能的相等,最後優化的不能再優化的時候,就去比較閾值的大小,若是它小於某個閾值,這樣人臉就能匹配上,這個想法仍是比較有意思的。
另外,在這裏因爲 68 個點可能比較多,好久之前咱們的這種計算機的性能可能沒有那麼好,也沒有 GPU,咱們若是寫的時候爲了提升匹配的速度,就要想個辦法去下降須要比對特徵點的量,這個時候引出一個比較著名的算法叫主成分分析,利用這個 PC,咱們會作降維,好比一些沒有太大意義的點能夠去掉,減小數據量,減小運算量,提升效果,固然這並非必須的,它只是一個提高 ASM 實際效能的加分辦法。
▌4、圖像處理的爆發——深度學習方法
而後接下來咱們就聊一聊如今很是熱門,將來也會更加熱門的圖形學的深度學習方法。下面有兩個深度學習的網絡,所謂的深度學習實際就是深度神經網絡,叫深度神經網絡你們更容易理解。左邊那個是一個兩層的神經網絡,這裏要解釋一下,咱們通常說神經網絡的層數是不算輸入層的,兩層就是包括一個輸入層,一個隱層,和一個輸出層。因此有的時候,若是咱們提到了一個單層網絡,其實就是隻有輸入層和輸出層,你們知道這種狀況下面的淺度神經網絡是什麼?它就是咱們傳統的機器學習裏很是經典的邏輯迴歸和支持向量機。
這時候你會發現,深度學習並無那麼高不可攀,它其實跟咱們傳統的一些方法是有聯繫的。它只是多重的一種包裝,或者組合強化,而後反覆利用,最後打包成了一個新的機器學習的方法。
圖上有兩個神經網絡,其中有些共同點,首先他們都有一個輸入層,一個輸出層。這個就是全部的神經網絡必須的,中間的隱層纔是真正的不一樣的地方,不一樣的網絡爲了解決不一樣的問題,它就會有不一樣的隱層。
這個是對多重人臉識別設計的一個深度神經網絡,咱們能夠看到輸入層中間會作一些預處理,包括把圖片轉換成一些對比度圖。第一個隱層是 Face Features,從人臉上提取關鍵的特徵值。第二個隱層就是開始作特徵值匹配,最後的輸出層就是對結果進行輸出,通常就是分類。
除了剛纔咱們看到的典型神經網絡,還會有其餘各式各樣的網絡?有三角形,也有矩形的,矩形中間還有菱形的。神經網絡出現了之後,改變了你們的一些工做方式。以前,大部分機器學習的科學家是去選擇模型,而後選擇模型優化的方式。到了深度學習領域,你們考慮的是咱們使用什麼網絡來實現咱們的目的,實際上仍是區別比較大的。
CNN,也就是卷積神經網絡,它是目前應用最普遍的圖像識別網絡,瞭解 CNN 會對了解其餘網絡有很大的幫助,因此把這個做爲例子。
這個例子中咱們作了一個手寫識別,這裏包含輸入層、輸出層,還有卷積層、池化層。通常狀況下,不只僅作一次卷積,咱們還會屢次的作卷積,池化而後再卷積,利用這種方式去屢次的降維,池化層其實在這個卷積神經網絡中起一個做用,就是下降咱們數據的維度。
最後會有一個叫全鏈接層,它是個歷史遺留物,如今你們其實慢慢的也在減小使用全鏈接層,全鏈接層通常狀況下,它的做用就是對前面的各類池化卷積最後的結果進行一個歸類。而實際上如今深度學習比較講究端對端學習,又講究效率比較高,這種狀況下面,有的時候全鏈接層的意義就不是那麼大,由於這個分類有可能在卷積的時候就把它作了,其實這個裏面仍是有不少的能夠提高的地方。
再舉一個例子,目前比較流行的作圖像分割的還有不少基於 CNN 的新網絡。好比在 CNN 基礎上你們又加入了一個叫 Region Proposal Network 的東西,利用它們能夠去優化傳統 CNN 中間的一些數據的走向。Faster-RCNN 不是一蹴而就的,它是從RCNN中借鑑了 SPPNET 的一些特性,而後發明了 Fast-RCNN,又在 Fast-RCNN 的基礎上進一步的優化變成了 Faster-RCNN。
你們能看到,神經網絡也不是一成不變的,它也是不斷在進化的,而咱們最開始想到用神經網絡去解決圖像問題的時候,是因爲什麼緣由?是因爲當時咱們在嘗試去用 CNN 去作圖像檢測的時候發現了很大的困難,效果很差,這時就有很是厲害的科學家想了,咱們可不能夠把一個很是典型的檢測問題變爲分類問題,由於 CNN 用來解決分類問題是很是有效的,因此就會出現不少的這樣的轉換應用。我上面寫的每個網絡都是一篇很是偉大的論文,因此你們若是有興趣,我課後能夠分享一下。
目前除了 Faster-RCNN,還有一個應用效果很是好的一個網絡結構,叫 YOLO,它也是在 Faster-RCNN 上面,已經不只僅是進行了優化,而是改變了它的思惟模式。最開始,咱們以爲檢測若是轉化成分類會效果更好,後來發明 Faster-RCNN 的這個科學家以爲,有的時候可能仍是用迴歸的方式去解決目標檢測的問題效果會更好,他最後就搬出了 YOLO 這種新的神經網絡框架,從而從新返回到了用迴歸的方式去解決目標檢測問題的方式上來。
有的時候也並非說解決一樣一個問題是有不一樣方法,也並非說在一條路上一直走到黑是最好,換個思惟方式,在硬件和軟件條件達到一個新的層次的時候,有些已經用不了的技術如今就能用了,深度學習就是這麼來的。
咱們再聊一聊深度學習圖像應用的案例,好比說咱們提到的這個五四青年節活動,它是怎麼樣去設計的。首先呢,咱們會有一些圖片的訓練數據,而後在進入模型以前,咱們會對數據進行向量化,經過數據向量化,咱們就能夠獲得一個模型,而後獲得一個分類,和一個 score,這邊的 score 只是模型對這種結果一個相對的分析,通常咱們會選擇 score 最高的一個分類,而後前端會從這個分類中間選擇圖片,生成H5的這個結果,你們就能夠看到跟哪位歷史上的有名的青年類似了。
第二個也是多模態的例子,根據一張圖片去講一個浪漫的故事,當時咱們有這個想法的緣由是,咱們知道如今已經有看圖出文字描述的技術,那咱們能不能進一步的,讓圖片能夠講故事。這樣的話,這個應用就能夠幫助家裏有小寶寶的人羣。除了圖像識別之外,咱們還進行了一些意圖的分析。
在另外一方面,咱們會使用一個浪漫小說的數據庫,對另一個模型進行訓練。最後,咱們根據這個圖片裏面這些關健詞和它的意圖去匹配浪漫小說中間的文段,把有關的文段所有拿出來,拿出來這些文段有的是不成文章的,因此要進行下一輪的匹配,把這些文段中間的關鍵詞再去進一步的在小說庫裏面去匹配,成段的文字,這就實現了一個 storyteller。
這個項目除了最早咱們對圖像裏面的對象識別過程使用的是監督學習,其餘的都是非監督學習。這個系統是能夠天然的去套用到不少不一樣的地方,只要換個不一樣的文章數據庫,它就能夠講不一樣的故事。一些例子就是根據不一樣的圖片,好比左上角這張是我以爲分數最高的:有一個女性在沙灘上面走路,通過咱們的模型就輸出了一個很是浪漫的故事,基本上符合這個情景。
▌5、解析雲端AI能力支撐
咱們聊了不少計算機視覺圖像處理的一些算法,咱們是否是下一步還要考慮怎麼樣把這個算法落地,變成一個有趣的產品或者活動呢?若是是這樣,咱們須要一些什麼樣的能力呢?
咱們須要一個這樣的架構,好比像此次軍裝照活動,咱們會有很是高的訪問量,同時呢,它會有遍及全國的用戶,總體上來講,咱們首先要保證這個系統能穩定和彈性伸縮,然而因爲全部的機器都是有成本的,這裏咱們就要考慮到一個平衡,如何很好的高效承載服務的同時,又要保證這個系統可以足夠的穩定?
在這個活動背後,咱們使用了不少的騰訊雲的一些服務,包括靜態加速、負載均衡、雲服務器、對象存儲,還有一些 GPU 計算。後來發現 CPU 的性能是可以知足咱們的需求的,因此以後咱們 GPU 就沒有上,由於 CPU 的承載仍是比較高的,但實際上這一套流程是徹底都是能夠這麼運行的。通常狀況下,咱們會先用 SCD,裏面的 CDM 去作一個靜態的緩存,到離用戶最近的節點,這樣你們在訪問 H5 頁面的時候就不會等着圖片慢慢加載,由於它會在離你家最近的某一個數據中內心一次性的把它給到手機的客戶端上。
而後就到負載均衡器,就是把流量負載到背後海量的虛擬機上面。在不一樣的區域,好比北京會有,成都會有多個 ELB……這個 ELB 會掛載着不少個不一樣的 CVM,就是虛擬機,全部這些你們上傳的照片,匹配運算都是在每一個 CVM 上面去產生結果的,而後有些過程的信息,咱們也會存在 COS 上,這個 COS 存儲是沒有大小限制的,這樣多種需求均可以獲得知足。
這套機制目前證實是很是有效的,咱們未來的不少的活動會繼續在架構上面作一些優化。若是你有一個很好的想法或模型要去實現,也是能夠嘗試使用一下雲服務,這樣是最經濟和高效的。
騰訊雲人工智能產品方案矩陣
▌6、技能進階建議
最後咱們聊一聊技能進階的一些建議,若是咱們在 AI 這個方向上想有所進步的話,咱們應該怎麼作?右邊有個金字塔,它表示咱們要完成一個 AI 的產品,咱們須要的人力的數量,AI 算法這塊多是很核心的,但它須要的人數相對來講比較少一點。共同實現是中間的,你須要多一些的底層開發。因爲一樣一個算法模型,你可能會海量的應用,產品開發應用這個須要的人力的數量是最大的。
算法研究方面咱們要作什麼?首先是要打比如較強的數學基礎。由於機器學習中間大量的用到了比大學高等數學更復雜的數學知識,這些知識須要你們早作研究打好基礎,這就須要讀不少論文。同時還要鍛鍊本身對新的學術成果的理解和吸取能力,像剛纔提到了一個神經網絡圖像的分類問題,實際上,短短的十年時間實現了那麼多不一樣網絡的進化,每個新的網絡提出了,甚至尚未發表,只是在預發表庫裏面,你們就要很快的去吸取理解它,想把它轉化成能夠運行的模型,這個是要反覆鍛鍊的。
第二塊是工程實現方面,若是想從事這方面首先要增強本身邏輯算法封裝的能力,儘可能鍛鍊本身對模型的訓練和優化能力,這塊會須要你們把一個設計好的算法給落實到代碼上,不斷的去調整優化實現最好的結果,這個過程也是須要反覆磨鍊的。
最後一個方向是產品應用,這個首先你們要有必定的開發能力,無論是移動開發仍是 Web 開發,同時要提高本身 AI 產品場景的理解和應用。實際上不少AI產品跟傳統的產品是有很大的理解上的區別,你們可能要更新本身的這種想法,多去看一些 AI 產品目前是怎麼作的,有沒有好的點子,多去試用體會。同時若是咱們想把一個 AI 的模型變成百萬級、千萬級用戶使用的流行產品,咱們還須要有系統構建能力和優化能力。
做者 | 袁餘鋒(雲從科技研究院資深算法研究員)
編輯 | 明 明
出品 | 人工智能頭條(公衆號ID:AI_Thinker)
【導讀】跨鏡追蹤(Person Re-Identification,簡稱 ReID)技術是如今計算機視覺研究的熱門方向,主要解決跨攝像頭跨場景下行人的識別與檢索。該技術可以根據行人的穿着、體態、髮型等信息認知行人,與人臉識別結合可以適用於更多新的應用場景,將人工智能的認知水平提升到一個新階段。
本期大本營公開課,咱們邀請到了雲從科技資深算法研究員袁餘鋒老師,他將經過如下四個方面來說解本次課題:
一、ReID 的定義及技術難點;
二、經常使用數據集與評價指標簡介;
三、多粒度網絡(MGN)的結構設計與技術實現;
四、ReID 在行人跟蹤中的應用分析與技術展望
如下是公開課文字版整理內容
ReID 是行人智能認知的其中一個研究方向,行人智能認知是人臉識別以後比較重要的一個研究方向,特別是計算機視覺行業裏面,咱們首先簡單介紹 ReID 裏比較熱門的幾項內容:
一、行人檢測。任務是在給定圖片中檢測出行人位置的矩形框,這個跟以前的人臉檢測、汽車檢測比較相似,是較爲基礎的技術,也是不少行人技術的一個前置技術。
二、行人分割以及背景替換。行人分割比行人檢測更精準,預估每一個行人在圖片裏的像素機率,把這個像素分割出來是人或是背景,這時用到不少 P 圖的場景,好比背景替換。舉一個例子,一些網紅在作直播時,能夠把直播的背景替換成外景,讓體驗獲得提高。
三、骨架關鍵點檢測及姿態識別。通常識別出人體的幾個關鍵點,好比頭部、肩部、手掌、腳掌,用到行人姿態識別的任務中,這些技術能夠應用在互動娛樂的場景中,相似於 Kinnect 人機互動方面,關鍵點檢測技術是很是有價值的。
四、行人跟蹤「 MOT 」的技術。主要是研究人在單個攝像頭裏行進的軌跡,每一個人後面拖了一根線,這根線表示這我的在攝像頭裏行進的軌跡,和 ReID 技術結合在一塊兒能夠造成跨鏡頭的細粒度的軌跡跟蹤。
五、動做識別。動做識別是基於視頻的內容理解作的,技術更加複雜一點,可是它與人類的認知更加接近,應用場景會更多,這個技術目前並不成熟。動做識別能夠有很是多的應用,好比闖紅燈,還有公共場合突發事件的智能認知,像偷竊、聚衆鬥毆,攝像頭識別出這樣的行爲以後能夠採起智能措施,好比自動報警,這有很是大的社會價值。
六、行人屬性結構化。把行人的屬性提煉出來,好比他衣服的顏色、褲子的類型、揹包的顏色。
七、跨境追蹤及行人再識別 ReID 技術。
1、ReID 定義及技術難點
▌(一)ReID 定義
咱們把 ReID 叫「跨鏡追蹤技術」,它是如今計算機視覺研究的熱門方向,主要解決跨攝像頭跨場景下行人的識別與檢索。該技術能夠做爲人臉識別技術的重要補充,能夠對沒法獲取清晰拍攝人臉的行人進行跨攝像頭連續跟蹤,加強數據的時空連續性。
給你們舉個例子,右圖由四張圖片構成,黃色這我的是以前新聞報道中的偷小孩事件的人,這我的會出如今多個攝像頭裏,如今警察刑偵時會人工去檢索視頻裏這我的出現的視頻段。這就是 ReID 能夠應用的場景,ReID 技術能夠根據行人的穿着、體貌,在各個攝像頭中去檢索,把這我的在各個不一樣攝像頭出現的視頻段關聯起來,而後造成軌跡,這個軌跡對警察刑偵破案有必定幫助。這是一個應用場景。
▌(二)ReID 技術難點
右邊是 ReID 的技術特色:首先,ReID 是屬於行人識別,是繼人臉識別後的一個重要研究方向。另外,研究的對象是人的總體特徵,包括衣着、體形、發行、姿態等等。它的特色是跨攝像頭,跟人臉識別作補充。
2、經常使用數據集與評價指標簡介
不少人都說過深度學習其實也不難,爲何?只要有不少數據,基本深度學習的數據都能解決,這是一個相似於通用的解法。那咱們就要反問,ReID 是一個深度認知問題,是否是用這種邏輯去解決就應該可以迎刃而解?準備了不少數據,ReID 是否是就能夠解決?根據我我的的經驗回答一下:「在 ReID 中,也行!但僅僅是理論上的,實際操做上很是不行!」
爲何?第一,ReID 有不少技術難點。好比 ReID 在實際應用場景下的數據很是複雜,會受到各類因素的影響,這些因素是客觀存在的,ReID 必需要嘗試去解決。
第一組圖,無正臉照。最大的問題是這我的徹底看不到正臉,特別是左圖是個背面照,右圖戴個帽子,沒有正面照。
第二組圖,姿態。綠色衣服男子,左邊這張圖在走路,右圖在騎車,並且右圖還戴了口罩。
第三組圖,配飾。左圖是正面照,但右圖背面照出現了很是大的揹包,左圖只能看到兩個肩帶,根本不知道揹包長什麼樣子,但右圖的揹包很是大,這張圖片有不少揹包的信息。
第四組圖,遮擋。左圖這我的打了遮陽傘,把肩部以上的地方所有擋住了,這是很大的問題。
圖片上只列舉了四種狀況,還有更多狀況,好比:
一、相機拍攝角度差別大;
二、監控圖片模糊不清;
三、室內室外環境變化;
四、行人更換服裝配飾,如以前穿了一件小外套,過一下子把外套脫掉了;
五、季節性穿衣風格,冬季、夏季穿衣風格差異很是大,但從行人認知來說他極可能是同一我的;
六、白天晚上的光線差別等。
從剛纔列舉的狀況應該可以理解 ReID 的技術難點,要解決實際問題是很是複雜的。
ReID 經常使用的數據狀況如何?右圖列舉了 ReID 學術界最經常使用的三個公開數據集:
第一列,Market1501。用得比較多,拍攝地點在清華大學,圖片數量有 32000 張左右,行人數量是 1500 個,至關於每一個人差很少有 20 張照片,它是用 6 個攝像頭拍的。
第二列,DukeMTMC-reID,拍攝地點是在 Duke 大學,有 36000 張照片,1800 我的,是 8 個攝像頭拍的。
第三列,CUHK03,香港中文大學,13000 張照片,1467 個 ID,10 個攝像頭拍的。
看了這幾個數據集以後,應該能有一個直觀的感覺,就是在 ReID 研究裏,如今圖片的數量集大概在幾萬張左右,而 ID 數量基本小於 2000,攝像頭大概在 10 個如下,並且這些照片大部分都來自於學校,因此他們的身份大部分是學生。
這能夠跟如今人臉數據集比較一下,人臉數據集動輒都是百萬張或者千萬張照片,一我的臉的 ID 多的數據集能夠上百萬,並且身份很是多樣。這個其實就是 ReID 面對前面那麼複雜的問題,可是數據又那麼少的一個比較現實的狀況。
這裏放三個數據集的照片在這裏,上面是 Market1501 的數據集,好比紫色這我的有一些照片檢測得並很差,像第二張照片的人只佔圖片的五分之三左右,並非一個完整的人。還有些照片只檢測到了局部,這是如今數據集比較現實的狀況。
總結一下 ReID 數據採集的特色:
一、必須跨攝像頭採集,給數據採集的研發團隊和公司提出了比較高的要求;
二、公開數據集的數據規模很是小;
三、影響因素複雜多樣;
四、數據通常都是視頻的連續截圖;
五、同一我的最好有多張全身照片;
六、互聯網提供的照片基本沒法用在 ReID;
七、監控大規模蒐集涉及到數據,涉及到用戶的隱私問題。
這些都是 ReID 數據採集的特色,能夠歸結爲一句話:「數據獲取難度大,會對算法提出比較大的挑戰。」問題很複雜,數據很難獲取,那怎麼辦?如今業內儘可能在算法層面作更多的工做,提升 ReID 的效果。
這裏講一下評價指標,在 ReID 用得比較多的評價指標有兩個:
ReID 終歸仍是排序問題,Rank 是排序命中率核心指標。Rank1 是首位命中率,就是排在第一位的圖有沒有命中他本人,Rank5 是 1-5 張圖有沒有至少一張命中他本人。更能全面評價ReID 技術的指標是 mAP 平均精度均值。
這裏我放了三個圖片的檢索結果,是 MGN 多粒度網絡產生的結果,第一組圖 10 張,從左到右是第 1 張到第 10 張,全是他本人圖片。第二組圖在第 9 張圖片模型判斷錯了,不是同一我的。第三組圖,第 1 張到第 6 張圖是對的,後面 4 張圖檢索錯了,不是咱們模型檢索錯了,是這我的在底庫中總共就 6 張圖,把前 6 張檢索出來了,其實第三我的是百分之百檢索對的。
詳細介紹評價指標 mAP。由於 Rank1 只要第一張命中就能夠了,有一系列偶然因素在裏面,模型訓練或者測試時有一些波動。可是 mAP 衡量 ReID 更加全面,爲何?由於它要求被檢索人在底庫中全部的圖片都排在最前面,這時候 mAP 的指標纔會高。
給你們舉個例子,這裏放了兩組圖,圖片 1 和圖片 2 是檢索圖,第一組圖在底庫中有 5 張圖,下面有 5 個數字,咱們假設它的檢索位置,排在第 1 位、第 3 位、第 4 位、第 8 位,第 20 位,第二張圖第 1 位、第 3 位、第 5 位。
它的 mAP 是怎麼算的?對於第一張圖平均精度有一個公式在下面,就是 0.63 這個位置。第一張是 1 除以 1,第二張是除以排序實際位置,2 除以 3,第三個位置是 3 除以 4,第四個是 4 除以 8,第五張圖是 5 除以 20,而後把它們的值求平均,再總除以總的圖片量,最後得出的 mAP 值大概是 0.63。
一樣的算法,算出圖片 2 的精度是 0.756。最後把全部圖片的 mAP 求一個平均值,最後獲得的 mAP 大概是 69.45。從這個公式能夠看到,這個檢索圖在底庫中全部的圖片都會去計算 mAP,因此最好的狀況是這我的在底庫中全部的圖片都排在前面,沒有任何其餘人的照片插到他前面來,就至關於同一我的全部的照片距離都是最近的,這種狀況最好,這種要求是很是高的,因此 mAP 是比較可以綜合體現這個模型真實水平的指標。
再來看一下 ReID 實現思路與常見方案。ReID 從完整的過程分三個步驟:
ReID 研究某種意義上來說,若是抽象得比較高,也是比較清晰的。好比你們看下圖,假設黃色衣服的人是檢索圖,後面密密麻麻不少小圖組成的至關於底庫,從檢索圖和底庫都抽出表徵圖像的特徵,特徵通常都抽象爲一個向量,好比 256 維或者 2048 維,這個 Match 會用距離去計算檢索圖跟庫裏全部人的距離,而後對距離作排序,距離小的排在前面,距離大的排在後面,咱們理解距離小的這些人是同一我的的類似度更高一點,這是一個比較抽象的思惟。
剛纔講到核心是把圖像抽象成特徵的過程,我再稍微詳細的畫一個流程,左圖的這些圖片會通過 CNN 網絡,CNN 是卷積神經網絡,不一樣的研究機構會設計本身不一樣的網絡結構,這些圖片抽象成特徵 Feature,通常是向量表示。
而後分兩個階段,在訓練時,咱們通常會設計必定的損失函數,在訓練階段儘可能讓損失函數最小化,最小化過程反向把特徵訓練得更加有意義,在評估階段時不會考慮損失函數,直接把特徵抽象出來,用這個特徵表明這張圖片,放到前面那張 PPT 裏講的,去計算它們的距離。
由於如今 ReID 的不少研究課題都是基於 Resnet50 結構去修改的。Resnet 通常會分爲五層,圖像輸入是 (224,224,3),3 是 3 個通道,每層輸出的特徵圖譜長寬都會比上一層縮小一半,好比從 224 到 112,112 到 56,56 到 28,最後第五層輸出的特徵圖譜是 (7,7,2048)。
最後進行池化,變成 2048 向量,這個池化比較形象的解釋,就是每一個特徵圖譜裏取一個最大值或者平均值。最後基於這個特徵作分類,識別它是行人、車輛、汽車。咱們網絡改造主要是在特徵位置(7,7,2048)這個地方,像咱們的網絡是 384×128,因此咱們輸出的特徵圖譜應該是 (12,4,2048)的過程。
下面,我講一下 ReID 裏面經常使用的算法實現:
▌第一種,表徵學習。
給你們介紹一下技術方案,圖片上有兩行,上面一行、下面一行,這兩行網絡結構基本是同樣的,可是兩行中間這個地方會把兩行的輸出特徵進行比較,由於這個網絡是用了 4096 的向量,兩個特徵有一個對比 Loss,這個網絡用了兩種 Loss,第一個 Loss 是 4096 作分類問題,而後兩個 4096 之間會有一個對比 Loss。
這個分類的問題是怎麼定義的?在咱們數據集像 mark1501 上有 751 我的的照片組成,這個分類至關於一張圖片輸入這個網絡以後,判斷這我的是其中某一我的的機率,要把這個圖片分類成 751 個 ID 中其中一個的機率,這個地方的 Loss 通常都用 SoftmaxLoss。機器視覺的同窗應該很是熟悉這個,這是很是基本的一個 Loss,對非機器視覺的同窗,這個可能要大家本身去理解,它能夠做爲分類的實現。
這個方案是經過設計分類損失與對比損失,來實現對網絡的監督學習。它測試時取的是 4096 這個向量來表徵圖片本人。這個文章應該是發在 2016 年,做者當時報告的效果在當時的時間點是有必定競爭力的,它的 Rank1 到了 79.51%,mAP 是 59.87%
▌第二種,度量學習方案。
基於TripletLoss 三元損失的 ReID 方案。TripletLoss 是計算機視覺裏另一個經常使用的 Loss。
它的設計思路是左圖下面有三個點,目的是從數據裏面選擇三個圖片,這三個圖片由兩我的構成,其中兩張圖片是同一我的,另一張圖片不是同一我的,當這個網絡在沒有訓練的時候,咱們假設這同一我的的兩張照片距離要大於這我的跟不是同一我的兩張圖片的距離。
它強制模型訓練,使得同一我的兩張圖片的距離小於第三張圖片,就是剛纔那張圖片上箭頭表示的過程。它真正的目的是讓同類的距離更近,不一樣類的距離更遠。這是TripletLoss的定義,你們能夠去網上搜一下更詳細的解釋。
在 ReID 方案裏面我給你們介紹一個 Batchhard的策略,由於 TripletLoss 在設計時怎麼選這三張圖是有不少文章在實現不一樣算法,咱們的文章裏用的是 Batchhard算法,就是咱們從數據集隨機抽取 P 我的,每一個人 K 張圖片造成一個 Batch,每一個人的 K 張圖片之間造成一個 K×(K-1)個 ap 對,再在剩下其餘人裏取一個與該 ap 距離最近的 negtive,組成 apn 組,而後咱們這個模型使得 apn 組成的 Loss 儘可能小。
這個 Loss 怎麼定義?右上角有一個公式,就是 ap 距離減 an距離,m 是一個gap,這個值儘可能小,使得同類之間儘可能靠在一塊兒,異類儘可能拉開。右圖是 TripletLoss 的實驗方案,當時這個做者報告了一個成果,Rank1 到了 84.92%,mAP 到了 69%,這個成果在他發文章的那個階段是頗有競爭力的結果。
▌第三種,局部特徵學習。
一、基於局部區域調整的 ReID 解決方案。多粒度網絡也是解決局部特徵和全局特徵的方案。這是做者發的一篇文章,他解釋了三種方案。
因此他設計一個模型,使得這個模型動態調整不一樣區域在圖片中的佔比,把調整的信息跟原來三分的信息結合在一塊兒進行預估。做者當時報告的成果是 Rank1爲80% 左右,mAP爲57%,用如今的眼光來說,這個成果不是那麼顯著,但他把圖片切分紅細粒度的思路給後面的研究者提供了啓發,咱們的成果也受助於他們的經驗。
二、基於姿態估計局部特徵調整。局部切割是基於圖片的,但對裏面的語義不瞭解,是基於姿態估計局部位置的調整怎麼作?先經過人體關鍵點的模型,把這個圖片裏面人的關節位置取出來,而後按照人類對人體結構的理解,把頭跟頭比較,手跟手比較,按照人類的語義分割作一些調整,這相對於剛纔的硬分割更加容易理解。基於這個調整再去作局部特徵的優化,這個文章是發表在 2017 年,當時做者報告的成果 Rank1爲84.14%,mAP爲63.41%。
三、PCB。發表在 2018 年 1 月份左右的文章,咱們簡稱爲 PCB,它的指標效果在如今來看仍是能夠的,咱們多粒度網絡有一部分也是受它的啓發。下圖左邊這個特徵圖較爲複雜,能夠看一下右邊這張圖,右圖上部分藍色衣服女孩這張圖片輸入網絡後有一個特徵圖譜,大概個矩形體組成在這個地方,這是特徵圖譜。這個圖譜位置的尺寸應該是 24×8×2048,就是前面講的那個特徵圖譜的位置。
它的優化主要是在這個位置,它幹了個什麼事?它沿着縱向將24 平均分紅 6 份,縱向就是 4,而橫向是 8,單個特徵圖譜變爲 4×8×2048,但它從上到下有 6 個局部特徵圖譜。6個特徵圖譜變爲6個向量後作分類,它是同時針對每一個局部獨立作一個分類,這是這篇文章的精髓。這個方式看起來很是簡單,但這個方法跑起來很是有效。做者報告的成果在 2018 年 1 月份時 Rank1 達到了 93.8%,mAP 達到了 81.6%,這在當時是很是好的指標了。
3、多粒度網絡(MGN)的結構設計與技術實現
剛纔講了 ReID 研究方面的 5 個方案。接下來要講的是多粒度網絡的結構設計與實現。有人問 MGN 的名字叫什麼,英文名字比較長,中文名字是對英文的一個翻譯,就是「學習多粒度顯著特徵用於跨境追蹤技術(行人在識別)」,這個文章是發表於 4 月初。
▌(一)多粒度網絡(MGN)設計思路。
設計思想是這樣子的,一開始是全局特徵,把整張圖片輸入,咱們提取它的特徵,用這種特徵比較 Loss 或比較圖片距離。但這時咱們發現有一些不顯著的細節,還有出現頻率比較低的特徵會被忽略。好比衣服上有個 LOGO,但不是全部衣服上有 LOGO,只有部分人衣服上有 LOGO。全局特徵會作特徵均勻化,LOGO 的細節被忽略掉了。
咱們基於局部特徵也去嘗試過,用關鍵點、人體姿態等。但這種有一些先驗知識在裏面,好比遮擋、姿態大範圍的變化對這種方案有一些影響,效果並非那麼強。
後來咱們想到全局特徵跟多粒度局部特徵結合在一塊兒搞,思路比較簡單,全局特徵負責總體的宏觀上你們共有的特徵的提取,而後咱們把圖像切分紅不一樣塊,每一塊不一樣粒度,它去負責不一樣層次或者不一樣級別特徵的提取。
相信把全局和局部的特徵結合在一塊兒,可以有豐富的信息和細節去表徵輸入圖片的完整狀況。在觀察中發現,確實是隨着分割粒度的增長,模型可以學到更詳細的細節信息,最終產生 MGN 的網絡結構。
下面演示一下多粒度特徵,演示兩張圖,左邊第一列有 3 張圖,中間這列把這3張圖用二分之一上下均分,你能夠看到同一我的有上半身、下半身,第三列是把人從上到下分紅三塊——頭部、腹胸、腿部,它有 3 個粒度,每一個粒度作獨立的引導,使得模型儘可能對每一個粒度學習更多信息。
右圖表示的是注意力的呈現效果,這不是基於咱們模型產生的,是基於以前的算法看到的。左邊是整張圖在輸入時網絡在關注什麼,整我的看着比較均勻,範圍比較廣一點。第三欄從上到下至關於把它切成 3 塊,每一塊看的時候它的關注點會更加集中一點,亮度分佈不會像左邊那麼均勻,更關注局部的亮點,咱們能夠理解爲網絡在關注不一樣粒度的信息。
▌(二)多粒度網絡(MGN)——網絡結構
這是 MGN 的網絡架構完整的圖,這個網絡圖比較複雜,第一個,網絡從結構上比較直觀,從效果來說是比較有效的,若是想復現咱們的方案仍是比較容易的。若是你是作深度學習其餘方向的,咱們這個方案也有必定的普適性,特別是關注細粒度特徵時,由於咱們不是隻針對 ReID 作的。咱們設計的結構是有必定普適性,我把它理解爲「易遷移」,你們能夠做爲參考。
首先,輸入圖的尺寸是 384×128,咱們用的是 Resnet50,若是在不作任何改變的狀況下,它的特徵圖譜輸出尺寸,從右下角表格能夠看到,global 這個地方就至關於對 Resnet 50不作任何的改變,特徵圖譜輸出是 12×4。
下面有一個 part-2 跟 part-3,這是在 Res4_1 的位置,原本是有一個stride 等於 2 的下采樣的操做,咱們把 2 改爲 1,沒有下采樣,這個地方的尺寸就不會縮小 2,因此 part-2 跟 part-3 比 global 大一倍的尺寸,它的尺寸是 24×8。爲何要這麼操做?由於咱們會強制分配 part-2 跟 part-3 去學習細粒度特徵,若是把特徵尺寸作得大一點,至關於信息更多一點,更利於網絡學到更細節的特徵。
網絡結構從左到右,先是兩我的的圖片輸入,這邊有 3 個模塊。3 個模塊的意思是表示 3 個分支共享網絡,前三層這三個分支是共享的,到第四層時分紅三個支路,第一個支路是 global 的分支,第二個是 part-2 的分支,第三個是 part-3 的分支。在 global 的地方有兩塊,右邊這個方塊比左邊的方塊大概縮小了一倍,由於作了個下采樣,下面兩個分支沒有作下采樣,因此第四層和第五層特徵圖是同樣大小的。
接下來咱們對 part-2 跟 part-3 作一個從上到下的縱向分割,part-2 在第五層特徵圖譜分紅兩塊,part-3 對特徵圖譜從上到下分紅三塊。在分割完成後,咱們作一個 pooling,至關於求一個最值,咱們用的是 Max-pooling,獲得一個 2048 的向量,這個是長條形的、橫向的、黃色區域這個地方。
可是 part-2 跟 part-3 的操做跟 global 是不同的,part-2 有兩個 pooling,第一個是藍色的,兩個 part 合在一塊兒作一個 global-pooling,咱們強制 part-2 去學習細節的聯合信息,part-2 有兩個細的長條形,就是咱們剛纔引導它去學細節型的信息。淡藍色這個地方變成小方體同樣,是作降維,從 2048 維作成 256 維,這個主要方便特徵計算,由於能夠降維,更快更有效。咱們在測試的時候會在淡藍色的地方,小方塊從上到下應該是 8 個,咱們把這 8 個 256 維的特徵串連一個 2048 的特徵,用這個特徵替代前面輸入的圖片。
▌(三)多粒度網絡(MGN)——Loss設計
Loss 說簡單也簡單,說複雜也複雜也複雜,爲何?簡單是由於整個模型裏只用了兩種Loss,是機器學習裏最多見的,一個是 SoftmaxLoss 一個是 TripletLoss。複雜是由於分支比較多,包括 global 的,包括剛纔 local 的分支,並且在各個分支的 Loss 設計上不是徹底均等的。咱們當時作了些實驗和思考去想 Loss 的設計。如今這個方案,第一,從實踐上證實是比較好的,第二,從理解上也是容易理解的。
首先,看一下 global 分支。上面第一塊的 Loss 設計。這個地方對 2048 維作了SoftmaxLoss,對 256 維作了一個 TripletLoss,這是對 global 信息通用的方法。下面兩個部分 global 的處理方式也是同樣的,都是對 2048 作一個 SoftmaxLoss,對 256 維作一個 TripletLoss。中間 part-2 地方有一個全局信息,有 global 特徵,作 SoftmaxLoss+TripletLoss。
可是,下面兩個 Local 特徵看不到 TripletLoss,只用了 SoftmaxLoss,這個在文章裏也有討論,咱們當時作了實驗,若是對細節當和分支作 TripletLoss,效果會變差。爲何效果會變差?
一張圖片分紅從上到下兩部分的時候,最完美的狀況固然是上面部分是上半身,下面部分是下半身,可是在實際的圖片中,有可能整我的都在上半部分,下半部分全是背景,這種狀況用上、下部分來區分,假設下半部分都是背景,把這個背景放到 TripletLoss 三元損失裏去算這個 Loss,就會使得這個模型學到莫名其妙的特徵。
好比背景圖是個樹,另一張圖是某我的的下半身,好比一個女生的下半身是一個裙子,你讓裙子跟另外圖的樹去算距離,不管是同類仍是不一樣類,算出來的距離是沒有任何物理意義或實際意義的。從模型的角度來說,它屬於污點數據,這個污點數據會引導整個模型崩潰掉或者學到錯誤信息,使得預測的時候引發錯誤。因此之後有同窗想復現咱們方法的時候要注意一下, Part-二、part-3 的 Local 特徵千萬不要加 TripletLoss。
▌(四)多粒度網絡(MGN)——實驗參數
圖片展現的是一些實驗參數,由於不少同窗對復現咱們的方案有必定興趣,也好奇到底這個東西爲何能夠作那麼好。其實咱們在文章裏把不少參數說得很是透,你們能夠按照咱們的參數去嘗試一下。
咱們當時用的框架是 Pytorch。TripletLoss 復現是怎麼選擇的?咱們這個 batch是選 P=16,K=4,16×4,64 張圖做爲 batch,是隨機選擇16 我的,每一個人隨機選擇 4 張圖。
而後用 SGD 去訓練,咱們的參數用的是 0.9。另外,咱們作了weight decay,參數是萬分之五。像 Market1501 是訓練 80epochs,是基於 Resnet50 微調了。咱們以前實驗過,若是不基於 Resnet50,用隨機初始化去訓練的話效果不好,很感謝 Resnet50 的做者,對這個模型訓練得 很是有意義。
初始學習率是百分之一,到 40 個 epoch 降爲千分之一,60 個 epoch 時降爲萬分之一。咱們評估時會對評估圖片作左右翻轉後提取兩個特徵,這兩個特徵求一個平均值,表明這張圖片的特徵。剛纔有人問到咱們用了什麼硬件,咱們用了 2 張的 TITAN 的 GPU。
在 Market1501 上訓練 80 epoch的時間大概差很少是 2 小時左右,這個時間是能夠接受的,一天訓練得快一點能夠作出 5-10 組實驗。
▌(五)多粒度網絡(MGN)——實驗結果
咱們發表成果時,這個結果是屬於三個數據集上最好的。
一、Market1501。咱們不作 ReRank 的時候,原始的 Rank1 是 95.7%,mAP 是 86.9%,跟剛纔講的業內比較好的 PCB 那個文章相比,咱們的 Rank1 提升差很少 1.9 個點,mAP 整整提升 5.3 個點,獲得很是大的提高。
二、RK。Rank1 達到 96.6%,mAP 是 94.2%。RK 是 ReRank 從新排序的簡稱, ReID 有一篇文章是專門講 ReRank 技術的,不是從事 ReID 的同窗對 ReRank 的技術可能有必定迷惑,你們就理解爲這是某種技術,這種技術是用在測試結果從新排列的結果,它會用到測試集自己的信息。由於在現實意義中頗有可能這個測試集是開放的,沒有辦法用到測試集信息,就沒有辦法作ReRank,前面那個原始的 Rank1 和 mAP 比較有用。
可是對一些已知道測試集數據分佈狀況下,能夠用 ReRank 技術把這個指標有很大的提升,特別是 mAP,像咱們方案裏從 86.9% 提高到 94.2%,這其中差很少 7.3% 的提高,是很是顯著的。
三、DukeMTMC-reID 和 CUHKO3 這兩個結果在咱們公佈研究成果時算是最好的,咱們是4月份公佈的成果,如今是 6 月份了,最近 2 個月 CEPR 對關於 ReID 的文章出了差很少 30 幾篇,咱們也在關注結果。如今除了咱們之外最好的成果,原始 Rank1 在 93.5%-94% 之間,mAP 在83.5%-84% 之間,不多看到 mAP 超過 84% 或者 85% 的關於。
▌(六)多粒度網絡(MGN)——有趣的對比實驗
由於網絡結構很複雜,這麼複雜的事情能說得清楚嗎?裏面各個分支到底有沒有效?咱們在文章裏作了幾組比較有意思的實驗,這裏跟你們對比一下。
第一個對比,對比 MGN 跟 Resnet50,這倒數第二行,就是那個 MGN w/o TP,跟第一行對比,發現咱們的多粒度網絡比 Resnet50 水平,Rank1 提升了 7.8%,mAP 提升了 14.8%,總體效果是不錯的。
第二個對比,由於咱們的網絡有三個分支,裏面參數量確定會增長,增長的幅度跟 Resnet101的水平差很少,是否是咱們網絡成果來自於參數增長?咱們作了一組實驗,第二行有一個 Resnet101,它的 rank1 是 90.4%,mAP 是 78%,這個比 Resnet50 確實好了不少,可是跟咱們的工做成果有差距,說明咱們的網絡也不是純粹堆參數堆出來的結果,應該是有網絡設計的合理性在。
第三個對比,表格第二個大塊,搞了三個分支,把這三個分支作成三個獨立的網絡,同時獨立訓練,而後把結果結合在一塊兒,是否是效果跟咱們差很少,或者比咱們好?咱們作了實驗,最後的結果是「G+P2+P3(single)」,Rank1 有 94.4%,mAP85.2%,效果也不錯,但跟咱們三個網絡聯合的網絡結構比起來,仍是咱們的結構更合理。咱們的解釋是不一樣分支在學習的時候,會互相去督促或者互相共享有價值的信息,使得你們即便在獨立運做時也會更好。
▌(七)多粒度網絡(MGN)——多粒度網絡效果示例
這是排序圖片的呈現效果,左圖是排序位置,4 我的的檢索結果,前 2 我的能夠看到咱們的模型是很強的,不管這我的是側身、背身仍是模糊的,都可以檢測出來。尤爲是第 3 我的,這張圖是很是模糊的,整我的是比較黑的,可是咱們這個模型根據他的綠色衣服、白色包的信息,仍是可以找出來,儘管在第 9 位有一個判斷失誤。第 4 我的用了一張背面的圖,背個包去檢索,能夠發現結果里正臉照基本被搜出來了。
右邊是咱們的網絡注意力模型,比較有意思的一個結果,左邊是原圖,右邊從左到右有三列,是 global、part二、part3 的特徵組,能夠看到 global 的時候分佈是比較均勻的,說明它沒有特別看細節。
越到右邊的時候,發現亮點越小,越關注在局部點上,並非完整的整我的的識別。第 4 我的我用紅圈圈出來了,這我的左胸有一個 LOGO,看 part3 右邊這張圖的時候,整我的只有在 LOGO 地方有一個亮點或者亮點最明顯,說明咱們網絡在 part3 專門針對這個 LOGO 學到很是強的信息,檢索結果裏確定是有這個 LOGO 的人排列位置比較靠前。
4、應用場景與技術展望
▌(一)ReID 的應用場景
第一個,與人臉識別結合。
以前人臉識別技術比較成熟,可是人臉識別技術有一個明顯的要求,就是必須看到相對清晰的人臉照,若是是一個背面照,徹底沒有人臉的狀況下,人臉識別技術是失效的。
但 ReID 技術和人臉的技術能夠作一個補充,當能看到人臉的時候用人臉的技術去識別,當看不到人臉的時候用 ReID 技術去識別,能夠延長行人在攝像頭連續跟蹤的時空延續性。右邊位置二、位置三、位置4 的地方能夠用 ReID 技術去持續跟蹤。跟人臉識別結合是大的 ReID 的應用方向,不是具象的應用場景。
第二個,智能安防。
它的應用場景是這樣子的,好比我已經知道某個嫌疑犯的照片,警察想知道嫌疑犯在監控視頻裏的照片,但監控視頻是 24 小時不間斷在監控,因此數據量很是大,監控攝像頭很是多,好比有幾百個、幾十個攝像頭,但人來對攝像頭每秒每秒去看的話很是費時,這時能夠用 ReID 技術。
ReID 根據嫌疑犯照片,去監控視頻庫裏去收集嫌疑犯出現的視頻段。這樣能夠把嫌疑犯在各個攝像頭的軌跡串連起來,這個軌跡一旦串連起來以後,相信對警察的破案刑偵有很是大的幫助。這是在智能安防的具象應用場景。
第三個,智能尋人系統。
好比大型公共場所,像迪斯尼樂園,爸爸媽媽帶着小朋友去玩,小朋友在玩的過程當中不當心與爸爸媽媽走散了,如今走散時是在廣播裏播一下「某某小朋友,你爸爸媽媽在找你」,但小朋友也不是很是懂,父母很是着急。
這時能夠用 ReID 技術,爸爸媽媽提供一張小朋友拍的照片,由於遊樂園裏確定拍了小朋友拍的照片,好比今天穿得什麼衣服、背得什麼包,把這個照片輸入到 ReID 系統裏,實時的在全部監控攝像頭尋找這個小朋友的照片,ReID 有這個技術能力,它能夠很快的找到跟爸爸媽媽提供的照片最類似的人,相信對立馬找到這個小朋友有很是大的幫助。
這種大型公共場所還有更多,好比超市、火車站、展覽館,人流密度比較大的公共場所。智能尋人系統也是比較具象的 ReID 應用場景。
第四個,智能商業-大型商場。
想經過了解用戶在商場裏的行爲軌跡,經過行爲軌跡瞭解用戶的興趣,以便優化用戶體驗。ReID 能夠根據行人外觀的照片,實時動態跟蹤用戶軌跡,把軌跡轉化成管理員可以理解的信息,以幫助你們去優化商業體驗。
這個過程當中會涉及到用戶隱私之類的,但從 ReID 的角度來說,咱們比較提倡數據源來自於哪一個商場,那就應用到哪一個商場。由於 ReID 的數據很複雜,數據的遷移能力是比較弱的,這個上場的數據不見得在另一個商場裏能用,因此咱們提倡 ReID 的數據應用在本商場。
第五個,智能商業-無人超市。
無人超市也有相似的需求,無人超市不僅是體驗優化,它還要了解用戶的購物行爲,由於若是隻基於人臉來作,不少時候是拍不到客戶的正面,ReID 這個技術在無人超市的場景下有很是大的應用幫助。
第六個,相冊聚類。
如今拍照時,能夠把相同人的照片聚在一塊兒,方便你們去管理,這也是一個具象的應用場景。
第七個,家庭機器人。
家庭機器人經過衣着或者姿態去認知主人,作一些智能跟隨等動做,由於家庭機器人很難實時看到主人的人臉,用人臉識別的技術去作跟蹤的話,我以爲仍是有一些侷限性的。可是整我的體的照片比較容易得到,好比家裏有一個小的機器人,它可以看到主人的照片,不管是上半年仍是下半年,ReID 能夠基於背影或者局部服飾去識別。
▌(二)ReID 的技術展望
第一個,ReID 的數據比較難獲取,若是用應用無監督學習去提升 ReID 效果,能夠下降數據採集的依賴性,這也是一個研究方向。右邊能夠看到,GAN生成數據來幫助 ReID 數據加強,如今也是一個很大的分支,但這只是應用無監督學習的一個方向。
第二個,基於視頻的 ReID。由於剛纔幾個數據集是基於對視頻切好的單個圖片而已,但實際應用場景中還存在着視頻的連續幀,連續幀能夠獲取更多信息,跟實際應用更貼近,不少研究者也在進行基於視頻 ReID 的技術。
第三個,跨模態的 ReID。剛纔講到白天和黑夜的問題,黑夜時能夠用紅外的攝像頭拍出來的跟白色採樣攝像頭作匹配。
第四個,跨場景的遷移學習。就是在一個場景好比 market1501 上學到的 ReID,怎樣在 Duke數據集上提升效果。
第五個,應用系統設計。至關於設計一套系統讓 ReID 這個技術實際應用到行人檢索等技術上去。
——【完】——
做者 | 彭建宏(曠視科技產品總監彭建宏)
整理 | Just
出品 | 人工智能頭條(公衆號ID:AI_Thinker)
「刷臉」曾一度是人們互相調侃時的用語,現在早已深深地融入咱們的生活。從能夠人臉解鎖的手機,到人臉識別打卡機,甚至地鐵「刷臉」進站……
人臉識別技術愈來愈多地應用在了各類身份驗證場景,在這種看起來發生在電光火石之間的應用背後,又有哪些不易察覺的技術在作精準判別?算法又是經過何種方式來抵禦各類欺詐式攻擊?
咱們近期邀請到曠視科技產品總監彭建宏,他負責 FaceID 在線身份驗證雲服務的產品設計。在本次公開課上,他講述了深度學習在互聯網身份驗證服務中的應用以及人臉識別活體檢測(動做、炫彩、視頻、靜默)技術應用場景及實現方式。
(視頻地址:https://v.qq.com/x/page/k0678hscngd.html)
如下爲彭建宏公開課演講內容實錄:
今天咱們主要說的是 FaceID,它在咱們產品矩陣裏更像是一套解決方案,是身份驗證的金融級解決方案。咱們在生活中有不少場景是想驗證,證實你是你。
基本全部的互聯網金融公司都會在咱們借貸的時候要去驗證你是你,這就須要作一個你是你這樣一個證實,因此如何提供一套可靠的方案去驗證你是你這件事情就已經變得很是重要,你們可能很容易想到驗證的方法有不少,包括以前大量使用的指紋識別,還有一些電影裏邊常常出現的虹膜識別,還有最近特別火的人臉識別。
下面我說一下技術特色。關於人臉識別,你們很容易想到第一個特色就是體驗很是好,很是天然、便利,但它的缺點也不少,首先隱私性更差,咱們要想得到別人的指紋和虹膜的代價很是大,可是要得到別人面部的照片這個代價就很是的小了。第二是因爲光照、年齡、鬍鬚、還有眼鏡等等因素,人臉識別的穩定性會比較低。第三是指紋識別、虹膜識別都有主動性,人臉識別具備被動性,這也是以前 iPhoneX 剛出來的時候,不少人擔憂不經意被人錯刷,或者去誤刷支付或者檢索等等——弱陰私性,弱穩定性還有被動性,就對人臉識別的商業化應用提出了更高的技術要求。
深度學習技術的迅猛發展,使得圖像識別、分類跟檢測的準確率大幅提升,但真正要作成一套金融級解決方案還不是那麼簡單的,這張圖就展現了一個總體的 FaceID 提供的金融級總體的解決方案。
在這個架構圖中,咱們能夠看到,FaceID 的用戶提供了多種產品形態,包括移動端的 SDK,H5,微信/小程序、第三方渠道 APP 以及 PC 端。從功能上來講呢,咱們的產品包括身份證的質量檢測、身份證 OCR 識別、活體檢測、攻擊檢測以及人臉比對,整個解決方案能夠看出是創建在雲跟端兩個基礎上,咱們在端上提供了 UI 解決方案,就提供 UI 界面能夠方便集成,若是以爲咱們的 UI 作得不符合你們的要求,也能夠去作一些定製化開發,整個核心功能裏有活體檢測,在端上跟雲上分別有本身的實現。
同時針對不一樣的活體攻擊方案,還會採用不一樣的活體策略。咱們在現實中的活體檢測中,線上運營會實時收集各類圖片作標註,及時把算法進行更新,能夠確保最新的攻擊能夠在第一時間內進行響應和返饋,這也是爲咱們整個深度學習算法不斷注入新血液。
▌身份證採集
整個流程是這樣的,用戶會先進行身份證採集,系統其實會要求用戶先去拍一張身份證的正面跟反面,這個過程是在端上進行完成的。拍攝之後,咱們會在雲上進行,OCR 識別是在雲上完成的,咱們不只會去識別身份證上面的信息,還會去識別這個身份證的一些分類。因爲不一樣的業務場景不一樣,這個分類信息會反饋給用戶,用戶來判斷是否接受。在不少嚴肅的場景下,不少客戶可能只能接受身份證原件,識別出來的文字咱們也會根據用戶的業務不一樣作相應不一樣的處理,由於有些客戶就要咱們識別出來的文字,用戶是不能去修改身份證號和姓名的。
咱們在 OCR 裏面還加入了不少邏輯判斷,例如你們知道在身份證號裏面是能夠看出來用戶生日還有性別信息,若是咱們發現身份證上的生日跟身份證號判斷出來的信息不同,咱們就會在 API 的結果裏面給用戶返回邏輯錯誤,這是用戶能夠根據業務邏輯能夠自行進行處理的。
這個展現就是咱們身份證採集以及身份證 OCR 的一些場景。先經過手機的攝像頭去採集,在咱們的雲端去完成 OCR 識別以及物體分類,能夠去判斷是否是真實的身份證。有一個須要討論的問題是,爲何咱們把 OCR 放在了雲端,而不是放在手機的 SDK 端呢?這個主要是安全方面的考慮,若是信息被黑客攻破,這在端上是至關危險的事。
▌活體攻擊檢測方案
下面咱們來去討論一下最重要的活體攻擊。在咱們的產品裏面提供了多種活體攻擊的檢測方案,包括隨機、動態的活體,包括視頻活體、炫彩活體等等。活體檢測是咱們整個 Face ID 最重要的一環,也是咱們最重要的核心優點。這個 PPT 展現的是咱們的動做活體,用戶能夠根據咱們的 UI 提示進行點頭、搖頭這樣的隨機動做,因此咱們每次隨機動做都是 Serves 端去發出的,這樣也保證咱們整個動做的安全性。這裏面有些技術細節,包括人臉質量檢測,人臉關鍵點的感測跟跟蹤,臉部的 3D 姿態的檢測。這是咱們整個技術的一些核心競爭力。而後咱們會幫助用戶定義一套 UI 界面,若是用戶以爲咱們 UI 界面很差也能夠直接去修改。
咱們提供一種叫炫彩活體的檢測方法,這個是 Face++ 獨特首創的一種根據反射光三維成像的原理進行活體檢測,從原理上杜絕了各類用 3D 軟件合成的視頻、屏幕翻拍等等的攻擊。從產品形態上來講自己又是一個視頻,如今可能看不到,就是屏幕會發出一種特定圖案進行活體判斷。
如今活體有一個比較大的問題是當在強光下它的質量檢測方法,效果不太好,咱們在最後會配合一個簡單的點圖動做,這樣就提升了整個攻擊的門檻,而後針對移動 H5 的場景咱們主要推出了一個視頻活體的檢測方法,用戶會根據 UI 提供的一個數字去讀這樣一個四位數字,同時咱們會去判斷,不只會去作雲方面的識別,還會作傳統方面的識別,以及二者之間的語音跟聲音同步檢測。
這樣經過這三種方案去判斷就是活體檢測,除了剛纔咱們介紹的一些比較典型的方法以外,咱們也在去嘗試一些新的包括雙角度活體跟靜默活體。雙角度活體是用戶拍一張正臉的自拍照與側面自拍照,經過這種 3D 建模重建的方式來判斷是否是真人,咱們的雙角度活體,靜默活體,爲用戶提供一種很是好的用戶體驗,至關於用戶拍一個兩秒鐘的視頻。
咱們會將這個視頻傳到雲端,這樣咱們不只會去作單幀的活體檢測,還會去作多幀之間的這種關聯性活體檢測,這樣經過兩種動靜結合的方法去判斷受測人是否是真人。
除了活體檢測以外,咱們還提供了一套叫作 FMP 的攻擊檢測,能夠有效去識別翻拍,面具攻擊,這是在咱們的雲端完成的。這是咱們基於大量的人臉數據訓練出一套叫 FMP 的深度神經網絡,而且根據線上的數據進行實時返回和調整,不斷去識別準確率,這也是咱們整個活體檢測裏一個最重要的技術難點。
▌人臉比對
活體檢驗以後,咱們就能夠進行人臉比對的環節。我先簡單跟你們介紹一下人臉識別的一個基本原理:首先咱們會從一幅圖片裏面去作人臉檢測並作出標識,至關於在一張圖片裏面找到這張人臉,而且表示出整我的臉上的一些基本關鍵點,如眼睛、眉毛等等。
下面要作的是將一些人臉關鍵點進行對齊,做用是爲以後的人臉識別算法提供數據預處理,能夠提升整個算法準確度。而後,咱們會把整我的臉的那部分摳出來,這樣就能夠避免周圍物體對它的影響,摳完以後的人臉會通過深度學習網絡,最終生成一個叫作表示的東西,能夠把表示理解爲這張圖片生成的一張向量,認爲是在機器認知裏面這張圖片就是經過這樣的向量來進行表示的。但這個怎麼樣去衡量這個標識可以真實的刻畫出這張真實的人臉?
咱們如今有個原則:若是同一我的,咱們但願表示之間的距離要儘可能的近,若是是不一樣的人,咱們但願表示的距離儘可能的遠,這就是咱們去評價一個深度學習出來的一個表示好壞。而後基於這樣的表示,在人臉識別裏邊有兩個比較大的應用,咱們分別叫作 1:1 與 1:N 的識別。
前者主要是比較兩張人臉識別是否是同一我的,它的原理是咱們去計算兩張人臉表示的距離,若是這個距離小於一個域值,咱們就會認爲這個是同一我的,若是是大於某一域值,咱們就認爲它不是同一我的,在不一樣的誤識率下,咱們會提供不一樣的域值。第二個 1:N 的應用,主要應用場景是安防,也就是說咱們提供一張人臉照片,在數據庫裏面去查找已知,最類似的這樣一我的臉是 1:7 的應用,FaceID 主要應用的技術場景是 1:1。
當咱們經過 OCR 去識別出來用戶姓名、身份證號,並經過活體檢測以後,咱們會從公安部的權威數據庫裏面去得到一張權威照片,會跟用戶視頻採集到的一張高質量照片進行比對,會返回給用戶是否是一致,固然咱們不會去直接告訴用戶是否是一致,而是會經過這種近似度的方式告知。
你們能夠看一下左側的這張表,而後這邊的返回值裏面提供了千分之1、萬分之1、十萬分之一不一樣的近似度,這些表示的是誤識率,在不一樣的誤識率下會有一個域值,假設咱們認爲在千分之一誤識率下,若是分數大於 60 分,咱們就會認爲是同一我的,因此這兩張照片,我發現他們的這個近似度是 75,咱們會說在萬分之一的誤識率下是同一我的,可是在十萬分之一這種誤識率下可能他們不是同一我的。
這裏有一個細節是咱們的照片數據源可能會提供不一樣的整個時間形成不一樣的障礙,正常的話,咱們會有一個不一樣的這種紋理圖案,可是有時咱們會得到一張空白照片,或者得到一張黑白照片,這也須要咱們去作一些後臺方面的處理。
因此總結一下就是 Face ID 會爲你們提供一整套的這種身份驗證解決方案,整個方案涵蓋了質量檢測、身份證識別、活體檢測、攻擊檢測和人臉比對等一系列的功能,其中在活體檢測方面,咱們採用了雲加端的這種聯合防範方式,經過不一樣的活體檢測方案,包括動做活體、視頻活體、靜默活體等一系列的檢測方法,能夠有效的預防假臉攻擊。
在線上咱們天天都會遇到各類各樣的攻擊方式,整我的臉驗證的方案是一套長期攻防戰,咱們如今經過線上運營的方式不斷去收集攻擊的異常數據,進行人工標註、訓練、分析,而後能夠不斷提高整個模型的防範能力,在這方面咱們已經造成了一套閉環系統,發現任何的攻擊咱們均可以在很短的時間內去更新線上的一些模型,作到充分防範。
▌工業化AI算法生產
下面我簡單介紹一下整個工業化 AI 算法的一個產生過程,其實整個流程能夠當作是數據驅動,包括數據採集、清洗、標註,包括數據增廣、數據的域訓練模型、時間管理,還有 SDK 封裝等等。
介紹一些核心關鍵點,第一個是數據採集,咱們是經過一個叫作 Data++ 的 Team 去負責數據採集跟標註,咱們會經過線下采集,或者是經過重包標註和網絡爬蟲幾種方式去獲取整個的 AI 訓練原材料。
有了數據以後,咱們一個叫 Brain++的平臺能夠把它當作是整個 AI 芯片的一個煉丹爐,它會提供整個計算存儲網絡等 IaaS 層的一些管理,這樣咱們整個算法工程師訓練的時候至關於在單機上面去跑,但在不一樣分佈式的底層調度是在多臺機器上面,已經經過 Brain++ 的平臺把咱們屏蔽掉了,因此若是咱們能夠去寫相似於的語句,須要 20 個 CPU、 4 個 GPU、8G 的內存去跑這樣一個訓練腳本,底下是經過分佈式方法去訓練的,但咱們提供單向運行腳本就能夠了。
而後除了數據,IaaS 層的這種資源,咱們研發了一套相似於 TensorFlow 的並行計算框架和引擎 Megbrain,跟 TensorFlow 相比,不少地方都作了不一樣優化。
下面說一下咱們的域訓練模型,咱們的團隊去訓練出成千上萬這種域訓練的模型,這張圖展現的部分域訓練模型,後面這張圖的每一個點都是一次實驗,若是是好的實驗,咱們就會放在一個網站上供其餘算法工程師使用,咱們但願經過一套時間管理的平臺去幫他們去整理整個時間思路,以及整個實驗的循環關係。
有了前面的這些 Face Model, IaaS 層資源,還有數據、時間管理,剩下的就要發揮各個算法工程師的想象力了,你們天天都會去讀各類 Paper,去想各類複雜精要的這種網絡設計的方案,從而創造出性能很是好的網絡模型。因此工業化的 AI 生產如今已是團體做戰了,咱們會有各類的體系支持,你們去這些已有資源上面去創做,生成一套完整的 AI 體系。
(文章題圖來自於pixabay)
早在指紋識別應用中就有針對於活體手指的檢測技術,即便機器只對真人活體指紋產生識別反應,對其餘一切物質不做識別,用於指紋識別產品如考勤機、門禁系統等。活體指紋識別的原理比較簡單:如識別皮膚的溫度、人體皮膚的電容值等。
本文主要是針對人臉識別應用中出現的人臉活體檢測作簡要調研及論述。有關人臉檢測相關內容能夠參考個人另外一篇文章——人臉檢測與深度學習 傳送門~知乎專欄
引言——人臉識別技術邁向更高層次的一大障礙:活體檢測
隨着線上支付的不斷普及,相關的人臉識別等技術正在中國不斷進步。近日,麻省理工科技評論評出全球十大突破技術,其中由「刷臉支付——Paying with Your Face」榜上有名。
技術突破:人臉識別技術現在已經能夠十分精確,在網絡交易等相關領域已被普遍使用。
重大意義:該技術提供了一種安全而且十分方便的支付方式,可是或許仍存在隱私泄露問題
目前基於深度學習的發展,我認爲還有一個問題就是存在被僞造合法用戶人臉的攻擊的風險。
——————————————- 更新補充分割線 ————————————————
評論區有問到這方面的開源代碼,我這邊沒有仔細找過,在github找了一些相關代碼,沒有驗證過,彙總了一下但願對你們有幫助:
1.C++代碼 https://github.com/allenyangyl/Face_Liveness_Detection
2.https://github.com/rienheuver/face-antispoofing-LBP
3.https://github.com/OeslleLucena/FASNet
4.論文Person Specific Face Anti-Spoofing with Subject Domain Adaptation 對應的代碼——https://github.com/jwyang/Person-Specific-Face-Anti-Spoofing
6.論文Face anti-spoofing based on color texture analysis基於顏色紋理分析的代碼——https://github.com/zboulkenafet/Face-anti-spoofing-based-on-color-texture-analysis
7.https://github.com/pp21/Guided-Scale-Texture-for-Face-Presentation-Attack-Detection
8.3d頭套的https://github.com/Marco-Z/Spoofing-Face-Recognition-With-3D-Masks
9.https://github.com/number9473/nn-algorithm/issues/37
10.下文中提到的幾個數據庫的下載連接:https://github.com/number9473/nn-algorithm/issues/36
11.活體檢測在人臉識別系統中處於的位置,大部分現有的系統是沒有活體檢測的:
12.文中文獻[11]的基於圖像失真特徵提取分析的活體檢測的總體框架圖:
(15年4月TIFS的提出一種基於圖像失真分析(IDA)的人臉活體檢測方法。IDA特徵向量分別由鏡面反射(打印紙張或者LCD屏幕3維)、模糊程度(重採集—散焦2維)、圖像色度和對比度退化(對比度失真15維)、顏色多樣性(打印機或LCD顏色分辨率有限等101維)四種典型特徵組成(121維向量),經過輸入基於SVM的集成分類器(ensemble classfier),訓練分類出二值真僞結果(voting scheme——用於判斷視頻攻擊的狀況,超過50%幀數爲真即認定爲活體))
其餘一些有意思的參考
1.https://github.com/4x7y/FakeImageKiller
2.https://github.com/waghaoxg/whx-temp/tree/c2801685b3188492b6693de1e361db3c52b9b7d6
——————————————— 如下正文 ——————————————————
和指紋、虹膜等生物特徵相比,人臉特徵是最容易獲取的。人臉識別系統逐漸開始商用,並向着自動化、無人監督化的趨勢發展,然而目前人臉識別技術能識別人臉圖像的身份但沒法準確辨別所輸入人臉的真僞。那麼如何自動地、高效地辨別圖像真僞抵抗欺騙攻擊以確保系統安全已成爲人臉識別技術中一個迫切須要解決的問題。
一般意義上的活體檢測是當生物特徵信息從合法用戶那裏取得時,判斷該生物信息是否從具備生物活體的合法用戶身上取的。活體檢測的方法主要是經過識別活體上的生理信息來進行,它把生理信息做爲生命特徵來區分用照片、硅膠、塑料等非生命物質僞造的生物特徵。
人臉識別技術面臨着三種欺詐手段:
下面經過學術論文、專利發明和企業研發等三方面進行調查:
(一) 學術論文方面
人臉活體檢測的學術研究機構主要有中科院自動化所李子青團隊、瑞士IDAIP研究室高級研究員Sebastien Marcel主導的Biometrics group、英國南安普頓大學機器視覺系教授Mark S. Nixon所屬的視覺學習與控制研究組和國際生物特徵識別著名專家Anil K. Jain所在的密歇根州立大學生物特徵識別研究組。近些年上述機構所著的關於活體檢測的高質量文章陸續發表在IEEE TIFS/TIP等一些頂級期刊,同時Springer於2014年出版了由Sebastien Marcel等編著的《Handbook of Biometric Anti-Spoofing》,書中深刻介紹了指紋、人臉、聲音、虹膜、步態等生物特徵識別反欺騙的方法,還對涉及的性能評估指標、國際標準、法律層面、道德問題等做了闡述,爲生物特徵識別反欺騙技術的進一步發展做出重要貢獻。
1. 綜述文獻[1]將活體檢測技術分爲運動信息分析、紋理信息分析、活體部位分析三種,文中討論了基於真僞圖像存在的非剛性運動、噪聲差別、人臉背景依賴等特性造成的分類器性能。
2. 文獻[2]介紹了一個公開的人臉活體檢測驗證數據庫(PHOTO-ATTACK),在數據庫(PRINT-ATTACK)的基礎上進行了擴展,添加移動手機拍攝照片和高分辨率屏幕照片。同時文中提出了一種基於光流法的先後景相關性分析來辨別影像真僞,取得較好的性能。
3. 文獻[3]針對多生物識別欺騙穩健性的提升,提出一種異常檢測新技術,首先經過中值濾波器來提升傳統集成方法中求和準則的容差,再經過一種基於bagging策略的檢測算法提升檢測拒絕度,該算法融合了2D-Gabor特徵、灰度共生矩陣(GLCM)多種特徵、傅里葉變換的頻域信息,特徵提取後獲得3種特徵向量,使用主成分分析(PCA)降維選取造成混合特徵,輸入bagging分類器並得到檢測結果,實驗代表算法具備較高準確性。
4. 文獻[4]提出一種基於顏色紋理分析的活體檢測算法,經過LBP描述子提取聯合顏色(RGB、HSV和YCbCr)紋理信息來表徵圖像,將信息輸入SVM分類器進行真僞辨別。
5. 14年TIP的文獻[5]提出一種基於圖像質量評價的方法來加強生物特徵識別的安全性,使用25種圖像質量分析指標(列出較關鍵的幾個有:像素差別性分析、相關性分析、邊緣特徵分析、光譜差別性、結構類似性、失真程度分析、天然影像估計),該方法只須要一張圖片就能夠區別真僞,適用於多種生物特徵識別場合,速度快,實時性強,且不須要附近設備及交互信息。
6. 14年12月發表在TIFS的文獻[6]提出一種反欺騙能力評估框架—Expected Performance and Spoofability (EPS)Framework,針對現有反欺騙系統做性能評估,創新性地指出在必定條件下驗證系統將失去二值特性轉變爲三類:活體合法用戶、無用攻擊者(zero-effort)和欺騙攻擊者,EPS框架主要經過測量系統指望達到的FAR(錯誤接受無用率)和SFAR(錯誤接受欺騙率)及二者之間的範圍,同時考慮系統被欺騙的成本和系統存在的弱點,並量化爲單一的值用來評價系統優劣。
7. 15年5月發表在TIFS的文章[7]針對視頻回放攻擊提出一種基於visual rhythm analysis的活體檢測方法,文中指出:因爲靜態背景易得到,基於背景的方法顯得容易被破解;利用照片的旋轉和扭曲也能夠輕易模擬並欺騙基於光流法的活體檢測系統;當攻擊視頻包含頭部、嘴脣、眼睛等動做能夠容易經過基於運動交互的系統;文中對傅里葉變換後的視頻計算水平和垂直的視覺節奏,採用三種特徵(LBP、灰度共生矩陣GCLM、HOG)來對visual rhythm表徵與降維,利用SVM分類器和PLS(偏最小二乘)來辨別視頻真僞。
8. 15年4月TIFS的文章[8]提出一種基於局部紋理特徵描述子的活體檢測方法,文中將現有的活體檢測方法分爲三類:動態特徵分析(眨眼)、全局特徵分析(圖像質量)和局部特徵分析(LBP、LBQ、Dense SIFT)。提出的方法對一系列特徵向量進行獨立量化或聯合量化並編碼獲得對應的圖像標量描述子,文中實驗部分給出不一樣局部特徵對應的性能。
9. 15年8月TIP的文章[9]在面向手機端的人臉識別活體檢測的需求,根據僞造照片相對於活體照片有光照反射特性呈現出更加均衡擴散緩慢的特色,提出一種基於圖像擴散(反射)速度模型(Diffusion Speed Model)的活體檢測方法,經過引入全變差流(TV)來得到擴散速度,在獲得的擴散速度圖基礎上利用LSP編碼(相似LBP)獲取的局部速度特徵向量做爲線性SVM分類器的輸入,經分類區分輸入影像的真僞。
10. 15年12月TIP文獻[10]提出一種基於碼本(codebook)算法的新型人臉活體檢測方法,根據重採樣致使僞造影像出現的條帶效應和摩爾紋等噪聲現象,文中經過三個步驟來完成分類,第一步:計算視頻噪聲殘差,經過將原始視頻和經高斯濾波之後的視頻做殘差獲得噪聲視頻,再對其做二維傅里葉變換獲得頻域信息,能夠看到僞造視頻的幅度譜和相位譜中呈現出明顯的摩爾紋及模糊等區別,計算獲得相關時頻描述子。第二步經過碼本算法迭代選取最能表示的descriptor,通過編碼將這些描述子轉化成新的矩陣表示(矩陣不能直接拿來分類),故用池化(pooling)方法(列求和或取最大值)獲得輸入向量。第三步利用SVM分類器或PLS(偏最小二乘)對輸入向量分類判斷其真僞。
11. 15年4月TIFS的文獻[11]提出一種基於圖像失真分析(IDA)的人臉活體檢測方法,同時給出了一個由多種設備採集的人臉活體檢測數據庫(MSU-MFSD)。IDA特徵向量分別由鏡面反射(打印紙張或者LCD屏幕3維)、模糊程度(重採集—散焦2維)、圖像色度和對比度退化(對比度失真15維)、顏色多樣性(打印機或LCD顏色分辨率有限等101維)四種典型特徵組成(121維向量),經過輸入基於SVM的集成分類器(ensemble classfier),訓練分類出二值真僞結果(voting scheme——用於判斷視頻攻擊的狀況,超過50%幀數爲真即認定爲活體)。
12. 幾種公開的人臉活體檢測數據庫:
(二)專利發明方面
對於以研發產品爲主的公司來講,用戶的體驗是檢驗產品成功的最重要的標準之一。下面從用戶的配合程度來分類人臉活體檢測技術。
(1) 根據真人圖像是一次成像的原理,其比照片包含更多的中頻細節信息,專利1[12]首先採用DoG濾波器獲取圖像信息中的中頻帶信息,而後經過傅里葉變換提取關鍵特徵,最後經過logistic迴歸分類器對提取和處理後的特徵信息辨析和分類,已達到所識別的圖像爲真實人臉仍是照片人臉的目的。優勢:不添加額外的複製設備、不須要用戶的主動配合、實現簡單、計算量小且功能獨立;缺點:採集的正反樣本要全面,只針對照片。
(2) 專利2[13]是經過檢測人臉的眼睛區域是否存在亮瞳效應來區分真實人臉和照片視頻中的人臉。亮瞳效應的判斷是利用亮暗瞳差分圖像的眼睛區域是否存在圓形亮斑而定。另外,採集亮瞳圖像所涉及的設備包括紅外攝像頭和由LED燈作成的紅外光源。優勢:照片和視頻均可以,使可靠性增長;缺點:需額外的設備。
(3) 專利3[14]利用共生矩陣和小波分析進行活體人臉檢測。該方案將人臉區域的灰度圖像首先進行16級灰度壓縮,以後分別計算4個灰度共生矩陣(取矩陣爲1,角度分別爲0。、45。、90。、135。),而後在灰度共生矩陣的基礎上再提取能量、熵、慣性矩和相關性四個紋理特徵量,再次分別對四個灰度共生矩陣的4個紋理特徵量求均值和方差;同時對原始圖像利用Haar小波基進行二級分解,提取子帶HH1,HH2的係數矩陣後求均值和方差;最後將全部的特徵值做爲待檢測樣本送入訓練後的支持向量機中進行檢測,分類識別真實和假冒人臉圖像。優勢:不需添加額外的輔助設備、不須要用戶下降了計算複雜度,提升了檢測準確率;缺點:只針對照片欺騙。
(4) 專利4[15]是一種基於HSV顏色空間統計特徵的人臉活體檢測方法,該方案將人臉圖像從RGB顏色空間轉換到YCrCb;而後進行預處理(膚色分割處理、去噪處理、數學形態學處理和標定連通區域邊界處理)後獲取人臉矩形區域的座標;再對待檢測的人臉圖像分圖像塊,並獲取待檢測的人臉圖像中的左右圖像塊的三個顏色份量的特徵值;最後將歸一化的特徵值做爲待檢測樣本送入訓練好的支持向量中進行檢測,肯定包含人臉的圖像是否爲活體真實人臉圖像。優勢:不需添加額外的輔助設備和用戶的主動配合,下降了人臉認證系統延時和計算複雜度,提升了檢測準確率;缺點:只針對照片欺騙,閾值的設置爲經驗值。
(5) 專利5[16]使用的活體識別方法爲經過攝像頭在必定時間內拍攝多張人臉照片,預處理後提取每張照片的面部本特徵信息,將前後獲得的面部特徵信息進行對比分析獲取特徵類似度,設置合理閾值,若類似度在閾值範圍內,則認爲有微表情產生,識別爲活體,不然爲非活體。優勢:不須要人臉部作大量的表情配合動做;缺點:只針對照片欺騙。
(6) 專利6[17]主要基於人臉3D模型對所述人臉形狀進行歸一化處理,並得到所述人臉形狀相對於人臉3D模型的旋轉角度,將連續多幀圖像的旋轉角度連成一條曲線,判斷該曲線是否知足設定要求,若知足,判斷角度最大的一幀圖像中人臉膚色區域面積比例是否大於K,如果,則判斷爲真實人臉,不然爲虛假人臉。優勢:誤報率下降,速度快,用戶體驗好;缺點:需較大的計算時間和空間開銷。
(7) 專利7[18]公開一種基於背景比對的視頻和活體人臉的鑑別方法。首先對輸入視頻的每一幀圖像進行人臉位置檢測,很據檢測出的人臉位置肯定背景比對區域;而後選取輸入視頻中和背景比對區域在尺度空間上的極致點做爲背景比對區域的特徵點,獲得背景特徵點集Pt;再用Gabor小波變換描述圖像I在背景特徵點集Pt的特徵,根據此結果定義活體度量L;若是活體度量L大於閾值θ,判斷爲活體,不然視爲假冒視頻。優勢:解決僅經過單個攝像頭進行視頻人臉和活體人臉的計算機自動鑑別問題,不需用戶配合,實時性較好;缺點:只針對視頻欺騙。
(8) 專利8[19]提供了一種具備活體檢測功能的雙模態人臉認證方法。首先創建存儲有已知身份人臉的可見光訓練圖像和近紅外外訓練圖像的數據庫;而後經過圖像採集模塊同時採集待認證人頭部的可見光圖像和近紅外圖像;採用人的臉部的人臉近紅外圖像與人臉可見光圖像雙模態特徵的聯合識別。優勢:提升了識別認證精度,有效避免人臉存在較大變化狀況下識別失敗的問題,避免照片或者模型欺騙;缺點:需紅外設備。
(9) 爲更好地防止活體檢測中的照片和視頻剪輯方式等欺詐行爲,專利9[20]不一樣之處在於,用戶並不知道系統發出何種指令,要求用戶作出何種動做,並且用戶實現也並不知曉系統要求的動做完成次數。緣由在於,預先定義了一個動做集(包括眨眼、揚眉、閉眼、瞪眼、微笑等),用戶在進行活體檢測時,系統每次都從動做集中選擇一種或若干種動做,隨機指定完成動做的次數,要求用戶在規定的時間內完成它們。優勢:更好地防止活體檢測中的照片和視頻剪輯方式等欺騙行爲,活性檢測的可靠性和安全性更高;缺點:需用戶主動配合,容易受外部環境影響。
(10) 專利10[21]主要利用人臉面部運動和生理性運動來判斷是照片仍是真實人臉。人臉檢測結果框內的人臉面部運動是在眼睛和嘴附近進行判斷,依據運動區域中心座標和人臉的眼睛的位置座標之間,以及和嘴的位置座標之間的歐式距離是否小於預約閾值。肯定人臉生理性運動是根據運動區域內的運動方向爲垂直方向的原理。優勢:可靠性提升;缺點:只針對照片欺騙。
(11) 專利11[22]根據光流場對物體運動比較敏感,而真實人臉的眼部在姿式校訂和眨眼過程當中又比照片產生更大的光流,利用LK算法計算輸入視頻序列中相鄰兩幀的光流場,求得光流幅值,獲得幅值較大的像素點數所佔的比重,若比例足夠大則標定爲眼部發生了運動,從而斷定爲真實人臉。優勢:系統的隱蔽性和安全性加強。缺點:只針對照片欺騙。
(12) 專利12[23]也是定位眼睛和嘴巴區域。根據採集的圖片幀數(包含面部中眼睛和嘴巴等關鍵點)和特徵平均差別值(由採集的兩幀圖片對應的特徵值的加權歐式距離得到)的計算次數與預設值的比較,以及平均差別值與閾值的比較來斷定是否爲真實人臉。優勢:解決了採用三維深度信息進行人臉活體檢測時,計算量大的問題,以及應用場景約束的狀況。
(13) 專利13[24]公開一種活體人臉的快速識別方法,其方案爲:首先輸入連續的人臉圖像(若相鄰兩幅人臉圖像不爲同一狀態則予以丟棄,從新多幅連續的人臉圖像),對每幅人臉圖像肯定瞳孔位置並裁出人眼區域;而後經過支持向量機訓練方法和AdaBoost訓練方法對睜眼和閉眼樣本進行訓練,最後判斷眼珠睜閉狀態,若存在眨眼過程則經過活體判別。優勢:有效拒絕非真實人臉欺騙識別,計算速度提升,不受應用場景的約束;缺點:需用戶主動配合。
(14) 專利14[25]經過判斷連續多幀圖像中所獲的眼睛或嘴巴區域的屬性變化值(上眼皮的距離變化值或上下嘴脣間的距離變化值)的規律是否符合真實人臉的變化規律,如果,則判斷爲真實人臉,不然爲虛假人臉。所採用的技術核心:將當前幀與前t幀的眼睛或嘴巴區域合併成一張圖,採用基於深度學習的迴歸方法輸出兩幀圖像中屬性變化值,重複該步驟直至得到每幀圖像的屬性變化值;將全部屬性變化值按幀時間順序組成一貫量,對各向量的長度進行設定,而後利用SVM分類器對所述向量進行分類,再判斷分類結果是否知足設定動做下的真實人臉的變化規律。優勢:檢測精度高、速度快,針對照片和視頻欺騙;缺點:需用戶主動配合。
(15) 專利15[26]是經過眨眼動做進行活體檢測。首先對人臉檢測與眼睛定位;而後眼部區域截取,從歸一化處理後的圖像中圖像中計算眼睛的開合程度;運用條件隨機場理論創建用於判斷眨眼動做的模型。優勢:可僅經過單個攝像頭進行鑑別;缺點:需用戶主動配合,只針對照片欺騙。
(三)企業研發應用方面
對支付寶人臉登錄系統的活體檢測功能進行了實際測試(iphone5S,支付寶最新版本9.5.1,人臉識別和活體檢測模塊是獨立的,其活體檢測只有採用了眨眼模式,以前還有點頭),檢測結果以下:
結論:
1.根據調查結果的實際應用技術,針對三種主要的欺騙手段,目前有如下幾種應用普遍的活體檢測方法:
2.從用戶配合、對光照影響、是否須要附加設備、抵擋攻擊、用戶體驗等方面對比了人臉識別系統中活體檢測應用較多的7類具體方法,造成下表:
3.隨着人臉識別系統的發展和演進,綜上所述,研究開發一種新型高效魯棒性好的人臉活體檢測技術應該知足如下幾個條件:
①在線實時處理。活體檢測過程應與人臉識別同時進行,愈來愈多的移動端需求給實時性提出愈來愈高的要求;
②受光照等外界影響小。人臉識別驗證系統的應用面臨着許多場景,活體檢測技術應知足多場景、多終端應用的要求,魯棒性強;
③用戶界面天然,交互少,欺騙代價高。基於運動等的檢測方法對用戶來講,增長一系列的交互操做,不只複雜度增長,可能須要附加的硬件設備支撐,因此新型的活體檢測技術應該具備良好的用戶體驗,同時使得欺騙攻擊的代價儘量的高,保證安全性;
④對欺騙有着優異的檢測能力,同時對人臉識別特徵提取起輔助做用。基於紋理或圖像特徵的活體檢測方法是將來的主要趨勢,那麼這些特徵的提取和分類一樣能給人臉識別帶來益處。
4.一種可行的人臉活體檢測框架:根據總結髮現,純粹的基於和(sum-rule)的理念可能並不適合活體檢測,就比如「木桶效應」,僞造攻擊只要抓住了短板,同樣能夠破解大部分基於sum-rule的方法。一種較好的方法是與此對應的多層次結合的概念,結合文獻五、八、十、11所述的相關圖像特性,能夠着眼於圖像全局特性分析(質量)和局部特性分析(LBP等)相結合。
參考文獻
[1] O. Kahm and N. Damer, 「2d face liveness detection: An overview,」 inb Biometrics Special Interest Group (BIOSIG), 2012 BIOSIG-Proceedings of the International Conference of the. IEEE, 2012, pp. 1–12.
[2] A. Anjos, M. M. Chakka, and S. Marcel, 「Motion-based countermeasures to photo attacks in face recognition,」 IET Biometrics, vol. 3,no. 3, pp. 147–158, 2013.
[3] Wild P, Radu P, Chen L, et al. Robust multimodal face and fingerprint fusion in the presence of spoofing attacks[J]. Pattern Recognition, 2016, 50: 17-25.
[4] Boulkenafet Z, Komulainen J, Hadid A. face anti-spoofing based on color texture analysis[C]//Image Processing (ICIP), 2015 IEEE International Conference on. IEEE, 2015: 2636-2640.
[5] Galbally J, Marcel S, Fierrez J. Image quality assessment for fake biometric detection: Application to iris, fingerprint, and face recognition[J]. Image Processing, IEEE Transactions on, 2014, 23(2): 710-724.
[6] Chingovska I, Rabello dos Anjos A, Marcel S. Biometrics evaluation under spoofing attacks[J]. Information Forensics and Security, IEEE Transactions on, 2014, 9(12): 2264-2276.
[7] Pinto A, Robson Schwartz W, Pedrini H, et al. Using visual rhythms for detecting video-based facial spoof attacks[J]. Information Forensics and Security, IEEE Transactions on, 2015, 10(5): 1025-1038.
[8] Gragnaniello D, Poggi G, Sansone C, et al. An investigation of local descriptors for biometric spoofing detection[J]. Information Forensics and Security, IEEE Transactions on, 2015, 10(4): 849-863.
[9] Kim W, Suh S, Han J J. Face Liveness Detection From a Single Image via Diffusion Speed Model[J]. Image Processing, IEEE Transactions on, 2015, 24(8): 2456-2465.
[10] Pinto A, Pedrini H, Robson Schwartz W, et al. Face Spoofing Detection Through Visual Codebooks of Spectral Temporal Cubes[J]. Image Processing, IEEE Transactions on, 2015, 24(12): 4726-4740.
[11] Wen D, Han H, Jain A K. Face spoof detection with image distortion analysis[J]. Information Forensics and Security, IEEE Transactions on, 2015, 10(4): 746-761.
[12] 李冀,石燕,譚曉陽.一種應用於人臉識別的活體檢測方法及系統:中國,101999900.2013-04-17.
[13] 秦華標,鍾啓標.基於亮瞳效應的人臉活體檢測方法:中國,103106397.2013-05-15.
[14] 毋立芳,曹瑜,葉澄燦等.一種基於灰度共生矩陣和小波分析的活體人臉檢測方法:中國,103605958.2014-02-26.
[15] 嚴迪羣,王讓定,劉華成等.一種基於HSV顏色空間特徵的活體人臉檢測方法:中國,103116763.2013-05-22.
[16] 傅常順,楊文濤,徐明亮等.一種判別活體人臉的方法:中國,104361326.2014-02-18.
[17] 陳遠浩.一種基於姿態信息的活體檢測方法:中國,104794465.2015-07-22.
[18] 潘綱,吳朝暉,孫霖.基於背景比對的視頻和活體人臉的鑑別方法:中國,101702198.2011-11-23.
[19] 徐勇,文嘉俊,徐佳傑等.一種活體檢測功能的雙模態人臉認證方法和系統:中國,101964056.2012-06-27.
[20] 王先基,陳友斌.一種活體人臉檢測方法與系統:中國,103440479.2013-12-11.
[21] 丁曉青,王麗婷,方馳等.一種基於人臉生理性運動的活體檢測方法及系統:中國,101159016.2008-04-09.
[22] 馬爭鳴,李靜,劉金葵等. 一種在人臉識別中應用的活體檢測方法:中國,101908140.2010-12-08.
[23] 黃磊,任智傑. 一種人臉活體檢測方法及系統:中國,103679118.2014-03-26.
[24] 彭飛. 一種活體人臉的快速識別方法:中國,103400122.2013-11-20.
[25] 陳元浩. 一種基於相對屬性的活體檢測方法:中國,104794464.2015-07-22.
[26] 吳朝暉,潘綱,孫霖. 照片人臉與活體人臉的計算機自動鑑別方法:中國,100592322.2010-02-24.
做者 | 王井東
整理 | 阿司匹林
出品 | 人工智能頭條(公衆號ID:AI_Thinker)
卷積神經網絡在近幾年得到了跨越式的發展,雖然它們在諸如圖像識別任務上的效果愈來愈好,可是隨之而來的則是模型複雜度的不斷提高。愈來愈深、愈來愈複雜的卷積神經網絡須要大量存儲與計算資源,所以設計高效的卷積神經網絡是很是重要和基礎的問題,而消除卷積的冗餘性是該問題主要的解決方案之一。
如何消除消除卷積的冗餘性?咱們邀請到了微軟亞洲研究院視覺計算組資深研究員王井東博士,爲你們講解發表在 ICCV 2017 和 CVPR 2018 上基於交錯組卷積的方法。
觀看回放:
基於交錯組卷積的高效深度神經網絡 - 直播課 - CSDN學院 - 在線學習教程 - 會員免費-CSDN學院edu.csdn.net
如下是公開課內容,AI科技大本營整理,略有刪減:
▌深度學習大獲成功的緣由
2006年《Science》上的一篇文章——Reducing the Dimensionality of Data with Neural Networks,是近十多年來促進深度學習發展很是重要的一篇文章。當時這篇文章出來的時候,不少機器學習領域的人都在關注這個工做,可是它在計算機視覺領域裏並無取得很是好的效果,因此並無引發計算機視覺領域的人的關注。
深度學習的方法在計算機視覺領域真正獲得關注是由於 2012 年的一篇文章——ImageNet Classification with Deep Convolutional Neural Networks。這個文章用深度卷積神經網絡的方法贏得了計算機視覺領域裏一個很是重要的 ImageNet 比賽的冠軍。在 2012 年以前的冠軍都是基於 SVM(支持向量機)或者隨機森林的方法。
2012年 Hinton 和他的團隊經過深度網絡取得了很是大的成功,這個成功大到什麼程度?比前一年的結果提升了十幾個百分點,這是很是可觀、很是了不得的提升。由於在 ImageNet 比賽上的成功,計算機視覺領域開始接受深度學習的方法。
比較這兩篇文章,雖然咱們都稱之爲深度學習,但實際上相差還挺大的。特別是 2012 年這篇文章叫「深度卷積神經網絡」,簡寫成 「CNN」。CNN 不是 2012 年這篇文章新提出來的,在九十年代,Yann LeCun 已經把 CNN 用在數字識別裏,並且取得很是大的成功,可是在很長的時間裏,你們都沒有拿 CNN 作 ImageNet 比賽,直到這篇文章。今天你們發現深度學習已經統治了計算機視覺領域。
爲何 2012 年深度學習可以成功?其實除了深度學習或者 CNN 的方法之外,還有兩個東西,一個是 GPU,還有一個就是 ImageNet。
這個網絡結構是 2012 年 Hinton 跟他學生提出的,其實這個網絡結構也就8層,好像沒有那麼深,但當時訓練這個網絡很是困難,須要一個星期才訓練出來,並且當時別人想復現它的結果也沒有那麼容易。
這篇文章之後,你們都相信神經網絡越深,性能就會變得越好。這裏面有幾個表明性的工做,簡單回顧一下。
深度網絡結構的兩個發展方向
▌愈來愈深
2014 年的 VGG,這個網絡結構很是簡單,就是一層一層堆積起來的,並且層與層之間很是類似。
同一年,Google 有一個網絡結構,稱之爲「GoogLeNet」,這個網絡結構看起來比 VGG 的結構複雜一點。這個網絡結構剛出來的時候看起來比較複雜,今天看起來就是多分支的一個結構。剛開始,你們廣泛的觀點是這個網絡結構是人工調出來的,沒有很強的推廣性。儘管 GoogLeNet 是一我的工設計的網絡結構,其實這裏面有很是值得借鑑的東西,包括有長有短多分支結構。
2015 年時出了一個網絡結構叫 Highway。Highway 這篇文章主要是說,咱們能夠把 100 層的網絡甚至 100 多層的網絡訓練得很是好。它爲何可以訓練得很是好?這裏面有一個概念是信息流,它經過 SkipConnection 能夠把信息很快的從最前面傳遞到後面層去,在反向傳播的時候也能夠把後面的梯度很快傳到前面去。這裏面有一個問題,就是這個 Skip Connection 使用了 gate function,使得深度網絡訓練困難仍然沒有真正解決。
同一年,微軟的同事發明了一個網絡,叫「ResNet」,這個網絡跟 Highway 在某種意義上很相像,相像在什麼地方?它一樣用了 Skip Connection,從某一層的 output 直接跳到後面層的 output 去。這個跟 Highway 相比,它把 gate function 扔掉了,緣由在於在訓練很是深的網絡裏 gate 不是一個特別好的東西。經過這個設計,它能夠把 100 多層的網絡訓練得很是好。後來發現,經過這招 1000 層的網絡也能夠訓練得很是好,很是了不得。
2016年,GoogLeNet、Highway、ResNet出現之後,咱們發現這裏面的有長有短的多分支結構很是重要,好比咱們的工做 deeply-fused nets,在多個 Branch 裏面,每一個分支深度是不同的這樣的好處在於,若是咱們把從這個結構當作一個圖的話,發現從這個輸入點到那個輸出點有多條路徑,有的路徑長,有的路徑短,從這個意義上來說,咱們認爲有長有短的路徑能夠把深度神經網絡訓練好。
同年,咱們發現有個相似的工做,叫 FractalNets,它跟咱們的 deeply-fused nets 很是相像。
這條路都是經過變深,但願把網絡結構訓練得很是好,使它的性能很是好,加上 Skip Connection 等等形式來使得信息流很是好。儘管咱們經過 Skip Connection 把深度網絡訓練得很不錯,但深度仍是帶來一些問題,就是並無把性能發揮得很好,因此有另一個維度,你們但願變得更寬一點。
除此以外,大的網絡用在實際中會遇到一些問題。好比部署到手機上時但願計算量不要太大,模型也不要太大,性能仍然要很好,因此識別率作的很是高的可是很龐大的網絡結構在實際應用裏面臨一些困難。
▌簡化結構的幾種方法
另一條路是簡化網絡結構,消除裏面的冗餘性。由於你們都認爲如今深度神經網絡結構裏有很強的冗餘性,消除冗餘性是我近幾年發現很是值得作的一個領域,由於它的實際用處很大。
卷積操做
CNN 裏面的卷積操做實際上對應的就是矩陣向量相乘,你們作的基本就是消除卷積裏的冗餘性。
咱們回顧一下卷積。右邊的圖:在 CNN 裏面有若干個通道,每一個通道其實是一個二維的數組,每一個位置都有一個數值,在這裏面咱們稱爲「響應值」。這裏面有四個通道,實際上就至關於三維的數組同樣。以這裏(每一個位置)爲中心,取一個 3×3 的小塊出來,3×34 個通道,那就有 3×3×4 這麼多個數值,而後咱們把這麼多個數值拉成一個 3×3×4=36 維向量。卷積有個卷積核,卷積覈對應一個橫向量,這個橫向量和列向量一相乘,就會獲得響應的值,這是第一個卷積核。經過第二個卷積核又會獲得第二個值,相似地能夠獲得第三個第四個值。
總結起來,卷積操做就是是矩陣和向量相乘,矩陣對應的是若干個卷積核,向量對應的是周圍方塊的響應值(ResponseValue)。
你們都知道矩陣跟向量相乘佔了很大的計算量。我在這裏舉的例子並無那麼大,但你們想想,若是輸入輸出 100個 通道,,假如這個卷積核是3×3×100,那就是 100×900 的計算量,這個計算量很是大,因此有大部分工做集中在解決這裏面(卷積操做)冗餘性的問題。
Low-precision kernels(低精度卷積核)
有什麼辦法解決冗餘性的問題呢?
由於卷積核一般是浮點型的數,浮點型的數計算複雜度要大一點,同時它佔得空間也會大一點。最簡單的一招是什麼?假設把卷積核變成二值的,好比 一、-1,咱們看看 一、-1轉成之後有什麼好處?這個向量 一、-1(使得)原本相乘的操做變成加減了,這樣一來計算量就減小了不少。除此之外,模型和存儲量也減小不少。
也有相似相關的工做,就是把浮點型的變成整型的,好比之前 32 位浮點數的變成 16 位的整型數,一樣存儲量會小,或者模型會小。除了卷積核進行二值化化之外或者進行整數化之外,也能夠把 Response 變成二值數或者整數。
還有一類研究得比較多的是量化。好比把這個矩陣聚類,好比 2.9一、3.0六、3.21,聚成一類,我用 3 來代替它量化有什麼好處?首先,你的存儲量減小了,不須要存儲原來的數值,只須要存量化之後的每一箇中心的索引值就能夠了。除此以外,計算量也變小了,你能夠想辦法讓它減小乘的次數,這樣就模型大小就會減小了。
Low-rank kernels(低秩卷積核)
另一條路,矩陣大怎麼辦?把矩陣變小一點,因此不少人作了這件事情, 100 個(輸出)通道,我把它變成 50 個,這是一招。另一招, input(輸入)不少, 100 個通道,變成了 50 個。
低秩卷積核的組合
把通道變少會不會下降性能?因此有人作了這件事情:把這個矩陣變成兩個小矩陣相乘,假如這個矩陣是 100×100 的,我把它變成 100×10 和10×100 兩個矩陣相乘,(相乘獲得的矩陣)也變成 100×100 的矩陣,近似原來 100×100 那個矩陣。這樣想一想,100×100 變成 100×10 跟 10×100,顯然模型變小了,變成五分之一。此外計算量也降到五分之一。
稀疏卷積核
另一條路,怎麼把矩陣跟向量相乘變得快一點、模型的參數少一點?能夠把裏面的有些數變成 0,好比 2.91 變成 0,3.06 變成 0,變成 0 之後就成了稀疏的矩陣,這個稀疏矩陣存儲量會變小,若是你足夠稀疏的話,計算量會小,由於直接是 0 就不用乘了。還有一種 Structured sparse(結構化稀疏),好比這種對角形式,矩陣跟向量相乘,能夠優化得很好。這裏 Structured sparse 對應我後面將要講的組卷積(Groupconvolution)。
稀疏卷積核的組合
咱們來看看這個矩陣能不能經過多個稀疏矩陣相乘來近似,這是我今天要講的重點,咱們的工做也是圍繞這一點在往前走。在咱們作這個方向以前,你們並無意識到一個矩陣能夠變成兩個稀疏矩陣相乘甚至多個稀疏矩陣相乘,來達到模型小跟計算量小的目標。
從IGCV1到IGCV3
▌IGCV1
首先我給你們介紹一下咱們去年在 ICCV 2017 年會議上的文章,交錯組卷積的方法。
這個卷積裏面有六個通道,經過卷積出來的也是六個小方塊(通道),假如 spatial kernel 的尺寸是5×5,對每一個位置來說,它的計算量是6×5×5×6。
我剛纔講了(一種結構化)稀疏的形式,對應的就是組卷積的形式,組卷積是什麼意思?我把這 6 個通道分紅上面 3 個通道和下面 3 個通道,分別作卷積,作完之後把它們拼在一塊兒,最後獲得的是6個通道。看看計算量,上面是 3×5×5×3,下面也是同樣的,整個計算複雜度跟前面的 6×5×5×6 相比就小了一半,但問題是參數利用率可能不夠。
咱們的工做是基於組卷積的,剛纔提到了上面的三個通道和這三個通道不相關,那有沒有辦法讓它們相關?因此咱們又引進了第二個組卷積,咱們把這6個通道從新排了序,一、4 放到這(第一個分支),二、5 放到這(第二個分支),三、6 放到那(第三個分支),這樣每一分支再作一次 1×1 的convolution,得出新的兩個通道、兩個通道、兩個通道,拼在一塊兒。經過交錯的方式,咱們但願達到每一個 output(輸出)的通道(綠色的通道或者藍色的通道)跟前面6個通道都相連。
有什麼好處?經過第二組的組卷積能夠達到互補的條件,或者使得任何一個 output(輸出通道)和任何一個 input(輸入通道)連起來。
這裏面咱們引進了一個嚴格的互補條件,直觀來說就是,若是有兩個通道在第一組卷積裏面,落在同一個 Branch(分支),我但願在第二組裏面落在不一樣的 Branch(分支)。第二組裏面好比一個 Branch(分支)裏面的若干個通道,要來自於第一個組卷積裏面的全部 Branches(分支),這個稱爲互補條件。這個互補條件帶來什麼?它會帶來(任何一對輸入輸出通道之間存在) path,也就是說相乘矩陣是密集矩陣。爲何稱之爲「嚴格的」?就是任何一個 input 和 output 之間有一條 path,並且有且只有一條path。
嚴格的準則引進來之後,參數量變小了、模型變小了,帶來什麼好處?這裏我給一個結論,L 是(第)一個組卷積裏面的 partitions(分支)的數目或者卷積的數目,M是第二組組卷積卷積的數目,S 是卷積核的大小,一般都是大於 1 的。這樣的不等式幾乎是恆成立的,這個不等式意味着什麼?結論是:若是跟普通標準的卷積去比,經過咱們的設計方式可讓網絡變寬。跟網絡變深相比起來,網絡變寬是另一個維度,變寬有什麼好處?會不會讓結果變好?咱們作了一些實驗。
這個實驗是跟標準的卷積去比,你們看看左下角的表格,這個表格是參數量,咱們設計的網絡幾乎是標準(卷積)參數量的一半。而後看看右下角這個網絡,咱們的的計算量幾乎也是一半。在 CIFAR-10 標準的圖像分類數據集裏(上面的表格),咱們的結果比前面的一種好。咱們甚至會發現越深越好,在 20 層有些提高並無那麼明顯,但深的時候能夠達到 1.43 的提升量。
後來 CIFRA-100 咱們也作了一樣的實驗,發現咱們提高仍然是一致的,甚至跟前面的比起來提升得更大,由於分 100 類比分 10 類困難一點,說明越困難的任務,咱們的優點越明顯。這個變寬了之後(性能)的確變好了,經過 IGC 實現,網絡結構變寬的確會帶來好處。
這是兩個小的數據集,其實在計算機視覺領域裏小數據集上的結果是不能(徹底)說明問題的,必定要作很是大的數據集。因此咱們當時也作了 ImageNet 數據集,跟 ResNet 比較了一下,參數量少了近五分之二,計算量小了將近一半了,錯誤率也下降了,這證實經過 IGC 的實現,讓模型變寬,在大的網絡模型上取得很是不錯的效果。
咱們大概是前年 八、9 月份開始作這個事情,10 月份發現 Google 有一個工做是 Xception,這個是它的結構圖,這個形式很是接近(咱們的結構),跟咱們前面所謂的 IGC 結構很是像,實際上就是咱們的一個特例。當時咱們以爲這個特例有沒有可能結果最好,因此咱們作了些驗證,總體上咱們結構好一點。
IGC 可能還有變體,好比我要是把這個 channel-wise 也變成組卷積,第二個是 1×1 的,這樣的結果會怎樣?咱們作了相似一樣的實驗,仍然發現咱們的方法是最好的。
當時咱們作的時候,但願在網絡結構上跟 state-of-the-arts 的方法去比較,咱們取得了很是不錯的結果,當時咱們的工做是但願經過消除冗餘性提升模型性能或者準確率。
▌IGCV2
後來咱們嘗試利用消除冗餘性帶來的好處,把這個模型部署到手機上去。咱們去年又沿着這個方向繼續往前走,把這個問題理解得更深,但願進一步消除冗餘性。
這個講起來比較直接或簡單一點,前面的網絡結構是兩個組卷積或者兩個矩陣相乘獲得的,咱們有沒有辦法變得多一點?實際上很簡單,如上圖所示。
這種方法帶來的好處很直接,就是但願參數量儘可能小,那怎麼才能(使)參數量儘可能小?咱們引進了所謂的平衡條件。雖然這裏面咱們有 L-1 個 1×1 的組卷積,但 L-1 個 1×1 的組卷積之間有區別嗎?誰重要一點、誰不重要一點?其實咱們也不知道。不知道怎麼辦?就讓它同樣。同樣了之後,咱們經過簡單的數學推導就會得出上面的數學結果。
如今再驗證一下,前面講了互補條件、平衡條件,那這個結果是否是最好的?或者是否是有足夠的優點?咱們作了些實驗,這個紅色的是對應知足咱們條件的,發現這個狀況下(L=4)結果是最好的。實際上是不是老是最好?不見得,由於實際問題跟理論分析仍是有點距離。但咱們整體發現基本上紅色的不是最好也排在第二,說明這種設計至少給了咱們很好的準則來幫助設計網絡結構。這個雖然不老是最好的,但和最好的是差很少的。
第二個問題,咱們究竟要設計多少個組卷積(L 設成多少)?一樣咱們的準則也是經過參數量最小來進行分析,之前是兩個組卷積,咱們能夠經過 3 個、4 個達到參數量更小,但其實最終的結論發現,並非參數量最優的狀況下性能是最好的。
▌IGCV3
後來咱們發現,若是遵循嚴格互補條件,模型的結構變得很是稀疏、很是寬,結果不見得是最好的。因此咱們變成了 Loose。Loose 是什麼意思?之前 output(輸出通道)和 input (輸入通道)之間是有且只有一個 path,咱們改得很是簡單,能不能多個path?多個 path 就沒那麼稀疏了,它好處在於每一個 output (輸出通道)能夠多條路徑從 input (輸入通道)那裏拿到信息,因此咱們設計了 Loose condition。
實際上很是簡單,咱們就定義兩個超級通道(super-channels)只能在一個 Branch 裏面同時出現,不能在兩個 Branch 裏同時出現,來達到 Loose condition。
後來咱們進一步往前走,把 structured sparse 和 low-rank 兩個組起來。咱們在 ImageNet 上比較,同時跟 MobileV2 去比,在小的模型咱們優點是愈來愈明顯的。比較結果,見下圖。
這就是今天的主要內容,這個工做是我跟不少學生和同事一塊兒作的,前面這5個是個人學生,Ting Zhang如今在微軟研究院工做,Bin Xiao 是個人同事,Guojun Qi 是美國的教授,咱們一塊兒合做了這篇文章。
講師簡介
王井東,微軟亞洲研究院視覺計算組資深研究員,國際模式識別學會會士,曾擔任CVPR、ICCV、ECCV、AAAI 等計算機視覺和人工智能會議的領域主席和高級程序委員會委員。在視覺、機器學習以及多媒體領域裏發表論文 100 餘篇,我的專著一本。
另外,AI科技大本營已經有多門公開課上線啦~~☟☟☟
計算機視覺專場:
格靈深瞳:一億ID的人臉識別訓練和萬億人臉對(Trillion Pairs)的人臉識別評測
一億ID的人臉識別訓練和萬億人臉對(Trillion Pairs)的人臉識別評測edu.csdn.net
雲從科技:詳解跨鏡追蹤(ReID)技術實現及應用場景
雲從科技:詳解跨鏡追蹤(ReID)技術實現及應用場景 - 直播課 - CSDN學院 - 在線學習教程 - 會員免費-CSDN學院edu.csdn.net
微軟:基於交錯組卷積的高效深度神經網絡
基於交錯組卷積的高效深度神經網絡 - 直播課 - CSDN學院 - 在線學習教程 - 會員免費-CSDN學院edu.csdn.net
騰訊:朋友圈爆款背後的計算機視覺技術與應用
朋友圈爆款背後的計算機視覺技術與應用 - 直播課 - CSDN學院 - 在線學習教程 - 會員免費-CSDN學院edu.csdn.net
曠視科技:計算機視覺如何賦能身份驗證場景
曠視科技:計算機視覺如何賦能身份驗證場景 - 直播課 - CSDN學院 - 在線學習教程 - 會員免費-CSDN學院edu.csdn.net
啓發式對話中的知識管(7.12)
嘉賓:葛付江,思必馳北京研發院天然語言處理負責人。畢業於哈爾濱工業大學,擁有12年天然語言處理研究和行業經驗。
報名:
啓發式對話中的知識管理 - 直播課 - CSDN學院 - 在線學習教程 - 會員免費-CSDN學院edu.csdn.net
NLP概述和文本自動分類算法詳解(7.17)
嘉賓:張健,達觀數據聯合創始人,文本應用組負責人。
報名:
NLP概述和文本自動分類算法詳解 - 直播課 - CSDN學院 - 在線學習教程 - 會員免費-CSDN學院edu.csdn.net
Transformer新型神經網絡在機器翻譯中的應用(7.26)
嘉賓:於恆,中科院計算所博士,現爲阿里巴巴-翻譯平臺-翻譯模型組負責人
Transformer新型神經網絡在機器翻譯中的應用 - 直播課 - CSDN學院 - 在線學習教程 - 會員免費-CSDN學院edu.csdn.net
微信高級研究員解析深度學習在NLP中的發展和應用
微信高級研究員解析深度學習在NLP中的發展和應用 - 直播課 - CSDN學院 - 在線學習教程 - 會員免費-CSDN學院edu.csdn.net
嘉賓 | 劉鐵巖
整理 | 阿司匹林
來源 | AI科技大本營在線公開課(更多公開課)
人工智能正受到愈來愈多的關注,而這波人工智能浪潮背後的最大推手就是「機器學習」。機器學習從業者在當下須要掌握哪些前沿技術?展望將來,又會有哪些技術趨勢值得期待?
近期,AI科技大本營聯合華章科技特別邀請到了微軟亞洲研究院副院長劉鐵巖博士進行在線公開課分享,爲咱們帶來微軟研究院最新的研究成果,以及對機器學習領域將來發展趨勢的展望。
如下是本次公開課的精彩內容,AI科技大本營整理。
你們好,我是劉鐵巖,來自微軟亞洲研究院。今天很是榮幸,能跟你們一塊兒分享一下微軟研究院在機器學習領域取得的一些最新研究成果。
你們都知道,最近這幾年機器學習很是火,也取得了不少進展。這張圖總結了機器學習領域的最新工做,好比 ResNet、膠囊網絡、Seq2Seq Model、Attention Mechanism 、GAN、Deep Reinforcement Learning 等等。
這些成果推進了機器學習領域的飛速發展,但這並不意味着機器學習領域已經很是成熟,事實上仍然存在很是大的技術挑戰。好比如今主流機器學習算法須要依賴大量的訓練數據和計算資源,才能訓練出性能比較好的機器學習模型。同時,雖然深度學習大行其道,但咱們對深度學習的理解,尤爲是理論方面的理解還很是有限。深度學習爲何會有效,深度學習優化的損失函數曲面是什麼樣子?經典優化算法的優化路徑如何?最近一段時間,學者們在這個方向作了不少有益的嘗試,好比討論隨機梯度降低法在什麼條件下能夠找到全局最優解,或者它所獲得的局部最優解跟全局最優解之間存在何種關係。
再好比,最近不少學者開始用自動化的方式幫助機器學習尤爲是深度學習來調節超參數、搜尋神經網絡的結構,相關領域稱爲元學習。其基本思想是用一個機器學習算法去自動地指導另外一個機器學習算法的訓練過程。可是咱們必需要認可,元學習其實並無走出機器學習的基本框架。更有趣的問題是,如何可以讓一個機器學習算法去幫助另外一個算法突破機器學習的現有邊界,讓機器學習的效果更好呢?這都是咱們須要去回答的問題。沿着這些挑戰,在過去的這幾年裏,微軟亞洲研究院作了一些很是有探索性的學術研究。
首先,咱們看看對偶學習。對偶學習主要是爲了解決現有深度學習方法對訓練數據過分依賴的問題。當咱們沒有標註好的訓練數據時,是否還能作有意義的機器學習?在過去的幾年裏,人們作了不少嘗試,好比無監督學習、半監督學習等等。可是不管如何,你們內心要清楚,只有有信號、有反饋、才能實現有效的學習,若是咱們對這個世界一無所知,咱們是不能進行有效的學習的。
沿着這個思路,咱們在思考:除了人爲提供的標籤之外,是否是存在其餘有效的反饋信號,可以造成學習的閉環?咱們發現不少機器學習任務其實自然有結構對偶性,能夠造成自然的閉環。
好比機器翻譯。一方面咱們會關心從英文翻譯到中文,另外一方面咱們必定也關心從中文翻譯到英文,不然就沒法實現兩個語種人羣之間的無縫交流。再好比語音處理。咱們關心語音識別的同時必定也關心語音合成,不然人和機器之間就沒有辦法實現真正的雙向對話。還有圖像理解、對話引擎、搜索引擎等等,其實它們都包含具備對偶結構的一對任務。
如何更加準確地界定人工智能的結構對偶性呢?咱們說:若是第一個任務的輸入剛好是第二個任務的輸出,而第一個任務的輸出剛好是第二個任務的輸入,那麼這兩個任務之間就造成了某種結構的「對偶性」。把它們放在一塊兒就會造成學習的閉環 ,這就是「對偶學習」的基本思想。
有了這樣的思想之後,咱們能夠把兩個對偶任務放到一塊兒學,提供有效的反饋信號。這樣即使沒有很是多的標註樣本,咱們仍然能夠提取出有效的信號進行學習。
對偶學習背後其實有着嚴格的數學解釋。當兩個任務互爲對偶時,咱們能夠創建以下的機率聯繫:
這裏 X 和 Y 分別對應某個任務的輸入空間和輸出空間,在計算 X 和 Y 的聯合機率分佈時有兩種分解方法,既能夠分解成 P(x)P(y|x; f) ,也能夠分解成 P(y)P(x|y; g)。這裏,P(y|x; f) 對應了一個機器學習模型,當咱們知道輸入 x 時,經過這個模型能夠預測輸出 y 的機率,咱們把這個模型叫主任務的機器學習模型,P(x|y; g) 則是反過來,稱之爲對偶任務的機器學習模型。
有了這個數學聯繫之後,咱們既能夠作有效的無監督學習,也能夠作更好的有監督學習和推斷。好比咱們利用這個聯繫能夠定義一個正則項,使得有監督學習有更好的泛化能力。再好比,根據 P(x)P(y|x; f) 咱們能夠獲得一個推斷的結果,反過來利用貝葉斯公式,咱們還能夠獲得用反向模型 g 作的推斷,綜合兩種推斷,咱們能夠獲得更準確的結果。咱們把以上提到的對偶學習技術應用在了機器翻譯上,取得了很是好的效果,在中英新聞翻譯任務上超過了普通人類的水平。
最近一段時間,在機器學習領域有一些很差的風氣。有些論文裏會使用很是多的計算資源,好比動輒就會用到幾百塊 GPU卡 甚至更多的計算資源。這樣的結果很難復現,並且在必定程度上致使了學術研究的壟斷和馬太效應。
那麼人們可能會問這樣的問題:是否是機器學習必定要用到那麼多的計算資源?咱們能不能在計算資源少幾個數量級的狀況下,仍然訓練出有意義的機器學習模型?這就是輕量級機器學習的研究目標。
在過去的幾年裏,咱們的研究組作了幾個很是有趣的輕量級機器學習模型。好比在 2015 發表的 lightLDA 模型,它是一個很是高效的主題模型。在此以前,世界上已有的大規模主題模型通常會用到什麼樣的計算資源?好比 Google 的 LDA 使用上萬個 CPU cores,纔可以經過幾十個小時的訓練得到 10 萬個主題。爲了下降對計算資源的需求,咱們設計了一個基於乘性分解的全新採樣算法,把每個 token 的平均採樣複雜度下降到 O(1),也就是說採樣複雜度不隨着主題數的變化而變化。所以即使咱們使用這個主題模型去作很是大規模的主題分析,它的運算複雜度也是很低的。例如,咱們只使用了 300 多個 CPU cores,也就是大概 8 臺主流的機器,就能夠實現超過 100 萬個主題的主題分析。
這個例子告訴你們,其實有時咱們不須要使用蠻力去解決問題,若是咱們能夠仔細分析這些算法背後的機理,作算法方面的創新,就能夠在節省幾個數量級計算資源的狀況下作出更大、更有效的模型。
一樣的思想咱們應用到了神經網絡上面,2016 年發表的 LightRNN算法是迄今爲止循環神經網絡裏面最高效的實現。當咱們用 LigthtRNN 作大規模的語言模型時,獲得的模型規模比傳統的 RNN 模型小好幾個數量級。好比傳統模型大小在100GB 時,LightRNN 模型只有50MB,而且訓練時間大幅縮短 。不只如此,LightRNN模型的 perplexity比傳統RNN還要更好。
可能有些同窗會產生疑問:怎麼可能又小又好呢?其實,這來源於咱們在循環神經網絡語言模型的算法上所作的創新設計。咱們把對 vocabulary 的表達從一維變到了兩維,而且容許不一樣的詞之間共享某一部分的 embedding 。至於哪些部分共享、哪些不共享,咱們使用了一個二分圖匹配的算法來肯定。
第三個輕量型機器學習的算法叫 LightGBM,這個工具是 GBDT 算法迄今爲止最高效的實現。LightGBM的背後是兩篇 NIPS 論文,其中一樣包含了不少技術創新,好比 Gradient-based one-side sampling,能夠有效減小對樣本的依賴; Exclusive feature bundling,能夠在特徵很是多的狀況下,把一些不會發生衝突的特徵粘合成比較 dense 的少數特徵,使得創建特徵直方圖很是高效。同時咱們還提出了 Voting-based parallelization 機制,能夠實現很是好的加速比。全部這些技巧合在一塊兒,就成就了LightGBM的高效率和高精度。
分佈式機器學習
雖然咱們作了不少輕量級的機器學習算法,可是當訓練數據和機器學習模型特別大的時候,可能還不能徹底解決問題,這時咱們須要研究怎樣利用更多的計算節點實現分佈式的機器學習。
咱們剛剛出版了一本新書——《分佈式機器學習:算法、理論與實踐》,對分佈式機器學習作了很是好的總結,也把咱們不少研究成果在這本書裏作了詳盡的描述。下面,我挑其中幾個點,跟你們分享。
分佈式機器學習的關鍵是怎樣把要處理的大數據或大模型進行切分,在多個機器上作並行訓練。一旦把這些數據和模型放到多個計算節點以後就會涉及到兩個基本問題:首先,怎樣實現不一樣機器之間的通訊和同步,使得它們能夠協做把機器學習模型訓練好。其次,當每一個計算節點都可以訓練出一個局部模型以後,怎樣把這些局部模型作聚合,最終造成一個統一的機器學習模型。
數據切分聽起來很簡單,其實有不少門道。舉個例子,一個常見的方式就是把數據作隨機切分。好比咱們有不少訓練數據,隨機切分紅 N 份,而且把其中一份放到某個局部的工做節點上去訓練。這種切分到底有沒有理論保證?
咱們知道機器學習有一個基本的假設,就是學習過程當中的數據是獨立同分布採樣得來的,纔有理論保證。可是前面提到的數據切分其實並非隨機的數據採樣。從某種意義上講,獨立同分布採樣是有放回抽樣,而數據切分對應於無放回抽樣。一個頗有趣的理論問題是,咱們在作數據切分時,是否是能夠像有放回抽樣同樣,對學習過程有必定的理論保證呢?這個問題在咱們的研究發表以前,學術界是沒有完整答案的。
咱們證實了:若是我先對數據進行全局置亂,而後再作數據切分,那麼它和有放回的隨機採樣在收斂率上是基本一致的。可是若是咱們只能作局部的數據打亂,兩者之間的收斂率是有差距的。因此若是咱們只能作局部的數據打亂,就不能訓練太多 epoch,不然就會與原來的分佈偏離過遠,使得最後的學習效果很差。
說完數據切分,咱們再講講各個工做節點之間的通訊問題。你們知道,有不少流行的分佈式框架,好比 MapReduce,能夠實現不一樣工做節點之間的同步計算。但在機器學習過程當中,若是不一樣機器之間要作同步通訊,就會出現瓶頸:有的機器訓練速度比較快,有的機器訓練速度比較慢,而整個集羣會被這個集羣裏最慢的機器拖垮。由於其餘機器都要跟它完成同步以後,才能往前繼續訓練。
爲了實現高效的分佈式機器學習,人們愈來愈關注異步通訊,從而避免整個集羣被最慢的機器拖垮。在異步通訊過程當中,每臺機器完成本地訓練以後就把局部模型、局部梯度或模型更新推送到全局模型上去,並繼續本地的訓練過程,而不去等待其餘的機器。
可是人們一直對異步通訊心有餘悸。由於作異步通訊的時候,一樣有一些機器運算比較快,有一些機器運算比較慢,當運算比較快的機器將其局部梯度或者模型更新疊加到全局模型上之後,全局模型的版本就被更新了,變成了很好的模型。可是過了一段時間,運算比較慢的機器又把陳舊的梯度或者模型更新,疊加到全局模型上,這就會把原來作得比較好的模型給毀掉。人們把這個問題稱爲「延遲更新」。不過在咱們的研究以前,沒有人定量地刻畫這個延遲會帶來多大的影響。
在去年 ICML 上咱們發表了一篇論文,用泰勒展開式定量刻畫了標準的隨機梯度降低法和異步並行隨機梯隊降低法的差距,這個差距主要是因爲延遲更新帶來的。若是咱們簡單粗暴地使用異步 SGD,不去處理延遲更新,其實就是使用泰勒展開裏零階項做爲真實的近似。既然它們之間的差距在於高階項的缺失,若是咱們有能力把這些高階項經過某種算法補償回來,就能夠使那些看起來陳舊的延遲梯度煥發青春。這就是咱們提出的帶有延遲補償的隨機梯度降低法。
這件事提及來很簡單,但實操起來有很大的難度。由於在梯度函數的泰勒展開中的一階項其實對應於原損失函數的二階項,也就是所謂的海森矩陣(Hessian Matrix)。當模型很大時,計算海森矩陣要使用的內存和計算量都會很是大,使得這個算法並不實用。在咱們的論文裏,提出了一個很是高效的對海森矩陣的近似。咱們並不須要真正去計算很是高維的海森矩陣並存儲它,只須要比較小的計算和存儲代價就能夠實現對海蔘矩陣至關精確的近似。 在此基礎上,咱們就能夠利用泰勒展開,實現對原來的延遲梯度的補償。咱們證實了有延遲補償的異步隨機梯度降低法的收斂率比普通的異步隨機梯度降低法要好不少,並且各類實驗也代表它的效果確實達到了咱們的預期。
除了異步通訊之外,每一個局部節點計算出一個局部模型以後,怎樣聚合在一塊兒也是一個值得思考的問題。在業界裏最經常使用的方式是把各個不一樣的局部模型作簡單的參數平均。可是,從理論上講,參數平均僅在凸問題上是合理的。若是你們對凸函數的性質有一些瞭解,就知道若是模型是凸的,那麼咱們對凸模型參數進行平均後獲得的模型的性能,不會比每一個模型性能的平均值差。
可是當咱們用這樣的方式去處理深層神經網絡這類嚴重非凸的模型時,就再也不有理論保證了。咱們在 2017 年這幾篇論文裏指出了這個理論的缺失,並指出咱們不該該作模型參數的平均,而是應該作模型輸出的平均,這樣才能得到性能的保障,由於雖然神經網絡模型是非凸的,可是經常使用的損失函數自己是凸的。
可是模型輸出的平均至關於作了模型的集成,它會使模型的尺寸變大不少倍。當機器學習不斷迭代時,這種模型的集成就會致使模型尺寸爆炸的現象。爲了保持凸性帶來的好處,同時又不會受到模型尺寸爆炸的困擾,咱們須要在整個機器學習流程裏不只作模型集成,還要作有效的模型壓縮。
這就是咱們提出的模型集成-壓縮環路。經過模型集成,咱們保持了凸性帶來的好處,經過模型壓縮,咱們避免了模型尺寸的爆炸,因此最終會取得一個很是好的折中效果。
接下來咱們講講如何探索深度學習的理論邊界。咱們都知道深度學習很高效,任意一個連續函數,只要一個足夠複雜的深度神經網絡均可以逼近得很好。可是這並不表示機器就真能學到好的模型。由於當目標函數的界面太複雜時,咱們可能掉入局部極小值的陷阱,沒法獲得咱們想要的最好模型。當模型太複雜時,還容易出現過擬合,在優化過程當中可能作的不錯,但是當你把學到的模型應用到未知的測試數據上時,效果不必定很好。所以對於深度學習的優化過程進行深刻研究是頗有必要的。
這個方向上,今年咱們作了一個蠻有趣的工做,叫 g-Space Deep Learning。
這個工做研究的對象是圖像處理任務裏經常使用的一大類深度神經網絡,這類網絡的激活函數是ReLU函數。ReLU是一個分段線性函數,在負半軸取值爲0,在正半軸則是一個線性函數。ReLU Network 有一個衆所周知的特色,就是正尺度不變性,但咱們對於這個特色對神經網絡優化影響的理解很是有限。
那麼什麼是正尺度不變性呢?咱們來舉個例子。這是一個神經網絡的局部,假設中間隱節點的激活函數是ReLU函數。當咱們把這個神經元兩條輸入邊上面的權重都乘以一個正常數 c,同時把輸出邊上的權重除以一樣的正常數 c,就獲得一個新的神經網絡,由於它的參數發生了變化。可是若是咱們把整個神經網絡當成一個總體的黑盒子來看待,這個函數其實沒有發生任何變化,也就是不管什麼樣的輸入,輸出結果都不變。這就是正尺度不變性。
這個不變性其實很麻煩,當激活函數是 ReLu函數時,不少參數徹底不同的神經網絡,其實對應了同一個函數。這說明當咱們用神經網絡的原始參數來表達神經網絡時,參數空間是高度冗餘的空間,由於不一樣的參數可能對應了同一個網絡。這種冗餘的空間是不能準確表達神經網絡的。同時在這樣的冗餘空間裏可能存在不少假的極值點,它們是由空間冗餘帶來的,並非原問題真實的極值點。咱們平時在神經網絡優化過程當中遇到的梯度消減、梯度爆炸的現象,不少都跟冗餘的表達有關係。
既然參數空間冗餘有這麼多缺點,咱們能不能解決這個問題?若是不在參數空間裏作梯度降低法,而是在一個更緊緻的表達空間裏進行優化,是否是就能夠解決這些問題呢?這個願望聽起來很美好,但實際上作起來很是困難。由於深度神經網絡是一個很是複雜的函數,想對它作精確的緊緻表達,須要很是強的數學基礎和幾何表達能力。咱們組裏的研究員們作了很是多的努力,通過了一年多的時間,纔對這個緊緻的空間作了一個完整的描述,咱們稱其爲 g-Space 。
g-Space 實際上是由神經網絡中一組線性無關的通路組成的,所謂通路就是從輸入到輸出所走過的一條不回頭的通路,也就是其中一些邊的鏈接集合。咱們能夠證實,若是把神經網絡裏的這些通路組成一個空間,這個空間裏的基所組成的表達,其實就是對神經網絡的緊緻表達。
有了 g-Space 以後,咱們就能夠在其中計算梯度,同時也能夠在 g-Space 裏計算距離。有了這個距離以後,咱們還能夠在 g-Space 裏定義一些正則項,防止神經網絡過擬合。
咱們的論文代表,在新的緊緻空間裏作梯度降低的計算複雜度並不高,跟在參數空間裏面作典型的 BP 操做複雜度幾乎是同樣的。換言之,咱們設計了一個巧妙的算法,它的複雜度並無增長,但卻迴避了原來參數空間裏的不少問題,得到了對於 ReLU Network 的緊緻表達,而且計算了正確的梯度,實現了更好的模型優化。
有了這些東西以後,咱們造成了一套新的深度學習優化框架。這個方法很是 general,它並無改變目標函數,也沒改變神經網絡的結構,僅僅是換了一套優化方法,至關於整個機器學習工具包裏面只換了底層,就能夠訓練出效果更好的模型來。
元學習的限制
第四個研究方向也很是有趣,咱們管它叫 Learning to Teach,中文我沒想到特別好的翻譯,如今權且叫作「教學相長」。
咱們提出 Learning to Teach 這個研究方向,是基於對如今機器學習框架的侷限性的反思。這個式子雖然看起來很簡單,但它能夠描述一大類的或者說絕大部分機器學習問題。這個式子是什麼意思?首先 (x, y) 是訓練樣本,它是從訓練數據集 D 裏採樣出來的。 f(ω) 是模型,好比它可能表明了某一個神經網絡。咱們把 f(ω)做用在輸入樣本 x 上,就會獲得一個對輸入樣本的預測。而後,咱們把預測結果跟真值標籤 y 進行比較,就能夠定義一個損失函數 L。
如今絕大部分機器學習都是在模型空間裏最小化損失函數。因此這個式子裏有三個量,分別是訓練數據 D,損失函數 L,還有模型空間 Ω。 這三個量都是超參數,它們是人爲設計好的,是不變的。絕大部分機器學習過程,是在這三樣給定的狀況下去作優化,找到最好的 ω,使得咱們在訓練數據集上可以最小化人爲定義的損失函數。即使是這幾年提出的 meta learning 或者 learning2learn,其實也沒有跳出這個框架。由於機器學習框架自己歷來就沒有規定最小化過程只能用梯度降低的方法,你能夠用任何方法,都超不出這個這個式子所表達的框架。
可是爲何訓練數據集 D、損失函數 L 和模型參數空間 Ω 必須人爲預先給定?若是不實現給定,而是在機器學習過程當中動態調整,會變成什麼樣子?這就是所謂的 Learning to Teach。咱們但願經過自動化的手段,自動調節訓練數據集 D、損失函數 L 和模型參數空間 Ω,以期拓展示有機器學習的邊界,幫助咱們訓練出更增強大的機器學習模型。
要實現這件事情其實並不簡單,咱們須要用全新的思路和視角。咱們在今年連續發表了三篇文章,對於用自動化的方式去肯定訓練數據、函數空間和損失函數,作了很是系統的研究。
我給你們形象地描述一下咱們的研究。 好比咱們怎麼用自動化的方式去選擇合適的數據?其實很簡單。除了原來的機器學習的模型之外,咱們還有一個教學模型 teacher model。這個模型會把原來的機器學習的過程、所處的階段、效果好壞等做爲輸入,輸出對下一階段訓練數據的選擇。這個 teacher model 會根據原來的機器學習模型的進展過程,動態選擇最適合的訓練數據,最大限度提升性能。同時teacher model也會把機器學習在交叉驗證集上的效果做爲反饋,自我學習,自我提升。
一樣 model teaching 的環路中也存在一個 teacher model ,它會根據原來的機器學習過程所處的階段、訓練的效果,選擇合適的函數空間,讓原來的機器學習擴大本身的搜索範圍,這個過程也是自適應的、動態的。原來的機器學習模型咱們叫 student model,和咱們引入的教學模型 teacher model 之間進行互動,就能夠將學習過程推向一個新的高度。
一樣,teacher model也能夠動態調整原來student model 所要優化的目標。 好比,咱們的學習目標能夠從簡到難,最開始的時候,一個簡單的學習目標會讓咱們很快學到一些東西,可是這個學習目標可能和咱們最終問題的評價準則相差很遠。咱們不斷把簡單平滑的目標,向着問題評價的複雜的非連續函數逼近,就會引導 student model 不斷提升本身的能力,最後實現很好的學習效果。
總結一下,當咱們有一個 teacher model,它能夠動態地設計訓練數據集、改變模型空間、調整目標函數時,就會使得原來「student model」的訓練更寬泛、更有效,它的邊界就會被放大。 咱們在三篇論文裏面分別展現了不少不一樣數據集上的實驗結果。
我本身認爲 Learning to Teach 很是有潛力,它擴大了傳統機器學習的邊界。咱們的三篇論文僅僅是拋磚引玉,告訴你們這件事情能夠作,但前面路還很長。
到此爲止,我把最近這一兩年微軟亞洲研究院在機器學習領域所作的一些研究成果跟你們作了分享,它們只是咱們研究成果的一個小小的子集,可是我以爲這幾個方向很是有趣,但願可以啓發你們去作更有意義的研究。
如今機器學習領域的會議愈來愈膨脹,有一點點不理智。每年那麼多論文,甚至都不知道該讀哪些。人們在寫論文、作研究的時候,有時也不知道重點該放在哪裏。好比,若是整個學術界都在作 learning2learn,是否是我應該作一篇 learning2learn 的論文?你們都在用自動化的方式作 neural architecture search,我是否是也要作一篇呢?如今這種隨波逐流、人云亦云的心態很是多。
咱們其實應該反思:如今你們關注的熱點是否是涵蓋了全部值得研究的問題?有哪些重要的方向實際上是被忽略的?我舉個例子,好比輕量級的機器學習,好比 Learning to Teach,好比對於深度學習的一些理論探索,這些方面在現在火熱的研究領域裏面涉及的並很少,但這些方向其實很是重要。只有對這些方向有很是深入的認識,咱們才能真正推進機器學習的發展。但願你們可以把心思放到那些你堅信重要的研究方向上,即使當下它還不是學術界關注的主流。
接下來咱們對機器學習將來的發展作一些展望,這些展望可能有些天馬行空,可是卻包含了一些有意義的哲學思考,但願對你們有所啓發。
第一個方面涉及機器學習和量子計算之間的關係。量子計算也是一個很是火的研究熱點,可是當機器學習碰到量子計算,會產生什麼樣的火花?其實這是一個很是值得咱們思考的問題。
目前學術界關注的問題之一是如何利用量子計算的計算力去加速機器學習的優化過程,這就是所謂的quantum speedup。可是,這是不是故事的所有呢?你們應該想想,反過來做爲一名機器學習的學者,咱們是否是有可能幫助量子計算呢?或者當機器學習和量子計算各自往前走,碰到一塊兒的時候會迸發出怎樣的新火花?
其實在量子計算裏有一些很是重要的核心問題,好比咱們要去評估或者或者預測 quantum state(量子態),而後才能把量子計算的結果取出來。這個過程在傳統理論裏面已經證實,在最壞狀況下,咱們就須要指數級的採樣,才能對 quantum state 作比較好的估計。但這件事情會帶來負面影響,量子計算雖然很快,可是若是探測量子態耗費了大量時間來作採樣,就會拖垮原來的加速效果,最後合在一塊兒,並無實現任何加速。
咱們知道不少最壞狀況下很是複雜的問題,好比 NP Complete問題,用機器學習的方法去解,其實能夠在平均意義上取得很是好的效果。咱們今年在ACML上得到最佳論文的工做就是用機器學習的方法來解travelling salesman問題,取得了比傳統組合優化更高效的結果。沿着這個思路,咱們是否是能夠用機器學習幫助處理量子計算裏的問題,好比quantum state prediction,是否是根本不須要指數級的採樣,就能夠獲得一個至關好的估計?在線學習、強化學習等都能在這方面有所幫助。
同時,量子和機器學習理論相互碰撞時,會發生一些很是有趣的現象。咱們知道,量子有不肯定性,這種不肯定性有的時候不見得是件壞事,由於在機器學習領域,咱們一般但願有不肯定性,甚至有時咱們還會故意在數據里加噪聲,在模型訓練的過程當中加噪聲,以期得到更好的泛化性能。
從這個意義上講,量子計算的不肯定性是否是反而能夠幫助機器學習得到更好的泛化性能?若是咱們把量子計算的不肯定性和機器學習的泛化放在一塊兒,造成一個統一的理論框架,是否是能夠告訴咱們它的 Trade-off 在哪裏?是否是咱們對量子態的探測就不須要那麼狠?由於探測得越狠可能越容易 overfit。是否是有一個比較好的折中?其實這些都是很是有趣的問題,也值得量子計算的研究人員和機器學習的研究人員共同花不少年的時間去探索。
以簡治繁
第二個方向也頗有趣,它涉及到咱們應該以何種方式來看待訓練數據。深度學習是一個以繁治繁的過程,爲了去處理很是複雜的訓練數據,它使用了一個幾乎更復雜的模型。但這樣作真的值得嗎?跟咱們過去幾十年甚至上百年作基礎科學的思路是否是一致的?
在物理、化學、生物這些領域,人們追求的是世界簡單而美的規律。無論是量子物理,仍是化學鍵,甚至經濟學、遺傳學,不少複雜的現象背後其實都是一個二階偏微分方程,好比薛定諤方程,好比麥克斯韋方程組,等等。這些方程都告訴咱們,看起來很複雜的世界,其實背後的數學模型都是簡單而美的。這些以簡治繁的思路,跟深度學習是截然不同的。
機器學習的學者也要思考一下,以繁治繁的深度學習真的是對的嗎?咱們把數據當作上帝,用那麼複雜的模型去擬合它,這樣的思路真的對嗎?是否是有一點捨本逐末了?之前的這種以簡治繁的思路,歷來都不認爲數據是上帝,他們認爲背後的規律是上帝,數據只是一個表象。
咱們要學的是生成數據的規律,而不是數據自己,這個方向其實很是值得你們去思考。要想沿着這個方向作很好的研究,咱們須要機器學習的學者擴大本身的知識面,更多地去了解動態系統或者是偏微分方程等,以及傳統科學裏的各類數學工具,而不是簡單地使用一個非線性的模型去作數據擬合。
第三個方向關乎的是咱們人類究竟是如何學習的。到今天爲止,深度學習在不少領域的成功,其實都是作模式識別。模式識別聽起來很神奇,實際上是很簡單的一件事情。幾乎全部的動物都會模式識別。人之因此有高的智能,並非由於咱們會作模式識別,而是由於咱們有知識,有常識。基於這個理念,Yann LeCun 一個新的研究方向叫 Predictive Learning(預測學習)。它的思想是什麼?就是即使咱們沒有看到事物的全貌,由於咱們有常識,有知識,咱們仍然能夠作必定程度的預測,而且基於這個預測去作決策。這件事情已經比傳統的模式識別高明不少,它會涉及到人利用知識和常識去作預測的問題。
可是,反過來想想,咱們的世界真的是能夠預測的嗎?可能一些平凡的規律是能夠預測的,可是咱們每一個人均可以體會到,咱們的生活、咱們的生命、咱們的世界大部分都是不可預測的。因此這句名言很好,The only thing predictable about life is its unpredictability(人生中惟一能預測的就是其不可預測性)。
咱們既然活在一個不可預測的世界裏,那麼咱們究竟是怎樣從這個世界裏學習,而且愈來愈強大?如下只是一家之言,咱們猜想人類其實在作一件事情,叫 Improvisation,什麼意思?就是咱們每一個人實際上是爲了生存在跟這個世界抗爭。咱們天天從世界裏面學習的東西,都是爲了應付未來未知的異常。當一件不幸的事情發生的時候,咱們如何才能生存下來?實際上是由於咱們對這個世界有足夠的瞭解,因而會利用已有的知識,即興制定出一個方案,讓咱們規避風險,走過這個坎。
咱們但願在咱們的眼裏,世界的熵在下降。咱們對它瞭解越多,它在咱們的眼裏的熵越低。同時,咱們但願當環境發生變化時,好比意外發生時,咱們有能力即興地去處理。這張PPT 裏面描述的即興學習框架就是咱們在跟環境互動,以及在作各類思想實驗,經過無監督的方式自我學習應對未知異常的能力。
從這個意義上講,這個過程其實跟 Predictive Learning 不同,跟強化學習也不同,由於它沒有既定的學習規律和學習目標,而且它是跟環境作交互,但願可以處理將來的未知環境。這其實就跟咱們每一個人積累一身本事同樣,爲的就是養兵千日用兵一時。當某件事情發生時,我怎麼可以把一身的本事使出來,活下去。這個過程能不能用數學的語言描述? Improvisational Learning 能不能變成一個新的機器學習研究方向?很是值得咱們思考。
最後一個展望涉及到一個更哲學的思辨:人類的智能之因此這麼高,究竟是由於咱們個體很是強大,仍是由於咱們羣體很是強大?今天絕大部分的人工智能研究,包括深度學習,其實都在模仿人類個體的大腦,但願學會人類個體的學習能力。但是捫心自問,人類個體的學習能力真的比大猩猩等人類近親高几個數量級嗎?答案顯然不是,可是今天人類文明發展的程度,跟猴子、跟大猩猩他們所處社區的文明的發展程度相比卻有天壤之別。
因此咱們堅信人類除了個體聰明之外,還有一些更加特殊的東西,那就是社會結構和社會機制,使得咱們的智能日新月異。好比文字的產生,書籍的產生,它變成了知識的載體,使得某一我的得到的對世界的認知,能夠迅速傳播給全世界其餘人,這個社會機制很是重要,會加速咱們的進化。
再者,社會分工不一樣會使得每一個人只要優化本身的目標,讓本身變強大就能夠了。各個領域裏有各自的大師,而這些大師的互補做用,使得咱們社會蓬勃發展。
因此社會的多樣性,社會競爭、進化、革命、革新,這些可能都是人類有今天這種高智能的緣由。而這些東西在今天的機器學習領域,鮮有人去作很是好的建模。咱們堅信只有對這些事情作了很是深刻的研究,咱們才能真正瞭解了人的智能,真的瞭解了機器學習,把咱們的研究推向新的高度。
(*本文由AI科技大本營整理,轉載請聯繫微信1092722531)
做者 | 翁嘉頎
編譯 | 姍姍
出品 | 人工智能頭條(公衆號ID:AI_Thinker)
【導讀】在人機交互過程當中,人經過和計算機系統進行信息交換,信息能夠是語音、文本、圖像等一種模態或多種模態。對人來講,採用天然語言與機器進行智能對話交互是最天然的交互方式之一,但這條路充滿了挑戰,如何機器人更好的理解人的語言,從而更明確人的意圖?如何給出用戶更精準和不反感的回覆?都是在人機交互對話過程當中最爲關注的問題。對話系統做爲NLP的一個重要研究領域受到你們愈來愈多的關注,被應用於多個領域,有着很大的價值。
本期大本營公開課,咱們邀請到了竹間智能的 CTO 翁嘉頎老師,他將經過對技術方法通俗易懂的講解和Demo 演示相結合的方式爲你們講解本次課題,本次課題主要包含一些幾個內容:
1.上下文理解技術——補全與指代消解
2.上下文理解技術——對話主題式補全
3.NLU的模塊架構及如何利用NLU的基礎信息
4.Live Demo 演示
5.人機交互的案例分享與研究發展趨勢
6. Q & A
觀看回放:
人機交互將來如何改變人類生活 - 直播課 - CSDN學院 - 在線學習教程 - 會員免費-CSDN學院edu.csdn.net
如下是公開課文字版整理內容
我從1982年開始坐在電腦前面,一直到如今。上一次作人工智能是27年前,大概1991年的時候,那個時候作人工智能的人很是可憐 ,由於作什麼東西都註定作不出來,隨便一個機器學習的訓練、神經網絡訓練須要20天,調個參數再從新訓練又是20天,很是很是慢。電腦棋類我除了圍棋沒作之外,其餘都作了,原本這輩子看不到圍棋下贏人,結果兩年前看到了。後來作語音識別,語音識別那個年代也都是玩具,因此那個年代作人工智能的人最後四分五裂,由於根本活不下去,後來就跑去作搜索引擎、跑去作金融、跑去作其餘的行業。
此次人工智能捲土重來,真的開始進入人類生活,在周邊地方幫上咱們的忙。今天我來分享這些人機交互的技術到底有哪些變化。
先講「一個手環的故事」,這是一個真實的故事,咱們在兩年前的4月份曾經想要作這個,假設有一個用戶戴着手環,「快到週末了,跟女友約會,給個建議吧」。背後機器人記得個人一些事情,知道我過去的約會習慣是看電影,仍是去登山,仍是在家打遊戲、看視頻。若是要外出的話,週末的天氣到底怎樣,若是下大雨的話那可能不適合。
並且它知道我喜歡看什麼電影、不喜歡看什麼電影、個人女友喜歡看什麼、不喜歡看什麼,它甚至知道我跟哪個女友出去,喜歡吃什麼,不喜歡吃什麼,餐廳的價位是吃2000塊一頓,仍是200塊一頓,仍是30塊一頓的餐館,而後跟女友認識多久了,剛認識的可能去高檔一點的地方,認識6年了吃頓便飯就和了,還有約會習慣。
有了這些東西以後,機器人給我一個迴應,說有《失落 的世界2》在某某電影院,這是咱們習慣去的地方,看完電影,附近某家餐館的價位和口味 是符合咱們的須要。我跟它說「OK,沒問題」,機器人就幫我執行這個命令,幫我買電影票、幫我訂餐館、週末時幫我打車,甚至女友剛認識,買一束花放在餐館的桌上。
咱們當時想象是作這個。這個牽扯到哪些技術?第一,有記憶力,你跟我講過什麼東西,我能記得。還包括人機交互,我今天跟它講「週末是女友生日 ,訂個好一點的吧。」它能幫我換個餐館,能理解個人意思。
若是手環可以作到這個樣子,你會以爲這個手環應該是夠聰明的,這個機器人是夠聰明的,可以當成 你的助手陪伴你。最後,咱們並無作出來,咱們作到了一部分,可是有一部分並無作到。
咱們公司的老闆叫Kenny,他以前是 微軟亞洲互聯網工程院副院長,負責小冰及cortana的,老闆是作搜索引擎出身的,我之前也是作搜索引擎的,作了11年。左下角的曹川在微軟作搜索引擎。右上角在微軟作搜索引擎。右下角在谷歌作搜索引擎。目前的人工智能不少是 搜索引擎跑回來的,由於搜索引擎也是作語義理解、文本 分析,和人工智能的文本 分析有必定的相關度。
一開始都是一些關鍵詞跟模板的方式,我最常舉的例子,我桌上有一個音箱,很是有名的一家公司作的,我今天跟這個音箱說「我不喜歡吃牛肉麪」,音箱會抓到關鍵詞「牛肉麪」,它就跟我說「好的,爲您推薦附近的餐館」,推薦給個人第一個搞很差就是牛肉麪。我若是跟它說「我剛剛吃飯吃很飽」,關鍵詞是「吃飯」,而後它又說「好的,爲您推薦附近的餐館」,因此用關鍵詞的方式並非不能作,它對語義意圖理解的準確率可能在七成、七成五左右,也許到八成,但有些東西它是解不了的,由於它並非真的理解你這句話是什麼意思。因此要作得好的話,必須用天然語言理解的方式,用深度學習、強化學習,模板也用得上,把這些技術混搭在一塊兒,比較有辦法理解你到底要作什麼事情。
這個Chatbot的演變歷程咱們不細講,但我今天要表達,在人機交互裏面或者語義理解上面,咱們分紅三個層次。
最底層的叫天然語言理解,舉例來講,我如今想說「我肚子餓」跟「我想吃東西」這兩句話的句法、句型不太同樣,因此分析的結果也不太同樣,這是最底層的。
第二層叫「意圖的理解」,這兩句話雖然不同,但它們的意圖是一致的,「我肚子餓」跟「我想吃東西」可能表明我想知道附近有什麼餐館,或者幫我點個外賣,這是第二層。目前你們作的是第一層跟第二層。
其實還有第三層,第三層就是這一句話背後真正的意思是什麼,好比咱們在八點上這個公開課,我忽然當着你們的面說「我肚子餓」跟「我想吃東西」,大家內心會有什麼感覺?大家心理是否是會以爲我是否是不耐煩、是否是不想講了。你的感覺確定是負面的。今天若是我對着一個女生說「我肚子餓」,女生內心怎麼想?會想我是否是要約她吃飯,是否是對她有不良企圖。目前你們離第三層很是遙遠,要走到那一步纔是咱們心目中真正要的AI,要走到那一步不可避免有情緒 、情感的識別、情境的識別、場景的識別、上下文的識別。
咱們公司的名字叫「EMOTIBOT」,情感機器人,咱們一開始創立時就試着把情緒 情感 的識別作好。咱們情緒情感識別,光文字作了22種情緒 ,這很是變態 ,大部分公司作的是「正、負、中」三種,可是你看負面的情緒 ,有反感、憤怒、難過、悲傷、懼怕、不喜歡、不高興,這些情緒 都是負面的,可是它不太同樣,我懼怕、我悲傷、 我憤怒,機器人的反饋方式應該是不同的。
人臉表情咱們作了9種,語言情緒 咱們作了4種。並且咱們作最多的是把這些情緒混合在一塊兒作了多模態的情感。舉個例子,像高考光結束,我今天看了一段文字:「我高考考了500分」,你看了這段文字不知道該恭喜我仍是安慰我。這時要看講話的語氣,若是個人語氣是說「哦,我高考考了500分。」你一聽就知道我是悲傷的,因此會安慰我。因此一般語音情感 比文字情感 來得更直接。
而後人臉表情加進來,三個加在一塊兒,又更麻煩了。咱們來看一段視頻,我用桌面 共享。(視頻播放)「鬼知道我經歷了什麼」,文字上是匹配的——我已經要死了、生不如死,個人文字是憤怒的,但個人語音情緒跟臉表情是開心的,因此個人總情緒 仍然是開心的。這是把人臉表情、語音情緒 、文字情緒 混搭在一塊兒作出來的多模態情感。
接下來進入比較技術面的部分,講話聊天時,任務型的機器人必定牽扯到上下文的理解技術。
什麼叫上下文理解技術?
這是某個電商網站,我前面一句話跟它說「我要買T恤」,它給我3件T恤,我跟它說「要黑色的」,意思是我要黑色的那件T恤,但它徹底不理解個人意思,由於沒有上下文。因此它竟然在跟我解釋黑色的基本定義是什麼,是由於不返色,因此你看不到光,因此它是黑色的。這徹底不是我要的東西,因此沒有上下文時,它的反應經常哭笑不得。
咱們來看看上下文怎麼作,上下文有幾種作法。第一種是補全與指代消解,像說「明天上海會不會下雨」,回答了「明天上海小雨」,「那後天呢」缺了主謂賓等一些東西,因此往上去找,把它補全,把「那後天呢」改爲「後天上海會不會下雨」,而後機器人就有辦法處理。
指代消解也是「我喜歡大張偉」,而後機器人回答說「我也喜歡他」,「他」是誰?這個代名詞,我知道「他」是大張偉,因此把「我也喜歡他」改爲「我也喜歡大張偉」,這樣纔有辦法去理解。而後那我的就說「最喜歡他唱得《倍兒爽》」,那他是誰?要把它改爲寫「最喜歡大張偉唱的《倍兒爽》」。這兩個是基本的東西,基本上每家公司都可以作獲得。
而後咱們看難一點的東西,能夠不能夠作對話主題式補全?這個開始有一些上下文在裏面,「我喜歡大張偉」,第一句話目前的對話主題是大張偉,而後它回答說「對啊,我也喜歡他」改爲「我也喜歡大張偉」,這沒問題。
第二句話是「喉嚨痛怎麼辦?」這有兩種可能,由於我如今的對話主題是大張偉,因此多是「喉嚨痛怎麼辦」,也多是「大張偉喉嚨痛怎麼辦」,這時候怎麼辦?我到底應該選哪個?先試第一個「喉嚨痛怎麼辦」,竟然就能夠找到答案了,我知道可以找到好的答案,我就回答了「喉嚨痛就多喝開水」,目前的對話主題也變成喉嚨痛。
第三個是「他唱過什麼歌?」這個他究竟是誰?有兩個對話主題,一個是喉嚨痛,一個是大張偉,有多是「喉嚨痛他唱過什麼歌」或者「大張偉他唱過什麼歌」。由於優先,最近的對話主題是喉嚨痛,因此我先看第一個,可是一找不到答案,因此我再去看第二個「大張偉唱過什麼歌」,那我知道大張偉唱過歌,因此他唱過《倍兒爽》,我就能夠回答,這是對話主題式補全。
另外,利用主題作上下文對話控制。像如今在世界盃,我問你「你喜歡英超哪支球隊?」個人主題是「運動」底下的「足球」底下的「五大聯賽」底樣。的「英超」,我能夠回答「我喜歡巴薩」,你問我英超,我回答西甲,這沒有什麼太大的毛病,雖然最底下的對話主題不太同樣,可是前面是同樣的。或者你問我足球,我可不能夠回答籃球,「我比較喜歡看NBA」,這可能不太好,可是也不至於徹底不行。若是我回答說「我喜歡吃蛋炒飯」這確定是不對的,由於你問個人是運動體育裏面的東西,我竟然回答美食。
這個對話主題我可不能夠根據上下文主題,去生成等一下那句回答應該是什麼主題?我能夠根據上下文去猜想等一下你的下一句回答應該有哪些關鍵詞,我能夠根據上下文猜出你下一句是什麼句型,是確定句仍是正反問句。我有了關鍵詞、有了句型、有了主題,我能夠造句,造出一句回答,這也是上下文解法的一種。或者我什麼東西都無論,我直接根據上下文用生成式的方式回你一句話。這個目前你們還在研究發展之中,目前的準確度還不是很高,但這是一個將來的發展方向。
NLU咱們作了12個模塊,最基本的固然是分詞,而後詞性標註,是主詞仍是動詞、形容詞稱、第二人稱、第三人稱,而後命名實體,北京有什麼好玩的跟上海有什麼好玩的,一個是北京,一個是上海,兩個不太同樣。而後我若是問「你喜歡吃蘋果嗎?」「等一下咱們去吃麥當勞好很差?」這是一個問句,並且我在問你的我的意見,因此你的回答多是一個確定的,多是一個否認的,也可能反問我一個問句說「等一下幾點去吃」,不管如何,你的回答不會跟我講「早安」或「晚安」,由於我問的是「等一下咱們去吃麥當勞好很差。」咱們還作了一些奇怪的東西,例如語義角色的標註 ,後面能夠看到一些例子。
以這個句子來講,「我明天飛上海,住兩天,要如家」整個句子的句法結構拆出來,核心動詞是「飛、住、要」,把它分出來「我飛」、「飛上海」、「住兩天」、「要如家」,有了這些核心動詞,我知道個人意圖不是訂機票,若是隻有「我明天飛上海」,個人意圖多是訂機票,可是由於有後面的「住兩天」跟「要如家」,因此根據這些東西判斷出來個人意圖是訂酒店,根據這些東西算出來:明天入住,3天后離店,都市是上海,酒店名稱叫如家酒店。整個東西就能夠把它解析出來。
這樣的解法跟深度學習黑盒子最大的差異是,這樣的解法先把句子拆成一些零件,拆成一些基本的信息,我再根據這些信息,可能以深度學習的方式判斷你的意圖、對話主題,這樣個人數據量能夠小不少。若是整個大黑盒子,數據量要五十萬比、一百萬比、兩百萬比,纔可以有必定的準確率。今天我作了足夠的拆解,因此個人數據量三萬比、五萬比就夠了,就能夠訓練出一個還不錯的模型。
再介紹一下我如何利用NLU的基礎信息,像「上週買衣服多少錢」這句話,我從Speach Act知道這是一個問句,是一個question-info,你不是說「上週買衣服花了好多錢」,這不是一個問句,就不須要處理。是一個問句的話,再看它是一個數量問句,仍是地點的問句,仍是時間的問句,「我何時買了這件衣服?」「我在哪裏買了這件衣服?」問句不同,後面知道查哪一個數據庫的哪張表。根據核心動詞「花錢」跟「買衣服」,知道類別 是衣服飾品,不是吃飯、不是交通,由時間知道是「上週」,整個東西就能夠幫你算出來。這等因而我一句話先通過NLU的解析,再判斷你的意圖和細節信息。
像剛剛訂酒店那個例子,若是代表「我要訂酒店」,訂酒店有8個信息要抽取,這時機器人要跟你交流:你要訂哪裏的酒店、幾號入住、幾號離店、酒店名稱、星級、價格等等這一堆東西。今天咱們的用戶不會乖乖回答。「你要訂哪裏的酒店?」他可能乖乖跟你說「上海的」、「北京的」,它也可能跟你說「我明天飛上海,住兩天,要如家」,他一句話就告訴我四個信息,因此基本用填槽的方式,有N個槽要填。而後看看這句話裏面有哪些信息,把它抽取出來,填到相對應的槽,再根據哪幾個槽缺失信息決定下一輪的問句該問什麼問題,這樣比較聰明。舉例來講,「我想要買一個理財產品」,「您須要是保本仍是不保本?」我只問你保本仍是不保本,結果他一次回答「保本的,一年的,預期收益不低於5個點。」他一次告訴我3個 信息,並且3個信息已經夠了,我就直接幫你推薦,不用再問你「你要一年、半年仍是兩年的?」這樣的機器人看起來就很傻。
咱們來看一些Live Demo的東西
第一個是對話機器人的定製,如何快速定製本身的機器人。
咱們先切到共享桌面。在這裏,假設我如今建立一個機器人,個人名字「小竹子」,而後我是什麼機器人?是一個聊天 的、電商的仍是金融機器人?我是一個聊天機器人好了,兩個步驟建立完了。而後能夠作一些設置,機器人有形象,每一個人拿到機器人會說:你是男生仍是女生?你晚上睡覺嗎?你有沒有長腳?你今年幾歲?你爸爸是誰?你媽媽是誰?你住在哪裏?你問「你是男生是女生」時我回答「我是女生」,可不能夠修改?我修改「我是精靈」或者「我沒有性別」,保存。保存之後我尚未修改,由於我沒有從新建模,咱們先來問問看,「你是男生,仍是女生?」它仍是說「我是女生」。而後「你叫什麼名字?」它說「叫小竹子」。我開始問它「明天上海會不會下雨?」「那北京呢?」這上下文表明北京明天會不會下雨,「北京明天有雨」,我再問「那後天呢?」這個上下文,是北京的後天仍是上海的後天?應該是北京的後天,由於離北京最近。
而後再來問它一些知識類的「姚明有多高?」它告訴我是「226釐米」,我再問它「姚明的老婆有多高」,「190釐米」,還能夠作些推論,例如像「謝霆鋒跟陳小春有什麼關係?」這個不多有人知道,謝霆鋒的前妻是張柏芝,陳小春的前女朋友也是張柏芝,因此陳小春是謝霆鋒前妻的前男朋友。這是知識推論。還有一些該有的功能,若是很無聊,機器會跟你聊天。你能夠更改任何你想要的回答,你能夠更改知識圖譜,你能夠創建本身的意圖。
來看第二個demo,像多輪對話場景要怎麼作?
我先建立一個新的場景,場景的名稱叫「竹間訂餐廳」,觸發條件,什麼樣的語句會觸發這個場景?我要新建一個意圖,意圖的名稱叫「訂餐廳」,使用者說「我要訂位」,或者「我要吃飯」。如今有一個訂餐廳的意圖,我只要講「我要吃飯」或者相似的講法,它就知道我要進入這個場景。下一步,訂餐廳有兩個信息,至少要知道時間跟人數,我打算怎麼問?我能夠有默認的問句「你要選擇的時間是什麼?你要選擇的人數是什麼?」但這看起來很死板,我能夠自定義「請問 您要訂位的時間?請問總共有幾位?」這兩個問句分別抽取時間跟抽取人數,而後再下一步。抽取以後能夠有一個外部的連接,連接到某個地方去幫你訂位。如今選擇回覆的方式,「訂位成功,您的訂位時間是**,總共人數是**,謝謝」,儲存,我一行代碼都沒有寫,而後開始測試。
再來看下一個demo,直接用桌面來說,demo訂餐館。爲何訂餐館?由於上個月谷歌demo就是訂餐館,有個機器人幫你到餐館訂位置。我說「我要訂位」,它問我「是什麼時間?」我這時候能夠回答一個句子給它,能夠跟它說「國慶節,咱們有大概七、8我的,還帶2個孩子。要是能夠的話,幫我訂一個包間,咱們7點半左右到,預約8點」「好的」,它只問我一個時間,我回答了這麼多東西,有沒有辦法理解?七、8我的是8我的,不是78我的,還帶2個小孩,要是能夠的話幫我訂一個包間,因此是包廂,7點半左右到,因此預約8點好了,它有辦法理解。「好的」,我沒有跟它講時間是早上8點仍是晚上8點,「晚上8點」,「須要寶寶椅嗎?」「由於我有小孩,因此一張寶寶椅」,問我「貴姓」,我說「富翁」,它幫我訂好了,但沒位置「要不要排號?」「好啊」,我說我有老人,它幫我排了比較方便出入的位置。「信息是否正確」「沒錯」,訂位完成。
咱們再試另一個,「我要訂位」「什麼時間?」「後天晚上9點,8我的。」「要包間仍是大堂?」「大堂太吵了,包間好了。」我不是用關鍵詞作的,若是用關鍵詞,有大堂 ,有包間,究竟是哪個?還有預約都包廂貴姓,「李」,排號。「有沒有人過生日?是否有誤?」「沒問題」,它就幫我訂好了。一個機器人若是可以作到這個地步,隨便你怎麼講,你不按照順序講,甚至你還能夠修正,說「我有8我的,不對,是9我的」,它能夠知道你是9我的而不是8我的。
有幾個案例能夠分享:
第一個AIOT的平臺,這個東西目前有一些公司有一些企業在作,舉例來講,我跟個人手環、跟個人音箱、跟個人耳機說我在家裏,我跟它說太暗了,太暗了是什麼意思?假設今天我家裏有不少盞智能燈都已經接到個人平臺上面,因此我跟個人平臺講太暗了,有哪些東西是跟光線有關?我發現窗簾跟光線有關,電燈跟光線有關,我就跑去問說你要開客廳的燈仍是廁所的燈仍是廚房的燈?這樣問其實很是傻,由於我可能人如今是在客廳,你幹嘛要問我這個東西?可是我沒辦法人你到底在哪裏?這有幾個解法,我在家裏處處都裝攝像頭,我就知道你在哪裏,可是這是一件很是可怕的事情,家裏裝攝像頭相信裏內心不太舒服。
固然過去的技術我多裝幾個WIFI,我裝三個WIFI在你家裏三個不一樣的地方,我利用三角定位知道你人在哪裏,我知道你在客廳,你說太暗了,我就把客廳的燈打開,我只要背後都是一個一樣的ALOT的中控中心幫我作這件事情。
另一個我可能有多種選擇,我說太熱了,太熱了到底要開窗、開空調仍是開電風扇?機器問你說我要幫你開電扇仍是幫你開空調?你說空調吧,如今太熱,OK,機器人幫你執行,有些時候人的意圖有多種可能性,多個AIOT的家居設備都跟溫度控制有關,機器人能夠掌握。固然他會聰明一點,不會有18個跟溫度有關,他一個一個問,最後人會暈倒,這個東西不會太遙遠,我認爲在一年半到兩年以內這些東西會出來,甚至一年會出來。慢慢你家裏會變成用ALOT的整個平臺跟LOT的設備來幫你管理這些東西,你會生活變得更方便。
第二我的機交互的下一步是人臉+語音的加入,我可不能夠根據你人臉知道你是男生女生,你如今的情緒是什麼?是長頭髮短頭髮,有沒有戴眼鏡,有沒有鬍子?語音識別固然是最基本的,這個已經很是很是成熟了,可不能夠知道這句話到底表明什麼意思?語音把它轉變成文本,若是能夠的話還能夠知道你的語氣,你的語音情緒是憤怒仍是悲傷,仍是高興?我能夠作一些參考,語音的情緒是很是重要的。
這個東西能夠使用,我從人臉表情特徵能夠作什麼,特徵作了22種,性別、年齡、膚色、頭髮、眉頭、顏值,長得漂不漂亮,臉形,特徵是給人負面印象是冷酷無情,仍是有正面印象你是有一個魅力值信賴的人,這第一印象這東西說不許。表情咱們作了九種,喜怒哀樂、驚、懼、厭惡、藐視、困惑、中性。還有人臉的行爲分析,個人視線目前是專一仍是一直這樣低頭,顯得不自信,仍是眼神飄忽不定,這東西是什麼意思?
咱們來說一個真實的應用的案例。
如今一些新零售,包括無人店,包含一些智慧門店,舉例來講,咱們在幫某個電視的大廠在某個賣場剛開業,把咱們的技術放進去,同時有五家公司都是在賣電視,包括競爭對手索尼,其餘知名的品牌,那個賣場開幕三天,咱們作了那家夏普收入是90萬,另外四家加起來40多萬,光夏普一家幹掉四家的總和還一倍多。這個怎麼作到?第一個可不能夠吸引人流?在個人店的門口擺一個屏幕,擺一些東西,你攝像頭,你人通過的時候能夠抓住你是男生女生,你的顏值怎麼樣?你的情緒怎麼樣?很是有趣,全部人通過停下來看,停下來看你是一個四十幾歲的男生,推薦裏面有什麼優惠活動,你是喜歡的,你是一個20歲的女生,推薦另外的優惠活動。你是一對情侶,是一個家庭帶着小孩,推薦給你的東西不同。
你們看到這個東西以後,我進店的人就會有機會比別人多,再來我能夠主動式的交互,你走到貨架前面,我看到是一個長頭髮的女生主動跟你聊天,一個機器人,一個屏幕,一個平板,這位長頭髮的女士你的頭髮很漂亮,我這裏有一些洗髮水,有一些潤髮你有什麼興趣瞭解,我根據你的屬性,由於你是女生長頭髮,給你推薦某些東西跟你對話,我會跟你說臉上有一些黑斑,我有一些遮瑕膏你要不要?在對話的過程當中發現這我的的臉色愈來愈難看,我趕快中止這個話題,這個東西不該該繼續講下去,是人臉的特徵,人臉的情緒跟整我的機交互綜合的應用。
咱們也能夠作到,我在一些過道上面,這個商場的過道,我知道你的人進到店裏面你是怎麼走動,我發現你在某一臺電視前面停了五分鐘,停了特別久,你離開了什麼都沒有買。兩天後你帶着一家大小來了,這是什麼意思?你帶着老婆、帶着小孩上門,這可能表明你要來作決定你是要花錢的,並且我根據你上次的線上購買記錄,由於我知道你的臉部,知道你是誰,知道你的會員編號,我知道你上次買了一臺2萬多塊的冰箱,因此我知道你的消費能力不是那種一兩千塊錢,你多是兩三萬,我立刻通知銷售員跟他說,這我的來了買電視,由於他兩天前看過某一些電視,並且他的消費能力是以萬來計算的,是萬等級,因此你上去不要推薦他四千塊的電視,你就是往高往貴推薦。也是由於這樣子,咱們的賣場,咱們的銷售的業績可以比別人好。這些東西我相信在半年一年內,你們在各類各樣的商場會大量看到。
最後咱們舉個例子。今天大家可能說我每一個人都有一個機器人,我戴一個手環,手環的背後接個人機器人,我到每一個店家也都有一套機器人,麥當勞有一套機器人,肯德基有一套機器人,今天我走進麥當勞,對着個人手環說我喜歡吃巨無霸,大杯可樂去冰,個人機器人聽到之後,我機器人主動去找麥當勞機器人,跟它說我要什麼東西,兩個機器人之間的對話,不須要用中文,不須要用人類的語言,他們直接數據格式的交換,機器人有機器人的語言,他們本身交換,交換完之後麥當勞機器人接到這個訂單通知後面,告訴我三分鐘以後過來拿,可不能夠這樣子?個人手環告訴我說,三分鐘以後能夠過去拿。因此將來真的變成一個機器人世界,每一個人都有一個代語,機器人跟機器人去溝通,把這個東西作好。
▌Q&A 時間
今天是個人分享,再下來是交互的時間,各位有什麼問題想要問的?有人問一下提一下相關技術,看一下什麼相關的技術?若是是圖像的話,圖像最頂尖的公司各位均可以查獲得,固然目前比較以安防爲主,無論是刷臉門禁,慢慢作到情緒情感的部分。若是是平臺的部分,目前全國作的也差很少有一二十家公司,你們各有它的優缺點,看你是一個封閉的平臺或者是開放的平臺,你找人工智能平臺,語意理解平臺,人工智能機器學習訓練平臺均可以找獲得。
1.有人問說出現設定外的情緒機器人能處理嗎?
例如說個人語音情緒作了四種,高興、中性、憤怒跟悲傷,那忽然出現一個懼怕,語音出現懼怕做爲分類是分不出來,這是沒辦法處理的。
2.有人問到表情的理解,我大概講一下咱們怎麼作的?
咱們人臉表情光標註,標註了200萬張的照片以上,每張照片三我的標註,三我的都說他是高興,OK,他是高興,三我的說他是悲傷,他是悲傷,三我的意見不一致,我找心理學家來作最後的判斷,你去算一算,200萬張的照片三我的標註,總共600萬人次,你須要多少時間?多少錢?
3.多模態情緒怎麼作?
經過人臉表情算出一個分數,語音情緒算出一個分數,文字的情緒算出一個分數,咱們背後有兩種模型,第一個規則,人臉表情就是多少分,語音情緒多少分以上,我加成上一個比重,或者說文字情緒算出來,這是一種方式。
另一種,咱們後面用的一個深度學習的模型,咱們把這些全部的值標進去算出一個總情緒,固然同樣須要大量的標註數據。
4.有人問對話的答案是能機器人自動合成組合出來嗎?
這是自動生成的範圍,目前來講我認爲,我實際上看到正確率大概在3—5成之間,它回答好的大概在3成—5成,有一半的機率不靠譜。
5.知識圖譜學習多少可用?
這個東西看你的領域,若是你是金融領域,金融知識可能12萬、18萬就夠了,若是你是一個醫療領域,多是幾十萬,可是若是你是聊天的領域,衣食住行、電影、電視這些東西,加起來要800萬—1200萬知識圖譜的數據量。有些公司大企業作搜索引擎的,天生的數據量特別大,知識圖譜可能有8億,有20億,很是很是大量的數據。
6.有人問到說交流的過程當中打錯字怎麼辦?語音轉文字效果很差,如何提升意圖識別準確率?
在有限的場景之下,這個有辦法作到,像電視就68個意圖,100個意圖,能夠作的很是準,真的能夠轉成拼音去作,或者真的用一些模糊匹配的方式,能夠把匹配的閾值放大一點能夠作得好。在一個聊天的場景,有限的場景這個是不可能作得好的。
這實際上是包含語音識別在內的,語音識別你們的普通話不必定很標準,像我也是有口音的,因此我語音轉轉文字,可不能夠把它轉成拼音,我把平舌、翹舌、前鼻音、後鼻音把它去掉,這樣ch就跟c是同樣的,zh就跟z是同樣的,我用這些方法是作正規化。這些東西尤爲在找歌曲的名字、電影的名字、視頻的名字很是有用,由於你歌曲的名字那麼長,視頻的名字那麼長,電視劇的名字那麼長,你不必定講對,我要看《春嬌志明明》,沒有春嬌志明,是《志明與春嬌》,我要看《三生三世》,我知道三生三世十里桃花,我要看半月傳,羋月傳傳那個羋我不會念,我念成半月傳找不到,可是我發現用戶查字典,問了人,下句話他講對了我要看羋月傳,我發現你上面這句話跟下面這句話句型很是很是相似,你上面那句話找不到,下面那句話竟然找到了,我可不能夠說可能半月傳就是等於羋月傳,自動把它抓出來,作得好由人工判斷,人工作最後的判斷,這些東西就打勾打勾,這些東西是同義詞,同樣就把它輸入進去從新訓練就行了。
7.有人問到對話主題怎麼創建?
我這個屏幕有限都是跳着回答,對話主題不算很龐大了,你的主題看你作到幾百種幾、幾千種,主題是有階層次的關係。就是說你的對話主題作出來以後你如何肯定這句話是什麼主題?固然有關鍵詞,也有機器學習、深度學習的方式均可以去作,並且準確度不會過低。
8.有人說在交流的過程當中出現場景以外,怎麼作到多輪?
就像剛剛那個我訂酒店機票訂到一半忽然說我失戀了,機器人能夠怎麼回答?機器人能夠開始跟你聊失戀的話題,訂酒店就算了,這是一種解法。列另一種解法,我訂酒店訂到一半失戀了,我跟你說你失戀了好可憐,敷衍你一下,繼續問你說剛剛酒店尚未訂,你要不要訂?你要不要繼續?我先把前一個場景處理掉,肯定你場景已經結束,我才讓你到下一個場景。
9.有人問怎麼判斷哪一個答案更好?
假設我背後有18個模塊,有20個模塊,有20個模塊均可以出答案,天氣、講笑話、知識圖譜的聊天、各類各樣的場景、訂酒店、訂機票,同樣我一句話進來,我可不可讓每一個模塊舉手,這個模塊說這句話我能夠回答,別的模塊說這句話我能夠回答,固然每一個模塊都會回答,並且每一個模塊除了回答之外會有一個信心分數,固然有些模塊我都是100分,跑來搶答案,這個時候就要看你到底靠不靠譜?固然我在個人中控中心,我根據上下文判斷個人情緒,個人意圖,個人主題,我發現說你的對話主題是體育、運動,回答的對話主題是美食,我把這個答案直接丟掉,我發現你的問句是快樂的,回答竟然是一句悲傷的句子,直接把它丟掉。我能夠利用個人中控中心作這樣的事情,仍是沒辦法,有些模塊是亂回答的話,我把它分數下降,它之後宣稱它本身是100分,我都打個八折,以證實它不靠譜。
10.一語雙關的語句能夠理解多少?
這個很是難,這個是目前解不了的,如今世界盃,咱們舉例,中國乒乓球誰都打不贏,中國足球誰都踢不贏,這兩句話的句型徹底如出一轍,可是意思多是相反的,那這個東西怎麼理解?老實話目前還作不到這個地步,不知道五年後、十年後可能有機會,剛剛兩句話你去問一個小學生,其實小學生也搞不懂,你要足夠的社會知識,你有足夠的社會歷練你才知道這句話什麼意思。
11.怎麼知道機器的回答對不對?
有幾種方法了,有一種仍是看人工,我今天機器人回答,這個用戶就生氣了,用戶說你這個機器人好笨,我都聽不懂你在講什麼,顯然這個機器人回答很差,我就能夠反饋回去說這個回答不對。另一種,我發現我回答之後,這個用戶決定直接轉人工,假設我是一個智能客服,回答完之後用戶決定轉人工,表明我剛剛的回答確定是有問題的。第三種是說,我一樣的問題問了第三次,我開戶該帶哪些證件?機器人回答我不滿意,我再問我到底該怎麼開戶?再問說開戶到底應該怎麼辦?我三個句子不太同樣,其實意思是同樣的,因此今天當問了第三句話,表明我前面的回答必定不對,用戶會問到第三句,基本上靠人的反饋來作。
12.有人問對於學生有什麼建議?
在校的學生個人建議是說,你要先想,你如今有不少(01:00:35英文)各式各樣的框架,數據網絡上也都能拿獲得,甚至這些代碼均可以直接下載,你就能夠作一些基本的東西,這是練習,你最後要解決仍然是真實的問題,你到底要解決什麼問題?解決那些問題你打算怎麼解?你要設定一個目標,解到使什麼地步纔是人類能夠用的,而不是作一個模型,作一個PPT,這個是不夠的,你越早可以知道人工智能實際的技術邊界在哪裏,什麼東西只是一個花俏的東西,什麼是東西是真的能夠用的,這個對你將來進入職場會有幫助,或者對你將來研究的方向有幫助,畢竟人工智能幫助人,幫助各類各樣的行業,纔可以幫上忙。
13.有人問何時機器人能夠寫一本中文小說,或者機器人何時能夠思考?
我以爲還很是很是遙遠,也許十年,也許十五年,機器人的思考方式必定跟人是不同的,可是如今機器人都是一大堆的規則,我不以爲機器人是能夠思考,甚至有創造力。
14.五年內人工智能的實際應用場景結合最好的方向?
這個我沒法預測,人工智能目前都在摸索,我大概能夠猜到一年後會有哪些東西?哪些東西是假的,哪些東西不可能實現的,哪些東西是有機會的,一年內我大概能夠猜得出來,五年內我猜不出來,由於技術的發展超過個人控制範圍。可是我以爲深度學習、機器學習沒辦法解決NLP,NLP的複雜度不是能夠解決的,並且沒有這樣的數據鏈,NLP要解決好也許還出現更新的科技可以出來。
15.如何斷句,如何分詞?
這樣說好了這實際上是一個大的難題,我在黃浦江邊,我是分紅黃浦跟江邊,仍是黃浦江跟邊,你好可愛,是你好、可愛仍是你好加可愛,咱們先不要講長句,光這個短句分可能分錯,有時候你好在一塊兒,有時候你好要分開,這個東西只能說我拿如今的東西,我再去不斷不斷優化,並且有可能說,咱們累積好幾萬的bug,我去看這些bug我可能用新的模型來解,新的bug可能用新的算法來解,一羣一羣去解這些問題,才能慢慢前進,這個沒有什麼快速的方法。
咱們今天的分享就到這裏。謝謝各位!
天然語言處理一直是人工智能領域的重要話題,更是 18 年的熱度話題,爲了在海量文本中及時準確地得到有效信息,文本分類技術得到普遍關注,也給你們帶來了更多應用和想象的空間。
本文根據達觀數據聯合創始人張健的直播內容《NLP 概述及文本自動分類算法詳解》整理而成。
1、 NLP 概述
1.文本挖掘任務類型的劃分
文本挖掘任務大體分爲四個類型:類別到序列、序列到類別、同步的(每一個輸入位置都要產生輸出)序列到序列、異步的序列到序列。
同步的序列到序列的例子包括中文分詞,命名實體識別和詞性標註。異步的序列到序列包括機器翻譯和自動摘要。序列到類別的例子包括文本分類和情感分析。類別(對象)到序列的例子包括文本生成和形象描述。
這個分類總結挺好的
2.文本挖掘系統總體方案
達觀數據一直專一於文本語義,文本挖掘系統總體方案包含了 NLP 處理的各個環節,從處理的文本粒度上來分,能夠分爲篇章級應用、短串級應用和詞彙級應用。
篇章級應用有六個方面,已經有成熟的產品支持企業在不一樣方面的文本挖掘需求:
爲了實現這些頂層應用,達觀數據掌握從詞語短串分析個層面的分析技術,開發了包括中文分詞、專名識別、語義分析和詞串分析等模塊。
達觀數據文本挖掘架構圖
3.序列標註應用:中文分詞
同步的序列到序列,其實就是序列標註問題,應該說是天然語言處理中最多見的問題。序列標註的應用包括中文分詞、命名實體識別和詞性標註等。序列標註問題的輸入是一個觀測序列,輸出的是一個標記序列或狀態序列。
舉中文分詞爲例,處理「結合成分子」的觀測序列,輸出「結合/成/分子」的分詞標記序列。針對中文分詞的這個應用,有多種處理方法,包括基於詞典的方法、隱馬爾可夫模型(HMM)、最大熵模型、條件隨機場(CRF)、深度學習模型(雙向 LSTM 等)和一些無監督學習的方法(基於凝聚度與自由度)。
4.序列標註應用:NER
命名實體識別:Named Entity Recognition,簡稱 NER,又稱做「專名識別」,是指識別文本中具備特定意義的實體,主要包括人名、地名、機構名、專有名詞等。一般包括實體邊界識別和肯定實體類別。
對與命名實體識別,採起不一樣的標記方式,常見的標籤方式包括 IO、BIO、BMEWO 和 BMEWO+。其中一些標籤含義是:
大部分狀況下,標籤體系越複雜準確度也越高,但相應的訓練時間也會增長。所以須要根據實際狀況選擇合適的標籤體系。一般咱們實際應用過程當中,最難解決的仍是標註問題。因此在作命名實體識別時,要考慮人工成本問題。
5.英文處理
在 NLP 領域,中文和英文的處理在大的方面都是相通的,不過在細節方面會有所差異。其中一個方面,就是中文須要解決分詞的問題,而英文自然的就沒有這個煩惱;另一個方面,英文處理會面臨詞形還原和詞根提取的問題,英文中會有時態變換(made==>make),單複數變換(cats==>cat),詞根提取(arabic==>arab)。
在處理上面的問題過程當中,不得不提到的一個工具是 WordNet。WordNet 是一個由普林斯頓大學認識科學實驗室在心理學教授喬治•A•米勒的指導下創建和維護的英語字典。在 WordNet 中,名詞、動詞、形容詞和副詞各自被組織成一個同義詞的網絡,每一個同義詞集合都表明一個基本的語義概念,而且這些集合之間也由各類關係鏈接。咱們能夠經過 WordNet 來獲取同義詞和上位詞。
6.詞嵌入
在處理文本過程當中,咱們須要將文本轉化成數字可表示的方式。詞向量要作的事就是將語言數學化表示。詞向量有兩種實現方式:One-hot 表示,即經過向量中的一維 0/1 值來表示某個詞;詞嵌入,將詞轉變爲固定維數的向量。
word2vec 是使用淺層和雙層神經網絡產生生詞向量的模型,產生的詞嵌入其實是語言模型的一個副產品,網絡以詞表現,而且需猜想相鄰位置的輸入詞。word2vec 中詞向量的訓練方式有兩種,cbow(continuous bags of word)和 skip-gram。cbow 和 skip-gram 的區別在於,cbow 是經過輸入單詞的上下文(周圍的詞的向量和)來預測中間的單詞,而 skip-gram 是輸入中間的單詞來預測它周圍的詞。
7.文檔建模
要使計算機可以高效地處理真實文本,就必須找到一種理想的形式化表示方法,這個過程就是文檔建模。文檔建模一方面要可以真實地反映文檔的內容,另外一方面又要對不一樣文檔具備區分能力。文檔建模比較通用的方法包括布爾模型、向量空間模型(VSM)和機率模型。其中最爲普遍使用的是向量空間模型。
2、文本分類的關鍵技術與重要方法
1.利用機器學習進行模型訓練
文本分類的流程包括訓練、文本語義、文本特徵處理、訓練模型、模型評估和輸出模型等幾個主要環節。其中介紹一下一些主要的概念。
2.向量空間模型
向量空間模型是經常使用來處理文本挖掘的文檔建模方法。VSM 概念很是直觀——把對文本內容的處理簡化爲向量空間中的向量運算,而且它以空間上的類似度表達語義的類似度,直觀易懂。
當文檔被表示爲文檔空間的向量時,就能夠經過計算向量之間的類似性來度量文檔間的類似性。它的一些實現方式包括:
1)N-gram 模型:基於必定的語料庫,能夠利用 N-Gram 來預計或者評估一個句子是否合理;
2)TF-IDF 模型:若某個詞在一篇文檔中出現頻率 TF 高,卻在其餘文章中不多出現,則認爲此詞具備很好的類別區分能力;
3)Paragraph Vector 模型:實際上是 word vector 的一種擴展。Gensim 中的 Doc2Vec 以及 Facebook 開源的 Fasttext 工具也是採起了這麼一種思路,它們將文本的詞向量進行相加/求平均的結果做爲 Paragraph Vector。
3.文本特徵提取算法
目前大多數中文文本分類系統都採用詞做爲特徵項,做爲特徵項的詞稱做特徵詞。這些特徵詞做爲文檔的中間表示形式,用來實現文檔與文檔、文檔與用戶目標之間的類似度計算。若是把全部的詞都做爲特徵項,那麼特徵向量的維數將過於巨大。有效的特徵提取算法,不只能下降運算複雜度,還能提升分類的效率和精度。
文本特徵提取的算法包含下面三個方面:
1)從原始特徵中挑選出一些最具表明文本信息的特徵,例如詞頻、TF-IDF 方法;
2)基於數學方法找出對分類信息共現比較大的特徵,主要例子包括互信息法、信息增益、指望交叉熵和統計量方法;
3)以特徵量分析多元統計分佈,例如主成分分析(PCA)。
4.文本權重計算方法
特徵權重用於衡量某個特徵項在文檔表示中的重要程度或區分能力的強弱。選擇合適的權重計算方法,對文本分類系統的分類效果能有較大的提高做用。
特徵權重的計算方法包括:
1)TF-IDF;
2)詞性;
3)標題;
4)位置;
5)句法結構;
6)專業詞庫;
7)信息熵;
8)文檔、詞語長度;
9)詞語間關聯;
10)詞語直徑;
11)詞語分佈誤差。
其中提幾點,詞語直徑是指詞語在文本中首次出現的位置和末次出現的位置之間的距離。詞語分佈誤差所考慮的是詞語在文章中的統計分佈。在整篇文章中分佈均勻的詞語一般是重要的詞彙。
5.分類器設計
因爲文本分類自己是一個分類問題,因此通常的模式分類方法均可以用於文本分類應用中。
經常使用分類算法的思路包括下面四種:
1)樸素貝葉斯分類器:利用特徵項和類別的聯合機率來估計文本的類別機率;
2)支持向量機分類器:在向量空間中找到一個決策平面,這個平面可以最好的切割兩個分類的數據點,主要用於解決二分類問題;
3)KNN 方法:在訓練集中找到離它最近的 k 個臨近文本,並根據這些文本的分類來給測試文檔分類;
4)決策樹方法:將文本處理過程看做是一個等級分層且分解完成的複雜任務。
6.分類算法融合
聚合多個分類器,提升分類準確率稱爲 Ensemble 方法。
利用不一樣分類器的優點,取長補短,最後綜合多個分類器的結果。Ensemble 可設定目標函數 (組合多個分類器),經過訓練獲得多個分類器的組合參數 (並不是簡單的累加或者多數)。
咱們這裏提到的 ensemble 可能跟一般說的 ensemble learning 有區別。主要應該是指 stacking。Stacking 是指訓練一個模型用於組合其餘各個模型。即首先咱們先訓練多個不一樣的模型,而後再以以前訓練的各個模型的輸出爲輸入來訓練一個模型,以獲得一個最終的輸出。在處理 ensemble 方法的時候,須要注意幾個點。基礎模型之間的相關性要儘量的小,而且它們的性能表現不能差距太大。
多個模型分類結果若是差異不大,那麼疊加效果也不明顯;或者若是單個模型的效果距離其餘模型比較差,也是會對總體效果拖後腿。
3、文本分類在深度學習中的應用
1.CNN 文本分類
採起 CNN 方法進行文本分類,相比傳統方法會在一些方面有優點。
基於詞袋模型的文本分類方法,沒有考慮到詞的順序。
基於卷積神經網絡(CNN)來作文本分類,能夠利用到詞的順序包含的信息。如圖展現了比較基礎的一個用 CNN 進行文本分類的網絡結構。CNN 模型把原始文本做爲輸入,不須要太多的人工特徵。CNN 模型的一個實現,共分四層:
有關 CNN 的方法通常都圍繞這個基礎模型進行,再加上不一樣層的創新。
好比第一個模型在輸入層換成 RNN,去得到文本經過 rnn 處理以後的輸出做爲卷積層的輸入。好比說第二個是在 pooling 層使用了動態 kmax pooling,來解決樣本集合文本長度變化較大的問題。好比說第三種是極深網絡,在卷積層作多層卷積,以得到長距離的依賴信息。CNN 可以提取不一樣長度範圍的特徵,網絡的層數越多,意味着可以提取到不一樣範圍的特徵越豐富。不過 cnn 層數太多會有梯度彌散、梯度爆炸或者退化等一系列問題。
爲了解決這些問題,極深網絡就經過 shortcut 鏈接。殘差網絡實際上是由多種路徑組合的一個網絡,殘差網絡實際上是不少並行子網絡的組合,有些點評評書殘差網絡就說它其實至關於一個 Ensembling。
2.RNN 與 LSTM 文本分類
CNN 有個問題是卷積時候是固定 filter_size,就是沒法建模更長的序列信息,雖然這個能夠經過屢次卷積得到不一樣範圍的特徵,不過要付出增長網絡深度的代價。
Rnn 的出現是解決變長序列信息建模的問題,它會將每一步中產生的信息都傳遞到下一步中。
首先咱們在輸入層之上,套上一層雙向 LSTM 層,LSTM 是 RNN 的改進模型,相比 RNN,可以更有效地處理句子中單詞間的長距離影響;而雙向 LSTM 就是在隱層同時有一個正向 LSTM 和反向 LSTM,正向 LSTM 捕獲了上文的特徵信息,而反向 LSTM 捕獲了下文的特徵信息,這樣相對單向 LSTM 來講可以捕獲更多的特徵信息,因此一般狀況下雙向 LSTM 表現比單向 LSTM 或者單向 RNN 要好。
如何從物理意義上來理解求平均呢?這其實能夠理解爲在這一層,兩個句子中每一個單詞都對最終分類結果進行投票,由於每一個 BLSTM 的輸出能夠理解爲這個輸入單詞看到了全部上文和全部下文(包含兩個句子)後做出的二者是否語義相同的判斷,而經過 Mean Pooling 層投出本身寶貴的一票。
3.Attention Model 與 seq2seq
注意力模型 Attention Model 是傳統自編碼器的一個升級版本。傳統 RNN 的 Encoder-Decoder 模型,它的缺點是無論不管以前的 context 有多長,包含多少信息量,最終都要被壓縮成固定的 vector,並且各個維度維度收到每一個輸入維度的影響都是一致的。爲了解決這個問題,它的 idea 實際上是賦予不一樣位置的 context 不一樣的權重,越大的權重表示對應位置的 context 更加劇要。
現實中,舉一個翻譯問題:jack ma dances very well 翻譯成中文是馬雲跳舞很好。其中,馬雲應該是和 jack ma 關聯的。
Attention Model 是當前的研究熱點,它普遍地可應用於文本生成、機器翻譯和語言模型等方面。
4.Hierarchical Attention Network
下面介紹層次化注意力網絡。
詞編碼層是首先把詞轉化成詞向量,而後用雙向的 GRU 層, 能夠將正向和反向的上下文信息結合起來,得到隱藏層輸出。第二層是 word attention 層。attention 機制的目的是要把一個句子中,對句子的含義最重要,貢獻最大的詞語找出來。
爲了衡量單詞的重要性, 咱們用 u_it 和一個隨機初始化的上下文向量 u_w 的類似度來表示,而後通過 softmax 操做得到了一個歸一化的 attention 權重矩陣 a_it,表明句子 i 中第 t 個詞的權重。結合詞的權重,句子向量 s_i 看做組成這些句子的詞向量的加權求和。
第三層是句子編碼層,也是經過雙向 GRU 層, 能夠將正向和反向的上下文信息結合起來,得到隱藏層輸出。
到了第四層是句子的注意力層,同詞的注意力層差很少,也是提出了一個句子級別的上下文向量 u_s, 來衡量句子在文中的重要性。輸出也是結合句子的權重,全文的向量表示看作是句子向量的加權求和。
到了最後,有了全文的向量表示,咱們就直接經過全鏈接 softmax 來進行分類。
4、案例介紹
1.新聞分類
新聞分類是最多見的一種分類。其處理方法包括:
1)定製行業專業語料,按期更新語料知識庫,構建行業垂直語義模型。
2)計算 term 權重,考慮到位置特徵,網頁特徵,以及結合離線統計結果獲取到核心的關鍵詞。
3)使用主題模型進行語義擴展
4)監督與半監督方式的文本分類
2.垃圾廣告黃反識別
垃圾廣告過濾做爲文本分類的一個場景有其特殊之處,那就是它做爲一種防攻擊手段,會常常面臨攻擊用戶採起許多變換手段來繞過檢查。
處理這些變換手段有多重方法:
3.情感分析
情感分析的處理辦法包括:
1)基於詞典的情感分析,主要是線設置情感詞典,而後基於規則匹配(情感詞對應的權重進行加權)來識別樣本是不是正負面。
2)基於機器學習的情感分析,主要是採起詞袋模型做爲基礎特徵,而且將複雜的情感處理規則命中的結果做爲一維或者多維特徵,以一種更爲「柔性」的方法融合到情感分析中,擴充咱們的詞袋模型。
3)使用 dnn 模型來進行文本分類,解決傳統詞袋模型難以處理長距離依賴的缺點。
4.NLP 其餘應用
NLP 在達觀的其餘一些應用包括:
1)標籤抽取;
2)觀點挖掘;
3)應用於推薦系統;
4)應用於搜索引擎。
標籤抽取有多種方式:基於聚類的方法實現。此外,如今一些深度學習的算法,經過有監督的手段實現標籤抽取功能。
就觀點挖掘而言,舉例:牀很破,睡得很差。我抽取的觀點是「牀破」,其中涉及到語法句法分析,將有關聯成本提取出來。
搜索及推薦,使用到 NLP 的地方也不少,如搜索引擎處理用戶查詢的糾錯,就用到信道噪聲模型實行糾錯處理。
最後,給喜好 NLP 的朋友推薦一個賽事活動,也是達觀數據主辦的「達觀杯」文本智能處理挑戰賽,這次比賽以文本自動分類爲賽題,若是對上文講到的算法有想練習或者想深刻實踐,可拿比賽來練習充實一下,目前賽事已有近3000份做品提交。
「達觀杯」文本智能處理挑戰賽-競賽信息-DC競賽www.dcjingsai.com
下週四 7 月 31日晚還爲你們準備了關於NLP的分享直播,感興趣可點擊連接入羣瞭解詳情。
NLP 筆記 - Spelling, Edit Distance, and Noisy ChannelsCMU 11611 的課程筆記。這一篇介紹拼寫的檢查和更正,主要研究打字者鍵入的文本,同時這樣的算法也能夠應用於 OCR 和手寫體識別。 這篇博客要解決的三個問題:
拼寫錯誤模式Kukich(1992) 把人的打字錯誤分爲兩大類:打字操做錯誤(typographic error)和 認知錯誤(cognitive error)。
因此單詞的拼寫錯誤其實有兩類,Non-word Errors 和 Real-word Errors。前者指那些拼寫錯誤後的詞自己就不合法,如錯誤的將「giraffe」寫成「graffe」;後者指那些拼寫錯誤後的詞仍然是合法的狀況,如將「there」錯誤拼寫爲「three」(形近),將「peace」錯誤拼寫爲「piece」(同音),這一篇主要講 Non-word Errors。 補充: OCR 錯誤分爲五類:替代、多重替代、空白脫落、空白插入和識別失敗 非詞錯誤的檢查與更正非詞錯誤的檢查通常有兩種方法,一是 使用詞典,二是 檢查序列 使用詞典看鍵入詞是否出如今了詞典中。用來作拼寫錯誤檢查的詞典通常還要包括形態分析模式,來表示能產性的屈折變換和派生詞。詞典一般是哈希表,用 integer 代替 string,來提升 performance。 檢查序列這個方法是本身歸納的。相似於 「letter combination」 的思想。截取單詞的部分字母,來檢查這個字母序列在詞典中出現的頻率如何,是否是根本不會出現這種排列組合,如 「xy」 這個序列就基本不會出如今單詞中,因此判斷這個詞是錯誤的。然而截取的長度很難定義,並且也須要使用詞典。 非詞錯誤改正查找詞典中與 error 最近似的詞,常見的方法有 Shortest weighted edit distance 和 Highest noisy channel probability。 編輯距離(edit distance)編輯距離,顧名思義,把一個符號串轉換爲另外一個符號串所需的最小編輯操做的次數(how many letter changes to map A to B)。Leetcode 上有相應的題目。 編輯距離的 4 種轉換方式
示例 下圖表示如何從 intention 變換到 execution。 由上圖可知 intention 變換到 execution 的 Levenshtein 距離是 5。 算法最小編輯距離的算法。用動態規劃(dynamic programming)來解決。 加上 transposition 的 Levenshtein 距離: Levenshtein Distanceintention 變換到 execution 的最小編輯距離。 Damerau-Levenshtein(DL) distanceOptimal String Alignment(OSA) distance與 惟一的差異就是多了下面幾行: 噪聲信道模型(Noisy Channel Model)Noisy Channel Model 即噪聲信道模型,或稱信源信道模型,這是一個普適性的模型,被用於 語音識別、拼寫糾錯、機器翻譯、中文分詞、詞性標註、音字轉換 等衆多應用領域。噪聲信道模型自己是一個貝葉斯推理的特殊狀況。 noisy word(即 spelling error)被看做 original word 經過 noisy channel 轉換獲得。因爲在信道中有噪聲,咱們很難辨認詞彙形式的真實單詞的面目。咱們的目的就是創建一個信道模型,使得可以計算出這個真實單詞是如何被噪聲改變面目的,從而恢復它的原本面目。噪聲就是給正確的拼寫戴上假面具的拼寫錯誤,它有不少來源:發音變異、音子實現時的變異以及來自信道的聲學方面的變異(擴音器、電話網絡等)。 不管單詞 separate 是怎樣錯誤拼寫了,咱們只想把它識別爲 separate。也就是,給定 observation,咱們的任務是肯定這個 observation 屬於哪一個類別的集合。因此,咱們考慮一切可能的類,也就是一切可能的單詞,在這些單詞中,咱們只想選擇那些最有可能給出已有的 observation 的單詞。也就是,在詞彙 V 的全部單詞中,咱們只想使得 P(Word|Observation)最大的那個單詞,也就是咱們對單詞 W 的正確估計就是 argmaxP(W|O) 如今已知 noisy word(用 O 表示)如何求得最大可能的 original word(用 W 表示),公式以下:
argmaxw∈VP(W|O)=argmaxP(W)P(O|W)P(O) (Bayes Rule)=argmaxP(W)∗P(O|W) (denom is constant)
看一下留下的兩個 factor:
Bayes 方法應用於拼寫的算法分兩個步驟:
Generate candidate words舉個例子,給定拼寫錯誤「acress」,首先經過詞典匹配容易肯定爲 「Non-word spelling error」;而後經過計算最小編輯距離獲取最類似的 candidate correction。下面是經過 insertion, deletion, substitution, transposition 四種操做轉化產生且編輯距離爲 1 的 candidate words。 此時,咱們但願選擇機率最大的 W 做爲最終的拼寫建議,基於噪聲信道模型思想,須要進一步計算 P(W) 和 P(O|W)。 Language model probability經過對語料庫計數、平滑等處理能夠很容易創建語言模型,便可獲得 P(w),以下表所示,計算 Unigram Prior Probability(word 總數:404,253,213) Channel model probability
P(O|W)=probability of the edit
P(O|W)的精確計算至今仍是一個沒有解決的課題,咱們能夠進行簡單的估算,用 confusion matrix,confusion matrix 是一個 26*26 的矩陣,表示一個字母被另外一個字母錯誤替代的次數,有 4 種 confusion matrix(由於有四種錯誤)。 基於大量pair 計算 del、ins、sub 和 trans 四種轉移矩陣,而後求得轉移機率 P(O|W),這裏用 P(x|w) 表示: ![]() Calculation「across」相比其餘 candidate 可能性更大。 Evaluation一些測試集: Other application噪聲信道模型:Y
→
Channel
→
X看一下其餘應用: 在 POS tag 裏,Y 就是 POS tag 序列,X 就是單詞序列。 在機器翻譯裏,如 L1 翻譯成 L2,那麼 Y 就是 L2, X 就是 L1,P(Y)就是 language model,P(X|Y) 就是 channel model。
真詞錯誤的檢查和更正25%-40% 的錯誤是真詞(Real-word),好比說 Can they lave him my messages? / The study was conducted mainly be John Black. 這類錯誤。真詞錯誤的檢查和更正每每依賴於上下文。 真詞(Real-word)的檢查和糾正: ![]() 對一個句子中的每一個單詞,都選出與之編輯距離爲 1 的全部單詞做爲候選單詞(包括原單詞自己),也就是說一個句子 N 個單詞,就有 N 個 candidate set,而後從每一個單詞 set 裏各取出一個單詞組成一個句子,求 P(W) 最大的單詞序列 簡化版,就是在全部 candidate words 裏,每次只選出一個單詞,與其它原詞組成句子,而後一樣求 P(W) 最大的單詞序列。 真詞糾正和非詞糾正的邏輯相同,都有 language model 機率和 channel model 機率,不一樣的是對真詞糾正,channel model 的機率包含了 p(w|w) 也就是徹底沒有錯誤的機率。 拼寫錯誤更正系統爲了令人機交互(HCI)的體驗更加友好,咱們能夠根據拼寫檢查的 confidence 來決定對其進行哪一種操做
Phone’c error model![]() 噪聲信道模型的改進能夠改進/思考的方向:
在實際應用中,咱們並不會直接把 prior 和 error model probability 相乘,由於咱們不能做出獨立性假設,因此,咱們會用權重來計算:
w^=argmaxw∈VP(o|w)P(w)λ
一般從訓練集裏學習
λ
參數。
有其餘的方法對噪聲信道模型進行改進,如容許更多的編輯(ph → f, le → al, etc.),把發音特徵加入信道等。另外,也能夠把 channel model 和 language model 當作特徵,並加入其餘特徵,來訓練分類器來進行拼寫錯誤的改正。 根據可能影響 p(misspelling|word) 的因素來提取特徵: |
|||||||||||||
NLP Category知識抽取-事件抽取知識抽取-實體及關係抽取論文梳理:問題生成(QG)與答案生成(QA)的結合論文筆記 - Machine Comprehension by Text-to-Text Neural Question Generation論文筆記 - Making Neural QA as Simple as Possible but not Simpler(FastQA)論文筆記 - Semi-Supervised QA with Generative Domain-Adaptive Nets論文筆記 - Bi-Directional Attention Flow for Machine Comprehension論文筆記 - Fast and Accurate Reading Comprehension by Combining Self-Attention and Convolution扯扯 Semi-hard Negative Samples論文筆記 - 基於神經網絡的推理 |