堆叠式自动降噪编码器

文章参考与:https://www.cnblogs.com/wangshicheng/p/10689745.html
1.1 自动编码器

自动编码器(AutoEncoder,AE)就是一种尽可能复现输入信号的神经网络,其输出向量与输入向量同维,常按照输入向量的某种形式,通过隐层学习一个数据的表示或对原始数据进行有效编码。值得注意的是,这种自编码器是一种不利用类标签的非线性特征提取方法, 就方法本身而言, 这种特征提取的目的在于保留和获得更好的信息表示, 而不是执行分类任务,尽管有时这两个目标是相关的!
在这里插入图片描述

一个典型的最简单的自动编码器拥有一个表示原始数据或者输入特征向量的输入层,一个表示特征转换的隐层和一个跟输入层匹配、 用于信息重构的输出层,如图一所示。当隐层数目大于 1 时, 自动编码器就被视为深层结构,我们称其为堆叠式自动编码器,而我们通常所说的自动编码器指的都是隐层数为1层的结构。自动编码器的主要目标是让输入值和输出值相等,所以首先用对输入进行编码,经过激活函数后,再用进行解码,而编码层和解码层的权重 、通常取为互为转置矩阵,即,这便是自动编码器的核心思想:先编码,后解码,前后保持不变。

这里的深度学习实现了基本的 编码 激活 解码的过程

图一 自动编码器结构
  除了上述介绍的最典型的自动编码器结构,还有其他几种自动编码器的变形结构。例如,如果自动编码器的基础上加上L1的正规性限制(L1主要是约束每一层中的节点中大部分都要为0,只有少数不为0,这就是Sparse名字的来源),我们就可以得到稀疏自动编码器(SAE,Sparse AutoEncoder)。还有,如果在自动编码器上加入了一个规则项,使其对权重值进行惩罚,就得到了收缩自动编码器(CAE,Contractive AutoEncoder)。此外,如果在网络的可视层(即数据的输入层)引入随机噪声,然后再进行编解码来恢复输入层的数据或特征,就得到了降噪自动编码器(DAE,Denoise AutoEncoder)。

单隐层的自动编码器,充其量也就是个强化补丁版PCA(主成分分析),只用一次好不过瘾。于是Bengio等人在2007年的 “Greedy Layer-Wise Training of Deep Networks”一文中,仿照堆叠受限玻尔兹曼机(RBM)来构成深度置信网络(DBN)的方法,提出堆叠式自动编码器(Stacked AutoEncoder)。接下来,就将对其中的堆叠式降噪自动编码器(Stacked Denoise AutoEncoder)进行详细地分析。

1.2 堆叠式降噪自动编码器
  对于单隐层的自动编码器,通常利用反向传播算法的诸多变种之一来进行训练(其中最典型的方法是随机梯度下降法), 就可以取得非常有效的结果。但是,如果仍将其应用于多隐层的网络中,反向传播的训练方法就会产生一些问题:通过最初的几层后, 误差会变得极小, 训练也随之变得无效。尽管更多先进的反向传播方法一定程度上缓解了这一问题, 但依然无法解决学习速度缓慢的问题,尤其是当训练数据量有限时, 该问题更为明显。 正如前面所提到的,如果可以通过把每一层当作一个简单的自解码器来进行预训练,然后再进行堆叠,那么训练效率就会得到大大地提高。正如图二所示,先对每个单隐层的降噪自动编码器单元进行无监督预训练,然后再进行堆叠,最后进行整体的反向调优训练,就得到了一个两层隐藏层结构的堆叠式降噪自动编码器。

在这里插入图片描述

图二 堆叠式降噪自动编码器结构
  下面详细介绍一下构建上述两层隐藏层结构的降噪自动编码器的具体步骤。首先对第一个DA单元进行预训练,其中为恢复后的输入数据或特征,为未被噪声污染的原始输入数据或特征,为被噪声污染后的输入数据或特征,为sigmoid函数:

在这里插入图片描述

图三 对第一个DA单元进行预训练
  第一个自动编码器的输出可以表示如下:
采用最小均方差作为代价函数,且利用梯度下降的方法进行权重值W和偏置值b的更新:
其中梯度下降法的具体计算方式如下:

预训练完毕后,去掉输出层及其相应的权重和偏置,只保留输入层和隐藏层的和即可。然后将第一个DA单元的隐藏层作为第二个DA单元的输入,进行第二个DA单元的预训练如下所示:

在这里插入图片描述

图四 对第二个DA单元进行预训练
  第二个降噪自动编码器的输出可以表示如下:
采用最小均方差作为代价函数,且利用梯度下降的方法进行权重值W和偏置值b的更新:
其中梯度下降法的具体计算方式如下:

第二个DA单元预训练完毕后,去掉其输出层和相应的权重和偏置,只保留输入层和隐藏层的和,并将其堆叠在第一个DA单元上即可。最后,再第二个DA单元的隐藏层之上添加一层输出层(对输出层的权重值和偏置进行随机初始化即可),进行解码恢复。

两个DA单元的预训练完毕后,最后要进行的是整体的反向调优训练。调优训练的代价函数也可以采用上述提到的代价函数,并利用梯度下降法自顶到底(预训练时的反向误差传播只有两层,而这里的误差反向传播为三层)进行权重和偏置值的更新。

参考文献:

  1. 文章:Li Deng, A tutorial survey of architectures, algorithms, and applications for deep learning, (2014,APSIPA Transactions on Signal and Information Processing)
  2. 博客:《自动编码器》,网址:https://www.cnblogs.com/taojake-ML/p/6475422.html
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
堆叠自动降噪编码器(Stacked Autoencoder)是一种用于无监督学习的神经网络模型,用于特征提取和降噪处理。下面是使用python实现的堆叠自动降噪编码器的代码: ```python import numpy as np import tensorflow as tf # 定义堆叠自动降噪编码器类 class StackedAutoencoder: def __init__(self, num_layers, hidden_units): self.num_layers = num_layers self.hidden_units = hidden_units def build_model(self, input_dim): self.model = tf.keras.models.Sequential() # 添加隐藏层和输出层 for i in range(self.num_layers): if i == 0: # 第一层的输入维度为输入数据的维度 self.model.add(tf.keras.layers.Dense(self.hidden_units[i], input_dim=input_dim, activation='relu')) else: # 后续层的输入维度为上一层的输出维度 self.model.add(tf.keras.layers.Dense(self.hidden_units[i], activation='relu')) # 最后一层的输出维度为输入数据的维度 self.model.add(tf.keras.layers.Dense(input_dim, activation='sigmoid')) # 编译模型 self.model.compile(optimizer='adam', loss='binary_crossentropy') def train(self, input_data, epochs=10, batch_size=32): self.model.fit(input_data, input_data, epochs=epochs, batch_size=batch_size) def denoise(self, input_data): denoised_data = self.model.predict(input_data) return denoised_data # 示例用法 input_data = np.random.rand(1000, 100) # 假设有1000个样本,每个样本的维度为100 autoencoder = StackedAutoencoder(3, [50, 30, 20]) # 设置3层自动降噪编码器,隐藏单元分别为50, 30和20个 autoencoder.build_model(input_data.shape[1]) # 根据输入数据的维度构建模型 autoencoder.train(input_data, epochs=100, batch_size=32) # 训练模型 denoised_data = autoencoder.denoise(input_data) # 对输入数据进行降噪处理 ``` 以上的代码定义了一个`StackedAutoencoder`类,可以根据指定的层数和隐藏单元个数构建模型,并进行训练和降噪处理。使用时,先创建一个`StackedAutoencoder`对象,然后调用`build_model`方法构建模型,再调用`train`方法进行训练,最后调用`denoise`方法对输入数据进行降噪处理。示例中使用随机生成的输入数据进行了演示。请根据实际需求进行相应的参数设置和数据输入。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值