從認識AI開始-----AutoEncoder:生成模型的起點

前言

從15年開始,在深度學習的重要模型中,AutoEncoder(自編碼器)可以說是打開生成模型世界的起點。它不僅是壓縮與重建的工具,更是VAE、GAN、DIffusion等復雜生成模型的思想起源。其實AutoEncoder并不復雜,它是以一種無監督的方式教會模型將復雜的數據轉換成一種更簡單的表現形式


一、什么是AutoEncoder

AutoEncoder是一種無監督學習模型,其目標是通過編碼器將輸入壓縮成低維的隱藏表示,稱為隱空間,再通過解碼器將其還原回原始輸入。總的來說,就是:編碼器壓縮,解碼器還原

編碼器主要由兩部分組成:

  • Encoder:把輸入?x?映射到潛在表示?Z
  • Decoder:再將?Z?還原為近似輸入的?x?


二、AutoEncoder的原理

前面我已經說了,AutoEncoder是一種神經網絡,主要是用來學習數據的表示,嘗試用盡可能少的特征來描述大量數據,實現數據壓縮,例如下圖所示:

?Encoder將輸入數據壓縮成潛在空間表示,潛在空間是一個低維空間,捕捉了輸入數據的核心特征,Decoder則從潛在空間產生的壓縮表示中重建原始數據

例如編碼圖像,對于上面的小狗頭像,編碼其將圖像降維到幾個關鍵特征,潛在空間保存這些特征,解碼器再從這些低維特征中重建圖像。


三、如何訓練AutoEncoder?

我們已經知道了AutoEncoder工作的原理,那么訓練自編碼器就是最小化原始數據與重建數據之間的差異,目的是提高解碼器根據隱空間表示準確重建原始數據的能力,同時,編碼器也以一種更好的方式壓縮數據,確保原始數據被有效地重建。

通常,我們使用MSE來表示原始數據與重建數據的差異:

Loss= \frac {1}{n}\sum _{i=1}^{n}(y-\hat y)^2


四、隱空間維度的影響

我們已經知道了如何訓練AutoEncoder,接下來我們討論一下隱空間維度對模型的影響。

我們已經知道,AutoEncoder的優勢就是它能夠進行數據降維,隱空間的維度是由隱空間層的神經元數量決定的,如果隱空間層神經元數量為2,則隱空間就是二維的。接下來我將使用MINST手寫數字數據集,訓練AutoEncoder,并可視化一下隱空間維度對模型影響。

訓練AutoEncoder:

import torch
import torch.nn as nn
import torch.optim as optim
import torch.nn.functional as F
import torchvision
from torch.utils.data import DataLoader
from torchvision import transformstransform = transforms.ToTensor()
train_dataset = torchvision.datasets.MNIST(root='./data', train=True, transform=transform, download=True)
train_loader = DataLoader(train_dataset, batch_size=128, shuffle=True)class AutoEncoder(nn.Module):def __init__(self):super(AutoEncoder, self).__init__()self.encoder = nn.Sequential(nn.Linear(784, 128),nn.ReLU(),nn.Linear(128, 64))self.decoder = nn.Sequential(nn.Linear(64, 128),nn.ReLU(),nn.Linear(128, 784),nn.Sigmoid())def forward(self, x):x = x.view(x.size(0), -1)z = self.encoder(x)out = self.decoder(z)return outmodel = AutoEncoder()
optimizer = optim.Adam(model.parameters(), lr=1e-3)
loss_fn = nn.MSELoss()for epoch in range(5):for imgs, _ in train_loader:imgs = imgs.view(imgs.size(0), -1)out = model(imgs)loss = loss_fn(out, imgs)optimizer.zero_grad()loss.backward()optimizer.step()print(f"Epoch {epoch}: Loss={loss.item():.4f}")

可視化:

import matplotlib.pyplot as plt
# 設置中文字體為黑體(可選字體)
plt.rcParams['font.sans-serif'] = ['SimHei']
# 正確顯示負號  
plt.rcParams['axes.unicode_minus'] = False   model.eval()
with torch.no_grad():for imgs, _ in train_loader:imgs = imgsout = model(imgs)break  # 只看一批就夠了imgs = imgs.cpu().view(-1, 1, 28, 28)
out = out.cpu().view(-1, 1, 28, 28)# 顯示原圖與重建圖
n = 10
plt.figure(figsize=(20, 4))
for i in range(n):# 原圖ax = plt.subplot(2, n, i + 1)plt.imshow(imgs[i].squeeze(), cmap='gray')plt.title("原始圖")plt.axis("off")# 重建圖ax = plt.subplot(2, n, i + 1 + n)plt.imshow(out[i].squeeze(), cmap='gray')plt.title("重構圖")plt.axis("off")
plt.show()

當隱空間層的維度設置為2時,訓練好的AutoEncoder的效果為:

?當隱空間層的維度設置為64時,訓練好的AutoEncoder的效果為:

通過對比發現,隱空間的維度大小直接重構數據的質量,?為什么或這樣呢?

其實這很好解釋,因為AutoEncoder的任務就是壓縮、重建,較差的重建質量說明隱空間的組織性較差,因為好的隱空間表示能夠將每種類型的數字聚類成一簇。但是較低的隱空間維度雖然也能使得一些類型聚類成簇,但是會導致它們相互重疊,很大概率集中在同一區域,而且可能存在系數現象,如下圖所示:

?而更高的維度之間的聚類的分隔度更高,但是仍然會有重疊的部分出現。


五、AutoEncoder的局限

AutoEncoder的最大的局限性就是隱空間,因為AutoEncoder只依賴重建損失來組織隱空間,雖然表現良好,但是通過第四部分我們可以知道,聚類的簇并不是特別完美。為此,大多數基于此類的自編碼器都會對隱空間進行正則化,而其中最有名的就是變分自編碼器(VAE)。當然,之后我會詳細的介紹VAE。


總結

以上就是AutoEncoder的全部內容,相信小伙伴們已經對AutoEncoder有了深刻的理解:AutoEncoder是深度學習中一個經典且充滿啟發的結構,壓縮重構的結構,能夠學到數據的“核心特征”,為后續的復雜的生成模型奠定了基礎。


如果小伙伴們覺得本文對各位有幫助,歡迎:👍點贊 |?? 收藏 | ?🔔 關注。我將持續在專欄《人工智能》中更新人工智能知識,幫助各位小伙伴們打好扎實的理論與操作基礎,歡迎🔔訂閱本專欄,向AI工程師進階!

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

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

相關文章

解決MySQL8.4報錯ERROR 1524 (HY000): Plugin ‘mysql_native_password‘ is not loaded

最近使用了MySQL8.4 , 服務啟動成功,但是就是無法登陸,并且報錯: ERROR 1524 (HY000): Plugin mysql_native_password is not loaded 使用如下的命令也報錯 mysql -u root -p -P 3306 問題分析: 在MySQL 8.0版本中,默認的認證插件從mysql_native_password變更為cachi…

TDengine 開發指南——無模式寫入

簡介 在物聯網應用中,為了實現自動化管理、業務分析和設備監控等多種功能,通常需要采集大量的數據項。然而,由于應用邏輯的版本升級和設備自身的硬件調整等原因,數據采集項可能會頻繁發生變化。為了應對這種挑戰,TDen…

嵌入式面試高頻(5)!!!C++語言(嵌入式八股文,嵌入式面經)

一、C有幾種傳值方式之間的區別 一、值傳遞(Pass by Value) 機制:創建參數的副本,函數內操作不影響原始數據語法:void func(int x)特點: 數據安全:原始數據不受影響性能開銷:需要復…

Spark 之 AQE

個人其他鏈接 AQE 執行順序https://blog.csdn.net/zhixingheyi_tian/article/details/125112793 AQE 產生 AQE 的 循環觸發點 src/main/scala/org/apache/spark/sql/execution/adaptive/AdaptiveSparkPlanExec.scala override def doExecute(): RDD[InternalRow] = {withFin…

FSMC擴展外部SRAM

提示:文章 文章目錄 前言一、背景二、2.12.2 三、3.1 總結 前言 前期疑問: 本文目標: 一、背景 2025年6月7日 19:34:48 今天看了FSMC擴展外部SRAM的文章,大概理解到stm32除了內部存儲器,還可以擴展外部存儲器。其中s…

【CSS-6】深入理解CSS復合選擇器:提升樣式表的精確性與效率

CSS選擇器是前端開發的基石,而復合選擇器則是其中最強大且實用的工具之一。本文將全面解析CSS復合選擇器的類型、用法、優先級規則以及最佳實踐,幫助你編寫更高效、更精確的樣式表。 1. 什么是復合選擇器? 復合選擇器是通過組合多個簡單選擇…

使用python實現奔跑的線條效果

效果,展示(視頻效果展示): 奔跑的線條 from turtle import * import time t1Turtle() t2Turtle() t3Turtle() t1.hideturtle() t2.hideturtle() t3.hideturtle() t1.pencolor("red") t2.pencolor("green") t3…

從零搭建uniapp項目

目錄 創建uni-app項目 基礎架構 安裝 uni-ui 組件庫 安裝sass依賴 easycom配置組件自動導入 配置view等標簽高亮聲明 配置uni-ui組件類型聲明 解決 標簽 錯誤 關于tsconfig.json中提示報錯 關于非原生標簽錯誤(看運氣) 安裝 uview-plus 組件庫…

Redis主從復制的原理一 之 概述

概述 本文概要性的介紹了Redis主從復制原理,及新舊版本主從復制的區別,優缺點。具體的主從復制過程可詳見「Redis主從復制原理二 之 主從復制工作流程」 舊版主從復制的實現 Redis的復制功能分為 同步(sync)和 命令傳播&#xff…

網絡原理 4-TCP3

上篇文章,我們講了TCP協議的連接管理(”三次握手“和”四次揮手“的過程)。 4、滑動窗口 這個滑動窗口是TCP中非常有特點的機制。我們知道,TCP是通過前面講的三個機制:確認應答,超時重傳,連接…

【使用 Loki + Promtail + Grafana 搭建輕量級容器日志分析平臺】

使用 Loki Promtail Grafana 搭建輕量級容器日志分析平臺 摘要 本文介紹如何通過 Docker Compose 快速搭建 Loki 日志存儲、Promtail 日志采集和 Grafana 日志可視化/告警的完整流程。用最小化示例演示核心配置、常見問題排查和告警規則設置,幫助讀者快速上手。…

CRMEB 中 PHP 快遞查詢擴展實現:涵蓋一號通、阿里云、騰訊云

目前已有一號通快遞查詢、阿里云快遞查詢擴展 擴展入口文件 文件目錄 crmeb\services\express\Express.php 默認一號通快遞查詢 namespace crmeb\services\express;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use think\Container; use thi…

使用 Python 自動化 Word 文檔樣式復制與內容生成

在辦公自動化領域,如何高效地處理 Word 文檔的樣式和內容復制是一個常見需求。本文將通過一個完整的代碼示例,展示如何利用 Python 的 python-docx 庫實現 Word 文檔樣式的深度復制 和 動態內容生成,并結合知識庫中的最佳實踐優化文檔處理流程…

【MATLAB代碼】基于MCC(最大相關熵)的EKF,一維濾波,用于解決觀測噪聲的異常|附完整代碼,訂閱專欄后可直接查看

本文所述的代碼實現了一種基于最大相關熵準則(Maximum Correntropy Criterion, MCC)的魯棒性卡爾曼濾波算法(MCC-KF),重點解決傳統卡爾曼濾波在觀測噪聲存在異常值時估計精度下降的問題。通過引入高斯核函數對殘差進行加權處理,有效降低了異常觀測值對狀態估計的干擾。訂…

46、web實驗-遍歷數據與頁面bug修改

46、web實驗-遍歷數據與頁面bug修改 在Web開發中,遍歷數據和修改頁面bug是常見的任務。以下是關于這兩個主題的講解: ### 一、遍歷數據 **目的**:在頁面上動態展示數據,例如用戶列表、商品信息等。 **常用方法**: ####…

華為云Flexus+DeepSeek征文|體驗華為云ModelArts快速搭建Dify-LLM應用開發平臺并創建自己的自定義聊天助手

華為云FlexusDeepSeek征文|體驗華為云ModelArts快速搭建Dify-LLM應用開發平臺并創建自己的自定義聊天助手 什么是華為云ModelArts 華為云ModelArts ModelArts是華為云提供的全流程AI開發平臺,覆蓋從數據準備到模型部署的全生命周期管理,幫助…

Qwen大語言模型里,<CLS>屬于特殊的標記:Classification Token

Qwen大語言模型里,<CLS>屬于特殊的標記:Classification Token 目錄 Qwen大語言模型里,<CLS>屬于特殊的標記:Classification Token功能解析工作機制應用場景舉例說明技術要點在自然語言處理(NLP)領域 都是<CLS> + <SEP>嗎?一、CLS和SEP的作用與常見用法1. **CLS標…

R語言AI模型部署方案:精準離線運行詳解

R語言AI模型部署方案:精準離線運行詳解 一、項目概述 本文將構建一個完整的R語言AI部署解決方案,實現鳶尾花分類模型的訓練、保存、離線部署和預測功能。核心特點: 100%離線運行能力自包含環境依賴生產級錯誤處理跨平臺兼容性模型版本管理# 文件結構說明 Iris_AI_Deployme…

JAVA畢業設計224—基于Java+Springboot+vue的家政服務系統(源代碼+數據庫)

畢設所有選題: https://blog.csdn.net/2303_76227485/article/details/131104075 基于JavaSpringbootvue的家政服務系統(源代碼數據庫)224 一、系統介紹 本項目前后端分離,分為用戶、家政人員、管理員三種角色 1、用戶: 登錄、注冊、輪播…

滴滴 服務端 面經

一、緩存與數據庫的使用場景及性能差異 1. 緩存的適用場景 高頻讀、低頻寫場景:如商品詳情頁、用戶信息等讀多寫少的數據,減少數據庫壓力。實時性要求不高的數據:如首頁推薦列表、統計數據(非實時更新),允…