從生成對抗網路到更自動化的人工智慧
「What I cannot create, I do not understand.」 這是著名物理學家費曼的一句名言。把這句話放在人工智慧領域,可以理解為:要想讓機器真正理解某樣東西,就得讓它學會如何創造那樣東西。近年來,深度學習研究可謂如火如荼,特別是在計算機視覺領域,深度學習演算法在人臉識別和物體分類等應用上已經超越了人的分辨力。那麼,機器在圖像理解方面真的足夠智能了嗎?套用費曼的那句話,如果機器學習演算法能夠生成逼真的圖像,那它就應該真正理解圖像了吧?然而,機器學習演算法在生成圖像的能力上還很不理想,只能生成很模糊的、缺乏細節的圖像。幸運的是,隨著生成對抗網路(Generative Adversarial Net, GAN)的出現,生成式模型迎來了一個美好的春天。
什麼是生成對抗網路
生成對抗網路是伊恩·古德費洛(Ian Goodfellow)在2014年提出的。他最早想要解決的問題是如何生成高質量的人工數據集以彌補真實數據的不足,跟「對抗」沒有半點關係。當時,他遇到的難點是如何衡量生成的數據的質量。簡單的辦法是希望生成的數據與真實數據儘可能相似,也就是用L1範數或L2範數作為損失函數;又或者直接簡單地在兩個真實樣本之間插值產生樣本。但古德費洛又發現,這些方法的效果都不理想,於是就想到訓練一個神經網路來判別生成樣本的好壞。他用一個生成器生成假樣本,用另一個判別器去區分真假樣本,這就是GAN的雛形。在訓練的過程中,生成器努力地欺騙判別器,而判別器努力地學習如何正確區分真假樣本,這樣,兩者就形成了對抗的關係——至此,也就產生了生成對抗網路。隨後,各種關於GAN的論文如雨後春筍般破土而出。
具體而言,一個GAN主要包含兩個獨立的神經網路:生成器(Generator)和判別器(Discriminator)(見圖1)。生成器的任務是,從一個隨機均勻分布里採樣一個雜訊z,然後輸出合成數據G(z);判別器獲得一個真實數據x或者合成數據G(z)作為輸入,輸出這個樣本為「真」的概率。
GAN的目標函數如公式1所示。D(x)表示判別器認為x是真實樣本的概率,而1-D(G(z))則是判別器認為合成樣本為假的概率,取對數相加就能得到公式1的形式。訓練GAN的時候,判別器希望目標函數最大化,也就是使判別器判斷真實樣本為「真」,判斷合成樣本為「假」的概率最大化;與之相反,生成器希望該目標函數最小化,也就是降低判別器對數據來源判斷正確的概率。
雖然「對抗機制」很巧妙地讓我們免去了設計複雜目標函數的煩惱,但GAN也存在一些問題。實際應用中,由於生成器的更新依賴於判別器,所以,如果判別器學習得不好,生成器也會學習得不好。為了緩解這個問題,在實際訓練中,我們常常讓判別器更新若干次之後,再讓生成器更新一次。即便如此,GAN的訓練過程還是非常不穩定,而且生成的數據的多樣性仍不如真實樣本,此謂「模式收縮」(mode collapse)。後來,研究者們通過一系列的理論研究,發現導致訓練不穩定以及模式收縮的主要原因是,最早的GAN中對真實分布與模擬分布的距離度量方法不合適,於是提出用更平滑的度量來代替原來的方法,進而提出了WGAN-GP[1]等方法。其中的數學推導較複雜,有興趣的讀者可以自行閱讀原論文。
GAN帶來了什麼改變
GAN從提出到現在不過三年時間,但是與之相關的論文已經是浩如星海。從很多計算機視覺領域的論文里我們可以發現,往往在舊的方法基礎上加一個判別器,套上對抗機制,也能取得比原先要好的效果。而對GAN為什麼能取得更好的效果,學術界仍沒有統一的意見和完備的解釋。以圖像生成為例,一個比較普遍的解釋是,之前我們在圖像生成式模型中使用的基於L1範數和L2範數的損失函數,過於注重生成樣本與真實樣本「像素級」的一一對應,而且最後經過均值以後每個像素的誤差都變成一樣,導致生成的圖像比較模糊。即使以L1範數做損失函數比L2範數更接近稀疏解,理論上會比基於L2範數的方法獲得更銳利的圖像,但生成圖像的質量仍然不理想。
GAN有什麼特別之處呢?正如古德費洛最早的靈感是設計一個神經網路來判斷生成樣本的好壞一樣,GAN的最大的優勢來自於判別器的引入,讓我們不用費盡心思為一些難以直接用數學公式衡量好壞的任務設計目標函數。例如,在計算機視覺領域有一個研究熱點是風格遷移,可把自拍照轉換成卡通風格,或把風光照轉換成符合某個畫家畫風的圖像等等。在這類應用中,很難用數學公式直接衡量生成的圖像的風格是否合適,而如果要用基於範數的損失函數則需要大量成對的標註數據。但有了GAN,我們就可以讓判別器來學習判斷圖像的風格。因為判別器學習的是圖像風格而不是圖像里的物體,所以只需要符合同一種風格的圖像就能訓練,不需要對應圖像中的物體。在自然語言處理的任務中也類似,例如在聊天機器人方面,採用基於範數的損失函數可能會讓機器人固定地針對某些問題產生某些固定答案,這是過擬合的表現。而實際上,我們知道同一個意思有很多種表達,想要讓機器人學會用不同方式來表達同一個意思,就可以利用GAN。因此,GAN最大的魅力就在於這種對抗機制的普適性,相信它會在很多目標函數複雜的研究領域取得突破性進展。
雖然對抗機制給我們帶來了很多便利,但它也有明顯的缺點。在很多複雜的圖像生成任務上,GAN的表現並不如人意,例如它會經常生成扭曲的人體。反觀基於範數的方法,即使生成複雜的圖像也能保證物體基本輪廓的正確。這種區別主要來自於範數目標函數是對每個像素操作的,把生成圖像與真實圖像的像素一一對應上,也就相當於約束了物體的輪廓;而GAN則對圖像整體做判斷,並沒有對物體輪廓做約束。所以現在用GAN做圖像生成的模型,在訓練生成器的時候會加上一個L1或者L2範數的損失函數。實驗結果表明,這樣做確實會比單純使用對抗目標函數效果更好。
除此之外,GAN實際上是一個統一了生成式模型與判別式模型的框架。一般而言,我們用GAN是為了用它的生成器生成以假亂真的數據,所以我們通常把它歸為生成式模型。而實際上,它的判別器也是一個判別式模型,能夠在一些特定的任務中體現它的價值。最近SIGIR會議的最佳論文IRGAN,就是利用GAN把信息檢索(information retrieval)領域的生成式模型和判別式模型結合起來。在信息檢索領域,通常有兩種流派,即生成式模型和判別式模型。生成式模型做的是,給定一個問題(query),輸出與它最匹配的文檔(document);而判別式模型,是輸入一個問題和文檔對,輸出兩者匹配的程度。可以看到,GAN的框架很直接地把二者聯繫起來了:生成模型的輸出就是判別模型的輸入,判別模型的輸出又能促進生成模型的學習。
GAN在計算機視覺上的應用
目前GAN的最基本的應用就是生成以假亂真的圖像。圖像生成的任務主要分兩種,第一種是生成某種類別的圖像,第二種是根據用戶的描述生成符合描述的圖像。目前,第一種圖像生成的任務已經取得了很好的效果,例如2016年發表的PPGN[2]模型,在視覺效果上已經取得了行業頂尖的效果(見圖2),其生成的火山圖像整體上已經可以達到以假亂真的效果。而根據描述生成圖像的任務,目前達到的效果還差強人意。這個任務的難點在於,生成器並不是學到了如何生成每個物體之後把它們組合起來,而是嘗試一次到位生成整張圖像,這與人類繪畫的過程不一樣。GAN根據文字生成單個物體的圖像效果很不錯,但在多物體的複雜圖像上效果就差得多,有時候甚至難以分辨生成的圖像內容。如圖3所示,根據文字生成的圖像能夠讓人分辨出大概的內容,但如果不看文字的話,圖第一行右邊兩張圖還是會讓人摸不著頭腦。可見,在文字轉換為圖像這個領域,還有非常大的研究空間。
另一種很熱門的應用是圖像轉換(image-to-image translation),圖像風格遷移只是其中一小類而已。具體而言,圖像轉換可以包含很多種,例如把一張夏天的圖像轉換成冬天的樣子,給用筆畫的物體輪廓填上彩色的細節紋理,給手機拍攝的照片自動虛化使之看起來像單反相機拍攝的一樣,等等。今年初發表的CycleGAN[3]模型就是利用了對抗機制與範數損失函數結合的辦法,加上類似對偶學習(dual learning)的對偶模型設計,使得模型能夠在無標註的數據集上取得良好的表現。圖 4為CycleGAN模型圖像轉換的例子,其中普通馬與斑馬的相互變換讓人印象深刻。除此之外,圖像轉換還包括人臉變換,可以把不笑的人臉變成笑臉、給人帶上或摘下眼鏡、改變髮型等,可見GAN有希望結合到眾多手機P圖軟體裡面進一步豐富軟體的功能和趣味性。圖5為IcGAN[4]模型對人臉做變換的例子,從黑髮變金髮、從直發變爆炸頭、把微笑變成露齒笑甚至改變性別,不得不讚歎GAN的神奇力量猶如鬼斧神工。
GAN還可以應用於圖像描述,即給圖像配上一段詳細的描述。這個任務上也很能體現GAN的優勢:在我們描述一張圖像的內容時,由於著眼點不同,可以有不同的描述,而以往的模型對於一張圖只能生成一個固定描述。最近的一篇論文提出的RTT-GAN[5]模型則實現了上述「看圖寫作」的能力:給出一張圖以及對圖中一些物體的簡短描述,模型會生成一段連貫的篇章,而用戶可以通過控制先描述的物體來改變圖像中物體的描述順序,從不同的描述中體會到不同的觀測視角,如圖6所示。
GAN在自然語言處理上的應用
與生成圖像相比,生成文本的難度要大得多,因此,GAN在自然語言處理上的效果並不理想。例如,當判別器返回的梯度是+1時,我們能夠直接更新像素,這種更新反映在圖像上是有意義的。但在自然語言方面,一個詞+1是什麼意思呢?也許我們可以規定「iPhone6」+1=「iPhone7」,但對於多數詞而言,不存在這種規則。即使通過詞向量(word embedding),在高維空間裡面,向量的分布也是很稀疏的,一個詞向量加減一個數很可能對應不上其他任何詞的向量,這樣的更新對生成器的學習也就沒有幫助。但之前我們提到的圖像描述又是怎麼做到的呢?
要想訓練GAN生成文本,不得不提到強化學習中的策略梯度方法。這是一種基於蒙特卡洛搜索的方法:模型在生成下一個詞之前,會生成一個字典大小的多項式概率分布。假設搜索寬度是d,那麼就從這個多項式分布里隨機抽取d個詞,以此類推直到生成長度達到限制n或者出現句尾符。我們再把生成的這些句子放到判別器里獲得對應的分數,之後再通過反向梯度從後往前更新每次生成的多項式分布以及前面的神經網路參數。在GAN中使用策略梯度的方案,最早出現在去年的SeqGAN模型中,後面用GAN做自然語言處理的研究也基本沿用了這套方案。
GAN在自然語言處理方面的論文主要涉及的是人機對話、機器翻譯、問答等。
GAN是人類走向人工智慧的一大助力
人類對人工智慧的追求從未止步。從傳統的機器學習到如今的深度學習,人類已經能夠在某些任務上創造出具有自我決策能力的「智能體」,如大家耳熟能詳的圍棋大師AlphaGo。在早期的傳統機器學習時代,人們需要精心設計如何從數據中提取有用的特徵,設計針對特定任務的目標函數,再利用一些通用的優化演算法來搭建機器學習系統。在深度學習崛起之後,人們很大程度上不再依賴於精心設計的特徵,而讓神經網路去自動學習有用的特徵。但針對具體任務,我們還是需要設計具體的目標函數以約束模型的學習方向 ,否則學習出來的模型所做的事可能並不是我們原來所設想的那樣。但是,自從有了生成對抗網路,我們在很多場景中不再需要精心設計的目標函數了,而是讓判別器自己學,效果會更好。如圖 7所示,從傳統機器學習到深度學習,我們讓特徵學習自動化了;生成對抗網路的出現,進一步把目標函數的學習也自動化了。再加上去年穀歌提出的一種利用神經網路讓深度學習模型學會優化自身的演算法learn2learn[6],把最後一步優化也給自動化了。人工智慧演算法從理論上可以完全實現從輸入到輸出的自動化,它的下一步發展,應該是能根據不同任務自動設計神經網路模型的演算法了,讓我們拭目以待。
參考文獻:
[1] Gulrajani I, Ahmed F, Arjovsky M, et al. Improved training of wasserstein gans[OL]. (2017). arXiv preprint arXiv:1704.00028.
[2] Nguyen A, Yosinski J, Bengio Y,et al. Plug & play generative networks: Conditional iterative generation of images in latent space[OL].(2016). arXiv preprint arXiv:1612.00005.
[3] Zhu J Y, Park T, Isola P, et al. Unpaired image-to-image translation using cycle-consistent adversarial networks[OL]. (2017). arXiv preprint arXiv:1703.10593.
[4] Perarnau G, van de Weijer J, Raducanu B, et al.[OL]. (2016). Invertible Conditional GANs for image editing. arXiv preprint arXiv:1611.06355.
[5] Liang X, Hu Z, Zhang H, et al. Recurrent Topic-Transition GAN for Visual Paragraph Generation[OL]. (2017). arXiv preprint arXiv:1703.07022.
[6] Andrychowicz M, Denil M, Gomez S, et al. Learning to learn by gradient descent by gradient descent[C]//Proceedings of the Advances in Neural Information Processing Systems. 2016: 3981-3989.
推薦閱讀:
※首個72量子比特的量子計算機問世,谷歌出品
※阿里巴巴與清華大學成立聯合實驗室,探索下一代人機自然交互
※你知道高手是如何玩弄人工智慧的嗎?
※斯坦福CS231n項目實戰(二):線性支持向量機SVM
※AI將腦電波轉化為圖像
TAG:人工智慧 |