<cite id="ffb66"></cite><cite id="ffb66"><track id="ffb66"></track></cite>
      <legend id="ffb66"><li id="ffb66"></li></legend>
      色婷婷久,激情色播,久久久无码专区,亚洲中文字幕av,国产成人A片,av无码免费,精品久久国产,99视频精品3
      網易首頁 > 網易號 > 正文 申請入駐

      VAE 原理拆解:從概率編碼到潛在空間正則化

      0
      分享至


      這篇文章從基本原理出發完整拆解變分自編碼器(VAE)的構建過程。重點不在數學推導而在于把概念落到足夠具體的層面:完成實現、訓練、調試和部署。每個組件做了什么、為什么需要它、代碼里怎么寫文章都會逐一交代,后半部分會逐行走讀一個最小化的 PyTorch 實現,并介紹訓練完成后的幾種推理模式。

      VAE 為什么存在

      當需要理解數據中潛藏的模式時,變分自編碼器(VAE)是一個值得考慮的選項。它不只是做數據壓縮而是以連續、可插值的方式去捕捉數據背后的生成結構:覆蓋可能性的完整范圍。訓練結束后模型既能重建已有樣本,也能生成新的逼真樣本,還能對新數據做異常檢測。

      標準自編碼器的做法是把數據壓縮到低維表示再還原。問題出在它學到的潛在空間往往缺乏結構:相鄰的點未必對應相似的數據,隨機采樣產出的結果也大多沒有意義。

      VAE 對潛在空間施加了正則化約束。輸入不再被映射到單一的潛在向量,而是映射到一個分布:通常是高斯分布。訓練期間,模型讓這些分布貼近一個已知的先驗(一般取標準正態分布),最終得到的潛在空間平滑且有組織,可以安全地從中采樣和推斷。

      這正是 VAE 在異常檢測和表示學習中發揮作用的原因。重建偏差可以在原始特征空間中得到直觀解讀;潛在偏差如果實現了解耦也具有可解釋性,但缺少專門的訓練目標(如 β-VAE、FactorVAE 等)時,解耦并無保證。

      VAE 在學習重建數據的同時,也在學習一個形態接近簡單概率分布的潛在空間。

      三個核心組件

      VAE 由三個概念層面的部件組成——編碼器、潛在空間(通過采樣/重參數化技巧實現)、解碼器。

      編碼器接收輸入,輸出兩個向量:均值 μ 和方差 σ2,二者共同定義潛在空間上的概率分布。采樣步驟利用一種保持可微性的技巧從該分布中抽取潛在向量,解碼器再拿到這個向量去重建原始輸入。



      訓練過程同時平衡兩個目標:重建要準確,潛在分布要貼近先驗。VAE 的結構特性正來源于這種平衡。

      損失函數

      VAE 的損失函數同時追求兩件事:把輸入數據重建得盡可能準,并約束潛在空間服從標準正態分布。重建損失(比如均方誤差)度量輸出與輸入的偏差;KL 散度度量學習到的潛在分布與標準正態分布之間的距離。

      換個角度看——重建損失在獎勵保真度,KL 損失則在防止模型死記硬背,迫使潛在空間維持良好的分布形態。

      VAE 的損失函數同時追求兩件事:把輸入數據重建得盡可能準,并約束潛在空間服從標準正態分布。

      從理論到代碼

      下面逐步走讀一個最小化的 PyTorch 實現。示例假定輸入為表格或展平后的數據,但同樣的思路適用于圖像和序列。

      定義編碼器

      編碼器將輸入向量映射為兩個輸出:潛在分布的均值和對數方差。

      import torch # PyTorch核心庫
      import torch.nn as nn # 神經網絡構建模塊
      import torch.nn.functional as F # 常用激活函數和工具函數
      class Encoder(nn.Module): # 將編碼器定義為神經網絡模塊
      def __init__(self, input_dim, latent_dim):
      super().__init__() # 初始化父類nn.Module
      # 第一個全連接層:
      # 接收輸入數據并將其映射到隱藏表示
      self.fc1 = nn.Linear(input_dim, 128)
      # 輸出潛在分布均值(mu)的線性層
      self.fc_mu = nn.Linear(128, latent_dim)
      # 輸出潛在分布對數方差(log σ2)的線性層
      # 使用對數方差是為了數值穩定性
      self.fc_logvar = nn.Linear(128, latent_dim)
      def forward(self, x):
      # 將輸入通過第一層并應用ReLU激活函數
      # 從原始輸入中提取有用特征
      h = F.relu(self.fc1(x))
      # 計算潛在分布的均值
      mu = self.fc_mu(h)
      # 計算潛在分布的對數方差
      logvar = self.fc_logvar(h)
      # 返回兩個參數,以便后續從分布中采樣
      return mu, logvar

      到這一步為止,還沒有涉及任何概率運算。代碼只是在預測分布的參數。

      編碼器將輸入數據壓縮為緊湊的潛在表示(μ 和 σ),捕捉其關鍵特征。

      重參數化技巧

      直接從分布中采樣會切斷梯度的傳播路徑。重參數化技巧的做法是把采樣拆解為一個確定性函數加上隨機噪聲。

      def reparameterize(mu, logvar):
      # 將對數方差轉換為標準差
      # std = sqrt(variance)
      # 使用logvar保持訓練的數值穩定性
      std = torch.exp(0.5 * logvar)
      # 從標準正態分布中采樣隨機噪聲
      # 這個噪聲是使VAE具有隨機性的關鍵
      eps = torch.randn_like(std)
      # 創建潛在向量z
      # z = 均值 + (隨機噪聲 * 標準差)
      # 這使得梯度在訓練過程中能夠通過mu和std流動
      return mu + eps * std

      梯度照常經由 μ 和 σ 回傳,隨機性又被保留下來。

      重參數化技巧讓 VAE 能在潛在空間中采一個隨機點,同時不破壞反向傳播。本質上,它把隨機性改寫成了網絡可以求導的形式。

      定義解碼器

      解碼器負責把潛在向量映射回原始輸入空間。

      class Decoder(nn.Module):
      def __init__(self, latent_dim, output_dim):
      # 初始化PyTorch父模塊
      super().__init__()
      # 第一個全連接層
      # 接收潛在向量z并將其擴展為隱藏表示
      self.fc1 = nn.Linear(latent_dim, 128)
      # 輸出層
      # 將隱藏表示映射回原始輸入大小
      # 產生重建結果
      self.fc_out = nn.Linear(128, output_dim)
      def forward(self, z):
      # 將潛在向量z通過第一個線性層
      # 并應用ReLU引入非線性
      h = F.relu(self.fc1(z))
      # 將隱藏表示通過輸出層
      # 產生重建的輸入
      return self.fc_out(h)

      解碼器不需要知道任何關于概率分布的事情,它只做重建。

      解碼器從采樣得到的潛在向量出發,嘗試恢復出與原始輸入匹配的數據。

      組合在一起:VAE

      class VAE(nn.Module):
      def __init__(self, input_dim, latent_dim):
      super().__init__()
      # 編碼器將輸入數據映射到潛在分布(mu, logvar)
      self.encoder = Encoder(input_dim, latent_dim)
      # 解碼器將潛在向量z映射到重建的輸入
      self.decoder = Decoder(latent_dim, input_dim)
      def forward(self, x):
      # 將輸入通過編碼器獲取潛在分布參數
      mu, logvar = self.encoder(x)
      # 使用重參數化技巧采樣潛在向量z
      z = reparameterize(mu, logvar)
      # 將潛在向量解碼回輸入空間
      recon_x = self.decoder(z)
      # 返回重建結果和潛在統計量(用于計算損失)
      return recon_x, mu, logvar

      前向傳播的流程與概念上的流程完全一致。

      損失函數的代碼實現

      def vae_loss(recon_x, x, mu, logvar, beta=1.0):
      # 重建損失:
      # 衡量輸出與原始輸入的接近程度
      recon_loss = F.mse_loss(recon_x, x, reduction='mean')
      # KL散度損失:
      # 懲罰潛在分布偏離標準正態分布過遠的情況
      kl_loss = -0.5 * torch.mean(
      1 + logvar - mu.pow(2) - logvar.exp()
      )
      # 總損失平衡重建質量
      # 和潛在空間正則化
      return recon_loss + beta * kl_loss

      beta 參數控制重建質量與潛在正則化之間的權衡。當 beta > 1 時即為 β-VAE——以犧牲重建精度為代價換取更解耦的潛在因子。

      訓練循環

      訓練階段模型只接觸數據樣本,優化上述組合損失。有一點需要特別留意:用于異常檢測時,VAE 通常僅在正常數據上訓練,模型由此學會"正常"的分布形態,異常樣本則在推理時暴露為高重建誤差或偏離常規的潛在分布。

      # 創建優化器來更新VAE的參數
      # Adam是訓練神經網絡的常用且穩定的選擇
      optimizer = torch.optim.Adam(vae.parameters(), lr=1e-3)
      # 多次遍歷數據集
      for epoch in range(num_epochs):
      # 遍歷數據的批次
      for batch in dataloader:
      # 獲取當前批次的輸入數據
      x = batch
      # 前向傳播:
      # 編碼 -> 采樣潛在z -> 解碼
      recon_x, mu, logvar = vae(x)
      # 計算VAE損失(重建損失 + KL散度)
      loss = vae_loss(recon_x, x, mu, logvar)
      # 清除上一步的舊梯度
      optimizer.zero_grad()
      # 反向傳播:
      # 計算損失相對于模型參數的梯度
      loss.backward()
      # 使用優化器更新模型參數
      optimizer.step()

      用于異常檢測時,VAE 通常僅在正常數據上訓練。模型學到"正常"的分布形態后,異常樣本會以高重建誤差或偏離常規的潛在分布暴露出來。

      訓練完成后得到了什么

      訓練結束后,手里拿到的遠不止一個重建模型。潛在空間中的距離和偏差都攜帶語義:可以檢視哪些潛在維度在異常出現時發生了漂移,可以對比重建結果,也可以跟蹤 KL 散度隨時間的變化趨勢。

      可解釋性在異常檢測中就是這樣進行。如果潛在空間已解耦,某個因子的異常即可定位到具體原因;即使未能解耦,仍然可以在原始特征空間中分析重建偏差,回溯根因。

      實際應用——訓練好的 VAE 的推理模式

      VAE 的用途不止一種。訓練完成后根據目標不同可以被復用在多個場景中,編碼器-解碼器架構加上結構化的潛在空間給了它足夠的適應余地。

      異常檢測



      訓練結束后 VAE 已經建立了對"正常"數據的內部表征。新輸入經過編碼器→潛在空間→解碼器后,將輸出與原始輸入做比較即可判斷異?!亟ㄕ`差越大,樣本越可能偏離正常模式。以信用卡交易為例,消費模式異常的交易在重建時會產生明顯偏差,對應較高的異常得分。類似場景還包括設備監控和醫療異常檢測。關鍵推理信號是重建誤差,或樣本在已學分布下的似然度。

      合成數據生成



      無需任何特定輸入,直接在潛在空間中采樣再經解碼器輸出,即可生成新的逼真樣本。潛在空間在訓練期間已被約束為近似標準正態分布,從中采樣的點解碼后會產生與訓練數據風格相近的新數據。典型場景包括數據增強、系統仿真和壓力測試。在醫學領域,可以產出罕見病的逼真影像,或合成客戶交易歷史用于測試。

      關鍵推理信號是從潛在先驗分布采樣(z ~ N(0,1)),經解碼輸出新樣本。

      條件生成



      在標準 VAE 基礎上引入額外的條件信息,就得到了條件 VAE(CVAE)。例如基于標簽生成圖像,或基于客戶群體生成合成交易、生成某類腫瘤的影像,或某商戶類別的交易記錄。應用方向包括定向數據增強、場景模擬、受控合成實驗。

      潛在空間操作與可解釋性



      對潛在空間做分析和修改,可以觀察輸出如何隨之變化。潛在遍歷——固定其余維度、單獨改變一個維度——能揭示各因子的語義含義;潛在空間本身也可用于聚類。一個具體的例子:在機械傳感器數據中,某個潛在因子可能對應振動頻率,調整它就能模擬機器提速后的狀態。這類操作在可解釋性分析、根因定位和場景規劃中都有用處。

      數據填補與重建



      訓練好的 VAE 可以處理不完整輸入——編碼后在潛在空間中采樣,再解碼出完整的重建,從而填補缺失數據。典型場景有數據清洗、預處理和錯誤修正,比如補全圖像中的缺失像素、物聯網數據中丟失的傳感器讀數,或者殘缺不全的交易記錄。

      總結

      VAE模型要做的核心決策是:哪些信息值得保留,哪些可以丟棄。理清這一點之后數學只是執行層面的工具,不再是障礙。

      一個經過良好訓練的 VAE 產出的不只是重建結果,它提供了一個觀察數據行為的視角——數據在哪里偏離,復雜系統如何被壓縮進一個緊湊且可解讀的表示里。本系列的下一篇將聚焦 VAE 在異常檢測中的實際應用。

      https://avoid.overfit.cn/post/17cbb214d50f4e469a458c061b3c5138

      by Ayo Akinkugbe

      特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。

      Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

      相關推薦
      熱點推薦
      伊朗最大“內鬼”被抓?革命衛隊:勾結以色列,指揮官卡尼被拘!

      伊朗最大“內鬼”被抓?革命衛隊:勾結以色列,指揮官卡尼被拘!

      青青子衿
      2026-03-05 11:57:03
      打瘋了!東契奇首節狂轟22+5三分 生涯30次單節20+升歷史第四

      打瘋了!東契奇首節狂轟22+5三分 生涯30次單節20+升歷史第四

      醉臥浮生
      2026-03-07 12:13:33
      伊拉克庫爾德第一夫人宣言:我們不是任人驅使的炮灰!

      伊拉克庫爾德第一夫人宣言:我們不是任人驅使的炮灰!

      勝研集
      2026-03-06 13:44:23
      廣東一女子不愿上班常年坐街邊,因長得好看被路人投喂:又懶又饞

      廣東一女子不愿上班常年坐街邊,因長得好看被路人投喂:又懶又饞

      明智家庭教育
      2026-03-06 17:19:16
      美以伊軍事沖突最大副作用,是斬斷了俄羅斯的“救命稻草”

      美以伊軍事沖突最大副作用,是斬斷了俄羅斯的“救命稻草”

      廖保平
      2026-03-05 12:08:52
      “不想為以色列賣命”:帝國最后的遮羞布,美式民主終成笑話

      “不想為以色列賣命”:帝國最后的遮羞布,美式民主終成笑話

      怪口歷史的K先生
      2026-03-06 15:22:51
      為何關閉霍爾木茲海峽就能掐全球脖子?因為伊朗原油是全世界最好的

      為何關閉霍爾木茲海峽就能掐全球脖子?因為伊朗原油是全世界最好的

      風向觀察
      2026-03-06 21:31:15
      兩會不到3天,5大好消息傳來!老百姓暗暗叫好:希望國家盡快落實

      兩會不到3天,5大好消息傳來!老百姓暗暗叫好:希望國家盡快落實

      談史論天地
      2026-03-07 06:54:29
      1979年,張國燾凍死在養老院,許世友:除了主席,沒人是他的對手

      1979年,張國燾凍死在養老院,許世友:除了主席,沒人是他的對手

      文史季季紅
      2026-03-05 13:35:03
      寫入教科書的一天:F-35在德黑蘭完成全球首次實戰空對空擊殺

      寫入教科書的一天:F-35在德黑蘭完成全球首次實戰空對空擊殺

      斌聞天下
      2026-03-06 07:30:03
      伊方:因美以襲擊喪生的伊朗人三成為青少年

      伊方:因美以襲擊喪生的伊朗人三成為青少年

      環球網資訊
      2026-03-07 06:39:29
      為什么美國的華人華裔地位那么低 網友從各方面分析 真就那樣

      為什么美國的華人華裔地位那么低 網友從各方面分析 真就那樣

      侃神評故事
      2026-03-06 07:10:03
      我包養過一個女大學生,七年花了一千多萬

      我包養過一個女大學生,七年花了一千多萬

      煙火人間故事匯
      2026-03-06 23:05:03
      性壓抑已經變態至此了?

      性壓抑已經變態至此了?

      黯泉
      2026-03-07 11:28:43
      蘿莉島,是進入核心圈層的投名狀,你猜他們為什么都穿紅皮鞋

      蘿莉島,是進入核心圈層的投名狀,你猜他們為什么都穿紅皮鞋

      百曉生談歷史
      2026-03-05 22:00:08
      一份“煮熟的三文魚”火了,原來低認知的家長,真能搞出人命!

      一份“煮熟的三文魚”火了,原來低認知的家長,真能搞出人命!

      妍妍教育日記
      2026-03-07 08:45:06
      伊朗萬萬沒想到,自家王牌武器遭到破解,美軍多了一張底牌

      伊朗萬萬沒想到,自家王牌武器遭到破解,美軍多了一張底牌

      空天力量
      2026-03-06 13:09:18
      上次被發現還是1911年!上海寶山驚現1只,專家:可能是坐船來的

      上次被發現還是1911年!上海寶山驚現1只,專家:可能是坐船來的

      萬象硬核本尊
      2026-03-06 23:54:22
      女子實名舉報某團外賣:不上大額券就讓我變成“凌晨營業”,你們真黑!

      女子實名舉報某團外賣:不上大額券就讓我變成“凌晨營業”,你們真黑!

      回旋鏢
      2026-03-06 21:13:59
      塔圖姆復出15分12板7助攻凱爾特人大勝獨行俠,布朗24分7板7助

      塔圖姆復出15分12板7助攻凱爾特人大勝獨行俠,布朗24分7板7助

      湖人崛起
      2026-03-07 10:25:09
      2026-03-07 13:43:00
      deephub incentive-icons
      deephub
      CV NLP和數據挖掘知識
      1940文章數 1456關注度
      往期回顧 全部

      科技要聞

      OpenClaw爆火,六位"養蝦人"自述與AI共生

      頭條要聞

      特朗普突然放話"先解決伊朗后解決古巴" 梅西聽懵了

      頭條要聞

      特朗普突然放話"先解決伊朗后解決古巴" 梅西聽懵了

      體育要聞

      塔圖姆歸來:凱爾特人的春之綠

      娛樂要聞

      周杰倫田馥甄的“JH戀” 被扒得底朝天

      財經要聞

      針對"不敢休、不讓休"怪圈 國家出手了

      汽車要聞

      逃離ICU,上汽通用“止血”企穩

      態度原創

      數碼
      家居
      本地
      藝術
      軍事航空

      數碼要聞

      蘋果M5 Pro芯片GeekBench跑分曝光:多核破2.8萬

      家居要聞

      暖棕撞色 輕法奶油風

      本地新聞

      食味印象|一口入魂!康樂烤肉串起千年絲路香

      藝術要聞

      Mark Grantham | 城市街景

      軍事要聞

      伊朗:使用無人機擊中美軍"林肯"號航母

      無障礙瀏覽 進入關懷版