都是假的---生成式對抗網路GAN完全指南終極版(一)
是不是奇怪我為啥子要放一堆室內裝修的照片?
因為這些照片都是假的,全是神經網路自動生成的噢,不是拍的實景圖。
今天呢,我們就來介紹一下一個現在很火的神經網路Generative Adversarial Networks,中文名叫做生成式對抗網路,以下呢就簡稱它為GAN。
一句話概況它---能實現無監督的無中生有過程。
還是老樣子,從最簡單淺顯的例子入手開始講解吧。
假設你是一個可愛又迷人的反派角色---生產假幣的壞蛋
(@知乎小管家,這只是個栗子不要把我關小黑屋啊)。
既然是個大壞蛋,那你的目的當然是生產出能夠以假亂真的假幣拿出去用來賺錢咯。你組建了一個造假團隊,但是很不幸,你的團隊除了你之外只剩一個人了,還是個什麼都不懂的傻小子,最重要的造假任務當然不能交給他,於是你就讓他假裝警察來鑒別你的錢是不是假的。你要把造好的錢都先交給他檢查,確定是真的才能用,假的就不能用。
你負責製造,所以你是生成器,而他負責鑒定真假錢,所以他是辨別器。
你們兩個的大腦都是由深度神經網路來組成的。
好的,現在開始你們的邪惡之路。
在最開始的時候,你是很盲目的,要造一張假錢,可是完全不知道怎麼造嘛,所以只能亂來,所以你任性地撕了一張紙,在上面寫了100,就像這樣。
然後把它交給對方,注意我們前面說過了,他啥也不懂,你是新手的同時對方也很爛啊,他完全不知道該怎麼辨別,鑒定結果也無法出來
這樣可不行,全亂套了,這時你們覺得,他應該去看看真的錢長啥樣啊,小警察馬上看了一眼真的錢,哎?不對啊,真的錢上面應該有個人頭像,你這沒有,肯定是假的。
很不幸,你的假幣立馬被識破了,但是有收穫!因為你知道,原來小警察判別的依據就是人頭像啊,那我畫一個上去不就得了。於是你又馬上造了一張新的假幣。
再去交給他來看。
他一看,「嚯!有人頭像了,好像是真的哎,但是不行,我得再對比一下。」於是他又拿出自己的真錢來看,「不對不對,錢上面有印花,你這沒有,肯定是假的。」
可憐的假幣再一次被駁回了,於是你只好回去再修改,再交給他看,再被駁回,再修改,再拿給他看........
就這麼日復一日的改下去,雖然過程很堅信,你一直沒有被認可,但是!你在這段過程中學習到了很多,你從一開始完全不知道怎麼造造幣到現在掌握了一張假幣應該有的所有特徵。
同樣的,你的搭檔從一個什麼都不懂的小屁孩一次次的進步,變成一個非常老練的人形驗鈔機。日子一天天過去,你們之間的博弈從未停止,突然有一天,你造出了已經滿足所有條件的假幣了!!
而這時,就算已經是經驗豐富的他也看不出它到底是不是假的了。
因為他已經無法辨別了,所以你的錢完全可以拿出來瞞天過海了!
終於,你成為了一個優秀的生成器,而他也變成一個優秀的鑒別器。
你們變成一個優秀的造假團隊!
好了,以上就是GAN的工作原理。
在上述栗子中我們可以看到,整個生成式對抗網路分為兩個部分,生成器Generator(簡稱G)和辨別器Discriminator(簡稱D),其中G負責造假,D負責鑒別。
最樸素的框架如下圖所示:
生成器接收一組隨機雜訊開始偽造數據,將生成地數據交給辨別器,它為了更好的判別結果,同時還會接收真實數據用來比較,如果判斷結果通過了表示偽造可用,如果沒有通過則說明造假技術還有待提高,需要修改。
為了讓整個系統工作的更好,必須得G和D同時工作的很好,但G和D的目的又是對抗的,G想造假,就得讓自己造的數據和真實數據在D那裡分不出來,也就是說差距盡量小;同時D的目的是能判別出來,就是說差距盡量大。
隨機雜訊z,輸入生成器G中,產生的生成數據是G(z),再將它輸入判別器,判別的結果是D(G(z)) , 真實數據輸入為x,它的判別結果是D(x)。
因此二者的判別結果之間的差距就是
D(x) - D(G(z))
這個是系統優化的依據,因為G想要這個距離越小越好,因此目標函數是
但是D想要這個距離越大越好,它的目標函數就是
作為整個系統來看,G和D的目標都要滿足啊。所以直接合併在一起
這就是GAN的目標函數啦。
但是可能會有已經看過論文的小夥伴們會說,亂講!!論文里不是這樣寫的啊,那個公式可複雜了呢,如下:
記為公式(2)
哎喲看到這個公式我頭都大了,不過不要怕不要怕,我來解釋下,為什麼論文里的公式會變成這樣,其實呢,它是我們上面推到出來的那個簡單公式的變形,可以觀察看一下,公式(2)對於(1)來說有什麼不同,可以發現三點改動
1、加入了求對數,原來直接的D(X)變成了logD(X),這裡數運算元的變換可以緩解數據分布偏差問題,比如減少數據分布的單邊效應的影響,減少數據分布形式上的波動等,程序實現中,對數運算元也可以避免許多數值問題。
2、加入求期望E x~pdata(x),這是希望生成數據的分布Pg(G(z))能夠與真實數據的分布Pdata(x)一致,換句話說,相當於在數據量無限的條件下,通過擬合G(z)得到的分布與通過擬合x得到的分布盡量一致,這一點不同於要求各個G(z)本身和各個真實數據x本身相同,這樣才能保證G產生出的數據既與真實數據有一定相似性,同時又不同於真實數據;
3、-D(G(z))變成了1-D(G(z)):直觀上來說,加了對數操作以後,要求logf的f必須是正數,所以不能直接用-D(G(z)),這一點並不影響最終的最優解。
對於初學的小朋友們,我還是覺得你們我上面寫的公式(1)理解了就好,畢竟本質性的東西都在裡面了,而且看起來也簡單順眼了嘛。
以上,公式推導完成了。
那啥...感覺最重要的理論基礎原理已經就算講完了吧 = =
裡面的細節,G和D的內部網路架構,具體優化什麼的,下次再說吧...
對了,我們最後來看看它的運用方面吧。
話說現在GAN真的超級火哎!!!簡直是神經網路界的新生代大明星,之前在網上看到有人說無監督學習在未來幾年一定會快速發展,並且超過有監督學習,而GAN,正是無監督學習的典型代表,它的應用也都很讓人不明覺厲。
就像上圖顯示的,它可以對圖像進行語義標註;可以實現一張圖的白天到夜晚的轉變;任意畫一副邊緣圖自動轉為實物圖;等等等等.......
先到這裡吧~~
有問題的胖友們來評論區玩噢~
推薦閱讀:
※為什麼你需要計算神經科學
※Andrew NG 深度學習課程筆記:神經網路、有監督學習與深度學習
※淺談神經網路中的梯度爆炸問題
※基於Tensorflow的神經網路解決用戶流失概率問題
※求推薦人工智慧特別是神經網路方面的書?
TAG:深度学习DeepLearning | 神经网络 | 生成对抗网络GAN |