解讀|通過拳擊學習生成對抗網路的基本原理
機器之心編譯
參與:Jane W、晏奇、吳攀
生成對抗網路(GAN)近來在研究界得到了很大的關注。在這篇文章中,Waya.ai 的創始人 Michael Dietz 介紹了 GAN 如此大有潛力的原因,並且通過 GAN 與拳擊比賽的生動比較對 GAN 的工作方式進行了闡釋。
生成對抗網路(GAN)由兩個獨立的網路組成,即生成器(generator)和判別器(discriminator)。GAN 將無監督學習問題作為這兩者之間的博弈。在本文中,我們將看到為什麼 GAN 有這麼大的潛力,並且通過 GAN 與拳擊比賽的比較來對其進行闡釋。
生成對抗網路和拳擊比賽沒什麼不同
深度學習背後的原理
深度學習源於生物學的啟發,因此許多深度學習主要概念都是直觀的和基於現實的。深度學習的基本原理是層次性架構 —— 層次不僅指網路中的層,還有它們建立在彼此之上的學習到的表徵。實際上,我們的現實世界也是如此:電子、質子、中子 → 原子 → 分子 →……通過層次化的方式來對層次性的世界建模是順理成章的,這就是為什麼深度學習使用簡單、優雅和通用的方法就已經能夠如此成功地解決非常困難的問題。
可視化由深度卷積神經網路學習的層次結構和表徵
激勵無監督學習
「對抗訓練是有史以來最酷的東西。」—Yann LeCun,Facebook 人工智慧研究部門主管、紐約大學教授
現在讓我們將這個生物學的靈感應用到目前訓練網路的方法上。監督學習(supervised learning)是目前機器學習的基本方法 —— 即對於每個數據樣本,訓練中都需要一個真實的注釋/標籤。但現實世界中大多數學習是無監督學習完成的。只要想想我們如何學習走路、談話等……雖然有監督學習在許多任務上表現良好,但無監督學習似乎才是真正的人工智慧的關鍵。
準確的數據標籤通常是不切實際的。理想情況下,可以對無標籤數據進行無監督的模型訓練,然後使用足夠小的標籤的數據集進行微調。回到層級世界的觀點,應該有可能訓練人工智慧了解世界的基本構建塊,然後在現有的知識庫之上進行開發,然後以更監督式的方式對特定用例進行微調 。
無監督學習 —— 一個具體的例子
我們通過訓練數百萬未標記的皮膚圖像來構建一個卷積神經網路。這些圖像中,一些是健康的皮膚,另一些是患病的皮膚,還有一些介於患病和健康之間。最終,神經網路將通過學習而獲得對皮膚及其複雜性的深入理解。構建網路之後,就可以使用該網路處理具體的實例(如即時準確地診斷皮膚癌)。
由於該模型已經學會皮膚圖像中包含的最重要信息的通用、有效的表徵,因此相比於僅使用監督式方法進行訓練,模型應該僅使用更小的標籤數據集就能快速學習診斷皮膚癌的新任務。這是遷移學習(transfer learning)和微調(fine-tuning)的基本概念。
GAN 是無監督學習中最有希望的研究領域之一,我們將看到它們是學習大數據表徵的簡單且有效的方法。
理解 GAN
讓我們從細節講解 GAN 的基本組成部分:
數據:從數學上講,我們將數據集看作是從真實數據分布抽樣出的樣本。這些數據可以是圖像、語音、感測器讀數等。
生成器(generator):將一些代碼(即隨機雜訊)作為輸入,將其轉換並輸出數據樣本。生成器的目標是最終輸出服從真實數據分布的不同數據樣本。
判別器(discriminator):將數據樣本作為輸入,並將其分類為真實的(來自真實數據分布)或偽造的(來自生成器)。判別器的目的是能夠高精度地分辨真實的和生成的圖像。
標準 GAN 的整體目標是訓練出能夠生成服從真實數據分布的不同數據樣本的生成器,使得判別器只能有 50% 的概率將圖像分類為真實的/生成的。在訓練這個網路的過程中,生成器和判別器都會學習源數據的強大的層次化的表徵,然後可以將其遷移到各種特定任務(如分類、分割等……)和應用案例。
理解 GAN 的訓練過程
下面的偽代碼可能會令你感到困惑,所以我們將緊接著用一個簡單的真實的對抗學習(adversarial learning)過程例子來展示它。
while equilibrium_not_reached:
無論是否意識到,我們都非常熟悉 GAN 和對抗學習的一般概念。例如,試想學習在吉他上彈奏歌曲:
聽歌曲 —— 弄清楚如何將歌曲映射到吉他上(上面的訓練過程中的第1步)
嘗試彈奏歌曲 —— 聆聽彈奏的內容,並注意與實際歌曲的不同之處(第2步)
再次彈奏歌曲 —— 試圖解決這些差異(第3步)
我們添加一些變化並重複這個過程,其中將步驟2和步驟3合并,並且將步驟1的結果部分儲存在內存中,並在儲存結果(記憶)需要改進的時候重新訪問它,直到我們能夠開心地彈奏出足夠接近真實歌曲的聲音。
因為你已經成為了一個更有技巧的吉他手,你可以學習新的歌曲,你可以僅需要一點練習就學會彈奏以前從未聽過或彈奏過的歌曲(即遷移學習(transfer learning)/微調(fine-tuning))。
在這個例子中,歌曲就是數據,我們的耳朵/大腦是判別器,我們的手/大腦是生成器。這可能類似於我們如何學習行動、說話等……更進一步,想像聾啞人說話的情形 —— 這聽起來很有趣,因為他們沒有判別器來促進對抗學習(也許他們可以選擇其它提示(如人們的反應)來作為一種弱的判別器)。
現在我們已經對 GAN 建立了一些直觀的認識,讓我們來看看如何在軟體中實現它們。我們需要考慮現實中的 GAN 與軟體之間的相似點和差異點。舉例一個差異,現實中發生的對抗學習過程在生成器和判別器之間看起來是協同的,而 GAN 的軟體實現看起來是對抗性的(……就像拳擊比賽)。
訓練 GAN —— 生成器和判別器之間的拳擊比賽
Creed 是判別器,Rocky 是生成器。叮……叮……開打啦!
乍一眼看上去,判別器似乎是教練,生成器是拳擊手。但事實上它們都是拳擊手,而真實的數據實際上是教練。唯一的不同是只有判別器可以直接訪問數據。
The discriminator is a boxer that learns from a coach (the larger the real dataset, the more experienced the coach) while the generator is a boxer who can only learn from his sparring partner (the discriminator). 判別器是從教練學習的拳擊手(真實的數據集越大,教練越有經驗),而生成器是只能從它的對手(判別器)學習的拳擊手。
在上述訓練過程的第1步中,判別器由它的教練通過沉重的沙袋訓練一輪。教練指出它技術的不足並且促使判別器適應。在第2步中,判別器觀察生成器打一輪拳擊,研究生成器並相應準備其即將到來的一輪拳擊比賽。
泄漏的拳擊鏡頭畫面意味著對手有更多的材料來學習和準備。
現在第3步,拳擊比賽!生成器是來自費城的一個好鬥的拳擊手,它在拳擊的時候放鬆和專註,研究判別器的每一個動作和錯誤並從中學習 —— 在每輪之後適應。判別器討厭拳擊,每當它完全沒有學習到任何東西的時候,它也很害怕和緊張。判別器也許比生成器更具有運動天賦(將數據分類為真實/假的比實際生成數據更容易),但是生成器的心態有助於進行比賽。即使生成器沒有教練(無法訪問真正的數據集),但它從判別器中學到了很多東西,因為它吸取了它的教練所教的基本特徵。
持續這個過程,幾輪下來後,直到最終判別器和生成器都成為全能的拳擊手,並為比賽做好準備。教練已經教了它所知道的比賽的每一個重要細節,生成器和判別器在它們的拳擊比賽中相互學習了很多。理想情況下,它們在訓練結束時都是一樣的,它們之間比賽的勝敗幾率是50/50。
困難
當你深入研究GAN時,你會看到我們目前所面對的一個主要困難,即訓練這些網路以讓其較好地收斂——我們想讓生成器與判別器能夠達到我們所希望的平衡,但是通常都不太會實現。關於會發生怎樣的錯誤可以參見這個網址,在裡面你可以查閱很多信息與相關研究:https://www.quora.com/Do-generative-adversarial-networks-always-converge 。下面這個網址提供了越來越多如何應對這些問題的信息:https://github.com/soumith/ganhacks。
以下突出強調幾個最普遍的GAN失敗的例子:
判別器變得過於強大、迅速,導致生成器結束訓練時學不到任何東西。在我們拳擊類比中,這就像是判別器變得太強以至於生成器完全在被吊打。由於判別器(相對於生成器)不會犯任何錯誤也不會給生成器留下任何可匹敵的空間,所以生成器無法學到任何東西。理論上這意味著,在上述訓練步驟3中,判別器非常精準且自信地把生成的數據分類為假,以至於在對生成器所學習的判別器反向傳播損失函數梯度(discriminator』s back-propagated loss function gradients )中沒有任何東西。
生成器僅會學習判別器非常特定的弱點,然後利用這些弱點來欺騙判別器以使判別器將數據分類為真,而不是學習去描繪真實的數據分布。這在理論上的解釋可以參見:http://www.kdnuggets.com/2015/07/deep-learning-adversarial-examples-misconceptions.html 。在我們拳擊類比中,這就像是生成器僅學到了關於判別器非常有限的弱點,然後儘可能地利用那些弱點而不是去好好學習關於拳擊的基礎和技巧。在對陣一個沒有同樣缺點的對手時,生成器會變得毫無用處!並且判別器從生成器中學到的任何東西都也會變得沒有用處,因為在真實的比賽中判別器的對手不會表現得像生成器這般無用。
生成器僅學習了真實數據分布中非常小的一個子集。在我們的拳擊類比中,這就像是我們的生成器僅學會了出拳猛擊和躲閃——而沒有發展出任何其它工具和技巧。這將會導致判別器從生成器那裡僅能學到非常少的東西,並且使得判別器過分重要地去表示這數據分布的小小的子集。在實踐中發生的一個例子即:對每個可能的輸入,生成器都生成同樣的數據樣本,並且其輸出數據沒有任何變化。
以上的類比是一項正在進行的實驗,未來我們會添加更多相關信息。
結論
既然我們已經對GAN有一個基礎性的了解,那麼讓我們現在重新審視一下其目標:從非標記的數據中學習強大的表徵(例如:從原始數據中獲取我們的數據,學習在一個小得多的範圍中去表徵其最重要的特徵 →實現理想的表現所需的有標註數據更少)。
在訓練一個GAN之後,目前大多數方法將判別器用作遷移學習基本模型以及對生產模型的微調,亦或是將生成器用作訓練生產模型的數據源。在我們的拳擊類比中,這意味著判別器拿到了他的拳擊執照並且競爭對手生成器沒有拿到。很不幸,因為生成器看起來是有潛力成為一個更好的拳手的。他要麼被解僱,要麼就只能作為一個生產模型的陪練。
我所無法創造的,我也無法理解。
一個訓練得很好的生成器很好地學習了真實的數據分布,它可以從一個小得多的輸入範圍中生成屬於它的樣本。這意味著它發展出了極其強大的數據表徵能力。能夠在生產模型中直接利用生成器所學到的東西就好了,但目前似乎還沒有任何能夠做到這一點的方法。如果有,請評論告知。
欲知標準GAN清楚且簡單的實現(和其它類型的GAN,如InfoGAN和ACGAN)參閱:
GAN 沙盒:基於Keras/TensorFlow實現的Vanilla GAN——可實現快速實驗和研究:https://github.com/wayaai/GAN-Sandbox
這裡有幾類可生成極為有價值生成器的GAN,儘管它們也還是「陪練」:
SimGAN:無監督學習和自動駕駛等中的變革者:https://medium.com/intuitionmachine/simgans-applied-to-autonomous-driving-5a8c6676e36b
※「冷撲大師」強勢戰贏人類牌手,博弈論落地商業應用有幾分可能
※基於TensorFlow的簡單故事生成案例:帶你了解LSTM
※業界:開源硬體挑戰 GPU 計算極限
TAG:機器之心 |