最簡單的 GAN 解釋 (生成對抗網路)

數學是達成目的的工具, 理解才是達成目的橋樑, 所以這篇文章用淺顯易懂的動畫闡述了複雜的機器學習概念.

強烈推薦通過動畫的形式了解.

所以首先放視頻鏈接: Youtube 或者 優酷.

代碼實現請來這裡看: Python 實現

今天我們會來說說現在最流行的一種生成網路, 叫做 GAN, 又稱生成對抗網路, 也是 Generative Adversarial Nets 的簡稱. 完全沒有聽懂, GAN 是什麼鬼.. 不急, 我們慢慢來解釋.

常見神經網路形式

神經網路分很多種, 有普通的前向傳播神經網路 , 有分析圖片的 CNN 卷積神經網路 , 有分析序列化數據, 比如語音的 RNN 循環神經網路 , 這些神經網路都是用來輸入數據, 得到想要的結果, 我們看中的是這些神經網路能很好的將數據與結果通過某種關係聯繫起來.

生成網路

但是還有另外一種形式的神經網路, 他不是用來把數據對應上結果的, 而是用來」憑空」捏造結果, 這就是我們要說的生成網路啦. GAN 就是其中的一種形式. 那麼 GAN 是怎麼做到的呢? 當然這裡的」憑空」並不是什麼都沒有的空盒子, 而是一些隨機數.

對, 你沒聽錯, 我們就是用沒有意義的隨機數來生成有有意義的作品, 比如著名畫作. 當然, 這還不是全部, 這只是一個 GAN 的一部分而已, 這一部分的神經網路我們可以想像成是一個新手畫家.

新手畫家

畫家作畫都需要點靈感 , 他們都是依照自己的靈感來完成作品. 有了靈感不一定有用, 因為他的作畫技術並沒有我們想像得好, 畫出來有可能是一團糟. 這可怎麼辦, 聰明的新手畫家找到了自己的一個正在學鑒賞的好朋友 – 新手鑒賞家.

新手鑒賞家

可是新手鑒賞家也沒什麼能耐, 他也不知道如何鑒賞著名畫作 , 所以坐在電腦旁邊的你實在看不下去了, 拿起幾個標籤往屏幕上一甩 , 然後新手鑒賞家就被你這樣一次次的甩來甩去著甩乖了, 慢慢也學會了怎麼樣區分著名畫家的畫了. 重要的是, 新手鑒賞家和新手畫家是好朋友, 他們總愛分享學習到的東西.

新手鑒賞家和新手畫家

所以新手鑒賞家告訴新手畫家, 「你的畫實在太丑了, 你看看人家達芬奇, 你也學學它呀, 比如這裡要多加一點, 這裡要畫淡一點.」 就這樣, 新手鑒賞家將他從你這裡所學到的知識都分享給了新手畫家, 讓好朋友新手畫家也能越畫越像達芬奇. 這就是 GAN 的整套流程, 我們在來理一下.

新手畫家用隨機靈感畫畫 , 新手鑒賞家會接收一些畫作, 但是他不知道這是新手畫家畫的還是著名畫家畫的, 他說出他的判斷, 你來糾正他的判斷, 新手鑒賞家一邊學如何判斷, 一邊告訴新手畫家要怎麼畫才能畫得更像著名畫家, 新手畫家就能學習到如何從自己的靈感畫出更像著名畫家的畫了. GAN 也就這麼回事.

GAN 網路

Generator 會根據隨機數來生成有意義的數據 , Discriminator 會學習如何判斷哪些是真實數據 , 哪些是生成數據, 然後將學習的經驗反向傳遞給 Generator, 讓 Generator 能根據隨機數生成更像真實數據的數據. 這樣訓練出來的 Generator 可以有很多用途, 比如最近有人就拿它來生成各種卧室的圖片.

GAN 應用

甚至你還能玩點新花樣, 比如讓圖片來做加減法, 戴眼鏡的男人 減去 男人 加上 女人, 他居然能生成 戴眼鏡的女人的圖片. 甚至還能根據你隨便畫的幾筆草圖來生成可能是你需要的藍天白雲大草地圖片. 哈哈, 看起來機器也能有想像力啦. 如果你想試著動手做一個 GAN 的實踐, 卻不知道如何做, 不用擔心, 我也為準備好了一個使用Python 和他神經網路模塊搭建的最簡單的 GAN 實踐代碼. 歡迎大家訪問 莫煩 Python 了解更多機器學習的內容.
推薦閱讀:

CS 294: Deep Reinforcement Learning(11)
Python · 樸素貝葉斯(二)· MultinomialNB
圖像識別:基於位置的柔性注意力機制

TAG:机器学习 | 神经网络 | 深度学习DeepLearning |