論深度學習的侷限性

Cup發表於2019-03-03

論深度學習的侷限性

譯者前言

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

正文

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

這篇文章的目標受眾是那些已經在深度學習領域有著一定的經驗(例如,那些已經讀完 1-8 章的人們)。我們預設你已經知道了很多前置的知識。

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


深度學習:幾何角度

深度學習最令人驚訝的地方在於它的簡單程度。十年之前,沒有人會想到我們能夠只是運用梯度下降演算法訓練簡單的引數模型,就能在機器感知方面取得如此巨大的成果。現在來看,你只需要通過梯度下降方法,用 足夠多 的樣例去訓練一個引數 足夠多 的引數模型(就可以取得你想要的結果了)。就如 Feynman 曾經對宇宙的描述一樣,“它並非複雜,只是數量巨大”

在深度學習中,所有東西都是一個向量,換言之,所有東西都是幾何空間中的一個點。輸入的模型(可以是文字,影象等等)和目標都會首先被“向量化”,也就是說,轉化為初始的輸入向量空間和目標向量空間。深度學習模型的每一層都對通過的資料,進行著一次簡單的幾何變換。而合併在一起,鏈在一起的各層模型形成了一個非常複雜的幾何變換,分解成單一的之後又變的非常簡單。這個複雜的變換試圖將輸入對映到輸出,每次處理一個點。這個變換被各神經層的權重引數化,而權重則在每次迭代時基於當前模型的執行狀況進行更新。這個幾何變換的關鍵特徵就是,它必須可導(可微),這樣我們才能夠通過梯度下降演算法學習它的引數。直觀地看,這意味著從輸入到輸出的幾何變換必須是平穩且連續的 —— 這是一個重要的限制條件。

對於輸入的複雜幾何變換過程,可以在 3D 下畫出一個人,在嘗試平整一張捲成球的紙,來達到視覺化的目的:皺起來的紙球代表著模型中的輸入副本。每次人對紙的動作都與每次單個神經層的簡單幾何變換相似。這樣看,平整紙球的一套動作就是整個模型的幾何變換,而當這些動作(幾何變換)連在一起時,看起來會非常複雜。深度學習模型實際上是一個數學機器,將多種高維資料平整化。

這就是深度學習的神奇之處:將“意義”轉變為向量到幾何空間中,並逐漸地學習複雜的幾何變換,將一個空間對映到另一個。你只需要有足夠維度的空間,來獲取原始資料中的所有存在的關係。

深度學習的侷限性

我們可以將這個簡單的策略應用到各個領域。不過,也有很多領域不在當前深度學習所能達到的範圍,即使給它大量的人工註釋過的資料。例如,你可以對一個軟體的特徵進行成百上千次不同的描述,像一個專案經理那樣寫,同時包含相對應的一組軟體工程師開發出來的原始碼來滿足這些需求。即使有了這些資料,你也不能訓練出一個深度學習模型來簡單地閱讀產品描述並生成一個正確的程式碼庫。而這只是眾多例子中的一個。總體上來講,任何需要推理類的程式設計,科學的長時期規劃,演算法類的資料操作都處在深度學習模型之外,不論你給予模型多少資料都沒用。即使讓深度神經網路學習一個排序演算法也是非常困難的。

這是因為一個深度學習模型“只是”一系列簡單、連續的幾何變換,將一個幾何空間對映到另一個。假設 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前端後端產品設計 等領域,想要檢視更多優質譯文請持續關注 掘金翻譯計劃

相關文章