生成對抗網絡(GANs)中的損失函數公式 判別器最優解D^*(x)的推導

https://www.bilibili.com/video/BV1YyHSekEE2在這里插入圖片描述

這張圖片展示的是生成對抗網絡(GANs)中的損失函數公式,特別是針對判別器(Discriminator)和生成器(Generator)的優化目標。讓我們用Markdown格式逐步解析這些公式:

GAN的基本優化目標
markdown
深色版本
min ? G max ? D V ( D , G ) = E x ~ p d a t a ( x ) [ log ? D ( x ) ] + E z ~ p z ( z ) [ log ? ( 1 ? D ( G ( z ) ) ) ] \min_G \max_D V(D, G) = \mathbb{E}_{\boldsymbol{x} \sim p_{data}(\boldsymbol{x})}[\log D(\boldsymbol{x})] + \mathbb{E}_{\boldsymbol{z} \sim p_{\boldsymbol{z}}(\boldsymbol{z})}[\log(1 - D(G(\boldsymbol{z})))] Gmin?Dmax?V(D,G)=Expdata?(x)?[logD(x)]+Ezpz?(z)?[log(1?D(G(z)))]
min ? G max ? D \min_G \max_D minG?maxD? 表示:這是一個最小最大博弈問題,其中生成器 G 和判別器 D 在相互競爭中進行優化。
E x ~ p d a t a ( x ) \mathbb{E}_{\boldsymbol{x} \sim p_{data}(\boldsymbol{x})} Expdata?(x)?:表示對真實數據分布 p d a t a ( x ) p_{data}(\boldsymbol{x}) pdata?(x) 的期望值計算。
E z ~ p z ( z ) \mathbb{E}_{\boldsymbol{z} \sim p_{\boldsymbol{z}}(\boldsymbol{z})} Ezpz?(z)?:表示對噪聲分布 p z ( z ) p_{\boldsymbol{z}}(\boldsymbol{z}) pz?(z) 的期望值計算。
D ( x ) D(\boldsymbol{x}) D(x):判別器輸出的真實樣本的概率。
G ( z ) G(\boldsymbol{z}) G(z):生成器根據噪聲 z \boldsymbol{z} z 生成的樣本。
log ? D ( x ) \log D(\boldsymbol{x}) logD(x) log ? ( 1 ? D ( G ( z ) ) ) \log(1 - D(G(\boldsymbol{z}))) log(1?D(G(z))):分別代表判別器正確識別真實樣本和錯誤識別生成樣本的對數概率。
判別器的損失函數
markdown
深色版本
l o s s d = ? ( 1 N ∑ i = 1 N y i log ? ( p i ) + ( 1 ? y i ) log ? ( 1 ? p i ) ) loss_d = -\left(\frac{1}{N}\sum_{i=1}^{N}y_i\log(p_i) + (1-y_i)\log(1-p_i)\right) lossd?=?(N1?i=1N?yi?log(pi?)+(1?yi?)log(1?pi?))
這是一個二分類交叉熵損失函數,用于衡量判別器在區分真實和生成樣本時的性能。
y i y_i yi? 是標簽(1表示真實樣本,0表示生成樣本), p i p_i pi? 是判別器預測的概率。
判別器損失函數的具體形式
markdown
深色版本
l o s s d = ? ( 1 N ∑ i = 1 N y i log ? ( D ( i m a g e i ) ) + ( 1 ? y i ) log ? ( 1 ? D ( i m a g e i ) ) ) loss_d = -\left(\frac{1}{N}\sum_{i=1}^{N}y_i\log(D(image_i)) + (1-y_i)\log(1-D(image_i))\right) lossd?=?(N1?i=1N?yi?log(D(imagei?))+(1?yi?)log(1?D(imagei?)))
這里將 p i p_i pi? 替換為 D ( i m a g e i ) D(image_i) D(imagei?),即判別器對圖像 i m a g e i image_i imagei? 的輸出概率。
判別器損失函數的進一步分解
markdown
深色版本
min ? l o s s d = ? ( 1 N r e a l ∑ i log ? ( D ( x i ) ) + 1 N f a k e ∑ i log ? ( 1 ? D ( G ( z i ) ) ) ) \min loss_d = -\left(\frac{1}{N_{real}}\sum_i\log(D(x_i)) + \frac{1}{N_{fake}}\sum_i\log(1-D(G(z_i)))\right) minlossd?=?(Nreal?1?i?log(D(xi?))+Nfake?1?i?log(1?D(G(zi?))))
這個公式明確地將損失分為兩部分:一部分是對于真實樣本 x i x_i xi? 的損失,另一部分是對于生成樣本 G ( z i ) G(z_i) G(zi?) 的損失。
最大化判別器的目標
markdown
深色版本
max ? 1 N r e a l ∑ i log ? ( D ( x i ) ) + 1 N f a k e ∑ i log ? ( 1 ? D ( G ( z i ) ) ) \max \frac{1}{N_{real}}\sum_i\log(D(x_i)) + \frac{1}{N_{fake}}\sum_i\log(1-D(G(z_i))) maxNreal?1?i?log(D(xi?))+Nfake?1?i?log(1?D(G(zi?)))
這個公式展示了判別器的目標是最大化其對真實樣本的識別能力和對生成樣本的拒絕能力。
通過上述公式,我們了解了GAN中判別器和生成器之間的博弈過程,以及如何通過優化損失函數來訓練這兩個模型,以達到生成高質量樣本的目的。


import torch
import torch.nn as nn
import torch.optim as optim
from torchvision import datasets, transforms# 定義生成器
class Generator(nn.Module):def __init__(self):super(Generator, self).__init__()self.main = nn.Sequential(nn.Linear(100, 256),nn.ReLU(True),nn.Linear(256, 256),nn.ReLU(True),nn.Linear(256, 784),nn.Tanh())def forward(self, input):return self.main(input)# 定義判別器
class Discriminator(nn.Module):def __init__(self):super(Discriminator, self).__init__()self.main = nn.Sequential(nn.Linear(784, 256),nn.ReLU(True),nn.Linear(256, 256),nn.ReLU(True),nn.Linear(256, 1),nn.Sigmoid())def forward(self, input):return self.main(input)# 初始化模型、損失函數和優化器
generator = Generator()
discriminator = Discriminator()criterion = nn.BCELoss()  # Binary Cross Entropy Loss
optimizer_g = optim.Adam(generator.parameters(), lr=0.0002)
optimizer_d = optim.Adam(discriminator.parameters(), lr=0.0002)# 加載MNIST數據集
transform = transforms.Compose([transforms.ToTensor(), transforms.Normalize([0.5], [0.5])])
train_loader = torch.utils.data.DataLoader(datasets.MNIST('data', train=True, download=True, transform=transform), batch_size=64, shuffle=True)# 訓練循環
num_epochs = 10
for epoch in range(num_epochs):for i, (imgs, _) in enumerate(train_loader):# 準備數據valid = torch.ones(imgs.size(0), 1)fake = torch.zeros(imgs.size(0), 1)real_imgs = imgs.view(imgs.size(0), -1)# 訓練判別器optimizer_d.zero_grad()z = torch.randn(imgs.size(0), 100)gen_imgs = generator(z)loss_real = criterion(discriminator(real_imgs), valid)loss_fake = criterion(discriminator(gen_imgs.detach()), fake)loss_d = (loss_real + loss_fake) / 2loss_d.backward()optimizer_d.step()# 訓練生成器optimizer_g.zero_grad()loss_g = criterion(discriminator(gen_imgs), valid)loss_g.backward()optimizer_g.step()print(f"Epoch [{epoch}/{num_epochs}] Loss D: {loss_d.item()}, loss G: {loss_g.item()}")print('訓練完成')

在這里插入圖片描述
判別器損失(Loss D)
趨勢:判別器損失在訓練過程中表現出較大的波動性。初期較低(<0.2),中期升高(最高達到0.5776),然后又回落。
解釋:這表明模型在學習過程中經歷了不同的階段,其中生成器在某些時期能夠較好地欺騙判別器,導致判別器的損失增加。
生成器損失(Loss G)
趨勢:生成器損失從最初的較高水平逐漸下降到最低點(1.5655),然后有所回升并在后續的epoch中保持在一個相對較高的水平(約2.5至4之間)。
解釋:這種模式可能意味著生成器的學習速率與判別器相比不夠平衡,或者存在過擬合現象。特別是在第4個epoch之后,生成器損失的上升可能表示生成器遇到了瓶頸或難以進一步優化。
🔍 結論與建議
穩定性問題:由于損失值的大幅波動,可能需要調整超參數來穩定訓練過程。比如:
調整學習率。
應用梯度懲罰或其他正則化技術以增強訓練穩定性。
網絡架構或數據集問題:如果損失值持續不穩定,考慮檢查數據集是否足夠多樣化,以及網絡架構是否有改進空間。
早期停止策略:可以實施早期停止策略來防止過擬合,并確保模型在驗證集上的性能不會惡化。
可視化:定期保存并查看生成樣本,可以幫助理解模型的實際表現和進步情況。


import torch
import torch.nn as nn
import torch.optim as optim
from torchvision import datasets, transforms, utils
import matplotlib.pyplot as plt# 檢查是否可用 CUDA
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
print(f"Using device: {device}")# -----------------------------
# 模型定義
# -----------------------------
class Generator(nn.Module):def __init__(self):super(Generator, self).__init__()self.main = nn.Sequential(nn.Linear(100, 256),nn.ReLU(True),nn.Linear(256, 256),nn.ReLU(True),nn.Linear(256, 784),nn.Tanh())def forward(self, input):return self.main(input)class Discriminator(nn.Module):def __init__(self):super(Discriminator, self).__init__()self.main = nn.Sequential(nn.Linear(784, 256),nn.ReLU(True),nn.Linear(256, 256),nn.ReLU(True),nn.Linear(256, 1),nn.Sigmoid())def forward(self, input):return self.main(input)# -----------------------------
# 初始化模型和優化器
# -----------------------------
generator = Generator().to(device)
discriminator = Discriminator().to(device)criterion = nn.BCELoss()
optimizer_g = optim.Adam(generator.parameters(), lr=0.0002)
optimizer_d = optim.Adam(discriminator.parameters(), lr=0.0002)# -----------------------------
# 數據加載
# -----------------------------
transform = transforms.Compose([transforms.ToTensor(),transforms.Normalize([0.5], [0.5])
])train_loader = torch.utils.data.DataLoader(datasets.MNIST('data', train=True, download=True, transform=transform),batch_size=64,shuffle=True
)# -----------------------------
# 可視化函數
# -----------------------------
def show_images(images, epoch):images = images.view(-1, 1, 28, 28)grid = utils.make_grid(images, nrow=4, normalize=True)plt.figure(figsize=(5, 5))plt.title(f"Epoch {epoch}")plt.imshow(grid.permute(1, 2, 0).cpu())plt.axis("off")plt.show()# 固定噪聲,用于每輪觀察生成效果變化
fixed_noise = torch.randn(16, 100, device=device)# -----------------------------
# 訓練循環
# -----------------------------
num_epochs = 20for epoch in range(num_epochs):for i, (imgs, _) in enumerate(train_loader):imgs = imgs.to(device)real_labels = torch.ones(imgs.size(0), 1).to(device)fake_labels = torch.zeros(imgs.size(0), 1).to(device)# ---------------------#  訓練判別器# ---------------------optimizer_d.zero_grad()real_imgs = imgs.view(imgs.size(0), -1)d_real_loss = criterion(discriminator(real_imgs), real_labels)z = torch.randn(imgs.size(0), 100).to(device)gen_imgs = generator(z).detach()d_fake_loss = criterion(discriminator(gen_imgs), fake_labels)loss_d = (d_real_loss + d_fake_loss) / 2loss_d.backward()optimizer_d.step()# ---------------------#  訓練生成器# ---------------------optimizer_g.zero_grad()gen_imgs = generator(z)loss_g = criterion(discriminator(gen_imgs), real_labels)loss_g.backward()optimizer_g.step()print(f"Epoch [{epoch}/{num_epochs}] Loss D: {loss_d.item():.4f}, Loss G: {loss_g.item():.4f}")# 每個epoch結束后可視化生成結果with torch.no_grad():generated = generator(fixed_noise).cpu()show_images(generated, epoch)print("訓練完成")

加入可視化
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

在這里插入圖片描述
在這里插入圖片描述
https://www.kaggle.com/code/alihhhjj/notebook8be232dcc8
在這里插入圖片描述

判別器最優解 $ D^*(x) $ 的推導

在生成對抗網絡(GAN)中,判別器的目標是最大化以下目標函數:

V ( D , G ) = E x ~ p d a t a ( x ) [ log ? D ( x ) ] + E z ~ p z ( z ) [ log ? ( 1 ? D ( G ( z ) ) ) ] V(D, G) = \mathbb{E}_{\boldsymbol{x} \sim p_{data}(\boldsymbol{x})}[\log D(\boldsymbol{x})] + \mathbb{E}_{\boldsymbol{z} \sim p_z(\boldsymbol{z})}[\log(1 - D(G(\boldsymbol{z})))] V(D,G)=Expdata?(x)?[logD(x)]+Ezpz?(z)?[log(1?D(G(z)))]

固定生成器 $ G $,我們希望找到使 $ V(D, G) $ 最大化的最優判別器 $ D^*(x) $。

一、簡化目標函數

考慮對某個固定的輸入樣本 $ x $,我們可以將目標函數簡化為一個關于 $ D(x) $ 的函數:

L ( D ( x ) ) = a log ? D ( x ) + b log ? ( 1 ? D ( x ) ) L(D(x)) = a \log D(x) + b \log (1 - D(x)) L(D(x))=alogD(x)+blog(1?D(x))

其中:

  • $ a = p_{data}(x) $:真實數據分布中 $ x $ 的概率密度;
  • $ b = p_g(x) $:生成器生成的數據分布中 $ x $ 的概率密度。

二、求極值:令導數為零

對 $ D(x) $ 求導并令其等于 0:

d L d D ( x ) = a D ( x ) ? b 1 ? D ( x ) = 0 \frac{dL}{dD(x)} = \frac{a}{D(x)} - \frac{b}{1 - D(x)} = 0 dD(x)dL?=D(x)a??1?D(x)b?=0

整理得:

a D ( x ) = b 1 ? D ( x ) \frac{a}{D(x)} = \frac{b}{1 - D(x)} D(x)a?=1?D(x)b?

這就是你看到的等式形式:

a D ? ( x ) = b 1 ? D ? ( x ) \frac{a}{D^*(x)} = \frac{b}{1 - D^*(x)} D?(x)a?=1?D?(x)b?

三、解方程求出 $ D^*(x) $

交叉相乘:

a ( 1 ? D ? ( x ) ) = b D ? ( x ) a(1 - D^*(x)) = b D^*(x) a(1?D?(x))=bD?(x)

展開并整理:

a = a D ? ( x ) + b D ? ( x ) ? a = D ? ( x ) ( a + b ) a = a D^*(x) + b D^*(x) \Rightarrow a = D^*(x)(a + b) a=aD?(x)+bD?(x)?a=D?(x)(a+b)

解得:

D ? ( x ) = a a + b D^*(x) = \frac{a}{a + b} D?(x)=a+ba?

代入 $ a = p_{data}(x), b = p_g(x) $,得到最終結果:

D ? ( x ) = p d a t a ( x ) p d a t a ( x ) + p g ( x ) D^*(x) = \frac{p_{data}(x)}{p_{data}(x) + p_g(x)} D?(x)=pdata?(x)+pg?(x)pdata?(x)?

四、意義

這表示在給定輸入樣本 $ x $ 的情況下,最優判別器 $ D^*(x) $ 輸出的是該樣本來自真實數據分布而非生成分布的概率。
在這里插入圖片描述


在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

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

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

相關文章

分布式爬蟲架構設計

隨著互聯網數據的爆炸式增長&#xff0c;單機爬蟲已經難以滿足大規模數據采集的需求。分布式爬蟲應運而生&#xff0c;它通過多節點協作&#xff0c;實現了數據采集的高效性和容錯性。本文將深入探討分布式爬蟲的架構設計&#xff0c;包括常見的架構模式、關鍵技術組件、完整項…

[java]eclipse中windowbuilder插件在線安裝

目錄 一、打開eclipse 二、打開插件市場 三、輸入windowbuilder&#xff0c;點擊install 四、進入安裝界面 五、勾選我同意... 重啟即可 一、打開eclipse 二、打開插件市場 三、輸入windowbuilder&#xff0c;點擊install 四、進入安裝界面 五、勾選我同意... 重啟即可

sass,less是什么?為什么要使用他們?

理解 他們都是css的預處理器,允許開發者通過更高級的語法編寫css代碼(支持變量,嵌套),然后通過編譯成css文件 使用原因 結構清晰,便于擴展提高開發效率,便于后期開發維護

Java設計模式之模板方法模式:從基礎到高級的全面解析(最詳解)

文章目錄 一、模板方法模式基礎概念1.1 什么是模板方法模式1.2 模板方法模式的核心結構1.3 模板方法模式中的方法分類1.4 模板方法模式的簡單示例二、模板方法模式的深入解析2.1 模板方法模式的核心原理2.2 模板方法模式的優勢與適用場景優勢分析適用場景2.3 模板方法模式與其他…

【C/C++】如何在一個事件驅動的生產者-消費者模型中使用觀察者進行通知與解耦

文章目錄 如何在一個事件驅動的生產者-消費者模型中使用觀察者進行通知與解耦?1 假設場景設計2 Codes3 流程圖4 優劣勢5 風險可能 如何在一個事件驅動的生產者-消費者模型中使用觀察者進行通知與解耦? 1 假設場景設計 Producer&#xff08;生產者&#xff09;&#xff1a;生…

MVC和MVVM架構的區別

MVC和MVVM都是前端開發中常用的設計模式&#xff0c;都是為了解決前端開發中的復雜性而設計的&#xff0c;而MVVM模式則是一種基于MVC模式的新模式。 MVC(Model-View-Controller)的三個核心部分&#xff1a;模型、視圖、控制器相較于MVVM(Model-View-ViewModel)的三個核心部分…

蘭亭妙微 | 圖標設計公司 | UI設計案例復盤

在「33」「312」新高考模式下&#xff0c;選科決策成為高中生和家長的「頭等大事」。蘭亭妙微公司受委托優化高考選科決策平臺個人診斷報告界面&#xff0c;核心挑戰是&#xff1a;如何將復雜的測評數據&#xff08;如學習能力傾向、學科報考機會、職業興趣等&#xff09;轉化為…

有銅半孔的設計規范與材料創新

設計關鍵參數 孔徑與間距限制 最小孔徑需≥0.6mm&#xff0c;孔邊距≥0.5mm&#xff0c;避免銅層脫落&#xff1b;拼版時半孔區域需預留2mm間距防止撕裂。 阻焊橋設計 必須保留阻焊橋&#xff08;寬度≥0.1mm&#xff09;&#xff0c;防止焊錫流入孔內造成短路。 獵板的材料…

Engineering a direct k-way Hypergraph Partitioning Algorithm【2017 ALENEX】

文章目錄 一、作者二、摘要三、相關工作四、算法概述五、實驗結果六、主要貢獻 一、作者 Yaroslav Akhremtsev, Tobias Heuer, Peter Sanders, Sebastian Schlag 二、摘要 我們開發了一種快速且高質量的多層算法&#xff0c;能夠直接將超圖劃分為 k 個平衡的塊 —— 無需借助遞…

視頻問答功能播放器(視頻問答)視頻彈題功能實例

視頻問答播放器是一種互動教學工具&#xff0c;在視頻播放過程中彈出題目卡&#xff0c;學員答題后才能繼續觀看&#xff0c;提升學習參與度。視頻問答功能播放器(視頻問答)視頻彈題功能實例&#xff1a; 視頻播放器的視頻問答功能&#xff08;也叫問答播放器、視頻彈題、視頻問…

2025年AI代理演進全景:從技術成熟度曲線到產業重構

2025年AI代理演進全景&#xff1a;從技術成熟度曲線到產業重構 一、技術成熟度曲線定位&#xff1a;AI代理的“期望膨脹期” 根據Gartner技術成熟度曲線&#xff08;Hype Cycle?&#xff09;&#xff0c;AI代理&#xff08;Agentic AI&#xff09;當前正處于期望膨脹期向泡沫…

基于python的機器學習(八)—— 評估算法(一)

目錄 一、機器學習評估的基本概念 1.1 評估的定義與目標 1.2 常見評估指標 1.3 訓練集、驗證集與測試集的劃分 二、分離數據集 2.1 分離訓練數據集和評估數據集 2.2 k折交叉驗證分離 2.3 棄一交叉驗證分離 2.4 重復隨機評估和訓練數據集分離 三、交叉驗證技術 3.…

Win11 系統登入時綁定微軟郵箱導致用戶名欠缺

Win11 系統登入時綁定微軟郵箱導致用戶名欠缺 解決思路 -> 解綁當前微軟郵箱和用戶名 -> 斷網離線建立本地賬戶 -> 設置本地賬戶為Admin權限 -> 注銷當前賬戶&#xff0c;登入新建的用戶 -> 聯網綁定微軟郵箱 -> 刪除舊的用戶命令步驟 管理員權限打開…

Mac系統-最方便的一鍵環境部署軟件ServBay(支持php,java,python,node,go,mysql等)沒有之一,已親自使用!

自從換成Mac電腦以后&#xff0c;做開發有時候要部署各種環境&#xff0c;如php&#xff0c;mysql&#xff0c;nginx&#xff0c;pgsql&#xff0c;java&#xff0c;node&#xff0c;python&#xff0c;go時&#xff0c;嘗試過原生環境部署&#xff0c;各種第三方軟件部署&…

Flink中Kafka連接器的基本應用

文章目錄 前言Kafka連接器基礎案例演示前置說明和環境準備步驟Kafka連接器基本配置關聯數據源映射轉換案例效果演示基于Kafka連接器同步數據到MySQL案例說明前置準備Kafka連接器消費位點調整映射轉換與數據投遞MysqlSlink持久化收集器數據最終效果演示小結參考前言 本文將基于…

Leetcode 刷題記錄 11 —— 二叉樹第二彈

本系列為筆者的 Leetcode 刷題記錄&#xff0c;順序為 Hot 100 題官方順序&#xff0c;根據標簽命名&#xff0c;記錄筆者總結的做題思路&#xff0c;附部分代碼解釋和疑問解答&#xff0c;01~07為C語言&#xff0c;08及以后為Java語言。 01 二叉樹的層序遍歷 /*** Definition…

【R語言科研繪圖】

R語言在繪制SCI期刊圖像時具有顯著優勢&#xff0c;以下從功能、靈活性和學術適配性三個方面分析其適用性&#xff1a; 數據可視化庫豐富 R語言擁有ggplot2、lattice、ggpubr等專業繪圖包&#xff0c;支持生成符合SCI期刊要求的高分辨率圖像&#xff08;如TIFF/PDF格式&#…

【Node.js】Web開發框架

個人主頁&#xff1a;Guiat 歸屬專欄&#xff1a;node.js 文章目錄 1. Node.js Web框架概述1.1 Web框架的作用1.2 Node.js主要Web框架生態1.3 框架選擇考慮因素 2. Express.js2.1 Express.js概述2.2 基本用法2.2.1 安裝Express2.2.2 創建基本服務器 2.3 路由2.4 中間件2.5 請求…

PDF 轉 JPG 圖片小工具:CodeBuddy 助力解決轉換痛點

本文所使用的 CodeBuddy 免費下載鏈接&#xff1a;騰訊云代碼助手 CodeBuddy - AI 時代的智能編程伙伴 前言 在數字化辦公與內容創作的浪潮中&#xff0c;將 PDF 文件轉換為 JPG 圖片格式的需求日益頻繁。無論是學術文獻中的圖表提取&#xff0c;還是宣傳資料的視覺化呈現&am…

Linux 文件系統層次結構

Linux 的文件系統遵循 Filesystem Hierarchy Standard (FHS) 標準&#xff0c;其目錄結構是層次化的&#xff0c;每個目錄都有明確的用途。以下是 Linux 中部分目錄的作用解析&#xff1a; 1. 根目錄 / 作用&#xff1a;根目錄是整個文件系統的頂層目錄&#xff0c;所有其他目…