46/100 生成對抗網路(GAN)基礎 🎨 讓 AI 產生逼真的圖片、音樂和語音!

更新 發佈閱讀 16 分鐘

AI時代系列(3) 機器學習三部曲: 🔹 第一部:《機器學習 —— AI 智慧的啟航》


46/100 第五週:非監督學習


46. 生成對抗網路(GAN)基礎 🎨 讓 AI 產生逼真的圖片、音樂和語音!


🎨 生成對抗網路(GAN)基礎

讓 AI 產生逼真的圖片、音樂和語音!

________________________________________


🔎 一、什麼是 GAN(Generative Adversarial Network)?


Ian Goodfellow 於 2014 年提出

是一種強大的生成模型(Generative Model)


兩個神經網路互相對抗、相互提升

o 生成器(Generator, G):負責「騙人」產生逼真數據

o 判別器(Discriminator, D):負責「抓假」分辨真假


最終目標:讓生成器產生的數據逼真到連判別器都分不出真假!

________________________________________


🌟 二、GAN 運作原理(核心概念)


組件 功能


Generator (G): 從隨機噪聲產生類似真實的數據(假圖片、假音樂)


Discriminator (D): 判斷輸入是真實資料還是 G 生成的假資料


對抗學習:G 持續學習如何「騙」D,D 不斷強化辨識能力


損失函數:雙方互相博弈,最終達到均衡

________________________________________


🛠 三、簡化數學公式(直觀理解)


G: 生成器 D: 判別器

-------------------- ----------------------------------

| 亂數 z ~ p(z) | | 真實樣本 x ~ p_data(x) |

| → G(z) → 假樣本 | | |

-------------------- ----------------------------------

↓ ↓

嘗試騙過 D(生成真) 嘗試分辨真假(真假概率越準越好)

整體損失函數:

min_G max_D V(D, G)


V(D, G) = E_x[log D(x)] + E_z[log(1 - D(G(z)))]


這段圖文內容清楚地呈現了 生成對抗網路(GAN) 的核心對抗機制:


生成器(G)從隨機噪聲 z∼p(z)產生假樣本 G(z),目的是讓這些假樣本看起來像真實資料,試圖「騙過」判別器(D);


而判別器的任務則是區分真實樣本 x∼pdata(x)與生成樣本 G(z),提升辨別正確率。兩者透過對抗性的學習方式進行「博弈」,


損失函數 V(D,G) 同時包含 D 判別真實樣本的準確性 log⁡D(x),以及分辨生成樣本的能力 log⁡(1−D(G(z)))。整體學習目標就是 G 嘗試最小化此函數,而 D 嘗試最大化它,最終達成一個動態平衡,生成器能產出幾可亂真的樣本,判別器則無法再準確分辨真假。



🎯 直觀理解:


D 就像警察:越準越好。


G 就像造假者:越逼真越好。


整體是一場博弈:G 和 D 相互進化,直到 D 無法分辨真假為止(也就是達成納什均衡的狀態)。


________________________________________


📈 四、GAN 經典應用場景


✅ 圖片生成(如:DeepFake、人臉生成)

✅ AI 作畫(AI 藝術生成)

✅ 語音合成(Text-to-Speech,TTS)

✅ 音樂創作(AI 自動作曲)

✅ 數據增強(Data Augmentation)

✅ 遊戲場景生成、模擬器生成虛擬環境

________________________________________


🎨 五、AI 生圖範例 - DCGAN(圖片生成)


python


import torch

import torch.nn as nn

import torch.optim as optim

from torchvision import datasets, transforms

from torchvision.utils import save_image

import os


# 設定裝置

device = torch.device("cuda" if torch.cuda.is_available() else "cpu")


# 生成器模型

class Generator(nn.Module):

def __init__(self):

super().__init__()

self.main = nn.Sequential(

nn.ConvTranspose2d(100, 128, 7, 1, 0, bias=False),

nn.BatchNorm2d(128),

nn.ReLU(True),

nn.ConvTranspose2d(128, 64, 4, 2, 1, bias=False),

nn.BatchNorm2d(64),

nn.ReLU(True),

nn.ConvTranspose2d(64, 1, 4, 2, 1, bias=False),

nn.Tanh()

)


def forward(self, x):

return self.main(x)


# 判別器模型

class Discriminator(nn.Module):

def __init__(self):

super().__init__()

self.main = nn.Sequential(

nn.Conv2d(1, 64, 4, 2, 1, bias=False),

nn.LeakyReLU(0.2, inplace=True),

nn.Conv2d(64, 128, 4, 2, 1, bias=False),

nn.BatchNorm2d(128),

nn.LeakyReLU(0.2, inplace=True),

nn.Flatten(),

nn.Linear(128 * 7 * 7, 1),

nn.Sigmoid()

)


def forward(self, x):

return self.main(x)


# 超參數設定

batch_size = 64

lr = 0.0002

num_epochs = 10

latent_dim = 100


# 數據處理

transform = transforms.Compose([

transforms.ToTensor(),

transforms.Normalize([0.5], [0.5])

])

dataset = datasets.MNIST(root='data', train=True, transform=transform, download=True)

dataloader = torch.utils.data.DataLoader(dataset, batch_size=batch_size, shuffle=True)


# 模型與優化器

G = Generator().to(device)

D = Discriminator().to(device)

loss_fn = nn.BCELoss()

optimizer_G = optim.Adam(G.parameters(), lr=lr, betas=(0.5, 0.999))

optimizer_D = optim.Adam(D.parameters(), lr=lr, betas=(0.5, 0.999))


# 訓練

os.makedirs('dcgan_output', exist_ok=True)

for epoch in range(num_epochs):

for i, (real_imgs, _) in enumerate(dataloader):

real_imgs = real_imgs.to(device)

batch_size = real_imgs.size(0)


# 訓練判別器 D

real_labels = torch.ones(batch_size, 1).to(device)

fake_labels = torch.zeros(batch_size, 1).to(device)

z = torch.randn(batch_size, latent_dim, 1, 1).to(device)

fake_imgs = G(z)


real_loss = loss_fn(D(real_imgs), real_labels)

fake_loss = loss_fn(D(fake_imgs.detach()), fake_labels)

d_loss = real_loss + fake_loss


optimizer_D.zero_grad()

d_loss.backward()

optimizer_D.step()


# 訓練生成器 G

g_loss = loss_fn(D(fake_imgs), real_labels)


optimizer_G.zero_grad()

g_loss.backward()

optimizer_G.step()


if i % 100 == 0:

print(f"Epoch [{epoch+1}/{num_epochs}] Step [{i}/{len(dataloader)}] "

f"D Loss: {d_loss.item():.4f}, G Loss: {g_loss.item():.4f}")


# 每一輪儲存生成圖片

with torch.no_grad():

fake_imgs = G(torch.randn(64, latent_dim, 1, 1).to(device))

save_image(fake_imgs[:25], f"dcgan_output/epoch_{epoch+1}.png", nrow=5, normalize=True)


print("訓練完成,生成圖片已儲存至 dcgan_output/")


🖼 執行後效果:


程式會在每個訓練 epoch 產生 25 張 28x28 的手寫數字圖片,並儲存在 dcgan_output 資料夾中。

________________________________________


📊 六、GAN 進階變種


模型名稱 功能特色

DCGAN 深度卷積 GAN,生成更精緻圖片

CycleGAN 可實現風格轉換(馬→斑馬,照片→油畫)

StyleGAN 高品質人臉生成,超擬真

Pix2Pix 影像到影像的轉換

WGAN 解決傳統 GAN 訓練不穩定問題

________________________________________


📉 七、GAN 優缺點總結


優點 缺點

✅ 生成結果逼真度高 ❌ 訓練極不穩定(模式崩潰)

✅ 應用範圍廣(圖片、音樂、語音) ❌ 需要大量數據與運算資源

✅ 不需標籤資料(Unsupervised) ❌ 難以衡量生成效果好壞(評估困難)

________________________________________


🎯 八、總結與亮點


✔ GAN 是目前最受矚目的 AI 生成技術

✔ 不只讓機器「看」得懂,還能讓機器「創造」內容

✔ 是**生成式 AI(Generative AI)**的核心技術基礎

________________________________________


📌 一句話精華


🎨 GAN = 讓 AI 學會「以假亂真」,創作出人類也分不清的影像、音樂與語音!

________________________________________




留言
avatar-img
留言分享你的想法!
avatar-img
Hansen W的沙龍
11會員
274內容數
AIHANS沙龍是一個結合AI技術實戰、產業策略與自我成長的知識平台,主題涵蓋機器學習、生成式AI、創業經驗、財務規劃及哲學思辨。這裡不只提供系統化學習資源與實作案例,更強調理性思維與行動力的結合。無論你是AI初學者、創業者,還是追求人生升維的行者,都能在這裡找到前進的方向與志同道合的夥伴。
Hansen W的沙龍的其他內容
2025/05/28
SVD透過分解矩陣找出潛藏特徵,能精準填補稀疏評分、壓縮影像、抽取文本主題。保留少數奇異值即可降維與去雜訊,同時揭露使用者與物品之間的隱含關係,讓推薦更貼心、洞察更清晰。此技術計算量大,可搭配截斷SVD加速,現已廣泛應用於 Netflix、Spotify 等協同過濾與 LSA 語意分析。
Thumbnail
2025/05/28
SVD透過分解矩陣找出潛藏特徵,能精準填補稀疏評分、壓縮影像、抽取文本主題。保留少數奇異值即可降維與去雜訊,同時揭露使用者與物品之間的隱含關係,讓推薦更貼心、洞察更清晰。此技術計算量大,可搭配截斷SVD加速,現已廣泛應用於 Netflix、Spotify 等協同過濾與 LSA 語意分析。
Thumbnail
2025/05/28
PCA透過尋找資料最大變異方向,把多維特徵壓縮成少數互不相關的主成分,既保留關鍵資訊,又去除雜訊與冗餘。它大幅降低維度詛咒帶來的計算負擔,並將高維數據轉換成易於解釋的 2D/3D 視覺,協助後續聚類、分類或特徵選取。若先做標準化並利用解釋變異量挑選主成分,可在效率與資訊量之間取得最佳平衡。
Thumbnail
2025/05/28
PCA透過尋找資料最大變異方向,把多維特徵壓縮成少數互不相關的主成分,既保留關鍵資訊,又去除雜訊與冗餘。它大幅降低維度詛咒帶來的計算負擔,並將高維數據轉換成易於解釋的 2D/3D 視覺,協助後續聚類、分類或特徵選取。若先做標準化並利用解釋變異量挑選主成分,可在效率與資訊量之間取得最佳平衡。
Thumbnail
2025/05/28
DBSCAN 透過 ε 半徑與 MinPts 判斷密度,無須事先設定群數,可自動偵測任意形狀群集並標記離群點,對含雜訊或非線性分布的地理、天文、社群資料特別實用;但 ε、MinPts 需細調,且在高維度時距離計算衰減,效果有限。
Thumbnail
2025/05/28
DBSCAN 透過 ε 半徑與 MinPts 判斷密度,無須事先設定群數,可自動偵測任意形狀群集並標記離群點,對含雜訊或非線性分布的地理、天文、社群資料特別實用;但 ε、MinPts 需細調,且在高維度時距離計算衰減,效果有限。
Thumbnail
看更多
你可能也想看
Thumbnail
本文介紹了人工智慧(AI)及機器學習(ML)的基本概念和關係,探討了數據在機器學習中的重要性,以及深度學習和生成式人工智慧的應用。
Thumbnail
本文介紹了人工智慧(AI)及機器學習(ML)的基本概念和關係,探討了數據在機器學習中的重要性,以及深度學習和生成式人工智慧的應用。
Thumbnail
呈上篇介紹如何訓練模型,此篇就主要介紹如何利用訓練好的模型來生成圖片 [深度學習][Python]DCGAN訓練生成手寫阿拉伯數字_生成篇 生成的結果 生成的圖片大小會根據,當初設置的生成器輸出大小來決定,當你使用生成對抗網絡(GAN)生成圖像時,生成器模型的最後一層通常會決定生成圖
Thumbnail
呈上篇介紹如何訓練模型,此篇就主要介紹如何利用訓練好的模型來生成圖片 [深度學習][Python]DCGAN訓練生成手寫阿拉伯數字_生成篇 生成的結果 生成的圖片大小會根據,當初設置的生成器輸出大小來決定,當你使用生成對抗網絡(GAN)生成圖像時,生成器模型的最後一層通常會決定生成圖
Thumbnail
本文將延續上一篇文章,經由訓練好的GAN模型中的生成器來生成圖片 [深度學習][Python]訓練MLP的GAN模型來生成圖片_訓練篇 [深度學習][Python]訓練CNN的GAN模型來生成圖片_訓練篇 相較之下CNN的GAN生成的效果比較好,但模型也相對比較複雜,訓練時間花的也比較
Thumbnail
本文將延續上一篇文章,經由訓練好的GAN模型中的生成器來生成圖片 [深度學習][Python]訓練MLP的GAN模型來生成圖片_訓練篇 [深度學習][Python]訓練CNN的GAN模型來生成圖片_訓練篇 相較之下CNN的GAN生成的效果比較好,但模型也相對比較複雜,訓練時間花的也比較
Thumbnail
科技發達,AI智能也越來越發達。 蠢孩子,我每篇小說的圖片都是用AI製作的唷!!
Thumbnail
科技發達,AI智能也越來越發達。 蠢孩子,我每篇小說的圖片都是用AI製作的唷!!
Thumbnail
生成式AI(Generative AI)能夠創造新內容和想法,包括對話、故事、圖像、視訊和音樂等。本文將介紹幾種生成式AI模型,以及其在設計製造、教育、客戶服務、媒體與娛樂、市場營銷領域的應用和風險。然後就生成式AI的應用,設計製造、教育、客戶服務、媒體與娛樂、市場營銷等相關領域提供了一些示例。
Thumbnail
生成式AI(Generative AI)能夠創造新內容和想法,包括對話、故事、圖像、視訊和音樂等。本文將介紹幾種生成式AI模型,以及其在設計製造、教育、客戶服務、媒體與娛樂、市場營銷領域的應用和風險。然後就生成式AI的應用,設計製造、教育、客戶服務、媒體與娛樂、市場營銷等相關領域提供了一些示例。
Thumbnail
這篇文章介紹瞭如何利用生成式AI(GenAI)來提高學習效率,包括文章重點整理、完善知識體系、客製化學習回饋、提供多元觀點等方法。同時提醒使用者應注意內容的信效度,保持學術誠信,適當運用GenAI能大幅提升工作效率。
Thumbnail
這篇文章介紹瞭如何利用生成式AI(GenAI)來提高學習效率,包括文章重點整理、完善知識體系、客製化學習回饋、提供多元觀點等方法。同時提醒使用者應注意內容的信效度,保持學術誠信,適當運用GenAI能大幅提升工作效率。
Thumbnail
現AI時代我們常見的生成影像是如何製作出來的,或許你已經開始熟悉AI“假臉”的風格。但由于現在網路上大量流傳的多數是以DALL-E或是Stable Diffiusion+幾個特定的LoRA所生成的結果。以至於人們越來越有識別真假照片的能力。但或許你不知道的是,早在幾年前純粹用GAN生成技術所產出的人
Thumbnail
現AI時代我們常見的生成影像是如何製作出來的,或許你已經開始熟悉AI“假臉”的風格。但由于現在網路上大量流傳的多數是以DALL-E或是Stable Diffiusion+幾個特定的LoRA所生成的結果。以至於人們越來越有識別真假照片的能力。但或許你不知道的是,早在幾年前純粹用GAN生成技術所產出的人
Thumbnail
生成式AI(Generative AI)是近年來人工智慧領域中備受矚目的技術之一。它以機器學習為基礎,通過學習大量數據中的模式和關係,能夠生成各種新的內容,涵蓋文字、圖像、音訊等多個領域。本文將深入探討生成式AI的原理、優缺點以及應用範疇。
Thumbnail
生成式AI(Generative AI)是近年來人工智慧領域中備受矚目的技術之一。它以機器學習為基礎,通過學習大量數據中的模式和關係,能夠生成各種新的內容,涵蓋文字、圖像、音訊等多個領域。本文將深入探討生成式AI的原理、優缺點以及應用範疇。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News