文 | Google Brain 學(xué)員 David Ha
抽象的形象溝通對于人們交流思想發(fā)揮了重要的作用。孩子們很小的時候就發(fā)展出用簡單的線條來描繪事物甚至表達(dá)自己情感的能力。這些簡單的繪畫可能沒有照片來得真實,但它確實可以讓我們從另一個角度了解人們是如何描繪和重建周圍的世界的。
▲ sketch-rnn 生成的矢量圖
在最新論文《簡筆畫繪圖的神經(jīng)表征》(A Neural Representation of Sketch Drawings) 中,我們提出了一個能夠生成常見物體簡筆畫的生成式循環(huán)神經(jīng)網(wǎng)絡(luò),其目標(biāo)是以類似于人類的方式訓(xùn)練機器繪畫和概括抽象概念。我們利用一個手繪簡筆畫的數(shù)據(jù)集訓(xùn)練我們的模型,其中每張簡筆畫表示握筆動作的一個序列:往哪個方向移動,什么時候提筆以及停筆。這樣我們就可以創(chuàng)建一個具有廣泛應(yīng)用潛力的模型,從協(xié)助藝術(shù)家進(jìn)行創(chuàng)作到幫助教學(xué)生如何繪畫。
對于使用神經(jīng)網(wǎng)絡(luò)的生成式建模方面,目前已做了大量工作,其中大部分工作的重心是以 2D 像素網(wǎng)格來表示光柵圖像。盡管這些模型目前能夠生成逼真的圖像,但由于 2D 像素網(wǎng)格的高維度,其面臨的一個關(guān)鍵挑戰(zhàn)是生成具有連貫結(jié)構(gòu)的圖像。這些模型有時產(chǎn)生的圖像很有趣,例如,有三只乃至更多眼睛的貓,或有多個頭的狗。
▲ 上圖展示了生成的身體部位數(shù)量錯誤的動物,這些是使用 128x128 ImageNet 數(shù)據(jù)集訓(xùn)練的先前 GAN 模型生成的。上圖是 Ian Goodfellow 的 NIPS 2016 教程《生成對抗網(wǎng)絡(luò)》(Generative Adversarial Networks) 中的第 29 圖。
在這項工作中,我們受到人類繪畫方式的啟發(fā),對更低維度的基于向量的表征進(jìn)行了研究。我們的模型 sketch-rnn 以 sequence-to-sequence (seq2seq) 自編碼器框架為基礎(chǔ)。它融入了變分推理,并將超網(wǎng)絡(luò)用作循環(huán)神經(jīng)網(wǎng)絡(luò)細(xì)胞。seq2seq 自編碼器的目標(biāo)是訓(xùn)練網(wǎng)絡(luò)將輸入序列編碼成一個被稱作隱向量的浮點數(shù)向量,并通過一個解碼器盡可能接近地再現(xiàn)輸入序列,從這一隱向量中重建輸出序列。
▲ sketch-rnn 的原理圖
在我們的模型中,我們刻意向隱向量添加噪音。在我們的論文中,我們展示了通過將噪聲引入編碼器和解碼器之間的通信通道中,讓模型無法再準(zhǔn)確地再現(xiàn)草圖,而是必須學(xué)會以噪音隱向量的形式捕捉草圖的本質(zhì)。我們的解碼器將使用這個隱向量生成用于構(gòu)建新簡筆畫的一系列動作。在下圖中,我們將幾個表現(xiàn)真實的貓的樣子的簡筆畫輸入編碼器中,以使用解碼器生成重建的簡筆畫。
▲ 受過貓簡筆畫訓(xùn)練的模型重建的簡筆畫
需要強調(diào)的是,重建的貓簡筆畫并不是對輸入的簡筆畫的復(fù)制,而是與輸入的簡筆畫具有相似特征的全新草圖。為證明模型不是簡單地復(fù)制輸入順序,而是確實學(xué)會了人類畫貓的一些技巧,我們可以嘗試將非標(biāo)準(zhǔn)簡筆畫輸入編碼器中:
當(dāng)我們輸入一個三眼貓的簡筆畫后,模型將生成一個具有類似輪廓的貓,但它只有兩只眼睛,這就表明我們的模型已經(jīng)知道貓只有兩只眼睛。為證明我們的模型并不是簡單地從大量儲存的貓簡筆畫中選擇最接近正常的貓的簡筆畫,我們可以嘗試輸入一些完全不同于貓的物體,如一只牙刷的簡筆畫。我們看到網(wǎng)絡(luò)仍然努力生成了一只貓的形象,擁有長長的胡須,同時盡量遵循牙刷的形狀。這表明網(wǎng)絡(luò)已經(jīng)學(xué)會了將輸入簡筆畫編碼成一組抽象的貓的概念,并嵌入到隱向量中,同時還能基于這個隱向量重建一個全新的簡筆畫。
還是不太相信?我們再用一個受過小豬簡筆畫訓(xùn)練的模型來重復(fù)此實驗,看看能不能得出相似結(jié)論。如果輸入一只有八條腿的豬,該模型生成的形狀將與豬相似,并且只有四條腿。如果向畫豬的模型輸入一輛卡車的簡筆畫,那么它就會畫出一頭長得像卡車的豬。
▲ 受過小豬簡筆畫訓(xùn)練的模型重建的簡筆畫
為了研究這些隱向量是如何編碼動物形態(tài)特征的,在下圖中,我們首先從兩張迥然不同的小豬簡筆畫中獲得隱向量,在此案例中是一個豬頭(綠色框中)和豬的全身(橙色框中)。我們希望了解我們的模型是如何學(xué)會表現(xiàn)豬的形象的,一種方法是在兩個不同的隱向量之間進(jìn)行內(nèi)插,并將內(nèi)插的隱向量生成的每個簡筆畫進(jìn)行可視化。如下圖所示,我們展示了豬頭的簡筆畫是如何慢慢變成整頭豬的,以及模型是如何理解豬的簡筆畫這個概念的。我們可以看到隱向量控制著簡筆畫中鼻子相對于頭的位置和尺寸,然后又添加了身體和腿。
▲ 從一個受過豬簡筆畫訓(xùn)練的模型生成的隱空間插值
我們還想知道如果模型學(xué)會了表現(xiàn)多種動物,那它們將會是什么樣子?在下圖中,我們通過在貓頭和整頭豬之間內(nèi)插隱向量生成簡筆畫。我們可以看到表征是如何慢慢地從貓頭過渡到具有尾巴的貓,再過渡到一個有肥胖身體的貓,最后變成一頭完整的豬。就像兒童學(xué)習(xí)繪畫一樣,我們的模型通過將動物的頭、腿、尾巴添加到身體上來畫出自己想要的動物。我們看到,模型還可以繪制與豬頭完全不同的貓頭。
▲ 受過貓和豬簡筆畫繪制訓(xùn)練的模型的隱空間插值
以上這些插值示例表明隱向量確實對簡筆畫的概念特征進(jìn)行了編碼。但是,我們是否可以使用這些特征來填充沒有此類特征的其他簡筆畫,比如為一個貓頭加上身體?
▲ 探索使用隱向量算法學(xué)習(xí)抽象概念之間的聯(lián)系
確實,我們發(fā)現(xiàn)受過貓和豬繪制訓(xùn)練的模型可以進(jìn)行簡筆畫繪制類比。例如,我們可以從整頭豬的隱向量減去已編碼的豬頭的隱向量,從而得到一個表現(xiàn)身體概念的向量。將這一區(qū)別添加到貓頭的隱向量中,從而得到一只完整的貓(即,貓頭+身體=整只貓)。這些繪圖類比讓我們可以探索模型是如何組織其隱空間以在生成的眾多簡筆畫中體現(xiàn)不同概念。
聯(lián)系客服