日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

入门GAN的补习

發布時間:2025/3/8 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 入门GAN的补习 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?本文主要介紹了近年來GAN(生成對抗網絡)在分布差異度量,IPM與正則化,對偶學習,條件與控制,提高分辨率,評價指標等問題上的發展情況和代表性工作,希望對之前沒有跟進 GAN 相關工作的同學有所幫助~

作者:縱橫

來源:知乎專欄 機器不學習

編輯:happyGirl

最近,筆者在導師的指導下,進行了一些 GAN + GCN/video 的研究。不得不說,GAN 已經火了這么長時間,在圖卷積和視頻分析等交叉領域、應用領域中仍然有著很強的生命力。在1+1=2的時候需要解決的問題也不少。筆者在研究過程中首先嘗試了一些基礎模型,并選取了其中具有代表性的進行了記錄。后續有時間會繼續記錄 GAN + GCN / GAN + video 和自己正在實現的 pytorch gan zoo。

9102年,萬物皆可 embedding 的目標已經基本實現,表示學習受到廣泛重視,生成學習如火如荼。筆者在最近的研究中,發現交叉領域1+1=2的粘合工作已經所剩無幾了。但是,1+1=2之后仍面臨著一些任務特點相關的小問題,為了解決筆者所在領域的小問題,筆者總結并復現了經典的 GAN 網絡,希望對之前沒有跟進 GAN 相關工作的同學有所幫助~

導視

很多現有的機器學習任務可以歸結為 domain transform,將數據從源域轉換到目標域,例如根據文字生成圖像、根據前一幀生成后一幀、將一種風格轉換為另一種風格等等。現有的神經網絡 module已經能夠幫助我們將源數據映射為任意目標 size,而 MSE、MAE、Huber Loss 等傳統 損失函數,也能夠度量生成樣本與目標域樣本之間的差異。

但是,用這種方式構建的模型(例如 Auto Encoder)在 BP 后,往往 不那么令人滿意

在研究過程中,一些工作發現,這些 傳統的損失函數 在指導 NN 更新的過程中 只能粗略地 根據所有像素的 平均誤差計算梯度,導致了很多邊緣分布、 局部的差異 沒有被學到。

圖一:MSE 的局限性

如上圖所示,兩張生成圖像在原圖的基礎上修改的像素數目相同,因此其 MSE 誤差相同。然而根據常識,第二張圖像明顯不符合 0 的模式。一個好的損失函數,應當賦予第二張生成圖像更大的 MSE。

在此基礎上,GAN 網絡提出了一種 可學習的損失函數 ,即判別器(Discriminator), 自適應地 度量兩個 總體分布之間的差異,即連續的概率分布。(不同于 MSE、MAE、Huber Loss 等 固定的 損失函數,度量兩個 樣本之間的差異,即離散的概率分布)。

圖二:不同于度量樣本之間的差異,GAN 度量的是兩個總體分布的差異

在推導過程中,大多工作根據“ 貝葉斯統計 ”的理論,最大化生成域和目標域的似然。

個人認為,一個真正有生命力的研究方向不一定有好的 performance,但至少 應該能夠拆分成不同的子問題,分別開花結果。如果大家都在一個問題上,堆疊、魔改 module,那這個研究方向恐怕只能曇花一現。GAN 作為一個在 2019 年仍然蓬勃發展的 topic,其優化方向在 CV 中可以分為以下 6 類:

一、分布差異的度量

改進度量生成分布和目標分布差異,提高生成效果的精度和多樣性

二、IPM與正則化

截斷梯度、為梯度添加正則,提高 GAN 收斂的穩定性

三、對偶學習

利用循環一致性,添加源域與重構域的約束,充分利用數據

四、條件與控制

融合已知條件,控制生成過程和生成結果的特征

五、提高分辨率的努力

傳統的 GAN 網絡在生成大圖時較為模糊,一些工作在提高生成圖像的分辨率上進行了研究

六、評價指標

不同 GAN 生成效果的度量

一、分布差異的度量

在上文中,我們提到 GAN 的本質目標是使生成分布和目標分布盡可能相近。但是,應該如何衡量兩者概率分布之間的差異呢?

GAN

圖三:GAN 由生成器和判別器構成

Goodfellow 首次提出了極小極大博弈(minimax game),開啟了 GAN 的篇章。GAN 需要同時訓練兩個模型,即一個能捕獲數據分布的生成模型 ?? ,和一個能估計數據是否為真實樣本的判別模型??。生成器的訓練目標是最大化判別器犯錯誤的概率,即通過優化生成分布,讓判別器誤以為生成的假樣本為真。而判別器的訓練目標是最小化自己犯錯誤的概率,即找出生成器生成的假樣本,loss 可以表達為:

在實現過程中,GAN 的判別器和生成器往往是交替優化(或5:1)的,可以分別寫出判別器和生成器的優化目標:

論文:arxiv (https://arxiv.org/abs/1406.2661)

代碼:github (https://github.com/eriklindernoren/PyTorch-GAN/blob/master/implementations/gan/gan.py)

LSGAN

LSGAN 將生成樣本和真是樣本分別編碼為 ?? , ?? ,并使用平方誤差代替了 GAN 的邏輯損失

試驗表明,LSGAN 能夠部分解決 GAN 訓練不穩定和生成圖像質量差的問題。但是,平方誤差對離群點的過度懲罰,可能會導致過度模仿真實樣本,降低生成結果的多樣性。

論文:arxiv
代碼:[ github ](https://link.zhihu.com/?target=https%3A//github.com/LynnHo/DCGAN-LSGAN- WGAN-GP-DRAGAN-Pytorch/blob/master/v0/train_celeba_lsgan.py)

f-GAN

f-GAN 進一步擴展了 GAN 的損失函數 ,認為 GAN 所使用的 JS 散度和 LSGAN 所使用的卡方散度都屬于散度的特例,還可以使用其他不同的距離或散度來衡量真實分布與生成分布 。在此基礎上,f-GAN 設計一組根據不同散度計算得到的損失:

其中, ?? 可以根據不同散度,替換為多種表達形式;由于 ??對判別器的值域有要求,判別器輸出層的激活函數也需要替換:

圖四:f-GAN的多種形式

論文:arxiv (https://arxiv.org/abs/1606.00709)

代碼:github(https://github.com/shayneobrien/generative-models/blob/master/src/f_gan.py)

EBGAN

f-GAN 在散度視角集大成,EBGAN 則 將判別器視為一個能量函數,作為一個可訓練的損失函數。該能量函數將靠近真實分布的區域視為低能量區域,遠離真是分布的視為高能量區域。生成器會盡可能生成最小能量的偽造樣本。在這種視角下,生成器的網絡結構和損失函數更加靈活多變,EBGAN 提出 使用自動編碼器結構,用重構誤差代替分類器的分類結果

圖五:EBGAN 的判別器采用自動編碼器結構

即, ??。在設計損失函數時,為了使能量模型更加穩定,作者 添加了一個邊際值?? :

論文:arxiv(https://arxiv.org/abs/1609.03126)

代碼:github(https://github.com/eriklindernoren/PyTorch-GAN/blob/master/implementations/ebgan/ebgan.py)

二、IPM與正則化

很多時候,由于對抗學習,GAN 的收斂并不理想。IPM (積分概率度量) 將鑒別器的輸出從概率轉變為實數,并通過正則化將梯度限定在一定區間內,有效防止了判別器過早優化,導致生成器梯度消失的問題。

WGAN

WGAN 在分析 GAN 收斂不穩定的原因后認為,判別器訓練的梯度很難把控是導致 GAN 收斂不穩定的罪魁禍首。判別器訓練得太好,生成器的梯度消失,loss 難以下降;判別器訓練的不好,生成器的梯度不準確,loss 四處亂跑。只有在零和游戲中把握判別器和生成器的平衡才行。

WGAN 作出了如下修改:

  • 判別器的最后一層取消 sigmoid

  • 2. 對判別器使用梯度裁剪,將梯度 ?? 取值限制在 ?? 區間內。

    3. 使用 RMSProp 或 SGD 并以較低的學習率進行優化

    損失函數可以表示成:

    ? 的作用是將 ??的劇烈變化限制的更平緩一點,可以表示為:

    在實現上就是將梯度 ?? 取值限制在 ?? 區間內。

    論文:arxiv(https://arxiv.org/abs/1701.07875) 代碼:github(https://github.com/Zeleni9/pytorch-wgan/blob/master/models/wgan_clipping.py)

    WGAN-GP

    WGAN 提出不久后,WGAN 的作者又對 WGAN 進行了優化,將梯度裁剪(weight clipping)替換為梯度懲罰(gradient penalty),提出帶有梯度懲罰的 WGAN-gp。

    論文:arxiv(https://arxiv.org/abs/1704.00028)
    代碼:github(https://github.com/caogang/wgan-gp/blob/master/gan_cifar10.py)

    BEGAN

    BEGAN 進一步結合了 WGAN 和 EBGAN 的思路。一方面,BEGAN 使用自動編碼器和重構誤差度量生成樣本與真實樣本的差異:

    圖六:BEGAN 的判別器也采用自動編碼器結構

    另一方面,BEGAN 訓練了一個超參數,用于平衡判別器和生成器的優化速度:

    論文:arxiv(https://arxiv.org/abs/1703.10717) 代碼:github(https://github.com/shayneobrien/generative-models/blob/master/src/be_gan.py)

    三、對偶學習

    一些工作通過對偶學習,將 GAN 的生成-識別過程,擴展為生成-識別和重建-識別的過程,更充分地利用了源域和目標域的信息。DaulGAN、CycleGAN 和 DiscoGAN 的網絡結構大同小異,但是 motivation 的差異很有趣:

    DaulGAN

    DaulGAN 提出將源分布轉換為目標分布,與將目標分布轉換回源分布,是一個對偶問題,可以協同優化。

    圖七:DaulGAN 的網絡結構

    CycleGAN

    CycleGAN 提出了循環一致性(Cycle-Consistent)原則,其基本思想是圖像經過映射變為另一類圖像后,應該能通過逆映射變換回原來的圖像。

    圖八:CycleGAN 的網絡結構

    論文:arxiv(https://arxiv.org/abs/1703.10593)
    代碼:github(https://github.com/aitorzip/PyTorch-CycleGAN/blob/master/models.py)

    DiscoGAN

    為了學習不同域之間的映射,DiscoGAN 首先想到了添加了第二個生成器,和重構損失項來比較真實圖像和重構圖像。

    圖九:DiscoGAN 的單映射網絡

    然而,這樣設計出的模型是單方向映射的,無法同時學習如何從目標域映射回源域。此外,由于 MSE 對離群點的過度懲罰也會使模型存在模式崩塌問題,只會在源圖上做微小的修改。因此,作者進一步提出了雙向映射的 DiscoGAN:

    圖十:DiscoGAN 的雙映射網絡

    論文:arxiv(https://arxiv.org/abs/1703.05192) 代碼:github(https://github.com/carpedm20/DiscoGAN-pytorch/blob/master/models.py)

    四、條件與控制

    GAN 的生成樣本不可控,ConditionalGAN 通過添加先驗/條件,指導生成樣本的過程,從而控制生成的樣本滿足某些特征。

    cGAN

    通過 GAN 可以生成與目標分布相近的分布,例如生成 0 到 9 的數字等。但是,我們無法干預傳統 GAN 生成分布的過程,譬如指定生成數字 1 等。因此,cGAN 將 GAN 中的概率分布改成了條件概率:

    具體而言,就是在生成器和鑒別器的輸入中,都拼接已知的條件向量:

    圖十一:cGAN 的網絡結構

    圖中, ?? 代表從正態分布中采樣的噪聲;?? 代表真實分布中采樣的樣本,?? 代表條件向量,例如樣本標簽的 one hot 編碼。在判別器判別生成樣本時,會根據條件判別,從而迫使生成器參考條件向量生成樣本。

    論文:arxiv(https://arxiv.org/abs/1411.1784)
    代碼:github(https://github.com/eriklindernoren/PyTorch-GAN/blob/master/implementations/cgan/cgan.py)

    IcGAN

    最初,cGAN 只將樣本標簽的 one hot 編碼作為輸入,在標簽級控制生成樣本。如何更細力度的更改生成樣本的某些特征呢?IcGAN 通過編碼器學習了原圖到其特征向量的映射,今兒通過修改特征向量的部分特征作為生成器的輸入生成希望生成的特征:

    圖十二:IcGAN 的網絡結構

    ACGAN

    ACGAN 沒有選擇將條件(樣本的類別)直接輸入判別器,而是訓練判別器對樣本進行分類,即判別器不僅需要判斷每個樣本的真假,還需要預測已知條件(樣本的類別,添加一個分類的損失)。

    圖十三:ACGAN 的網絡結構

    ACGAN 的一個好處是,判別器輸出條件的設計使我們可以采用在其他數據集上預訓練的模型進行前一學習,從而生成更清晰的圖像減輕模式崩塌的問題。此外,如上圖所示,還有其他類似的設計為 GAN 添加先驗分布,例如 SemiGAN 和 InfoGAN 等,但大同小異。

    論文:arxiv(https://arxiv.org/abs/1610.09585) 代碼:github(https://github.com/eriklindernoren/PyTorch-GAN/blob/master/implementations/acgan/acgan.py)

    五、提高分辨率的努力

    在最初的工作中,受到正態分布采樣的 noise 尺寸的限制,GAN 還只能生成 32x32 的低分辨率的圖像。一些工作針對如何生成高分辨率圖像進行了研究。

    DCGAN

    DCGAN 首次將 CNN 引入 GAN(此前 GAN 大多由全連接層構成),并提出了一個能夠穩定收斂的 CNN + GAN 結構。很多 trick 為后面的研究提供了基礎:

    圖十四:DCGAN 的生成器
  • 下采樣使用帶有步長的卷積,而不是池化

  • 2. 上采樣使用反卷積,而不是插值

    3. 判別器的激活函數使用 Leaky ReLU

    4. 使用 BatchNorm 層(注:在 WGAN 不適用)

    5. 生成器與判別器對偶等等

    論文:arxiv(https://arxiv.org/abs/1511.06434) 代碼:github(https://github.com/eriklindernoren/PyTorch-GAN/blob/master/implementations/dcgan/dcgan.py)

    SAGAN

    隨著研究的深入,一些 CV 中常用的與 CNN 結合的 module 逐漸被引入。SAGCN 提出在生成器和判別器中引入 Self Attention 模塊,獲取距離較遠的相關區域的信息,提升了生成圖像的清晰度。

    圖十五:Self Attention 結構

    在原文實現中,Self Attention 只需要加在生成器和判別器的最后兩層。

    論文:arxiv(https://arxiv.org/abs/1805.08318) 代碼:github(https://github.com/heykeetae/Self-Attention-GAN/blob/master/sagan_models.py)

    BigGAN

    隨著可用的 module 逐漸增加,網絡參數量的軍備競賽也逐漸展開。BigGAN 作為 GAN 發展史上的里程碑,在精度上(128x128 分辨率)實現了跨越式的提升。雖然其模型規模較大,很難在本地復現,但是BigGAN 使用的 Self Attention、Res Block、大 channel/batch、梯度階段技巧等為后續的研究提供了借鑒。

    圖十六:BigGAN 結構

    論文:arxiv(https://arxiv.org/abs/1809.11096) 代碼:github(https://github.com/ajbrock/BigGAN-PyTorch/blob/master/BigGANdeep.py)

    LAPGAN

    LAPGAN 結合 CGAN 將迭代和層次化的思想運用到了圖像生成中。LAPGAN 認為與其一下子生成大分辨率的圖像,先生成低分辨率的圖像。在向上采樣,提高分辨率的過程中,讓生成器每次生成缺少的細節信息,即“殘差”圖片,與上采樣后的圖片做加法,得到更高分辨率的圖像:

    圖十七:LAPGAN 的推理過程

    在訓練過程中,LAPGAN 在每個分辨率下,以下采樣后的圖像為先驗條件,學習下采樣再上采樣后與原圖的信息損失,即殘差的生成:

    圖十七:LAPGAN 的訓練過程

    論文:arxiv(https://arxiv.org/abs/1506.05751)

    代碼:github (https://github.com/AaronYALai/Generative_Adversarial_Networks_PyTorch/blob/master/LAPGAN/LAPGAN.py)

    六、評價指標

    生成器的 loss 可以衡量生成的圖片能騙過判別起的性能,但是無法度量生成圖像的準確性和多樣性。因此,除了主觀性的評估外,近年的工作中也出現了 IS、FIP 等客觀評價指標(類似 PSNR 評估圖像質量)對生成圖像的準確性和多樣性進行評估(有些同學問這些評估指標能否作為 loss:這些指標只反映了生成數據的某些統計特征,做 loss 是無法指導 GAN 優化的)。

    IS

    Inception Score 作為早期的評價指標,提出 GAN 生成的結果可以由兩個維度來衡量:即生成結果的準確性(可分性)和多樣性:以生成圖片為例,對于一張清晰的圖片,它屬于某一類的概率應該非常大,而屬于其它類的概率應該較小(可以準確的被 Inception v3 分類)。同時,如果 GAN 能生成足夠多樣的圖片,那么它生成的圖片在各個類別中應當是均勻分布的(而不是只有某幾種,即模式崩塌)。

    值得注意的是,IS 越大,GAN 的效果越好。

    代碼:github(https://github.com/sbarratt/inception-score-pytorch/blob/master/inception_score.py)

    FID

    然而,IS 存在一個問題,真實圖像并沒有參與到生成圖像的評估過程中。因此,FID 提出將生成圖像與真實圖像的進行的比較(在 Inception v3 的 feature map 層面),實現對生成圖像準確性和多樣性的評估。

    值得注意的是,FID越小,GAN 的效果越好。

    代碼:github(https://github.com/mseitzer/pytorch-fid/blob/master/fid_score.py)

    其他

    FID 和 IS 都是基于特征提取的評估方法,feature map 有效地描述了某些特征是否出現,但是無法描述這些特征的空間關系。因而,近年來 GAN dissertation, on GAN and GMM 等文章對 GAN 的生成效果進行了進一步的分析。

    一個比較有趣的結論是,目前大多數 GAN 的模型相較于原始的 GAN 模型并沒有本質上的提升,只是收斂速度更快、收斂更穩定了。因此,在解決交叉領域的問題時,筆者一般先用常規的 WGAN-GP 進行測試,得到一個大致的 baseline,再決定是否繼續深入研究下去,或者探究有哪些 task special 的問題。

    尾注

    看到一段很好的話,指導我們的科研工作(逃)與大家共勉~

    層級結構并不意味著學科 X “僅僅是Y的應用”。每個新的層級都需要全新的定律、概念和歸納,并且和其前一個層級一樣,研究過程需要大量的靈感和創意。心理學不是應用生物學,生物學也不是應用化學。

    備注:公眾號菜單包含了整理了一本AI小抄非常適合在通勤路上用學習

    往期精彩回顧那些年做的學術公益-你不是一個人在戰斗適合初學者入門人工智能的路線及資料下載機器學習在線手冊深度學習在線手冊備注:加入本站微信群或者qq群,請回復“加群”加入知識星球(4500+用戶,ID:92416895),請回復“知識星球”

    喜歡文章,點個在看

    總結

    以上是生活随笔為你收集整理的入门GAN的补习的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。