【模型学习-AE】自编码器、AE、AutoEncoder

自编码器是一种无监督学习方法,包含编码器和解码器两部分,用于学习数据的隐层特征并重构原始输入。通过编码器将输入数据映射到低维隐层空间,然后用解码器从隐层空间重构数据。模型通过非线性函数如Sigmoid、ReLU或Tanh进行变换,并使用随机梯度下降优化参数,以最小化重构误差。然而,AE不能生成新数据,仅能重构已有数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

自编码器(AutoEncoder,AE)

结构图

image-20230326203307091

原理

  1. AE结构包含两部分:编码器Encoder和解码器Decoder
  2. 原始数据X通过编码器,得到隐层变量Z,Z包含了原始数据X的一些特征
    1. 编码部分将原始数据X从数据空间Rn映射到隐层变量Z所在的隐层空间Rd
  3. 隐层变量Z,通过解码器,得到输出变量X’,即原始数据X的重构
    1. 解码部分将隐层变量Z从隐层空间Rd映射到输出变量X’所在的空间,即原始数据X所在的数据空间Rn

功能

  1. AE可以学习得到原始数据的隐层特征
    1. 如人脸可由如下特征表示:眼睛大小,鼻子高低,嘴唇厚度,胡子长度…
    2. 编码部分任务
  2. AE可以通过学习到的隐层特征,重构原始数据
    1. 如通过人脸的特征,重构得到该张人脸
    2. 解码部分任务

算法实现

  1. 原始数据到隐层特征

h = E n c o d e ( x ) = f e ( W e ⋅ x + b e ) h=Encode\left( x \right) =f_e\left( W_e\cdot x+b_e \right) h=Encode(x)=fe(Wex+be)

  1. 隐层特征到重构输出

x ~ = D e c o d e ( x ) = f d ( W d ⋅ h + b d ) \tilde{x}=Decode\left( x \right) =f_d\left( W_d\cdot h+b_d \right) x~=Decode(x)=fd(Wdh+bd)

公式中的 f_e 和 f_d 函数是常用的非线性函数,如Sigmoid函数、ReLU函数、Tanh函数
  1. 整个模型需要得到最优参数组:

θ ( W e , b e , W d , b d ) \theta \left( W_e, b_e, W_d, b_d \right) θ(We,be,Wd,bd)

  1. 随机梯度下降算法寻找最优参数组

θ k + 1 ( W e , b e , W d , b d ) = θ k ( W e , b e , W d , b d ) − ∂ J ∂ θ J = 1 2 N ∑ i = 1 N ∥ x ~ i − x i ∥ 2 \theta _{k+1}\left( W_e, b_e, W_d, b_d \right) =\theta _k\left( W_e, b_e, W_d, b_d \right) -\frac{\partial J}{\partial \theta} \\ J=\frac{1}{2N}\sum_{i=1}^N{\left\| \tilde{x}_i-x_i \right\| ^2} θk+1(We,be,Wd,bd)=θk(We,be,Wd,bd)θJJ=2N1i=1Nx~ixi2

代码实现

待补充。。。

模型不足

  1. AE模型只能重构已有数据,不能生成数据
  2. 若通过人为给定隐层特征Z,则大概率不能重构目标输出,因为人为给定的Z不满足原始数据学习到的隐层变量Z所遵从的分布
### 自编码器AE系列中的简单去噪应用 自编码器Autoencoder, AE)是一种无监督学习模型,主要用于降维、特征提取以及数据重建。对于简单的去噪任务,可以通过构建一个变分自编码器(Variational Autoencoder, VAE),其结构能够有效地去除输入信号中的噪声。 #### 构建简单去噪自编码器 为了实现简单的去噪功能,可以设计如下架构: 1. **编码部分**:接收含噪图像作为输入,并将其压缩成低维度表示; 2. **解码部分**:尝试从未被污染的数据版本重构原始干净图像; 通过这种方式训练网络,在测试阶段仅需提供有噪音的样本给该系统即可获得清理后的输出[^1]。 下面是一个基于Keras框架下的Python代码片段来展示如何创建并训练这样一个简单的去噪自动编码器: ```python import numpy as np from keras.layers import Input, Dense from keras.models import Model # 假设我们有一个大小为784(28*28像素)的手写数字图片集mnist, # 加载MNIST数据集... (x_train, _), (x_test, _) = ... x_train = x_train.astype('float32') / 255. x_test = x_test.astype('float32') / 255. # 添加随机高斯白噪声到训练集中模拟实际场景下可能遇到的情况 noise_factor = 0.5 x_train_noisy = x_train + noise_factor * np.random.normal(loc=0.0, scale=1.0, size=x_train.shape) x_test_noisy = x_test + noise_factor * np.random.normal(loc=0.0, scale=1.0, size=x_test.shape) input_img = Input(shape=(784,)) encoded = Dense(128, activation='relu')(input_img) encoded = Dense(64, activation='relu')(encoded) encoded = Dense(32, activation='relu')(encoded) decoded = Dense(64, activation='relu')(encoded) decoded = Dense(128, activation='relu')(decoded) decoded = Dense(784, activation='sigmoid')(decoded) autoencoder = Model(input_img, decoded) autoencoder.compile(optimizer='adam', loss='binary_crossentropy') autoencoder.fit(x_train_noisy, x_train, epochs=50, batch_size=256, shuffle=True, validation_data=(x_test_noisy, x_test)) ``` 此段代码展示了如何去定义一个三层全连接层组成的自编码器来进行基本的去噪操作。当然也可以根据具体应用场景调整层数和其他超参数设置以达到更好的效果[^2]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值