【大模型學習】第二十二章 什么是對抗生成網絡

目錄

一、背景介紹

二、生活化例子說明什么是對抗生成網絡

三、技術細節詳解

(一)基本概念

(二)訓練機制

(三)損失函數


一、背景介紹

????????對抗生成網絡(Generative Adversarial Networks, GANs)是由Ian Goodfellow等人在2014年提出的一種深度學習模型。它由兩個部分組成:一個生成器(Generator)和一個判別器(Discriminator)。GANs的初衷是解決生成模型中的難題,即如何讓機器能夠自動生成逼真的數據樣本,如圖像、音頻等。通過模擬人類大腦中創造新事物的過程,GANs能夠在沒有明確指導的情況下生成看似真實的數據。

二、生活化例子說明什么是對抗生成網絡

????????想象你正在參加一場藝術比賽,其中有一個特別的比賽項目:兩位藝術家進行合作與競爭。一位是“畫家”,另一位是“鑒賞家”。在這個比賽中,“畫家”負責創作藝術品,而“鑒賞家”的任務則是判斷這些作品是否為真跡還是贗品。“畫家”試圖盡可能地模仿原作,制造出難以區分真假的作品;與此同時,“鑒賞家”則努力提高自己的鑒別能力,以便準確地區分真偽。

隨著時間推移,“畫家”的技藝不斷提升,以至于連“鑒賞家”也難以分辨哪些是真正的藝術品,哪些是由“畫家”創造出來的復制品。這個過程實際上就是GANs的工作原理:生成器就像“畫家”,嘗試創造出看起來真實的樣本;判別器則扮演“鑒賞家”的角色,評估輸入數據的真實性,并反饋給生成器以改進其輸出質量。

三、技術細節詳解

(一)基本概念

  1. 生成器(Generator):生成器的目標是從隨機噪聲中生成數據樣本,使得判別器無法區分這些樣本與真實數據之間的差異。換句話說,生成器試圖欺騙判別器,使其相信生成的樣本是真實的。

  2. 判別器(Discriminator):判別器的任務是接收一組數據(可以是真實的也可以是由生成器生成的),并對其進行分類——確定每個輸入屬于真實數據集的概率。

(二)訓練機制

GANs的訓練過程是一個動態博弈的過程,生成器和判別器相互對立又相互促進。具體來說:

  • 初始階段,生成器隨機產生數據,而判別器則基于現有的真實數據來判斷輸入的真實度。
  • 隨著訓練的進行,生成器逐漸學會生成更加逼真的樣本,同時判別器也在不斷優化自己識別偽造樣本的能力。
  • 最終的理想狀態是達到納什均衡,此時生成器生成的數據幾乎無法被辨別為偽造,而判別器也無法再進一步提高其準確性。

(三)損失函數

GANs的核心在于其獨特的損失函數設計,通常包括兩部分:

判別器的損失:旨在最大化對真實樣本和生成樣本的區分能力。

生成器的損失:目標是最小化判別器對生成樣本的正確性評分。

總損失:生成器和判別器交替更新各自的參數,直到達到平衡點。

下面給出一個簡單的GANs實現框架的Python代碼示例,使用PyTorch實現。這里假設我們想要生成手寫數字圖像。

import torch
from torch import nn, optim
from torchvision import datasets, transformsclass Generator(nn.Module):def __init__(self):super(Generator, self).__init__()self.main = nn.Sequential(nn.Linear(100, 256),nn.ReLU(True),nn.Linear(256, 28*28),nn.Tanh())def forward(self, input):return self.main(input).view(-1, 1, 28, 28)class Discriminator(nn.Module):def __init__(self):super(Discriminator, self).__init__()self.main = nn.Sequential(nn.Linear(28*28, 256),nn.ReLU(True),nn.Linear(256, 1),nn.Sigmoid())def forward(self, input):return self.main(input.view(input.size(0), -1))transform = transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.5,), (0.5,))])
trainset = datasets.MNIST(root='./data', train=True, download=True, transform=transform)
trainloader = torch.utils.data.DataLoader(trainset, batch_size=64, shuffle=True)device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
netG = Generator().to(device)
netD = Discriminator().to(device)criterion = nn.BCELoss()
optimizerD = optim.Adam(netD.parameters(), lr=0.0002)
optimizerG = optim.Adam(netG.parameters(), lr=0.0002)fixed_noise = torch.randn(64, 100, device=device)for epoch in range(5):  # 訓練5個epoch作為示例for i, data in enumerate(trainloader, 0):real_images, _ = datareal_images = real_images.to(device)batch_size = real_images.size(0)# 更新判別器netD.zero_grad()noise = torch.randn(batch_size, 100, device=device)fake_images = netG(noise)label_real = torch.full((batch_size,), 1., dtype=torch.float, device=device)label_fake = torch.full((batch_size,), 0., dtype=torch.float, device=device)output_real = netD(real_images).view(-1)lossD_real = criterion(output_real, label_real)lossD_real.backward()output_fake = netD(fake_images.detach()).view(-1)lossD_fake = criterion(output_fake, label_fake)lossD_fake.backward()optimizerD.step()# 更新生成器netG.zero_grad()output = netD(fake_images).view(-1)lossG = criterion(output, label_real)lossG.backward()optimizerG.step()print("完成一次GANs訓練循環")

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

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

相關文章

攝像頭模塊ISP處理流程

攝像頭模塊的ISP(圖像信號處理器)處理流程是對圖像傳感器輸出的原始信號進行系統性優化的過程,主要分為以下關鍵步驟及對應功能模塊: 一、原始信號輸入與預處理 ?傳感器信號捕獲? CMOS/CCD傳感器將光信號轉換為模擬電信號&…

linux系統安裝和激活conda

安裝 wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.shbash ./Miniconda3-latest-Linux-x86_64.sh回車到最后按照輸入yes,之后按提示操作。 激活 conda activate如果沒有反應或者返回: bash: conda: command not found則…

(全)2024下半年真題 系統架構設計師 綜合知識 答案解析02

系統架構設計師第二版教程VIP課程https://edu.csdn.net/course/detail/40283 面向對象技術 在UML用例圖中,參與者之間存在 關系。 A. 聚合 B. 包含 C. 繼承 D. 擴展 答案:C 解析:用例圖描述了一組用例、參與者以及它們之間的關系…

【學習筆記】《逆向工程核心原理》03.abex‘crackme-2、函數的調用約定、視頻講座-Tut.ReverseMe1

文章目錄 abexcrackme-21. Visual Basic文件的特征1.1. VB專用引擎1.2. 本地代碼與偽代碼1.3. 事件處理程序1.4. 未文檔化的結構體 2. 開始調試2.1. 間接調用2.2. RT_MainStruct結構體2.3. ThunRTMain()函數 3. 分析crackme3.1. 檢索字符串3.2. 查找字符串地址3.3. 生成Serial的…

深入解析Go語言Channel:源碼剖析與并發讀寫機制

文章目錄 Channel的內部結構Channel的創建過程有緩沖Channel的并發讀寫機制同時讀寫的可能性發送操作的實現接收操作的實現 并發讀寫的核心機制解析互斥鎖保護環形緩沖區等待隊列直接傳遞優化Goroutine調度 實例分析:有緩沖Channel的并發讀寫性能優化與最佳實踐緩沖…

初識Linux(14)Ext系列?件系統

之前談論的都是已打開文件在操作系統的中的管理,但是還有更多的文件沒有被打開,被存在磁盤中,如何管理這些磁盤中的文件,就是本篇的學習目標。 目錄 1.理解硬件 磁盤結構 扇區的讀寫 CHS地址定位 磁盤的邏輯結構 2. 引??件…

電機控制常見面試問題(十二)

文章目錄 一.電機鎖相環1.理解鎖相環2.電機控制中的鎖相環應用3.數字鎖相環(DPLL) vs 模擬鎖相環(APLL)4.鎖相環設計的關鍵技術挑戰5.總結 二、磁鏈觀測1.什么是磁鏈?2.為什么要觀測磁鏈?3.怎么觀測磁鏈&am…

Android `%d` 與 `1$%d` 格式化的區別

在 Android 開發中,我們經常需要對字符串進行格式化處理,比如動態填充數字、日期、字符等。 其中,%d 和 1$%d 都是格式化占位符,但它們在使用上有一些不同。 本文將詳細解析這兩者的區別,并結合 Kotlin 代碼示例幫助你…

SpringBoot中使用kaptcha生成驗證碼

簡介 kaptcha是谷歌開源的簡單實用的驗證碼生成工具。通過設置參數&#xff0c;可以自定義驗證碼大小、顏色、顯示的字符等等。 Maven引入依賴 <!-- https://mvnrepository.com/artifact/pro.fessional/kaptcha --><dependency><groupId>pro.fessional<…

如何在PHP中實現數據加密與解密:保護敏感信息

如何在PHP中實現數據加密與解密&#xff1a;保護敏感信息 在現代Web開發中&#xff0c;數據安全是一個至關重要的議題。無論是用戶的個人信息、支付數據&#xff0c;還是其他敏感信息&#xff0c;都需要在存儲和傳輸過程中進行加密&#xff0c;以防止數據泄露和惡意攻擊。PHP作…

單元測試、系統測試、集成測試、回歸測試的步驟、優點、缺點、注意點梳理說明

單元測試、系統測試、集成測試、回歸測試的梳理說明 單元測試 步驟&#xff1a; 編寫測試用例&#xff0c;覆蓋代碼的各個分支和邊界條件。使用測試框架&#xff08;如JUnit、NUnit&#xff09;執行測試。檢查測試結果&#xff0c;確保代碼按預期運行。修復發現的缺陷并重新測…

C++能力測試題

以下是一些C能力測試題&#xff0c;涵蓋了從基礎語法到高級特性的多個方面&#xff1a; 選擇題 1. 下面關于RTTI的說法&#xff0c;正確的是&#xff1f; A. 使用typeid前必須包含<type_info>頭文件。 B. typeid只能用于多態類型或表達式。 C. typeid可以用于不完整類型…

模擬類似 DeepSeek 的對話

以下是一個完整的 JavaScript 數據流式獲取實現方案&#xff0c;模擬類似 DeepSeek 的對話式逐段返回效果。包含前端實現、后端模擬和詳細注釋&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><titl…

【訓練細節解讀】文本智能混合分塊(Mixtures of Text Chunking,MoC)引領RAG進入多粒度感知智能分塊階段

RAG系統在處理復雜上下文時,傳統和語義分塊方法的局限性,文本分塊的質量限制了檢索到的內容,從而影響生成答案的準確性。盡管其他算法組件有所進步,但分塊策略中的增量缺陷仍可能在一定程度上降低整體系統性能。如何直接量化分塊質量?如何有效利用大型語言模型(LLMs)進行…

IMA+DeepSeekR1+本地知識庫撰寫NOIP2008普及組T3【傳球游戲】題解

目錄 一、提問詞 二、DeepSeekR1回復 題目描述 解題思路 實現代碼 代碼說明 三、說明 【IMADeepSeekR1本地知識庫】撰寫NOIP2008普及組復賽題解系列 1、IMADeepSeekR1本地知識庫撰寫NOIP2008普及組T1【ISBN 號碼】題解-CSDN博客 2、IMADeepSeekR1本地知識庫撰寫NOIP200…

Nginx正向代理HTTPS配置指南(僅供參考)

要使用Nginx作為正向代理訪問HTTPS網站&#xff0c;需通過CONNECT方法建立隧道。以下是操作詳細步驟&#xff1a; 1. 安裝Nginx及依賴模塊 需要模塊&#xff1a;ngx_http_proxy_connect_module&#xff08;支持CONNECT方法&#xff09;。 安裝方式&#xff1a;需重新編譯Nginx…

Python 實現機器學習的 房價預測回歸項目

項目目標&#xff1a; 基于房屋特征&#xff08;如房間數、地理位置等&#xff09;預測加州地區的房價中位數。 使用 Python 實現機器學習的 房價預測回歸項目&#xff08;使用 California Housing 數據集&#xff09; 環境準備 # 安裝必要庫&#xff08;若未安裝&#xff09…

聚力·突破·共贏|修飾組學服務聯盟正式成立,共啟協同發展新篇章

2025年3月13日&#xff0c;上海——由中科新生命、杭州微米生物、廣科安德、承啟生物、派森諾生物、胡珀生物等十余家行業標桿企業共同發起的“修飾組學服務聯盟”成立儀式在上海紫竹新興產業技術研究院隆重舉行。聯盟以“聚力突破共贏”為主題&#xff0c;致力于整合修飾組學全…

【Docker項目實戰】使用Docker部署serverMmon青蛇探針(詳細教程)

【Docker項目實戰】使用Docker部署serverMmon青蛇探針 一、serverMmon介紹1.1 serverMmon 簡介1.2 主要特點二、本次實踐規劃2.1 本地環境規劃2.2 本次實踐介紹三、本地環境檢查3.1 檢查Docker服務狀態3.2 檢查Docker版本3.3 檢查docker compose 版本四、下載serverMmon鏡像五、…

力扣刷題(數組篇)

日期類 #pragma once#include <iostream> #include <assert.h> using namespace std;class Date { public:// 構造會頻繁調用&#xff0c;所以直接放在類里面&#xff08;類里面的成員函數默認為內聯&#xff09;Date(int year 1, int month 1, int day 1)//構…