【文末有福利】生成对抗网络
以最大似然估計的方式來獲得生成圖像模型的方法,這種方法是可行的,但有比較大的約束,即模型不能太復雜,比如服從正態分布,那么通過最大似然估計的方式就可以計算出,但如果是一個非常復雜的分布,那么使用這種方式難以獲得一個理想的模型,這種強制性的約束就會造成各種限制,而我們希望的是可以為任意分布,這就需要引出GAN了。
?1 生成器來擬合分布?
在GAN中有兩個主要的組成部分,分別是生成器與判別器,這里先討論生成器,因為通過最大似然估計的方式能以計算復雜分布的,所以GAN的方法就是直接使用一個神經網絡來完成這個事情,而這個神經網絡就是生成器,因為神經網絡可以擬合任意的分布,所以生成器不存在最大似然估計會遇到的問題。
對于GAN中的生成器而言,它會接收一個噪音輸入,這個噪音輸入可以來自于正態分布、均勻分布或其他任意分布,經過生成器復雜的神經網絡變換,輸出的數據就可以組成一種復雜的分布,最小化這個分布與真實分布的差異則可。輸入給生成器的數據其分布不用太在意,因為生成器是一個復雜的神經網絡,它有能力將輸入的數據“改造”成各式各樣的數據分布,直觀如圖1所示。
圖1生成器
那么對生成器而言,它的目標函數就為:
即最小化生成分布與真實分布的距離。
因為我們依舊無法準確的知道生成分布與真實分布具體的分布情況,所以依舊使用采樣的方式來解決這個問題,即從數據集中抽取一下樣本將抽取出的樣本的分布看成是與的分布,這種做法的背后思想其實是大數定理,知道了兩個分布后,就可以通過訓練生成器來最小化兩分布的距離了。
?2 判別器計算分布的差異?
生成器可以最小化生成分布與真實分布之間的距離了,但如何定義這個距離,即生成器目標函數中的如何定義?
GAN可以通過判別器來定義這兩個分布的距離,簡單回顧一下判別器,如圖2所示。
圖2 判別器
使用真實數據與生成數據來訓練判別器,訓練的目標是讓判別器可以分辨出那些數據是真實數據那些數據是判別器數據,即對真實數據打高分,給生成數據打低分,其公式為如下:
對于從真實分布抽樣的樣本就打高分,即最大化,對于從生成分布抽樣的樣本就打低分,即最大化,那么判別器D的目標函數就為:
訓練判別器就像訓練一個二元分類器,其實質就是可以識別出真實數據與生成數據,如圖3所示.
圖3? 二元分類器
從圖可以看出,一開始,生成器還不會生成與真實圖像很接近的生成圖像,此時判別器做二分類就可以輕易的識別出輸入的數據是真實數據還是生成數據,此時兩種分布直接的相隔距離較大,但隨著訓練加多,生成數據與真實數據的分布越來越接近,此時判別器就無法將生成數據會真實數據完全區分開了,兩分布的距離相隔較小。
回到一開始的話題,生成器在訓練時需要先定義出生成分布與真實分布的距離,而兩分別的距離可以有判別器來定義,即,生成器從而可以獲得新的目標公式,如下:
?3 GAN的數學推導?
通過前面的討論,已經明白了生成器用于擬合真實分布,判別器用來測量真實分布與生成分布之間的距離,接著我們就來推導一下。
因為訓練生成器先要有兩分布距離的定義,所以這里就先來推導,推導如下:
將判別器的目標函數變換成積分的形式:
因為判別器希望最大,其實就是要求上式的中間部分最大,即最大,為了簡化計算,我們將記為a,將記為D,將記為b,將變換成如下形式:
要找到一個D使得函數最大,求其導數為0的值則可,公式為:
將上式進行簡單的變化,如下:
將a與b替換會原來的值,獲得如下公式:
推導出了,就可以將推導出的值代入到生成器的目標函數中,如下:
將其變換為積分形式,如下:
做一些簡單的變換,如下:
上面推導出的這個公式其實就是JS散度,回憶一下JS散度的公式,如下:
可以看出用于類似的樣式,所以可以將簡化一下,其公式如下:
推導到這里就可以得出,生成器最小化GAN的目標函數其實就是最小化真實分布與生成分布之間的JS散度,即最小化兩個分布的相對熵。
直觀的展示一下上面的公式推導,這里使用簡單的二維的函數圖像來簡化復雜分布的表示,如圖4所示.
圖4 V(G,D*)
首先對判別器而言,其目標函數為,即找到函數的最高點,如圖中的紅點就是該分布的最高點,接著將該點代入生成器的目標函數就可以獲得一個高度,該高度就是生成分布與真實分布的JS散度,生成器的目標就是最小化這個JS散度,而判別器的目標就是盡力測量出生成分布與真實分布的JS散度。
?4 GAN的本質??
通過上面對GAN目標函數的推導,最終發現GAN的目標函數其實就是JS散度,那么GAN做的事情簡單而言就是通過判別器找到當前生成分布與真實分布的JS散度,然后在通過生成器生成數據構成新的生成分布,從而減小生成分布與真實分布之間的JS散度。
從生成器的角度看,它其實即使最小化,將記為,那么生成器要做的就是對函數做微分運算,計算出生成器參數要更新的值,然后通過梯度下降算法更新生成器的參數則可,如下:
一個值得思考的問題是,可微分嗎?其實是可微的,具體例子,比如現在有函數,對求微分,其實就是對中最大的那個函數求微分,其直觀形式如圖5所示。
圖5? ?求微分
因為是有多個函數組成的,所有對求微分其實也就是對不同函數求微分,因為只選擇函數中最大的,那么對于某個區域,就對該區域最大的函數求導則可,如上圖。
同理,對于GAN中的也是一樣的,該函數求微分與普通函數求微分相似,用數學語言描述GAN的訓練過程如下:
固定生成器G,訓練判別器D,獲得。
固定判別器D,對做微分,從而計算出生成器參數要更新的值。
往返上面兩步,直到GAN收斂。
圖6 V(G,D)發生變化
一開始,判別器計算出在的位置,將該位置的值代入可以獲得生成分布與真實分布的JS散度,即??,然后再通過訓練生成器來減少兩分布之間的JS散度,訓練生成器其實就是更新生成器上的各種參數,而更新生成器的參數就會導致目標函數??發生變化,發生變化后的函數其??可能不在??所在的位置了,上圖中變化后的函數其??獲得的值應該為???,但訓練時因為固定這判別器,所以依舊使用的是??,那么就無法獲得生成分別與真實分布的JS散度了,既然有這個問題,為什么依舊這樣訓練呢?
通過上面的分布,可以知道每次改變生成器G,整個函數就會改變,此時固定的判別器D不一定再表示最大值??,即無法獲得兩分布的JS散度,但在實際上,依舊可以將當前判別器獲得的值看成與JS散度非常相近的值,因為生成器G在每次訓練時,不會相對于上一次有一個較大的變動,從而導致函數??變化過大,此時就依舊可以近似將??看為是變動后函數??最大值的近似值,當生成器G經過一定次數訓練后,函數變化可能比較大了,此時再訓練判別器D,即找出新函數的JS散度。
在理論推導上,判別器D可以推導計算出??,但在實際實現上,該值不一定是最大值,判別器D本身其實也是一個神經網絡,我們訓練該網絡,希望可以找到??表示該函數最大的值,但因為函數??可能會比較復雜,判別器通常無法獲得該函數的全局最優,而是獲得該函數的局部最優,實際上在訓練GAN網絡時,并不會強制要求判別器D要找到??全局最大值,只要獲得一個可以接受的局部最優解則可。
值得一提的是,因為我們無法確切的獲得真實分布??與生成分布??的值,所以通過抽樣的方式來獲得樣本,以樣本的分布來近似的表示真實分布與生成分布,即??、??,那么判別器的目標函數就可以改變成如下形式:
??
換個角度看,判別器其實就是一個二元分類器,使用sigmoid激活函數作為最后一層的輸出(sigmoid輸出的值在0~1之間),??是該二元分類器的積極樣本,而??是該二元分類的消極樣本,通過兩種不同的數據來訓練該分類器,從而最小化兩分布的交叉熵損失,最小化兩分布的交叉熵損失等價于最大化??,即??。
現在再回頭來看GAN的算法,用數學語言描述如下:
獲得樣本,真實樣本??,噪音樣本??,生成樣本??
固定生成器G,訓練判別器D
判斷器目標函數:
??
更新判別器的參數:
??
??通常無法獲得最大值,局部最優則可
固定判別器D,循生成器G
生成器目標函數:
??
因為前面一項與生成器沒有關系,所以可以將??簡化為:
??
更新生成器的參數:
??
通常我們會訓練多次判別器D后才訓練一次生成器,因為生成器參數更新太多,就會讓函數發生較大的變化,從而導致生成器減小的不再是兩分布的JS散度。
推薦閱讀
深入淺出GAN生成對抗網絡
***粉絲福利時間***
評論區留言,點贊數前5可獲得此書!!!
以48個小時計!
注:若是在活動截止日期后24小時內無法取得用戶回復或聯系,將按照留言點贊排名順延。
總結
以上是生活随笔為你收集整理的【文末有福利】生成对抗网络的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 重磅!“东方理工大学”来了!
- 下一篇: 学位论文是根,学术论文是叶