周志華,南京大學教授,計算機系主任,南京大學人工智能學院院長,歐洲科學院外籍院士,美國計算機學會 (ACM)、美國科學促進會 (AAAS)、國際人工智能學會 (AAAI) 、國際電氣電子工程師學會 (IEEE) 、國際模式識別學會 (IAPR)、國際工程技術 (IET/IEE) 等學會的會士,實現了 AI 領域會士大滿貫。
導讀:周志華教授從深度神經網絡的深層含義說起,條分縷析地總結出神經網絡取得成功的三大原因:
有逐層的處理
有特征的內部變化
有足夠的模型復雜度
并得出結論:如果滿足這三大條件,則并不一定只能用深度神經網絡。
各位嘉賓,各位朋友大家下午好!
很高興今天下午來參加京東的這個活動,各位最近可能都聽說過我們南京大學成立了人工智能學院,這是中國C9高校(編輯注:C9高校是指北京大學、清華大學、復旦大學、上海交通大學、南京大學、浙江大學、中國科學技術大學、哈爾濱工業大學、西安交通大學共9所高校)的第一所人工智能學院。我們會和京東在科學研究和人才培養方面開展非常深度的合作。具體的合作內容過一段時間會陸續地告訴大家。今天參加這個活動,謝謝伯文(編輯注:指周伯文博士,京東集團副總裁,京東AI平臺與研究部負責人)的邀請,在跟伯文溝通的時候談到今天講些什么呢?伯文說,今天的會議會有很多對技術前沿感興趣的專家,所以希望我分享些我們對技術前沿的一些思考。所以,我今天就跟大家分享些我們對深度學習的一點點思考,僅供大家一起來討論。
我們知道今天人工智能很熱,人工智能背后掀起的熱潮技術之一就是深度學習,當我們談到深度學習的時候,在各種應用場景中都應用到它,包括圖像、視頻、聲音和自然語言處理等等,但是,如果我們問一個問題,什么是深度學習?可能大多數人差不多都會認為,深度學習就等于深度神經網絡。
我給大家看一個例子。有一個非常著名的學會是國際工業與應用數學學會,他們有一個報紙叫 SIAM News。去年 6 月份的頭版上有一篇文章,它里面的重點說的就是深度學習是什么?它(深度學習)是機器學習的一個子域(subfield),這里面要用深度神經網絡。
所以,基本上,如果我們要談深度學習的話,我們必須談深度神經網絡,或者必須從深度神經網絡說起,神經網絡并不是一個新生事物,它在人工智能界已經研究了半個多世紀。以往的話,我們一般會用這樣的神經網絡,就是中間有一個隱層或者兩個隱層。在這樣的神經網絡當中,它的每個單元是個什么東西呢?其實,網絡中的每個單元是一個非常簡單的計算模型,如下圖左下角所示,這個計算模型在半個世紀以前人們就已經總結出來了。給定一些輸入,它們通過連接和放大,到達一個細胞之后,它的加和不超過一個閾值,就被激活。說穿了,它就是這么一個非常簡單的公式,深度神經網絡就是很多這樣的公式通過嵌套和迭代得到的一個數學系統。
我們今天用到深度神經網絡的時候,其實指的是什么呢?其實是指這個網絡的層數很深很深,很多層,大概是多少呢,給大家看一組數據:2012年,ImageNet競賽的冠軍,用到的是8層;2015年,用到的是152層;2016年用到的是1207層;這是一個非常龐大的系統,把這樣的一個系統訓練出來,難度是非常大的。但是呢,我們有一個非常好的消息,神經網絡中的計算單元的激活函數是連續的、可微的,比如說,我們在深度神經網絡中,可能會用Sigmod函數,有了這么一個性質之后,我們會得到一個非常好的結果。這個結果就是現在我們可以很容易計算系統的梯度。因此就可以很容易用著名的 BP 算法(注:反向傳播算法)來訓練這系統。
今天通過這樣的算法,神經網絡已經取得了非常多的勝利,但實際上在學術界大家一直沒有想清楚一件事情,就是我們為什么要用這么深的模式?可能今天有很多人會說深度學習已經取得了很多的成功,但它一個很大的問題就是理論基礎不清楚,我們理論上還說不清楚它到底怎么做?為什么會成功?這里面的關鍵是什么?其實我們根本不知道該從什么角度去看它。因為如果我們要做理論分析的話,首先應該有一點直覺,你到底因為什么有用,在這條路上往前走才能有關鍵的結果。
關于深度神經網絡為什么能深,其實這件事情到今天為止學術界都沒有統一的看法。在這里面給大家講一個我們前一段時間給出的論述,這個論述其實是從主要模型的復雜度的角度來討論的。
我們知道一個機器學習模型的復雜度實際上和它的容量有關,而這個容量直接決定了它的學習能力,所以說學習能力和復雜度是有關的。其實我們老早就知道,如果我們能夠增強一個學習模型的復雜度,它的學習能力就能夠提升,那么怎樣去提高復雜度呢?
對神經網絡這樣的模型來說有兩條很明顯的途徑,一條是我們把模型變深,一條是我們把它變寬,但是如果從提升復雜度的角度,變深會更有效。當你變寬的時候你只不過增加了一些計算單元、增加了函數的個數,而在變深的時候不僅增加了個數,其實還增加了嵌入的層次,所以泛函的表達能力會更強。所以從這個角度來說,我們應該嘗試變深。
我們知道一個機器學習模型的復雜度實際上和它的容量有關,而這個容量直接決定了它的學習能力,所以說學習能力和復雜度是有關的。其實我們老早就知道,如果我們能夠增強一個學習模型的復雜度,它的學習能力就能夠提升,那么怎樣去提高復雜度呢?
對神經網絡這樣的模型來說有兩條很明顯的途徑,一條是我們把模型變深,一條是我們把它變寬,但是如果從提升復雜度的角度,變深會更有效。當你變寬的時候你只不過增加了一些計算單元、增加了函數的個數,而在變深的時候不僅增加了個數,其實還增加了嵌入的層次,所以泛函的表達能力會更強。所以從這個角度來說,我們應該嘗試變深。
給定一個數據集,我們希望把數據集里的東西學出來,但是有時候可能把這個數據本身的一些特性學出來了,而這個特性卻不是一般的規律。當把學出來的錯誤東西當成一般規律來用的時候,就會犯巨大的錯誤,這種現象就是過擬合。為什么會把數據本身的特性學出來?就是因為我們的模型學習能力太強了。
所以以往我們不太用太復雜的模型,為什么現在我們可以用這樣的模型?其實有很多因素,第一個因素是現在我們有很大的數據,那么比如說我手上如果只有 3000 多數據,學出來的特性就不太可能是一般規律。但是如果有三千萬、甚至三千萬萬的數據,那么這些數據里的特性本來就是一般規律,所以使用大的數據本身就是緩解過擬合的關鍵條件。
第二個因素,今天有很多很強大的計算設備,所以才能夠訓練出這樣的模型,同時通過領域里很多學者的努力,我們有了大量關于訓練這樣復雜模型的技巧和算法,所以這使得我們使用復雜模型成為可能。
按照這個思路來說,其實有三件事:第一,我們今天有更大的數據;第二;有強力的計算設備;第三,有很多有效的訓練技巧。
這導致我們可以用高復雜度的模型。而深度神經網絡恰恰就是一種很便于實現的高復雜度的模型。所以這么一套理論解釋,如果我們說它是一個解釋的話,它好像是能告訴我們為什么我們現在能用深度神經網絡。為什么它能成功?就是因為復雜度大。
在一年多之前,我們把這個解釋說出來的時候,其實國內外很多同行也很贊同這么一個解釋,因為大家覺得這聽起來蠻有道理的,其實我一直對這個不是特別滿意,這是為什么?其實有一個潛在的問題我們一直沒有回答。如果從復雜度解釋的話,我們就沒有辦法說為什么扁平的或者寬的網絡做不到深度神經網絡的性能?因為事實上我們把網絡變寬,雖然它的效率不是那么高,但是它同樣也能起到增加復雜度的能力。
實際上我們在 1989 年的時候就已經有一個理論證明,說神經網絡有萬有逼近能力:只要你用一個隱層,就可以以任意精度逼近任意復雜度的定義在一個緊集上的連續函數。
其實不一定要非常深。這里面我要引用一個說法,神經網絡有萬有逼近能力,可能是有的人會認為這是導致神經網絡為什么這么強大的一個主要原因,其實這是一個誤解。
我們在機器學習里面用到的所有模型,它必須具有萬有逼近能力。如果沒有這個能力,根本不可用。所以最簡單的,哪怕傅立葉變換,它就已經有這個能力,所以這個能力不是神經網絡所特有的。那我們在這兒要強調的一件事情是什么?其實我只要有一個隱層,我加無限度的神經元進去,它的能力也會變得很強,復雜度會變得很高。但是這樣的模型無論在應用里面怎么試,我們發現都不如深度神經網絡好。所以從復雜的角度可能很難解決這個問題,我們需要一點更深入的思考。
所以我們要問這么一個問題:深度神經網絡里面最本質的東西到底是什么?今天我們的答案可能是要做表示學習的能力。以往我們用機器學習,首先拿到一個數據,比如這個數據對象是一個圖像,我們就用很多特征把它描述出來,比如說顏色、紋理等等,這一些特征都是我們人類專家通過手工來設計的,表達出來之后我們再去進行學習。
而今天我們有了深度學習之后,現在不再需要手工設計特征,把數據從一端扔進去,模型從另外一端出來,中間所有的特征完全通過學習自己來解決,這是所謂的特征學習或者表示學習,這和以往的機器學習技術相比是一個很大的進步,我們不再需要完全依賴人類專家去設計特征了。
有時候我們的工業界朋友會說,這里面有一個很重要的叫做端到端學習,大家認為這個非常重要。其實這一件事情要分兩個方面來看:一個方面當我們把特征學習和分類器學習聯合起來考慮,可以達到聯合優化的作用,這是好的方面;但另一方面,如果這里面發生什么我們不清楚,這時候端到端的學習不一定真的好,因為可能第一部分往東,第二部分往西,合起來看往東走的更多一些,其實內部有一些東西已經抵消了。
實際上機器學習里面早就有端到端學習,比如說做特征選擇,但這類方法是不是比其它特征選擇的方法要強?不一定,所以這不是最重要的,真正重要的還是特征學習或者表示學習。
我們再問下一個問題,表示學習最關鍵的又是什么?對這件事情我們現在有這么一個答案,就是逐層的處理?,F在我們就引用非常流行的《深度學習》一書里的一張圖,當我們拿到一個圖像的時候,如果我們把神經網絡看作很多層的時候,首先在最底層我們看到是一些像素的東西,當我們一層一層往上的時候,慢慢的有邊緣,再往上有輪廓等等,在真正的神經網絡模型里不一定有這么清晰的分層,但總體上確實是在往上不斷做對象的抽象。
而這個特點,我們現在認為這好像是深度學習真正成功的關鍵因素之一,因為扁平神經網絡能做很多深層神經網絡所做的事,但是有一點它做不到:當它是扁平的時候,就沒有進行一個深度加工,所以深度的逐層抽象可能很關鍵。那如果我們再看一看,大家可能就會問,其實逐層處理這件事,在機器學習里也不是一個新東西。
以前有很多逐層處理的東西,比如說決策樹,它就是逐層處理,這是非常典型的模型。這個已經有五六十年的歷史了,但它為什么做不到深度神經網絡這么好呢?首先它的復雜度不夠,因為決策樹的深度,如果我們只考慮離散特征,其最深的深度不會超過特征的個數,所以它的模型復雜度有上限;第二整個決策樹的學習過程中,它內部沒有進行特征變化,始終是在一個特征空間里面進行,這可能也是一個問題。
大家如果對高級一點的機器學習模型有所了解,你可能會問,現在很多 Boosting 模型也是一層一層往下走,為什么它沒有取得深度學習的成功?我想問題其實差不多,首先復雜度還不夠,第二,更關鍵的一點,它始終在原始空間里面做事情,所有的這些學習器都是在原始特征空間,中間沒有進行任何的特征變換。
深度神經網絡到底為什么成功?里面的關鍵原因是什么?我想首先我們需要兩件事,第一是逐層地處理,第二我們要有一個內部的特征變換。而當我們考慮到這兩件事情的時候,我們就會發現,其實深度模型是一個非常自然的選擇。有了這樣的模型,我們很容易可以做上面兩件事。但是當我們選擇用這么一個深度模型的時候,我們就會有很多問題,它容易 overfit,所以我們要用大數據,它很難訓練,我們要有很多訓練的 trick,這個系統的計算開銷非常大,所以我們要有非常強有力的計算設備,比如 GPU 等等。
實際上所有這些東西是因為我們選擇了深度模型之后產生的一個結果,他們不是我們用深度學習的原因。所以這和以往我們的思考不太一樣,以往我們認為有了這些東西,導致我們用深度模型,現在我們覺得這個因果關系恰恰是反過來的——因為我們要用它,所以我們才會考慮上面的這些東西。
而另外還有一點我們要注意,當我們要有很大的訓練數據的時候,這就要求我們必須要有很復雜的模型。假設我們有一個線性模型的話,給你 2000 萬要的還是 2 億的樣本,其實對它不是太大區別,它已經學不進去。而我們有了充分的復雜度,其實我們看到恰恰它又給我們使用深度模型加了一分。
由于這幾個原因,我們才覺得可能這是深度學習里面最關鍵的事情。所以這是我們現在的一個認識:第一我們要有逐層的處理;第二我們要有特征的內部變化;第三,我們要有足夠的模型復雜度。
這三件事情是我們現在認為深度神經網絡為什么能夠成功的關鍵原因,或者說這是一個猜測。如果滿足這幾個條件,我其實可以馬上想到,不一定真的要用神經網絡,神經網絡是選擇的幾個方案之一,我只要同時做到這三件事,別的模型也可以,并不一定只能用深度神經網絡。
我們就要想一想,我們有沒有必要考慮神經網絡之外的模型?其實是有的。因為大家都知道神經網絡有很多缺陷。
第一,凡是用過深度神經網絡的人都知道,你要花大量的精力來調它的參數,因為這是一個巨大的系統。這里面會帶來很多問題,首先當我們調參數的時候,這個經驗其實是很難共享的。有的朋友可能說,我在第一個圖像數據集之上調數據的經驗,當我用第二個圖像數據集的時候,這個經驗肯定可以重用的。但是我們有沒有想過,比如說我們在圖像方面做了一個很大的神經網絡,這時候如果要去做語音,其實在圖像上面調參數的經驗,在語音問題上可能基本上不太有借鑒作用,所以當我們跨任務的時候,經驗可能就很難有成效。
而且還帶來第二個問題,我們今天都非常關注結果的可重復性,不管是科學研究、技術發展,都希望這結果可重復,而在整個機器學習領域里面,深度學習的可重復性是最弱的。我們經常會碰到這樣的情況,有一組研究人員發文章報告了一個結果,而這結果其他的研究人員很難重復。因為哪怕你用同樣的數據、同樣的方法,只要超參數的設計不一樣,你的結果就不一樣。
我們在用深度神經網絡的時候,模型的復雜度必須事先指定,因為在訓練模型之前,神經網絡是什么樣就必須定了,然后才能用 BP 算法等等去訓練它。其實這就會帶來很大的問題,因為在沒有解決這個任務之前,我們怎么知道這個復雜度應該有多大呢?所以實際上大家做的通常都是設更大的復雜度。
如果在座各位關注過去三四年里深度神經網絡、深度學習領域的進展,你可以看到很多最前沿的工作在做什么事呢?其實都是在有效地縮減網絡的復雜度。比如說 ResNet 網絡,還有最近大家經常用的模型壓縮等,其實我們想一想不都是把復雜度變小,實際上是先用了一個過大的復雜度,然后再降下來。
那么我們有沒有可能在一開始就讓這個模型的復雜度隨著數據而變化?這一點對神經網絡可能很困難,但是對別的模型是有可能的。還有很多別的問題,比如說理論分析很困難,需要非常大的數據,黑箱模型等等。
那么這些能不能用來構建深度模型?能不能通過構建深度模型之后得到更好的性能呢?能不能通過把它們變深之后,使得今天深度模型還打不過隨機森林這一些模型的任務,能夠得到更好的結果呢?
那我們自己就受到這樣的一個啟發,我們要考慮這三件事,就是剛才跟大家分析得到的三個結論:第一要做逐層處理,第二是特征的內部變換,第三我們希望得到一個充分的模型復雜度。
我自己領導的研究組最近在這一方面做了一些工作,我們最近提出了一個 深度森林的方法。
在這個方法里面我今天不跟大家講技術細節,它是一個基于樹模型的方法,主要是借用集成學習的很多想法。其次在很多不同的任務上,它的模型得到的結果和深度神經網絡是高度相似的,除了一些大規模的圖像等等。在其他的任務上,特別是跨任務表現非常好,我們可以用同樣一套參數,用在不同的任務中得到不錯的性能,就不需要逐任務的慢慢調參數。
還有一個很重要的特性,它有自適應的模型復雜度,可以根據數據的大小自動來判定該模型長到什么程度。它的中間有很多好的性質,有很多朋友可能也會下載我們的開源代碼拿去試,到時候我們會有更大規模分布式的版本等等,要做大的任務必須要有更大規模的實現,就不再是單機版能做的事。
但另一方面,我們要看到這實際上是在發展學科思路上一個全新的思路探索,所以今天雖然它已經能夠解決一部分問題了,但是我們應該可以看到它再往下發展,前景可能是今天我們還不太能夠完全預見到的,所以我這邊簡單回顧一下卷積神經網絡,這么一個非常流行的技術,它其實也是經過了很長期的發展。
最早信號處理里面關于卷積的出現,其實是有一個多世紀了,但是現在深度神經網絡的歷史是從 1962 年兩位諾貝爾獎得主關于生物視覺皮層的研究開始。但是不管怎么樣第一次在神經網絡里引入卷積是 1982 年,在此之后他們做了很多的工作,1989 年引入 BP 算法,那時算法就已經成型了,到了 1995 年第一次對 CNN 有了一個完整的描述,在 1998 年對美國支票的識別取得了很大的成功,在 2006 年提出了通過無監督逐層訓練深層模型,到了 2009 年這個技術被引到 CNN 里,我們可以做深度的 CNN,2012年深度的 CNN 被用在ImageNet 比賽中,直接掀起了一波深度學習的浪潮。
我所做的工作的最重要的意義是什么呢?以前我們說深度學習是一個黑屋子,這個黑屋子里面有什么東西呢?大家都知道它有深度神經網絡,現在我們把這個屋子打開了一扇門,把深度森林放進來,我想以后可能還有更多的東西。所以這是這個工作從學術科學發展上的意義上,有一個更重要的價值。
最后我想用兩分鐘的時間談一談,南京大學人工智能學院馬上跟京東開展全面的、深入的在科學研究和人才培養方面的合作。
關于人工智能產業的發展,我們要問一個問題,我們到底需要什么?大家說需要設備嗎?其實做人工智能的研究不需要特殊機密的設備,你只要花錢,這些設備都買得到,GPU 這些都不是什么高端的禁運的商品。第二是不是缺數據?也不是,現在我們的數據收集存儲、傳輸、處理的能力大幅度的提升,到處都是數據,真正缺的是什么?
其實人工智能時代最缺的就是人才。因為對這個行業來說,你有多好的人,才有多好的人工智能。所以我們現在可以看到,其實全球都在爭搶人工智能人才,不光是中國,美國也是這樣。所以我們成立人工智能學院,其實就有這樣的考慮。
可能我們投資風口里面有一些詞,今年還很熱,明年就已經不見了,這些詞如果我們追究一下,它里面科學含義到底是什么?可能沒幾個人說的清楚,而人工智能和這些東西完全不一樣,是經過 60 多年發展出來的一個學科。
高水平的人工智能人才奇缺,這是一個世界性的問題,我們很多企業都是重金挖人,但實際上挖人不能帶來增量,所以我們要從源頭做起,為國家、社會、產業的發展培養高水平的人工智能人才。
-
深度學習
+關注
關注
73文章
5504瀏覽量
121246
原文標題:南京大學教授:周志華——關于深度學習的一點思考
文章出處:【微信號:gh_ecbcc3b6eabf,微信公眾號:人工智能和機器人研究院】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論