1. 程式人生 > >“GANs 之父”Goodfellow親身傳授:深度學習未來的8大方向和入門AI必備的三大技能

“GANs 之父”Goodfellow親身傳授:深度學習未來的8大方向和入門AI必備的三大技能

近日,被稱為“GANs 之父”的 Ian Goodfellow 在 Quora 上回答網友提問。在問答環節中,Goodfellow 不僅介紹了谷歌大腦(Google Brian)目前正在進行的工作,還詳細闡述了 GANs 目前碰到的各種問題,以及未來的發展方向。作為《Deep Learning》的作者之一,Goodfellow 也對深度學習的未來發表了自己的見解。此外,作為“機器學習大師” Yoshua Bengio 曾經的學生,對於一些大學生、獨立開發者的困惑,Goodfellow 甚至給出了諸如如何選課之類的建議。

以下為 Goodfellow 的回答:


GANs 目前存在的問題及未來


問:谷歌大腦”2017年在做些什麼?

 “谷歌大腦”團隊相當龐大,每位研究人員都有很大的自由來決定自己想做的工作,實現自己的想法,因此很難對我們的工作做一個總結。

你可以在我們的網站上檢視我們所做的研究:Research at Google

(https://research.google.com/teams/brain/)

我們會做基礎研究,改進機器學習演算法;開發計算機系統,驅動機器學習(比如TensorFlow);運用機器學習解決醫療保健、機器人技術以及音樂藝術創作等領域的問題。

我現在所在的基礎研究團隊致力於研究對抗式機器學習。


問:GANs 能夠生成漂亮的名人臉部以及臥室圖片,為什麼它們在其他上千種的類別(ImageNet)上不能做到如此完美呢?

我們其實也不知道。我們曾經以為是類似 Jensen-Shannon 離散定理小值損失函式使然。對於生成模型來說,如果這個模型足夠大,很多損失函式都能夠精確複製訓練分佈。

那麼問題是,當模型不夠大的時候,發生了什麼呢?是不是模型只處理那些實際的樣本,卻放棄了生成類似訓練中的某些類的樣本?還是說模型會盡量包括所有的類別,但有時候一些分類聚在一起會產生模糊、不切實際的樣本? 根據 Jensen-Shannon 離散定理,是前者。

這個問題我們考慮了很長時間,就是這個原因導致了模型崩潰。之後,我又發現了少數不同的損失函式能夠被利用在生成式對抗網路中,比如在資料和模型中間的KL離散值就會更傾向選擇後者。這些損失函式一般不會導致模型崩潰,但問題仍然發生了.

在這之後,我認為模型崩潰是由於學習演算法中的非收斂性。這也就意味著在生成對抗網路中的 Nash 均衡能夠覆蓋所有模型,但學習演算法可能找不到 Nash 均衡。我當時認為有必要設計一個更好的能夠找到 Nash 均衡的可靠學習演算法。在後來的幾個月裡,推理結果顯示,有幾個理由讓我們可以相信現有的演算法本應該能夠找到 Nash 均衡的:  [1706.04156] Gradient descent GAN optimization is locally stable ( https://arxiv.org/abs/1706.04156);[1706.08500] GANs Trained by a Two Time-Scale Update Rule Converge to a Nash Equilibrium(https://arxiv.org/abs/1706.08500)

把這些理論結果闡釋清楚是很重要的,因為我們在實際操作過程中的生成式對抗網路,未必和理論中的假設是相對應的,理論中的那些斷言並沒有“生成式對抗網路一定會達到 Nash 均衡狀態”來的直接,等等。但是把這些理論成果放在一起,確實會降低我對模型崩潰來自於非收斂性上的自信。

最近我在考慮,模型崩潰可能來自我們利用的神經網路的架構。如果我訓練一個自編碼器重新構建 ImageNet 圖片,然後隨機從一個高斯分佈中抽取編碼值並對其進行解碼,所有生成的影象在語義上都是相似的。我本來以為會生成各種各樣的完全不像是訓練資料的不盡人意的圖片。相反,它的模型也崩潰了,儘管根本就沒有進行過任何的 GAN 訓練。

這讓我想到了生成器網路的體系結構,這種結構使它更容易表達包含模式崩潰的函式,而不是對應各種不同樣本的函式。我懷疑我們是否看到了類似於冪函式的東西,在這個方法中,通過矩陣的變換,不停地將一個向量與矩陣的主特徵向量相乘。顯然,生成器網路並沒有像冪函式那樣做,因為每一層都有不同的引數,但是我想知道我們是否忽略了一些相關的影響。

問:什麼情況下,GANs 能夠從任意 ImageNet 類別中生成高質量圖片(不僅僅是名人或者臥室)?

也許,最好的能生成多樣的 ImageNet 分類的 GAN 是輔助分類的GAN:([1610.09585] Conditional Image Synthesis With Auxiliary Classifier GANs - https://arxiv.org/abs/1610.09585)

一定要記住,在訓練流程中利用分類標記來把資料劃分成不同類別的小組,因此,它更像是幾個能夠生成不同種類圖片的 GANs,而不是一個巨大的 GAN,這樣可以避免模型崩潰的問題。

問:一般情況下,對抗性訓練能否有效針對對抗樣本?

通常來講,不是。

一般在訓練中,如果你用優化演算法 X 來建立對抗樣本,那麼模型會適應演算法 X,但在鑑別由演算法 Y 產生的對抗樣本的時候會出現失敗。我和Alexey通過觀察各種各樣的演算法發現了這個影響。

我也聽說有人利用很強大的優化演算法,發現在一些案例中,模型根本無法適應訓練中的對抗樣本。Nicholas Carlini 告訴我,在他進行上千次的迭代的 Adam-based attack 訓練中,發生了這個情況。

最近,Aleksander Madry 發現,在通過隨機重啟進行的梯度上升的對抗訓練中,他遇到了無法打破的一個模型。無論在 MNIST 資料集,還是在 CIFAR-10 上,我認為還存在很大的缺陷。

如果你想嘗試打破 Madry 模型,請看網址:MadryLab/mnist_challenge (https://github.com/MadryLab/mnist_challenge)

問:GANs 會被用於製造簽名和破壞識別軟體的惡行嗎?系統安全專家如何防範 這一問題?

所有的工具都能用來做好事或者壞事。錘子可以用來建造一所房子,不幸的是錘子也可以用來當武器。會有人利用 GANs 來做一些壞事。舉個例子,下面就有一個通過 GANs 來生成惡意軟體的論文:[1702.05983] Generating Adversarial Malware Examples for Black-Box Attacks Based on GAN (https://arxiv.org/abs/1702.05983)

問:對抗學習與強化學習有何不同?他們能像 CNN+RL (卷積神經網路+強化學習)一樣一起工作嗎?

在傳統的機器學習中,有兩個概念:成本和引數,訓練演算法會通過修改引數以降低成本。在對抗式機器學習中,有不止一個“玩家”,每個玩家都有不同的成本和不同的引數。每個玩家只能修改自己的引數,但成本取決於所有玩家。使用對抗性的方法來強化學習是可能的。例如,你可以在對抗樣本中訓練 RL 代理,以便使它的魯棒性更強.[1705.06452] Delving into adversarial attacks on deep policies(https://arxiv.org/abs/1705.06452)

問:對抗式機器學習研究有哪些新的、有趣的研究方向?

防禦對抗樣本是一個非常熱門的課題。如果你想研究這個課題,你可以看看我們的 Kaggle 競賽: NIPS 2017: Targeted Adversarial Attack(https://www.kaggle.com/c/nips-2017-targeted-adversarial-attack/rules)

  • Aleksander Madry 等人發現:使用隨機重啟迭代演算法生成的對抗樣本,對機器學習模型進行對抗訓練,所得模型在MNIST和 CIFAR上的防禦效果非常好。

  • 還有一個熱門課題:如何在不同模型之間更好地轉移對抗樣本(https://arxiv.org/pdf/1611.02770),如何讓對抗樣本騙過應用在現實世界中的模型 ([1602.02697] Practical Black-Box Attacks against Machine Learninghttps://arxiv.org/abs/1602.02697),用相機從不同的距離和角度觀察對抗樣本(Robust Adversarial Examples - https://blog.openai.com/robust-adversarial-inputs/)

  • 我個人的很多工作主要是讓 GAN 更加穩定、可靠且易於使用。

  • 很多人對於如何將GAN用於文字非常有興趣。

  • 隱藏資訊的對抗技術(Generating Steganographic Images via Adversarial Training -https://arxiv.org/abs/1703.00371)

  • 半監督學習的對抗方法([1605.07725] Adversarial Training Methods for Semi-Supervised Text Classification - https://arxiv.org/abs/1605.07725);([1705.09783] Good Semi-supervised Learning that Requires a Bad GAN - https://arxiv.org/abs/1705.09783)

當然,還有很多其他的研究正在緊鑼密鼓地進行,這裡就不列出所有研究內容了。

問:您最喜歡用哪些方法來進行超引數優化?

隨機搜尋——同時利用隨機超引數執行25個工作,選擇其中的最好的2-3個,接著收緊隨機分佈,花更多的時間在最好的工作上。然後再執行新的一組25個工作。

差不多每年我都會嘗試最新流行的超引數優化器,看看它們是否比隨機搜尋更優秀。目前為止,我還沒有發現能夠哪個優化器真正打敗上文提到的隨機搜尋程式。我意識到別人會有不同的體驗,相比大多數人,我傾向使用更多的超引數,因為我正在研究環境中使用超引數優化器。

深度學習的未來

問:深度學習會往哪個方向走? ( https://www.quora.com/What-is-next-for-deep-learning )

 深度學習接下來還有很多工作要完成。我們要做的是朝多個方向向外擴充套件研究工作,而不是隻朝一個方向前進:

  • 更好的強化學習、整合深度學習和強化學習。能夠可靠地學習如何控制機器人的強化學習演算法等。

  • 更好的生成式模型。能夠可靠地學習如何生成人眼無法分辨的影象、語音和文字的演算法。

  • 學習如何學習以及無處不在的深度學習:能實現重新設計自身架構、調整自身超引數等功能的演算法。目前仍然需要人類專家來執行“學習如何學習”的演算法,但是未來這種演算法將更容易部署,各種非專門研究AI的企業都將能夠運用深度學習。

  • 安全之於機器學習,機器學習之於安全:將有更多網路攻擊利用機器學習來生成自主性更強的惡意軟體,造成欺騙性更強的漏洞等。也將有更多的網路防禦利用機器學習做出比人類響應更快的響應,檢測出更隱祕的入侵等。攻守兩方的機器學習演算法將互相欺騙,以實施攻擊或防禦。

  • 活動的動態路由(Dynamic routing)將促使人類構建更大的模型,這種模型處理單一樣本所需的計算可能比當前的模型少。但總體而言,超大量的計算仍將是AI的關鍵;每當我們構建出某個計算量更少的模型時,我們就會想通過並行執行數千個模型來學習如何學習這些模型。

  • 半監督學習和一次性學習將減少訓練多種模型時所需的資料量,並使AI的應用範圍更加廣泛。

  • 未來的研究將側重於構建幾乎從不出錯的超穩健模型,這些模型可應用於安全性至關重要的程式中。

  • 深度學習將不斷融入到大眾文化中,我們將會看到藝術家和流行文化創造者使用它來完成一些我們從未想到的事情。我認為Alexei Efros的實驗室和CycleGAN之類的專案正是這股潮流的開端。

問: 未來哪些機器學習領域將會取代深度學習?

深度學習的定義非常廣泛,我不確定它是否會被替代。

深度學習意味著學習好幾步的處理方法,而不是僅學習一步。從這點上講,相對於淺顯的演算法,深度演算法的數量未來會激增。

在2006年至2011年間,深度學習非常流行,但深度學習通常意味著要把無監督的學習演算法堆積起來,以此來為監督式學習來定義複雜的特徵。

從2012年開始,深度學習通常意味著通過反向傳播來優化具有可微分函式的深度計算圖表中的所有引數。

從目前來看,我們很快就會擁有更具有貝葉斯特性的演算法(而不是建立在對最好引數的一個點估計值),這些演算法會運用更多不可微分的操作,等等。當我們停下來思考這還算不算的上“深度”的時候,我們可能仍然認為這就是“深度”。

我認為我們將來不會太重視“深度學習”和其他學習演算法的區別,深度學習早已經被大家接受了。

問:在未來的 5~10年內,您最期待看到 AI 領域發生哪些變化?

不同的人期待的也不一樣,我個人更渴望看到:

  • 能產生對抗式樣本的一個有力的防禦,能夠在像ImageNet一樣的真正的資料集裡起作用。

  • 對抗式樣本能夠理論化,類似於我們目前知道的關於一般監督式學習的知識。(比如 NFL原理、VC 理論,等等)

  • 生成式的模型能夠起到真正的作用。

  • 高效的樣本學習演算法能夠像人類一樣,可以從很少的標記樣本中學習。

給大學生和獨立研究人員的建議

問:大二學生該如何學習人工智慧?

如果你有志向,可以試著動手學習並參加我們的對抗樣本競賽:NIPS 2017: Non-targeted Adversarial Attack(https://www.kaggle.com/c/nips-2017-non-targeted-adversarial-attack)

  • 參加線性代數和概率論課程。

  • 參加教你如何編寫適合現有硬體執行的FastCode的課程。這些課程多為硬體設計課程,而不是程式設計課。如果找不到這類課程,你可以向你的學業導師尋求幫助。

  • 參加教你如何編寫高效能、實時多執行緒的程式碼的課程。有時這個課題會被歸在另一課程中,如作業系統開發或遊戲開發。

  • 閱讀《Deep Learning》(http://www.deeplearningbook.org/)

  • 選擇一個你感興趣的簡單深度學習專案。如果你對在自身愛好或課程專案中應用深度學習沒什麼想法,你可以選擇一些普通的專案,例如在TensorFlow中從零開始構建SVHN分類器。在完成這個專案的過程中,如果你對讀過的關於深度學習的材料有疑問,試著在你的專案資料集中執行試驗,通過這種方法來弄清楚這些問題。

  • 如果你的大學開設有機器學習、計算機視覺、自然語言處理和機器人學等課程,一定要參加。

  • 申請“谷歌大腦”專案實習。

問:你會鼓勵其他領域的人(比如機械工程)來學習 ML (機器學習)嗎?

是的,當然會。

比如我崇拜的英雄之一——Geoffrey Hinton,他的博士學位就是實驗心理學。

在我看來,在機械工程學中,你會學習很多在機器學習中經常用到的數學工具,因此你不會從零開始。

總之,我們經常發現當一個人帶著從其他領域產生的新的想法來到這個領域的時候,這個領域會發生革命性的變化。

問:沒有任何技術背景的人如何學習 ML?

掌握一些基礎知識還是很重要的,比如線性代數、概率論和Python程式設計。

但你也不需要知道所有線性代數的知識(出了校園以後,我再也沒用過QR分解),所有的概率論的知識(關於組合學、深度學習中的序列重排序我們用的也不多),或者所有的Python程式設計知識(很多比較晦澀的語言特徵實際上被許多公司禁用了)。

想要入門,最好先學習足夠的線性代數、概率論和Python程式設計,只用Python和numpy,你就可以自己進行邏輯迴歸。

我認為如果你能讀懂《Deep Learning》的1-5章,你就能夠學會那個工程中除了Python程式設計之外的所有知識。這是否可行,我也不是很清楚,因為我很難從一個沒有任何技術知識的角度去想這件事。很明顯,想要從零開始吸收那麼多的知識,你需要很大的耐心和付出,但我們會盡量在書中提供更多的細節讓你達到這個目的。

問:您最想推薦哪10本書?

  1. 首先我會推薦我、Yoshua 和 Aaron 合著的《Deep Learning》。

  2. Chris Bishop 的《Pattern Recognition and Machine Learning》

  3. Daphne Koller 和Nir Friedman 的《Probabilistic Graphical Models》

  4. Stuart Russel 和Peter Norvig 的《AI: A Modern Approach》

  5. Thomas H. Cormen 的《Introduction to Algorithms》

  6. Gayle McDowell 的《Cracking the Coding Interview》

  7. Douglas Stone 等人合著的《Difficult Conversations: How to Discuss what matters most》(The social side of an AI career is extremely important too!)(AI事業的社會面也極其重要!)

  8. A.N. Kolmogorov 和 S.V. Fromin 的《Elements of the Theory of Functions and Functional Analysis》

  9. 如果你對生成式模型或計算機視覺感興趣: Natural Image Statistics http://www.naturalimagestatistics.net/

  10.Georgi E. Shilov 的《Linear Algebra》

問:獨立學習者或研究人員如何與 Google、Facebook 或 OpenAI 等大公司、大機構在深度學習領域一較高下?

在“谷歌大腦”(Google Brain),我們經常思考如何選擇與他人不同、真正值得做的專案。我在OpenAI 任職期間,這家公司也將選題作為自身戰略的重要部分。

全世界對 AI 的廣泛關注,意味著AI研究已從優化轉為博弈論。過去,研究人員可以選擇研究他們所認為的好課題。現在,重要的是預測其他研究人員會研究什麼,並選擇一個可以帶來獨特優勢的課題。