論深度學習的侷限性

論深度學習的侷限性

譯者前言

這篇文章清晰地展示了深度學習自己真正的意義,讓咱們更透徹地瞭解它的同時,也明白了它的侷限之處,距離着人類層次的 AI 還有着太長的路要走。在文章的最後一部分,做者更是表達出了本身對於將來的 AI 之路的思考與展望。html

正文

這篇文章修改自個人書《Deep Learning with Python (manning出版社)》的第九章第二部分。這是關於當前的深度學習的侷限性與將來展望的兩篇系列文章之一。前端

這篇文章的目標受衆是那些已經在深度學習領域有着必定的經驗(例如,那些已經讀完 1-8 章的人們)。咱們默認你已經知道了不少前置的知識。 python

譯者注:閱讀此文章無需特別豐富的經驗,實際上只要知道深度學習的大概運行模式便可react


深度學習:幾何角度

深度學習最使人驚訝的地方在於它的簡單程度。十年以前,沒有人會想到咱們可以只是運用梯度降低算法訓練簡單的參數模型,就能在機器感知方面取得如此巨大的成果。如今來看,你只須要經過梯度降低方法,用 足夠多 的樣例去訓練一個參數 足夠多 的參數模型(就能夠取得你想要的結果了)。就如 Feynman 曾經對宇宙的描述同樣,「它並不是複雜,只是數量巨大」android

在深度學習中,全部東西都是一個向量,換言之,全部東西都是幾何空間中的一個點。輸入的模型(能夠是文本,圖像等等)和目標都會首先被「向量化」,也就是說,轉化爲初始的輸入向量空間和目標向量空間。深度學習模型的每一層都對經過的數據,進行着一次簡單的幾何變換。而合併在一塊兒,鏈在一塊兒的各層模型造成了一個很是複雜的幾何變換,分解成單一的以後又變的很是簡單。這個複雜的變換試圖將輸入映射到輸出,每次處理一個點。這個變換被各神經層的權重參數化,而權重則在每次迭代時基於當前模型的運行情況進行更新。這個幾何變換的關鍵特徵就是,它必須可導(可微),這樣咱們纔可以經過梯度降低算法學習它的參數。直觀地看,這意味着從輸入到輸出的幾何變換必須是平穩且連續的 —— 這是一個重要的限制條件。ios

對於輸入的複雜幾何變換過程,能夠在 3D 下畫出一我的,在嘗試平整一張捲成球的紙,來達到視覺化的目的:皺起來的紙球表明着模型中的輸入副本。每次人對紙的動做都與每次單個神經層的簡單幾何變換類似。這樣看,平整紙球的一套動做就是整個模型的幾何變換,而當這些動做(幾何變換)連在一塊兒時,看起來會很是複雜。深度學習模型其實是一個數學機器,將多種高維數據平整化。git

這就是深度學習的神奇之處:將「意義」轉變爲向量到幾何空間中,並逐漸地學習複雜的幾何變換,將一個空間映射到另外一個。你只須要有足夠維度的空間,來獲取原始數據中的全部存在的關係。github

深度學習的侷限性

咱們能夠將這個簡單的策略應用到各個領域。不過,也有不少領域不在當前深度學習所能達到的範圍,即便給它大量的人工註釋過的數據。例如,你能夠對一個軟件的特徵進行成百上千次不一樣的描述,像一個項目經理那樣寫,同時包含相對應的一組軟件工程師開發出來的源代碼來知足這些需求。即便有了這些數據,你也不能訓練出一個深度學習模型來簡單地閱讀產品描述並生成一個正確的代碼庫。而這只是衆多例子中的一個。整體上來說,任何須要推理類的編程,科學的長時期規劃,算法類的數據操做都處在深度學習模型以外,不論你給予模型多少數據都沒用。即便讓深度神經網絡學習一個排序算法也是很是困難的。算法

這是由於一個深度學習模型「只是」一系列簡單、連續的幾何變換,將一個幾何空間映射到另外一個。假設 X 到 Y 存在着一個可學習的連續變換,同時有足夠密集的 X:Y 的訓練數據做爲樣例,它所能作的一切就是將數據副本 X 映射到另外一個副本 Y。因此儘管一個深度學習模型能夠被看做是一種程序,反過來大部分程序並不能表示成深度學習模型 —— 對於大多數任務,要麼實際上不存在相關的深度學習模型來解決這種任務,或者即便這裏存在一個,可能也是不可學習的,也就是說,相關的幾何變換可能過於複雜,或者這裏可能沒有合適的數據來進行學習。編程

經過增長更多的神經層和使用更多的訓練數據,來擴大當前的深度神經網絡的規模,只能在一些問題中取得必定的進步。這種方法並不可以解決更多的基礎性問題,那些問題在深度學習模型的能力以外,它們沒法被表示,而且惟一的學習途徑又不可以被表示對一個數據副本的連續幾何變換。

將機器學習模型人格化的風險

一個目前 AI 領域很是現實的問題,就是錯誤地闡釋深度學習模型的職能,並高估了它們的能力。人類意識的一個基本特徵就是「理論思惟」,咱們傾向於將意圖、信仰和知識投影在咱們周圍的東西上。在一個石頭上畫一個笑臉能讓它「快樂」起來 —— 在咱們的意識中。應用在深度學習中,這意味着當咱們可以成功地訓練出一個能夠添加標題描述圖像的模型時,咱們會相信那個模型理解了圖片的內容,同時也理解所生成的標題。接着,咱們會對模型由於任何輕微的異常於訓練數據的圖片而生成的荒謬的標題感到驚訝。

基於深度學習的標題添加系統,出現了錯誤識別
基於深度學習的標題添加系統,出現了錯誤識別

這個男孩正拿着一個棒球棒

特別地,這個是被強調的「對抗樣例」,是被設計用於欺騙模型使它錯誤歸類的。你已經注意到了,對輸入空間擴充來產生可以最大化一些卷積網絡濾波器(convnet filter)的輸入,例如 —— 這是咱們在第五章中介紹的濾波器可視化技術的基礎(注:在 Deep Learning with Python中),還有第八章的 Deep Dream 算法。類似地,經過梯度增長,模型能夠經過輕微地修改一幅照片來最大化給定的種類的預測空間。經過給熊貓照一張照片,並給它加入「長臂猿」的梯度,咱們能夠獲得一個將這隻熊貓歸爲長臂猿的神經網絡。這證實了這些模型的脆弱之處,以及它們所進行的輸入輸出映射與人類意識的巨大不一樣。

一個對抗性的例子:圖像中不可察覺的變化能夠提高模型對圖像的分類能力。
一個對抗性的例子:圖像中不可察覺的變化能夠提高模型對圖像的分類能力。

簡而言之,深度學習模型一點也不理解它們的輸入,至少從人類的角度來看(人類的理解)。咱們對於圖像、聲音和語言的理解是基於咱們人類的感受——這是體如今全地球的生物身上的。機器學習模型是沒有這方面的經驗的,也所以沒法以人類的方法「理解」它們獲得的輸入。經過標註大量的訓練樣例並代入訓練模型,咱們使得它們可以學習到幾何變換,從而將這一集合中的例子映射到人類的概念之中,不過這個映射只是咱們的意識中最簡單最原始的草圖,是從咱們經驗中的體現 —— 就如鏡子中的黯淡影像通常。

當前的學習模型:就如鏡中暗淡的影子
當前的學習模型:就如鏡中暗淡的影子

做爲一個機器學習的實踐者,老是要注意這個,並且永遠不要陷入陷阱,相信神經網絡懂得它們所處理的任務 —— 它們並不懂,至少不是像咱們同樣理解。它們所被訓練於的任務,範圍遠遠窄於咱們所但願真正教給它們的東西:僅僅是將訓練的目標與輸入映射,點對點。若是給它們展現任何偏離它們的訓練數據集的東西,它們就會以極爲荒謬的方式「壞掉」。

局部泛化與極端泛化

看起來,深度學習模型的將輸入經過幾何變換獲得輸出的過程與人類的思考學習有着根本上的區別。不只僅是人們經過自身的經驗而不是清晰的訓練樣例來學習。除了不一樣的學習過程,二者根本性差別還在於底層表示的本質不一樣。

人類不止於可以針對刺激當即產生迴應,就像深度神經網絡或者一個昆蟲會作的那樣。它們針對着本身目前的狀態,它們本身,其餘的人,維護着複雜而抽象的模型,而且可以運用這些模型來預測可能的將來狀況,進而有一個長期規劃。它們有能力將所知的概念整合去表述一些它們從未見過的東西 —— 好比畫一個穿牛仔褲的馬,或者想象若是他們贏了彩票他們會幹什麼。這種可以處理假象,將咱們的思惟模型空間擴展至咱們可以直接經歷的以外的能力,能夠說是定義人類認知的特徵。我管它叫作「極端泛化」:一種從未經歷過某些狀況,但可以運用很是少許的數據甚至沒有新的數據,來適應新事物的能力。

這與深度神經網絡所作的事情徹底相反,我叫它「局部泛化」:神經網絡將輸入輸出映射的過程若遇到了偏離以前訓練集的內容,即便差異不大,也會出現問題。考慮一下這個例子,學習可以使火箭在月球着陸的參數。若是你使用深度神經網絡來解決這個任務,無論使用監督學習仍是增強學習,你須要給予模型成千上萬次的發射試驗數據,也就是說,你須要將它暴露給密集採樣的輸入空間,來習得一個可靠的輸入到輸出空間的映射。偏偏相反的是,人類能夠用他們抽象的能力創建物理模型——航空科學——並僅僅經過不多的試驗得出一個能使火箭安全到達月球的解決方案。類似地,若是你想開發出一個深度網絡來控制人的身體,並但願可以學會如何在一個城市中安全地行走而不被車撞倒,神經網絡則會須要死亡成千上百次才能識別出車輛和危險,並生成避開的動做。若被放到一個新的城市中,神經網絡會須要從新學習大部分以前的東西。另外一方面,人類卻不須要死亡一次就可以學習到安全的規避動做,這歸功於他們可以在假象狀況下抽象出模型的能力。

局部泛化 vs 極端泛化
局部泛化 vs 極端泛化

簡而言之,儘管咱們有在機器感知方面的進步,咱們仍然離人類層次的 AI 有着很是遠的距離:咱們的模型目前只可以進行局部泛化,適應於與過去數據很是相近的狀況,而人類感知卻具備極端泛化的能力,快速適應全新的情形,或者對將來的狀況進行長期規劃。

最後幾句

你應該記住:目前深度學習成功的地方只在於接受大量的人工註釋的數據,經過連續的幾何變換,將空間 X 映射到 空間 Y。這對於幾乎全部的工業領域都是革命性的變化,但離人類層次的 AI 還有很長一段路要走。

要想移除一些限制並與人類的大腦相比,咱們須要將直接的輸入輸出映射去掉,改而關注於推理和抽象。一個可能的對不一樣狀況和概念進行抽象建模的基質是計算機程序。如咱們以前所說(在Deep Learning with Python中),機器學習模型能夠被定義爲「有學習能力的程序」;現在咱們只有很小的一部分程序具備學習能力(對於全部的計算機程序來講)。但若是咱們以模塊化和可重複化來學習任意的程序呢?讓咱們在下一篇文章中看看將來的路多是什麼樣子。

個人第二篇在此:The future of deep learning(深度學習的將來)

做者:@fchollet, May 2017


掘金翻譯計劃 是一個翻譯優質互聯網技術文章的社區,文章來源爲 掘金 上的英文分享文章。內容覆蓋 AndroidiOSReact前端後端產品設計 等領域,想要查看更多優質譯文請持續關注 掘金翻譯計劃

相關文章
相關標籤/搜索