1. 程式人生 > >GAN網路從入門教程(二)之GAN原理

GAN網路從入門教程(二)之GAN原理

在一篇部落格[GAN網路從入門教程(一)之GAN網路介紹](https://www.cnblogs.com/xiaohuiduan/p/13237486.html)中,簡單的對GAN網路進行了一些介紹,介紹了其是什麼,然後大概的流程是什麼。 在這篇部落格中,主要是介紹其數學公式,以及其演算法流程。當然數學公式只是簡單的介紹,並不會設計很複雜的公式推導。如果想詳細的瞭解GAN網路的原理,推薦去看李巨集毅老師的課程。B站和Youtube上面都有。 ## 概率分佈 ### 生成器 首先我們是可以知道真實圖片的分佈函式$p_{data}(x)$,同時我們把假的圖片也看成一個概率分佈,稱之為$p_g = (x,\theta)$。那麼我們的目標是什麼呢?我們的目標就是使得$p_g(x,\theta)$儘量的去逼近$p_{data}(x)$。在GAN中,我們使用神經網路去逼近$p_g = (x,\theta)$。 在生成器中,我們有如下模型: ![](https://img2020.cnblogs.com/blog/1439869/202007/1439869-20200705151804487-1752996904.png) 其中$z \sim P_{z}(z)$,因此$G(z)$也是一個針對於$z$概率密度分佈函式。 ### 判別器 針對於判別器,我們有$D(x,\theta)$,其代表某一張z圖片$x$為真的概率。 ## 目標函式 在[Generative Adversarial Nets](https://arxiv.org/pdf/1406.2661.pdf)論文中給出了以下的目標函式,也就是GAN網路需要優化的東西。 $$ \begin{equation}\min _{G} \max _{D} V(D, G)=\mathbb{E}_{\boldsymbol{x} \sim p_{\text {data }}(\boldsymbol{x})}[\log D(\boldsymbol{x})]+\mathbb{E}_{\boldsymbol{z} \sim p_{\boldsymbol{z}}(\boldsymbol{z})}[\log (1-D(G(\boldsymbol{z})))]\end{equation} $$ 公式看起來很複雜,但是我們分開來看還是比較簡單的。 ## $D^*$ $D$網路的目標是什麼?能夠辨別真假,也就是說,給定一張真的圖片$x$,$D$網路能夠給出一個高分,也就是$D(x)$儘量大一點。而針對於生成器$G$生成的圖片$G(z)$,我們希望判別器$D$儘量給低分,也就是$D(G(z))$儘量的小一點。因此$D$網路的目標函式如下所示: $$ \begin{equation}\max _{D} V(D, G)=\mathbb{E}_{\boldsymbol{x} \sim p_{\text {data }}(\boldsymbol{x})}[\log D(\boldsymbol{x})]+\mathbb{E}_{\boldsymbol{z} \sim p_{\boldsymbol{z}}(\boldsymbol{z})}[\log (1-D(G(\boldsymbol{z})))]\end{equation} $$ 在目標函式中,$x$代表的是真實資料(也就是真的圖片),$G(z)$代表的是生成器生成的圖片。 ## $G^*$ $G$網路的目標就是使得$D(G(z))$儘量得高分,因此其目標函式可以寫成: $$ \begin{equation}\max _{G} V(D, G)=\mathbb{E}_{\boldsymbol{z} \sim p_{\boldsymbol{z}}(\boldsymbol{z})}[\log (D(G(\boldsymbol{z})))]\end{equation} $$ $D(G(z))$儘量得高分(分數在$[0,1]$之間),等價於$1 - D(G(z))$儘量的低分,因此,上述目標函式等價於: $$ \begin{equation}\min _{G} V(D, G)=\mathbb{E}_{\boldsymbol{z} \sim p_{\boldsymbol{z}}(\boldsymbol{z})}[\log (1-D(G(\boldsymbol{z})))]\end{equation} $$ 因此我們優化$D^*$和優化$G^*$結合起來,也就是變成了論文中的目標函式: $$ \begin{equation}\min _{G} \max _{D} V(D, G)=\mathbb{E}_{\boldsymbol{x} \sim p_{\text {data }}(\boldsymbol{x})}[\log D(\boldsymbol{x})]+\mathbb{E}_{\boldsymbol{z} \sim p_{\boldsymbol{z}}(\boldsymbol{z})}[\log (1-D(G(\boldsymbol{z})))]\end{equation} $$ ## 證明存在全域性最優解 上面的公式看起來很合理,但是如果不存在最優解的話,一切也都是無用功。 ### D最優解 首先,我們固定G,來優化D,目標函式為: $\begin{equation} V(G, D)=\mathbb{E}_{\boldsymbol{x} \sim p_{\text {data }}(\boldsymbol{x})}[\log D(\boldsymbol{x})]+\mathbb{E}_{\boldsymbol{z} \sim p_{\boldsymbol{z}}(\boldsymbol{z})}[\log (1-D(G(\boldsymbol{z})))]\end{equation}$ 我們可以寫做: $$ \begin{equation}\begin{aligned} V(G, D) &=\int_{\boldsymbol{x}} p_{\text {data }}(\boldsymbol{x}) \log (D(\boldsymbol{x})) d x+\int_{\boldsymbol{z}} p_{\boldsymbol{z}}(\boldsymbol{z}) \log (1-D(g(\boldsymbol{z}))) d z \\ &=\int_{\boldsymbol{x}} [ p_{\text {data }}(\boldsymbol{x}) \log (D(\boldsymbol{x}))+p_{g}(\boldsymbol{x}) \log (1-D(\boldsymbol{x}))] d x \end{aligned}\end{equation} $$ 我們設($D$代表$D(x)$,可以代表任何函式): $$ f(D) = P_{data}(x) log D + P_G(x)log(1-D) $$ 對於每一個固定的$x$而言,為了使$V$最大,我們當然是希望$f(D)$越大越好,這樣積分後的值也就越大。因為固定了$G$,因此$p_g(x)$是固定的,而$P_{data}$是客觀存在的,則值也是固定的。我們對$f(D)$求導,然後令$f'(D) = 0$,可得: $$ \begin{equation}D^{*}=\frac{P_{d a t a}(x)}{P_{d a t a}(x)+P_{G}(x)}\end{equation} $$ 下圖表示了,給定三個不同的 $G1,G3,G3$ 分別求得的令 $V(G,D)$最大的那個$ D^∗$,橫軸代表了$P_{data}$,藍色曲線代表了可能的 $P_G$,綠色的距離代表了 $V(G,D)$: ![](https://img2020.cnblogs.com/blog/1439869/202007/1439869-20200705151804773-1246975510.png) ### G最優解 同理,我們可以求$\underset{D}{max}\ V(G,D)$,我們將前面的得到的$D^{*}=\frac{P_{d a t a}(x)}{P_{d a t a}(x)+P_{G}(x)}$帶入可得: $$ % $$ 其中$JSD ( P_{data}(x) || P_G(x))$的取值範圍是從 $0$到$log2$,其中當$P_{data} = P_G$是,$JSD$取最小值0。也就是說$ V(G,D)$的取值範圍是$0$到$-2log2$,也就是說$ V(G,D)$存在最小值,且此時$P_{data} = P_G$。 ## 演算法流程 上述我們從理論上討論了全域性最優值的可行性,但實際上樣本空間是無窮大的,也就是我們沒辦法獲得它的真實期望($\mathbb{E}_{\boldsymbol{x} \sim p_{\text {data }}(\boldsymbol{x})}$和$\mathbb{E}_{\boldsymbol{z} \sim p_{\boldsymbol{z}}}(\boldsymbol{z})$是未知的),因此我們使用估測的方法來進行。 $$ \tilde V = \frac{1}{m}\sum_{i=1}^{m} log D(x^i) + \frac{1}{m}\sum_{i=1}^{m} log (1-D(\tilde x^i)) $$ 演算法流程圖如下所示(來自[生成對抗網路——原理解釋和數學推導](https://alberthg.github.io/2018/05/05/introduction-gan/)): ![](https://img2020.cnblogs.com/blog/1439869/202007/1439869-20200705151805123-1626989499.png) ## 總結 上述便是GAN網路的數學原理,以及推導流程還有演算法。我也是剛開始學,參考瞭如下的部落格,其中[生成對抗網路——原理解釋和數學推導](https://alberthg.github.io/2018/05/05/introduction-gan/)非常值得一看,裡面非常詳細的對GAN進行了推導,同時,[bilibili——【機器學習】白板推導系列(三十一) ~ 生成對抗網路(GAN)](https://www.bilibili.com/video/BV1eE411g7xc?from=search&seid=16741251905988062798)中的視訊也不錯,手把手白板的對公式進行了推導。如有任何問題,或文章有任何錯誤,歡迎在評論區下方留言。 ### 參考 - [生成對抗網路GAN原理 學習筆記](http://jiaqianlee.com/2018/05/20/GAN/) - [生成對抗網路——原理解釋和數學推導](https://alberthg.github.io/2018/05/05/introduction-gan/) - [bilibili——【機器學習】白板推導系列(三十一) ~ 生成對抗網路(GAN)](https://www.bilibili.com/video/BV1eE411g7xc?from=search&seid=1674125190598