【深度學習】GAN生成對抗網絡:原理、應用與發展

GAN生成對抗網絡:原理、應用與發展

文章目錄

  • GAN生成對抗網絡:原理、應用與發展
    • 1. 引言
    • 2. GAN的基本原理
      • 2.1 核心思想
      • 2.2 數學表達
      • 2.3 訓練過程
    • 3. GAN的主要變體
      • 3.1 DCGAN (Deep Convolutional GAN)
      • 3.2 CGAN (Conditional GAN)
      • 3.3 CycleGAN
      • 3.4 StyleGAN
      • 3.5 WGAN (Wasserstein GAN)
    • 4. GAN的應用場景
      • 4.1 圖像生成與編輯
      • 4.2 文本到圖像生成
      • 4.3 視頻生成與預測
      • 4.4 數據增強
      • 4.5 異常檢測
    • 5. GAN面臨的挑戰
      • 5.1 訓練不穩定性
      • 5.2 評估困難
      • 5.3 計算資源需求高
    • 6. GAN的未來發展趨勢
      • 6.1 與其他技術的融合
      • 6.2 可解釋性研究
      • 6.3 低資源環境下的GAN
      • 6.4 多模態GAN
    • 7. 結論
    • 參考資料

1. 引言

生成對抗網絡(Generative Adversarial Networks,簡稱GAN)自2014年由Ian Goodfellow等人提出以來,已經成為深度學習領域最具創新性和影響力的技術之一。GAN是一種生成模型,通過兩個神經網絡的“對抗”過程來生成逼真的數據,在圖像生成風格遷移圖像修復等多個領域展現出驚人的能力。本文將介紹GAN的基本原理、主要變體、應用場景以及未來發展趨勢。

P.S. 關于另一種生成模型——擴散模型(Diffusion Model)的介紹可以參考我的另一篇文章:擴散模型(Diffusion Model)詳解:原理、應用與當前進展。

2. GAN的基本原理

2.1 核心思想

GAN的核心思想可以類比為"造假者"與"鑒定者"之間的博弈:

  • 生成器(Generator):相當于造假者試圖生成逼真的假數據,它接收一個隨機的噪聲 z z z,通過這個噪聲生成圖片,記作 G ( z ) G(z) G(z)
  • 判別器(Discriminator):相當于鑒定者,試圖區分真實數據和生成的假數據,它的輸入參數是 x x x x x x代表一張圖片,它的輸出 D ( x ) D(x) D(x)代表 x x x為真實圖片的概率——如果為 1 1 1,就代表100%是“真實的圖片”;而如果輸出為 0 0 0,就代表它認為 x x x不可能是“真實的圖片”。

兩個網絡通過對抗訓練不斷提升自己的能力:生成器努力生成更逼真的數據以欺騙判別器,判別器則努力提高自己的鑒別能力。這種兩個網絡 “魔高一尺,道高一丈” 的 內卷 對抗過程最終使得生成器能夠產生高質量的、接近真實分布的數據。
這種博弈的最終結果是:在最理想的狀態下,G可以生成足以“以假亂真”的圖片G(z)。對于D來說,它難以判定G生成的圖片究竟是不是真實的,因此D(G(z)) = 0.5。

舉個例子:可以用GAN生成動漫風格的人物頭像:具體做法可以參考這篇文章中的介紹內容:GAN學習指南:從原理入門到制作生成Demo,在這里我簡單介紹一下這個例子(這個例子來源于這個項目:Chainerで顔イラストの自動生成),幫助大家更好的理解GAN的工作原理。
在這個例子中,“真實的圖片”相當于是合乎要求的動漫風格的人物頭像圖片。
第1個epoch跑完,生成器生成的影像只有一點隱隱約約的動漫人物頭像的輪廓就可以騙過判別器了:
第1個epoch跑完生成器的生成內容
于是判別器更新參數,這樣生成器如果按照同樣的參數生成的影像就無法騙過判別器了。于是生成器也更新參數,生成越來越“好”(與GT差距更小)的圖片(下面各圖依次是第5、10、200、300個epoch跑完生成器的生成內容):
第5個epoch跑完生成器的生成內容
第10個epoch跑完生成器的生成內容
第200個epoch跑完生成器的生成內容
第300個epoch跑完生成器的生成內容

2.2 數學表達

從數學角度看,GAN的訓練過程可以表示為一個極小極大博弈(minimax game):

GAN的公式表達

其中:

  • G G G是生成器網絡
  • D D D是判別器網絡
  • p d a t a p_{data} pdata?是真實數據分布
  • p z p_z pz?是隨機噪聲的先驗分布
  • G ( z ) G(z) G(z)是由生成器從噪聲 z z z生成的數據
  • D ( x ) D(x) D(x)表示判別器認為 x x x是真實數據的概率

2.3 訓練過程

GAN的訓練通常包括以下步驟:

  1. 固定生成器G,訓練判別器D以最大化目標函數。

判別器 D D D的目的: D ( x ) D(x) D(x)表示 D D D網絡判斷真實圖片是否真實的概率(因為x就是真實的,所以對于 D D D來說,這個值越接近1越好)。 D ( G ( z ) ) D(G(z)) D(G(z)) D D D網絡判斷 G G G生成的圖片(我們認為 G G G生成的“不是真實的圖像”,這樣就可以“激勵” G G G生成的圖像與“真實的圖像”越來越接近)的為“真實”的概率,因此 D D D的能力越強, D ( x ) D(x) D(x)應該越大, D ( G ( x ) ) D(G(x)) D(G(x))應該越小,這時 V ( D , G ) V(D,G) V(D,G)應變大。因此可以看到公式的的最前面的記號是 m a x D max_D maxD?

  1. 固定判別器D,訓練生成器G以最小化目標函數。

生成器 G G G的目的: D ( G ( z ) ) D(G(z)) D(G(z)) D D D網絡判斷 G G G生成的圖片的是否真實的概率, G G G希望自己生成的圖片“越接近真實越好”。也就是說, G G G希望 D ( G ( z ) ) D(G(z)) D(G(z))盡可能得大,這時目標函數 V ( D , G ) V(D,G) V(D,G)會變小。因此可以看到公式的的最前面的記號是 m i n G min_G minG?

  1. 反復交替上述兩個步驟,直到達到平衡狀態。

在最理想的狀態下,G可以生成足以“以假亂真”的圖片G(z)。對于D來說,它難以判定G生成的圖片究竟是不是真實的,因此 D ( G ( z ) ) = 0.5 D(G(z)) = 0.5 D(G(z))=0.5

用隨機梯度下降法訓練D和G的算法為:
隨機梯度下降法訓練D和G的算法
請注意紅框部分:
第一步訓練D,D是希望V(G, D)越大越好,所以是加上梯度(ascending);
第二步訓練G時,V(G, D)越小越好,所以是減去梯度(descending)。
上述兩步訓練過程交替進行。

注:本節所述方法基于GAN的開山之作:Goodfellow, I., et al. (2014). Generative Adversarial Networks. NIPS.,并參考了這篇文章:GAN學習指南:從原理入門到制作生成Demo 當中的講解。

3. GAN的主要變體

3.1 DCGAN (Deep Convolutional GAN)

DCGAN將卷積神經網絡引入GAN架構,使其更適合處理圖像數據,并提高了訓練穩定性。
DCGAN中的G網絡示意,相等于普通CNN的逆過程
DCGAN的G和D用了兩個卷積神經網絡(CNN),其中的G網絡相當于普通CNN的逆過程,同時對卷積神經網絡的結構做了一些改變,以提高樣本的質量和收斂的速度,這些改變有:

  • 取消所有pooling層。G網絡中使用轉置卷積(transposed convolutional layer)進行上采樣,D網絡中用加入stride的卷積代替pooling。
  • 在D和G中均使用batch normalization
  • 去掉FC層,使網絡變為全卷積網絡
  • G網絡中使用ReLU作為激活函數,最后一層使用tanh作為激活函數
  • D網絡中使用LeakyReLU作為激活函數

DCGAN原文:Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks 。

3.2 CGAN (Conditional GAN)

條件GAN通過引入額外的條件信息(如類別標簽),使生成器能夠生成特定類別的數據。

3.3 CycleGAN

CycleGAN實現了不需要配對數據的圖像到圖像的轉換,如將照片轉換為藝術畫風格。

3.4 StyleGAN

StyleGAN系列通過引入自適應實例歸一化和風格混合等技術,實現了高分辨率、可控的圖像生成。

3.5 WGAN (Wasserstein GAN)

WGAN使用Wasserstein距離代替JS散度,解決了原始GAN訓練不穩定和模式崩潰的問題。

4. GAN的應用場景

4.1 圖像生成與編輯

  • 高清圖像生成
  • 圖像風格遷移
  • 圖像修復與超分辨率重建
  • 圖像編輯與屬性操作

4.2 文本到圖像生成

結合自然語言處理技術,根據文本描述生成相應的圖像。

4.3 視頻生成與預測

生成連續的視頻幀或預測視頻的未來幀。

4.4 數據增強

為機器學習任務生成額外的訓練數據,提高模型的泛化能力。

4.5 異常檢測

通過學習正常數據的分布,檢測出異常樣本。

5. GAN面臨的挑戰

5.1 訓練不穩定性

GAN的訓練過程容易出現模式崩潰、梯度消失等問題。

5.2 評估困難

缺乏統一的、客觀的評估指標來衡量生成結果的質量。

5.3 計算資源需求高

高質量GAN模型通常需要大量的計算資源和訓練時間。

6. GAN的未來發展趨勢

6.1 與其他技術的融合

與強化學習、自監督學習等技術的結合,拓展應用場景。

6.2 可解釋性研究

提高GAN內部機制的可解釋性,理解生成過程的本質。

6.3 低資源環境下的GAN

開發更高效的GAN架構,降低訓練和推理的資源需求。

6.4 多模態GAN

處理跨多種模態(圖像、文本、音頻等)的生成任務。

7. 結論

GAN作為深度學習領域的重要創新,不僅在學術界引起了廣泛關注,也在工業界找到了豐富的應用場景。盡管面臨一些挑戰,但隨著技術的不斷進步,GAN及其變體將繼續在人工智能領域發揮重要作用,推動生成模型的發展。

參考資料

  1. Goodfellow, I., et al. (2014). Generative Adversarial Networks. NIPS.
    【GAN開山之作】
  2. Radford, A., et al. (2015). Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks.
    【DCGAN】
  3. Arjovsky, M., et al. (2017). Wasserstein GAN.
  4. Zhu, J.-Y., et al. (2017). Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks.
  5. Karras, T., et al. (2019). A Style-Based Generator Architecture for Generative Adversarial Networks.

希望這篇文章對你有所幫助!如果你想要更詳細地了解某個特定的GAN變體或應用場景,可以告訴我,我可以為你提供更深入的內容。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/74950.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/74950.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/74950.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【AI速讀】CNN圖像處理單元的形式化驗證方法

近年來,卷積神經網絡(CNN)在圖像處理和計算機視覺領域取得了巨大成功,如人臉識別、姿態估計等。然而,基于CNN的圖像處理單元設計復雜,驗證工作面臨巨大挑戰。傳統的仿真驗證方法難以覆蓋其龐大的配置空間,且耗時費力。本文將介紹一種創新的形式化驗證(Formal Verificat…

【新人系列】Golang 入門(八):defer 詳解 - 上

? 個人博客:https://blog.csdn.net/Newin2020?typeblog 📝 專欄地址:https://blog.csdn.net/newin2020/category_12898955.html 📣 專欄定位:為 0 基礎剛入門 Golang 的小伙伴提供詳細的講解,也歡迎大佬們…

鴻蒙開發:了解Canvas繪制

前言 本文基于Api13 系統的組件無法滿足我們的需求,這種情況下就不得不自己自定義組件,除了自定義組合組件,拓展組件,還有一種方式,那就是完全的自繪制組件,這種情況,常見的場景有,比…

【Linux筆記】進程間通信——命名管道

🔥個人主頁🔥:孤寂大仙V 🌈收錄專欄🌈:Linux 🌹往期回顧🌹:【Linux筆記】進程間通信——匿名管道||進程池 🔖流水不爭,爭的是滔滔不 一、命名管道…

Spring項目中使用EasyExcel實現Excel 多 Sheet 導入導出功能(完整版)

Excel 多 Sheet 導入導出功能完整實現指南 一、環境依賴 1. Maven 依賴 <!-- EasyExcel --> <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.3.2</version> </dependency>…

全流程剖析需求開發:打造極致貼合用戶的產品

全流程剖析需求開發&#xff1a;打造極致貼合用戶的產品 一、需求獲取&#xff08;一&#xff09;與用戶溝通1.面談2.問卷調查3.會議討論 &#xff08;二&#xff09;觀察用戶工作&#xff08;三&#xff09;收集現有文檔 二、需求分析&#xff08;一&#xff09;提煉關鍵需求&…

SQL語句及其應用(中)(DQL語句之單表查詢)

SQL語句的定義: 概述: 全稱叫 Structured Query Language, 結構化查詢語言, 主要是實現 用戶(程序員) 和 數據庫軟件(例如: MySQL, Oracle)之間交互用的. 分類: DDL: 數據定義語言, 主要是操作 數據庫, 數據表, 字段, 進行: 增刪改查(CURD) 涉及到的關鍵字: create, drop, …

5000元組裝一臺本地運行中、小模型主機,參考配置 (運行DeepSeek、Qwen)

5000元組裝一臺本地運行中、小模型主機&#xff0c;參考配置 &#xff08;運行DeepSeek、Qwen) 5000元中、小模型主機 DeepSeek、Qwen 各精度模型推薦啟動方式 模型名稱 參數量 精度 模型大小 推薦運行模式 DeepSeek R1 7b Q4 5 GB LM Studio純GPU 14b Q4 9 GB LM…

【新手初學】SQL注入getshell

一、引入 木馬介紹&#xff1a; 木馬其實就是一段程序&#xff0c;這個程序運行到目標主機上時&#xff0c;主要可以對目標進行遠程控制、盜取信息等功能&#xff0c;一般不會破壞目標主機&#xff0c;當然&#xff0c;這也看黑客是否想要搞破壞。 木馬類型&#xff1a; 按照功…

Containerd+Kubernetes搭建k8s集群

虛擬機環境設置&#xff0c;如果不是虛擬機可以忽略不看 1、安裝配置containerd 1.1 添加 Kubernetes 官方倉庫 安裝cri-tools的時候需要用到 cat > /etc/yum.repos.d/kubernetes.repo << EOF [kubernetes] nameKubernetes baseurlhttps://mirrors.aliyun.com/kub…

應用待機分組管控是啥

1. 應用待機群組是啥&#xff1f; Android 9 引入了一個新功能&#xff0c;叫應用待機群組。簡單來說&#xff0c;就是根據你最近使用應用的頻率和時間&#xff0c;系統會把應用分成不同的“群組”。每個群組的應用能用的系統資源不一樣&#xff0c;比如后臺任務、鬧鐘、網絡請…

C/C++后端開發面經

字節跳動 客戶端開發 實習 一面(50min) 自我介紹是否愿意轉語言,是否只愿意搞后端選一個項目來詳細談談HTTP和HTTPS有什么區別?談一下HTTPS加密的具體過程&#xff1a; 非對稱加密 對稱加密 證書認證的方式 非對稱加密是為了保證對稱密鑰的安全性。 對稱…

【第十三屆“泰迪杯”數據挖掘挑戰賽】【2025泰迪杯】A題解題全流程(持續更新)

【第十三屆“泰迪杯”數據挖掘挑戰賽】【2025泰迪杯】A題解題全流程-思路&#xff08;持續更新&#xff09; 寫在前面&#xff1a; 1、A題、C題將會持續更新&#xff0c;陸續更新發布文章 2、賽題交流咨詢Q群&#xff1a;1037590285 3、全家桶依舊包含&#xff1a; 代碼、…

如何讓 history 記錄命令執行時間?Linux/macOS 終端時間戳設置指南

引言:你真的會用 history 嗎? 有沒有遇到過這樣的情況:你想回顧某個重要命令的執行記錄,卻發現 history 只列出了命令序號和內容,根本沒有時間戳?這在運維排查、故障分析、甚至審計時都會帶來極大的不便。 想象一下,你在服務器上誤刪了某個文件,但不知道具體是幾點執…

Redis緩存異常場景深度解析:穿透、擊穿、雪崩及終極解決方案

一、引言 在高并發系統中&#xff0c;緩存承擔著流量洪峰的削峰填谷作用。然而當緩存層出現異常時&#xff0c;可能引發數據庫級聯崩潰&#xff0c;造成系統癱瘓。本文將深入剖析緩存穿透、緩存擊穿、緩存雪崩三大典型問題&#xff0c;并提供企業級解決方案。文章包含7種防御策…

Scala 之 正則

regex 函數提取 import scala.util.matching.Regex// 輸入表達式 val expression "[a#0, round(a#0, 0) AS round(a, 0)#1, abs(a#0) AS abs(a)#2, len(cast(a#0 as string)) AS len(a)#3]"// 定義一個正則表達式來提取函數名稱 val functionPattern: Regex &quo…

CI/CD-Jenkins安裝與應用

CI/CD-Jenkins安裝與應用 Docker安裝Jenkins docker-compose.yaml version: "3.8" # # 自定義網絡配置 # networks:cicd:driver: bridgeservices:jenkins:# 盡量使用新版本的Jenkins, 低版本的Jenkins的有些插件使用不了# jenkins/jenkins:lts-jdk17是長期支持版…

驗證Linux多進程時間片切換的程序

?? 一、軟件需求 在同時運行多個CPU密集型進程時&#xff0c;需采集以下統計信息&#xff1a; 當前運行在邏輯CPU上的進程ID每個進程的運行進度百分比 實驗程序設計要求&#xff1a; 1. 命令行參數 參數說明示例值n并發進程數量3total總運行時長&#xff08;毫秒&…

IvorySQL:兼容Oracle數據庫的開源PostgreSQL

今天給大家介紹一款基于 PostgreSQL 開發、兼容 Oracle 數據庫的國產開源關系型數據庫管理系統&#xff1a;IvorySQL。 IvorySQL 由商瀚高軟件提供支持&#xff0c;主要的功能特性包括&#xff1a; 完全兼容 PostgreSQL&#xff1a;IvorySQL 基于 PostgreSQL 內核開發&#xf…

樹莓派超全系列文檔--(13)如何使用raspi-config工具其二

如何使用raspi-config工具其二 raspi-configPerformance optionsOverclockGPU memoryOverlay file systemFan Localisation optionsLocaleTime zoneKeyboardWLAN country Advanced optionsExpand filesystemNetwork interface namesNetwork proxy settingsBoot orderBootloader…