深度學習的16堂課:電腦中的假臉是怎麼來的?
許多人想要了解深度學習的原理,也想要進一步把深度學習應用在自己感興趣的領域。對連深度學習概念都還一知半解的初學者而言,艱澀的理論或公式入門書勢必讓人感到徬徨與壓力,如果只是想要初步了解深度學習的用途與概念,也許用一個簡單的實際例子來快速上手,會是很有效率的途徑。
自從網際網路和各式行動裝置普及後,每天都有超過一百萬TB的數位資料產生,其中有一大部份是數位影像資料。大量的數位影像資料如果經過適當的自動化處理、抽取出其中的資訊,就能成為貼心的服務、發揮出數位資訊驚人的妙用。一起來看看有哪些熱門的應用吧!
對抗式生成網路 (GAN) 的源起
在 Google 位於蒙特婁的辦公室下方開著一間名為 Les 3 Brasseurs (此為法文, 意思是「3 個釀酒師」) 的酒吧。2014 年,來自Yoshua Bengio實驗室的博士生 Ian Goodfellow在此構想出了一個能夠製造逼真圖片的演算法,該技術也被深度學習代表性人物 Yann LeCun評為近幾年深度學習發展中最重要的突破之一。
在此,Goodfellow的朋友向他描述了一種自己正在研究的生成模型(generative model),此模型的目的是生成沒有出現過的東西,例如:一句模擬莎士比亞 (Shakespeare)風格的假名言、一段旋律、或是一件抽象的藝術品等。Goodfellow的朋友想要開發的模型是能生成跟照片一樣逼真的圖片,例如:人臉的肖像。在傳統的機器學習方法中,想要讓這樣的模型有好表現,開發人員必須對重要的臉部特徵進行模擬,評估這些特徵之間的相對位置應該如何安排。在當時,此領域一直沒什麼進展,生成出來的臉要不是非常模糊,就是鼻子或耳朵不見了。
或許是啤酒激發了Goodfellow的創意,他提出了一個革命性的點子:將兩個神經網路組合成一個深度學習模型,並且訓練這兩個網路彼此互相競爭。如下圖所示,其中一個神經網路負責生成假圖片,而另一個神經網路則像鑑定師一樣負責辨識圖片的真假 (編註:辨識的時候會混入真圖片讓該網路一塊辨識),簡言之希望藉由兩個敵對神經網路的對抗,使彼此的能力不斷提升。
當生成器網路(generator)製造的假圖片愈來愈像真的,鑑別器網路(discriminator)就必須進化出更好的鑑定能力,而這又會促使生成器網路生成更加精良的假圖。最後,這樣的循環就可以讓模型生成出風格與原始訓練圖片十分接近的假圖。更棒的是,Goodfellow的方法可以讓開發者免去手動將圖片特徵輸入生成程式中的麻煩,就像我們在前2章不斷提到的,深度學習模型可以自動地萃取出物體的特徵。
為了印證這個對抗式網路的可行性,Goodfellow 開始挑燈夜戰,努力設計出一個雙神經網路的 GAN 模型,結果,這個模型第一次運作就很成功,之後陸續產生其他變體,令人驚嘆的對抗式生成網路家族(GANs)就隨之誕生了!
同年,Goodfellow便和他的同事在權威的 NeurIPS 大會向全世界發表了GAN,底下的 圖片就是他們展示的一部分成果:
圖 3.2:Goodfellow 與同事在 2014 年 GAN 的論文中提出的研究成果
(a) 生成手寫數字圖片
(b) 生成人臉照片
(c)、(d) 生成飛機、汽車、狗等十種不同的照片。其中 (c) 要比 (d) 清楚,因為前者是用特別為機器視覺所設計的卷積層 (第 10 章會介紹),後者所用的是較普遍的神經層。
經由「計算」生成假的人臉
繼 Goodfellow 之後,由美國機器學習工程師 Alec Radford 領導的研究團隊進一步在 GAN 中加入了一些設計,成功生成更逼真的圖片,該團隊以深度卷積對抗式生成網路 (Deep convolutional GAN)生成了下圖最右邊的假人臉:
具體的產生人臉做法是在潛在空間(latent space)做一些運算處理,我們先來認識潛在空間是什麼吧!
潛在空間(latent space)
與其講一些很深奧的理論,不如直接看個例子!底下的圖就展示了一個三維潛在空間:
上圖所展示的三維潛在空間可能會讓你想起三維詞向量空間,兩者的確有非常相似的地方:
1.為了方便理解,上圖只畫了三個維度,但是潛在空間事實可以是N維的,通常都會有上百個維度。第14章我們實作的GAN範例就會用上100維的潛在空間。
2.若兩個點在潛在空間中的位置越接近,則此兩點所代表的圖片也就越相似。
3.跟詞向量空間一樣,在潛在空間中朝特定方向移動也是有意義的,以上圖為例:
- z 順著 x 軸的箭頭代表人臉有沒有戴眼鏡。
- z 順著 y 軸的箭頭移動會看到年齡的變化。
- z 順著 z 軸的箭頭移動則代表性別的變化。
以 y 軸代表的年齡為例,只要延著y取樣(sampling),取樣出來的點就會是同一個人在不同年齡的長相。簡言之,從上圖可發現,潛在空間是由代表不同意義的軸所構成,資料會依不同關聯性分布在各位置,這跟第 2 章的詞向量空間是完全一樣的概念。
最後,如果你想見識實務上真正的 GANs 的威力, 可連上 http://bit.ly/InterpCeleb 這個 Youtube 網址看看 GANs 所生成的一系列假名人、假車、及建築物照片;你也可以連上前面提過的 whichfaceisreal.com 挑戰看看能否區分真實的人臉以及 GANs 生成的假人臉(編:很難分辨喔!)。
潛在空間的向量運算
當我們在潛在空間中取一個點時,該點的座標值即表示某張圖片,以向量表示 (編:稱之為圖片向量好了)。你可以對這些圖片向量進行計算,讓它們在潛在空間中做有意義的移動。
以下圖為例,我們的起始點是潛在空間中代表著「戴眼鏡的男人」的點,若將該點 (編註:實際內容是向量值)減去代表「沒戴眼鏡的男人」的點,再加上代表「沒戴眼鏡的女人」的點,則最後產生的點會非常接近「戴眼鏡的女人」所代表的點:
憑文字敘述就生成擬真圖片 –StackGAN
還有更酷的!請讀者看底下圖 3.7 那些有如真實照片的圖片,這是用StackGAN的模型所生成的。StackGAN是指將兩個GAN堆疊(stack)起來,第一個 GAN 先產生粗糙、低解析度的圖片,圖片中物體的大致輪廓和顏色是正確的;接著再交給第二個 GAN 處理,從低解析度轉成高解析度。
和前一節的 pix2pix 一樣都是 cGAN (條件式 GAN),最厲害的是StackGAN是根據「文字」條件來產生圖片(編:也就是你用英文描述一下想生成什麼圖片,模型就幫你變出來啦!超酷的!)
本文節錄自《深度學習的16堂課:CNN + RNN + GAN + DQN + DRL,看得懂、學得會、做得出!》,由旗標科技授權轉載。