閱讀237 返回首頁    go 阿裏雲 go 技術社區[雲棲]


喵咪製造機:生成式對抗網絡的花式畫喵大法


image


2012年,吳恩達和Jeff Dean用Google Brain的1.6萬個CPU所打造的大型神經網絡,在被1000萬YouTube視頻中的貓圖像訓練三天後,自己畫出了一張模煳的貓臉圖。這是普通公眾第一次領略到深度學習的威力。

而後隨著AlphaGo在圍棋上先後虐殺人類冠軍李世石、柯潔,公眾對深度學習和人工智能的熱情更勝以往。不過,神經網絡自己畫貓的技術,有沒有隨之進步呢?

image


最近,一位在醫院工作的貓奴生物統計學家Alexia,使用最新的生成式對抗網絡GAN來測試深度學習的畫貓技術。相比吳恩達三天才能畫出來的貓,GAN的新方法僅用幾個小時就能搞定,畫出來貓咪也好看很多。這裏的新方法在細節上有何特點呢?我們仔細來看作者Alexia的點評。

作者 | Alexia Jolicoeur-Martineau
譯者 | AI科技大本營(rgznai100)
參與 | 智子,波波

我試驗用生成對抗網絡來生成貓臉的各種圖片。針對不同的分辨率,我采用了幾種不同的方法,包括DCGAN、WGAN與WGAN-GP,訓練樣本源自一個有著上萬張貓圖的圖片庫。我找的是那些貓臉處在正中的圖片(用人眼生看,花了我好幾個小時……說起來都是淚),共有9304張分辨率大於64x64的圖片,以及6445張分辨率大於128x128的圖片。

DCGAN

DCGAN可以很好的收斂,隻用了209次迭代,大概兩三個小時,就產生了非常有真實感的圖片。但是需要進行一些調整才能達到這個效果。眾所周知,GAN的生成器和判別器必須勢均力敵,才能產生良好的效果。我的DCGAN對生成器和判別器分別設定了不同的學習速率,這樣才使得二者勢均力敵,從而能得出很好的效果。當處理64x64的圖片的時候,最好的判別器的學習速率是0.00005,生成器的速率是0.0002。如下圖所示,沒有產生模式坍塌(mode collapse)。圖片漂亮吧!

image


高分辨率的 DCGAN和SELU

但上述辦法用來處理128x128的圖片,就會失效。但是,我用SeLUs替換了batch歸一化和ReLus,在學習速率保持不變的情況下,也取得了一定的效果。隻不過過程非常慢,大概要用6個多小時。SeLUs是自歸一的,因此就不需要用batch歸一化了。SeLU才剛誕生不久,所以基本上在GAN上沒有什麼深入的研究。不過據我觀察,SeLU極大的提高了GAN的穩定性。這次生成的貓不像上次的那麼漂亮,並且有很多黑貓長的差不多,明顯地產生了“多樣性缺失”現象。這也很好解釋,因為這次是在6445個大於128x128的圖片上訓練,而上次是在9304個圖片上訓練,訓練數據少了不少。不過,這次有些貓也相當好看,清晰度比原來的高,所以我仍然覺得這次也是成功的。

論文地址
https://arxiv.org/abs/1706.02515

image


WGAN

WGAN收斂的很慢,大概用了四五個小時,600多次迭代。並且隻在64個隱層神經元成功了。128個神經元的時候失敗了。對DCGAN,雖然要調整學習速率,但是一旦調整了,你馬上能看到效果。對WGAN,很難馬上看到效果,隻有讓網絡多跑幾個迭代,才能看到效果。

觀察圖片的話,有非常明顯的模式坍塌(mode collapse)。還有很多貓有異盲證,一些貓一隻眼睜著,一個眼閉著;還有一些貓鼻子畸形。總體上看,WGAN的效果不如DCGAN。但是也許是因為我用的神經網絡的結構太簡單,所以不好在二者之間做明確的判斷,哪個更好。還有,WGAN似乎陷入了局部最優。到目前為止,WGAN還是令我有點失望。

WGAN-GP是WGAN的改進版本,也許能夠解決上麵的問題。2017年的Gulrajani等人發表的論文中,提到他們能訓練101層的神經網絡。所以也許我的用5層128個神經元的方法生成貓的方法有問題。亞當優化器(Adam optimizer)也能降低種類坍塌和局部最優的風險。很可能這個能夠解決這些問題,因為WGAN沒用而DCGAN和WGAN-GP都用了亞當優化。

image


WGAN-GP (改進的WGAN)

WGAN-GP的生成器收斂的非常慢,大概在六個小時以上。但是它的好處是不需要調整任何超參。比如,可以任意調整學習速率,調大或者調小,都不會造成任何問題。這一點上,WGAN-GP用起來很舒心,不像其他算法調整超參那麼辛苦。

論文地址
https://arxiv.org/abs/1704.00028

而且該方法生成的貓的種類和樣式非常多,沒有明顯的模式坍塌(mode collapse)。這是對WGAN的的一個主要的改進。另一方麵,圖片有點模煳不清,好像是低分辨率的圖片又被放大了一倍。我也不確定具體的原因,可能是Wasserstein距離的導致的。我覺得可以使用不同的學習速率和網絡結構優化結果。這需要做更進一步的研究,但我確信這裏有很大的提高空間。

image


LSGAN (最小二乘 GAN)

LSGAN和前麵幾個方法不同。LSGAN用最小二乘法來最小化判別器的輸出和真實結果差值。該方法的推薦設置為:在判別器端,用1表示真實圖像,0表示假的圖像;在生成器端,用1表示假的圖像。2017年Hejlm等人在論文中又提出了新的建議:在判別器端,1表示真實圖像,0表示假的圖像;但是在生成器端,用0.5表示假的圖像。

論文地址
https://arxiv.org/pdf/1702.08431.pdf

我現在還沒有時間全麵研究這個方法。但是看起來,這個方法非常穩定,並且生成的圖片中的貓也很漂亮。雖然該方法通常挺穩定的,但是有一次,出現了梯度爆炸,最後生成的結果嘛也不是。下圖展示了第31和32次迭代的結果:

image
image


所以該方法也不是百分百的穩定,不穩定的時候結果還非常糟糕。對Adam優化器選擇一個較好的超參可以有效阻止該問題的發生。該方法的優點是不用像DCGAN那樣調整學習速率,並且不發生問題的時候(發生問題的概率還是很低的),結果還是很不錯的,貓的圖片也很漂亮。

xudong mao是LSGAN的提出者。他發給了我用LSGAN生成的128x128的貓的圖片,如下圖所示。可以看到,該方法也可以生成和DCGAN一樣質量的圖片。

image


我的代碼放在GitHub上,願者自取。

代碼地址
https://github.com/AlexiaJM/Deep-learning-with-cats

來源: AI科技大本營
原文鏈接

最後更新:2017-07-11 09:32:38

  上一篇:go  韓國高防服務器、韓國高防服務器租用、韓國高防機房
  下一篇:go  Lessons on Prototyping for Early Entrepreneurs and Startups