在人工智慧高歌猛進,人們期待深度學習無往不勝之時,作為人工智慧學者,我們必須保持冷靜,分析深度學習技術的短板,開展針對性研究將其克服,從而助力人工智慧的長期繁榮。事實上,今天深度學習成功的主要因素:超大規模訓練資料、複雜的深層模型、分散式並行訓練,也正是影響其進一步發展的障礙。首先,取得大量有標籤訓練資料需要付出巨大代價,不是每個領域都能滿足這個條件;其次,深層模型很難優化,超大模型會突破計算機容量;再次,同步並行效率低下、非同步並行受通訊延時影響收斂緩慢。在這篇文章中,我將會介紹微軟研究院的最新成果,展示如何通過“對偶通訊博弈技術”有效利用無標籤訓練資料、如何利用“殘差學習技術”解決深層神經網路的優化問題、如何藉助“二維對映技術”縮小模型規模、以及如何使用“高階泰勒補償技術”解決通訊延時問題。這些前沿技術將會陸續通過微軟的開源專案CNTK和DMTK分享給業界,以期和大家一起推動人工智慧技術的進一步發展。
本文來自於在長沙舉行的2016年湖南人工智慧論壇微軟亞洲研究院首席研究員劉鐵巖博士的報告。以下是雷鋒網對此次報告的整理。
作者介紹:
劉鐵巖博士,微軟亞洲研究院首席研究員,美國卡內基梅隆大學(CMU)客座教授。劉博士的研究興趣包括:人工智慧、機器學習、資訊檢索、資料探勘等。他的先鋒性工作促進了機器學習與資訊檢索之間的融合,被國際學術界公認為“排序學習”領域的代表人物,他在該領域的學術論文已被引用近萬次。近年來,劉博士在博弈機器學習、深度學習、分散式機器學習等方面也頗有建樹,他的研究工作多次獲得最佳論文獎、最高引用論文獎、研究突破獎,並被廣泛應用在微軟的產品和線上服務中。他是國際電子電氣工程師學會(IEEE)、美國計算機學會(ACM)和中國計算機學會(CCF)的高階會員,中國計算機學會的傑出演講者和學術工委。
在我的報告開始之前,先介紹一下我所供職的單位:微軟研究院,它是微軟公司在全球設立的基礎研究機構,它在全球有六個分院。位於北京的微軟亞洲研究院成立於1998年,到現在已經有十八個年頭,這十八年裡,微軟亞洲研究院在頂級國際會議和期刊上發表了近5000篇論文,其中包括50篇最佳論文,為微軟產品提供了400項技術。微軟亞洲研究院非常像一所大學,有近200餘名世界頂尖的電腦科學家,以及來自各個高校的三四百名長期的實習生。
人工智慧在最近取得了令人矚目的成果,微軟在這個過程中也做了很多的貢獻,比如在語音識別方面的突破,就起源於2006年微軟的研究員和Geoffrey Hinton一起從事的研究。這幾年人工智慧領域在人臉識別、影像識別、自然語言處理、人際對弈都取得了甚至超過人類水平的研究成果,非常喜人。
深度學習成功的祕密
說到這幾年取得的成果,就不得不提到深度學習技術,深度學習技術概念很寬,但最主流的演算法就是深度神經網路,這張圖展示了深度神經網路的基本結構。圖裡的圓圈代表是一個神經元,每一個神經元會對它的輸入做一個線性加權求和,在進行一個非線性變換。經過多層的變換,深度神經網路可以模擬非常複雜的非線性分類介面。
除了最基本的全連線網路,最近深度神經網路有很多新的變種,比如說卷積神經網路,這是為影像識別發明新的網路結構,迴圈神經網路主要為自然語言流式資料發明的神經網路結構。
不管是標準多層神經網路、卷積神經網路,還是迴圈神經網路,其學習過程都非常的簡單和一致。首先會有一個訓練集,我們用w表示深度神經網路裡面的引數,用f來表示神經網路模型。
L稱為損失函式,深度學習神經網路的訓練其實通過在訓練集上最小化損失函式而求得的,就是我們通常所說的經驗風險最小化。為了實現這個目標,人們使用的優化技術也非常的簡單,就是大家上大一的時候就會學到梯度下降法:對損失函式求一個梯度,然後把模型向梯度下降最快的方向做一個更新,這種方法在神經網路領域也被稱為反向傳播。
到此為止我就給大家用了一兩張PPT做了非常快速的講座,什麼是深度神經網路,它有哪些變種。
深度學習網路為什麼成功
接下來我們來看看神經網路背後深層次的東西。當深度神經網路帶來了人工智慧很大的飛躍,外行們討論的都是人工智慧對人類會不會產生威脅?而內行看到的則是深度神經網路有什麼技術優勢、往前發展還有什麼樣子的短版?
前面提到,無論深度神經網路長什麼樣子,其實就是一種經驗風險最小化。這裡,X是樣本,Y是標籤,所以X和Y加起來就是神經網路的訓練資料,F用來表示神經網路模型,L是損失函式。神經網路的訓練就是在整個神經網路的函式空間裡面去找一個最優模型,從而最好地擬合訓練資料。其實不僅神經網路在做這件事,歷史上那麼多的分類模型,都在做的類似的事情。
為什麼到今天神經網路可以取得傳統模型無法取得的成功呢?其實有三個理由:
一是要感謝我們這個大資料的時代,我們如今有著前所未有的大訓練資料,可以充分訓練複雜的模型。
二是深度神經網路和前面提到的模型相比,具有更強的表達能力。大家知道在神經網路領域有一個universal approximation theorem,講的是帶有隱層的神經網路可以逼近任意的連續函式。從這個意義上講,即便我們選一個非常複雜的問題,用深度神經網路也可以逼近它的分類介面。
有了大資料,又有了複雜模型,那怎麼訓練呢?就需要非常強大的計算資源,就是可能要用上百臺、上千臺的計算機來共同訓練一個深度神經網路。總結一下啊,大資料、複雜模型、運算叢集能力其實共同支撐了今天深度神經網路的巨大成功。深度學習進一步發展的瓶頸
但是世界上沒有免費的午餐,這三方面恰洽也是深度神經網路向前進一步發展的瓶頸所在。第一個方面,其實大規模的資料不是那麼容易取得的,尤其在某些領域,比如說醫學領域,有些疑難雜症這世界上一共就一百個樣本,如何去產生成千上萬的大資料?第二個方面深度神經網路非常難以優化,目前人們為此發明了很多黑科技。我們經常遇到這種情況,即便有一個組織宣佈他有非常好的深度模型並且把演算法進行了開源,但是我們當下載到自己的環境裡,用自己的資料做訓練的時候,往往得不到那麼好的結果。另外,有的時候很大的模型容量會超過計算機的限制,目前我們經常用GPU來訓練深度神經網路,但是GPU的記憶體很小,一般就是幾十個G,很多大的神經網路的規模會超過這個容量。第三個方面,即便神經網路模型可以塞到GPU裡,但是當資料夠大的時候,用單機進行訓練可能要花費非常多的時間,也許幾百年也訓練不出一個模型來。為此,我們需要用一個叢集來做分散式的訓練,聽起來很簡單,好像是系統領域成熟的問題,但是我們關心的不是簡單地把模型訓練分發到多個機器上,而是要保證精度不發生損失,我們希望在加速的同時,還有很好的判別或者是分類能力,這件事情一點都不簡單。
一)通過“對偶通訊博弈技術”有效利用無標籤訓練資料
前面提到了很多情況下,不是那麼容易獲得大資料,當沒有大的訓練資料時候該怎麼辦?通常獲得有標籤資料很難,但是獲得無標籤資料會相對榮國。比如現在ImageNet比賽的資料通常是1000類,每類1000幅影像;但是我們如果用搜尋引擎來搜尋影像,可以獲得比這多得多的資料。 關鍵的問題是如何給這些無標籤資料打上一個標籤。常用的方法是標籤傳播,就是利用樣本的相似性,給無標籤資料賦予一個偽標籤。另一種情況是,我們有類別資訊,但是沒有樣本。最近有一個很有趣的工作叫GAN: generative adversarial nets,它利用一個生成器和一個判別器的博弈,最終能根據標籤自動產生屬於這個類別的資料。
有了這個技術,我們就不用去採集資料,而是自動地淵源不斷輸出那些影像。
這兩種工作是對稱的,一個工作處理的是有樣本但無標籤,另一個工作處理的是有標籤但無樣本。那麼能不能使它們兩個對接在一起?這是我們今年在NIPS上發的一篇論文,稱為對偶通訊博弈,可以把前面兩項技術完美結合在一起。
首先從任何一個無標籤的樣本出發,可以預測標籤,然後基於這個標籤又可以用生成技術生成一個新樣本出來,這個過程我們可以獲得很多反饋資訊,比如標籤的分佈、生成樣本和原樣本的相似度等。這個過程也可以從標籤出發,也能形成一個閉環。有了這個技術,我們就可以自己產生訓練資料。我們把這個技術應用到了機器翻譯上,取得了非常好的結果。大家知道機器翻譯這幾年有突飛猛進的進展,得益於大量雙語語料的存在,如果只有很少的資料能做什麼呢?
這張圖上面最上面條形圖對應的是用百分之百的雙語語料訓練的結果,最底下一行是使用傳統的深度學習技術只用5%的雙語語料的結果。綠色的這一條也只是使用了5%的有標資料,但是使用了對偶通訊博弈來自動生成更多的訓練資料,它可以很快逼近使用全部雙語語料的精度。當然,這裡機器翻譯只是一個例子,同樣的方法可以解決很多其他的應用問題。
二)利用“殘差學習技術”解決深層神經網路的優化
深度學習的網路很複雜,訓練其實不容易,那麼到底有哪些不容易?
一個典型的挑戰叫做梯度消減,深度神經網路是從輸出層的損失函式不斷向下傳播,用預測誤差來更改神經網路的引數,所謂梯度消減指的是當網路很深的時候,輸出層的損失很難有效反饋到底層,所以底層神經引數不能得到有效的更新。我們舉個簡單的例子,這是一個簡化的深度神經網路,每一層只有一個隱節點,但是有很多層次,C是損失函式,反向傳播無非就是對損失函式求一個偏導,求到每一個層的引數上面去,這個偏導長什麼樣子,大家回去做一點演算的話就可以得到這個式子。這裡sigma’對應於非線性啟用函式的導數,它的最大值也不過是0.25,如果一個網路很深,每一層對應的啟用函式的導數會被連乘,一連串很小的量連乘會是什麼結果呢,就是很快趨近於0,這就是梯度消減的起因。為了解決這個問題,人們提出在原有的神經網路基礎上增加了一條由閘電路控制的線性通路。
我們做回傳的時候,線性通路可以把預測誤差有效傳遞到底的引數上,而不會有那麼強的梯度消減問題。但是,這兩個工作使用的閘電路,有的時候會通,有的時候會斷,還是會帶來一定的損失。我們研究院的同事提出在神經網路不同層次之間加一個直接的線性通路,不受任何的限制,永遠是通的,經過這樣的一個改造之後,對於解決梯度消減問題效果更好,並且可以讓我們很輕易訓練出成千上萬層的網路,其中152層的殘差網路參加了去年的比賽,並且取得了五個專案的冠軍,獲得了全世界的矚目。
大家看看這個152層的網路有多深。
其實,不僅深會帶來麻煩,網路大也是件麻煩事。這個資料集是在網路搜尋領域常用的數學極,它包含十幾億的網頁,詞表大小大概1000萬。如果基於這樣資料去設計一個神經網路,因為輸出層是詞表那麼大,輸入層也是詞表那麼大,網路大小是非常可觀的,其引數個數會超過200億,儲存的量會超過200G,這樣是網路是沒法塞到GPU的記憶體裡的。即便可以塞進去,訓練這麼大的網路也需要花很長的時間,粗略的計算告訴我們,用主流GPU來訓練,大約需要180年。
三)藉助“二維對映技術”縮小模型規模
今年我們的研究組提出新的技術,就叫做引數維度壓縮技術,可以有效解決詞表過大的問題。因為詞表決定了輸出的結點數和輸入的結點數,我們工作的核心所在就是提出了詞表的二維向量表達。
每一個詞不是用一個節點表示,而是用兩個節點去表示,不同的詞會共享節點。如果用二維的表格來表述所有的詞條,原來10000個詞,只需要200個元素就可以了。通過二維詞表的構造大大解決了記憶體的空間,但是到底該怎麼生成這些二維的詞表?
哪些詞要共享節點,哪些詞不需要共享節點,其實這是一個最優的二分圖匹配問題,我們可以迴圈地求解二分圖匹配,從而獲得合理的二維詞表。相應地,我們把傳統的神經網路也做了改進,提出的二維迴圈神經網路。
這個網路大大縮小了網路儲存的記憶體需求,像我剛才提到有200億個引數的網路,用了這個技術以後,儲存量降低了三個數量級,運算量降低了四個數量級,這還不是最神奇的,我們使用了二維共享表之後,精度也得到了提高,這主要是因為傳統的神經網路輸入結點是互相獨立的,但是我們沒有做這樣的假設,我們是用了最優二分圖的匹配來找到了詞與詞之間的語義相似性,因此提高了網路的精度。
四)如何提高雲端計算和平行計算
大家想象一下,如果真的有一個非常大的網路,有很多資料要跑,一臺機器要一兩百年才能完成訓練。那就不得不使用多臺機器進行並行訓練。在並行的訓練當中最簡單的正規化就是同步的並行。
比如說每一臺機器做一個區域性運算,然後機器互相之間互相同步一下學到的東西。但是這一百臺機器可能運算的速度有很大差別,做同步的更新,這一百臺機器就需要互相等待,最後運算的效率是由最慢的機器決定的。
結果是,使用了100臺機器,可能由於互相等待,最終只實現了三五倍的加速比,得不償失。為了解決這個問題,最近學者們開始研究非同步並行。
就是機器之間不互相等待,這樣雖然速度有所提高,但是會出現所謂延時通訊的額問題。也就是,當一臺機器根據當前模型,得到模型更新,想要推送回全域性模型的時候,全域性模型很可能已經被其他機器更新了好幾次了,導致它推送上的更新過時了,把這個過時的更新加到全域性模型上,可能會導致出乎意料的結果。有學者做過分析,這種延時,或導致學習的收斂速度變慢,最終也是影響加速比。
為了解決這個問題,我們需要弄清楚這個過時的更新到底會帶來什麼影響。其實,這個舊的更新和新的更新之間的差別可以用泰勒展開來進行刻畫,傳統的非同步並行相當於只利用了泰勒展開的零階項,那麼,我們是不是可以用更多的高階項去補償這種延時呢?如果把所有高階項都用上,確實可以把通訊延遲完全解決掉,但是其運算複雜度也會增加,所以這中間有一個平衡的問題。我們做了一個簡單的嘗試,就是在零階項的基礎上,多保留了一階項。但是,即便這種簡單的操作,也需要我們計算原損失函式的二階導數(就是所謂海森陣),其複雜度是相當高的,可能得不償失。我們的貢獻在於證明了一個重要的定理,當損失函式具有對數似然的形式的時候,這個二階導數可以用一階導數的簡單變換,實現無偏估計。而神經網路裡常用的交叉熵損失函式,正是一種對數似然的形式,因此我們的技術可以很好地應用到深度神經網路裡面。
最後,關於微軟的開源平臺
前面我講到了很多微軟在深度學習方面的前沿技術,這些技術將會陸續通過我們的開源專案分享給業界。其中一個開源專案叫CNTK,微軟深度學習工具包,還有一個叫DMTK,微軟分散式機器學習工具包。希望對這方面感興趣的同事可以嘗試一下我們的工具包,希望對你們的研究有一個推動作用。
最後,讓我們討論一下我們的未來研究方向,我們希望創造一個能夠自動創造人工智慧的人工智慧。今天人工智慧雖然有很多成功的例子,但是絕大部分依靠人為編寫的程式。最近這幾年,學者們在思考,有沒有可能不需要人為控制深度學習的過程,而是由機器自己來優化自己呢?比如說DeepMind今年發了一個論文,叫learning to learn by gradient descent by gradient descent,就是用迴圈神經網路取代人為定義的梯度下降方法。再比如,我們前面提到的對偶通訊博弈,就是機器自己蒐集和產生訓練資料。還有一些人在用機器學習的方法自動來調深度神經網路的超引數,比如學習率。隨著這些研究的開展,我們可以想象有一天機器學習工具可以針對給出的任務去自動搜尋資料、選擇資料、處理資料,自動根據你所給的目標去生成模型優化的方法,自動調整超引數,自動把訓練部署到多個機器上進行分散式訓練,如果真的有這樣一天,將是對所有機器學習使用者的一種解放,我們不需要那些掌握黑科技的巨頭,每個人都可以享受機器學習技術給大家帶來的紅利!讓貌似高深複雜的機器學習技術,真正飛入尋常百姓家!