1. AutoEncoder介绍

2. Applications of AutoEncoder in NLP

3. Recursive Autoencoder(递归自动编码器)

4. Stacked AutoEncoder(堆栈自动编码器)

1. 前言

AutoEncoder(后面用AE简称)是一个自动编码器,它是通过重建输入的神经网络训练过程,它的隐藏成层的向量具有降维的作用。它的特点是编码器会创建一个隐藏层(或多个隐藏层)包含了输入数据含义的低维向量。然后有一个解码器,会通过隐藏层的低维向量重建输入数据。通过神经网络的训练最后AE会在隐藏层中得到一个代表输入数据的低维向量。它可以帮助数据分类、可视化、存储。AE是一个自动编码器是一个非监督的学习模式,只需要输入数据,不需要label或者输入输出对的数据。

虽然AE是一个非监督学习算法,如果它的解码器是线性重建数据,可以用MSE来表示它的损失函数:
\[
L(x,y)=\sum(x-h_{W,b}(x))^{2}
y=h_{W,b}(x)
\]
如果解码器用Sigmoid的激活函数,那主要用交叉上损失函数:

\[
L(x,y)=-\sum_{i=1}^{d_{x}}x_{i}log(y_{i})+(1-x_{i})log(1-y_{i})
\]

3. AE的历史发展

AE的思想是在1986年被提出来的,在接下来的几年,AE的思想席卷了个大研究论文。关于AE比较有代表性的模型有一下几种:

  • Denoising AutoEncoder
  • Sparse AutoEncoder
  • Contractive AutoEncoder
  • Variational AutoEncoder

4. Denoising AutoEncoder

DAE的主要做法是,输入数据加入了噪声,输出的数据是完整的数据。DAE会强制隐藏层只去学习主要的特征,输出的数据就会是更好的鲁棒性。

DAE的一种方式是随机的删除数据集中的某些数据,然后用完整的数据去评判,DAE会尝试去预测恢复缺失的部分。

一个关于手写数字集的DAE的展示图如下:

5. Sparse AutoEncoder

AE一般的方式是通过隐藏层中的少数的隐藏单元去发现有用的信息,但是AE也可以通过大量的隐藏单元去发现有用信息。SAE的做法是把输入数据转化为高纬度的中间层,然后引入一个稀疏限制的规则。稀疏限制是在大部分时间,大部分的神经元的平均输出比较低。如果使用Sigmoid的激活函数,我们会尽量把输出变为0,如果是tanh的激活函数,我们会尽量把输出变为-1。

\[
p_{j}=\frac{1}{m}\sum_{i=1}^{m}(a_{j}x)
\]
\(a_j\)是神经元的激活后的输出,\(p_j\)是所有神经元输出的平均值,我们的目标是去最小化\(p_j\)。

K-Sparse AutoEncoder是SAE提升版本,KSAE是本身的隐藏神经元非常多,但只选择k个神经元是激活的,其他都是dropout状态,通过选择不同的激活函数和调整不同的k的阈值去训练。下面是通过调整k值,生成不同的手写数字的输出值。

6. Contractive AutoEncoder

CAE的主要目标是使得隐藏层向量对输入数据的微小的变动能够有更强的鲁棒性。CAE的做法是在普通AE的基础上加上一个惩罚项。公式如下:
\[
J_{CAE}(\theta)=\sum_{x\in{D_n}}(L(x,g(f(x)))+ \lambda{||J_{h}(x)||_{F}^{2}})
\]
\[
||J_{h}(x)||_{F}^{2}=\sum_{ij}\left(\frac{\delta h_{j}(x)}{\delta x_{i}}\right)
\]
CAE和DAE目标是相似的,DAE是通过加入噪声,重构来提升模型的鲁棒性,CAE是通过增加雅克比矩阵的惩罚项来提高模型鲁棒性。

7. Variational AutoEncoder

VAE结构是一个经典的autocoder模型,网络的组成也是编码器、解码器、loss。VAE的机构和普通的AE结构有所不同。

普通的AE结构如下,解码器直接使用编码器的输出向量。

上面的模型已经可以训练任意图片了。但是,我们想建一个产生式模型,而不是一个只是储存图片的网络。现在我们还不能产生任何未知的东西,因为我们不能随意产生合理的潜在变量。因为合理的潜在变量都是编码器从原始图片中产生的。这里有个简单的解决办法。我们可以对编码器添加约束,就是强迫它产生服从单位高斯分布的潜在变量。正是这种约束,把VAE和标准自编码器给区分开来了。

不像标准自编码器那样产生实数值向量,VAE的编码器会产生两个向量:一个是均值向量,一个是标准差向量。

VAE除了能让我们能够自己产生随机的潜在变量,这种约束也能提高网络的产生图片的能力。
另外,VAE的一个劣势就是没有使用对抗网络,所以会更趋向于产生模糊的图片

8. 总结

AE算法的压缩数据的方式,可以运用的地方是很多的,图像和自然语言处理都是有很大的发挥空间。现在的VAE也可以用来生成图片。后面会再分别介绍AE再图像和自然语言处理中的应用。

1. AutoEncoder介绍的更多相关文章

  1. 七、Sparse Autoencoder介绍

    目前为止,我们已经讨论了神经网络在有监督学习中的应用.在有监督学习中,训练样本是有类别标签的.现在假设我们只有一个没有带类别标签的训练样本集合  ,其中  .自编码神经网络是一种无监督学习算法,它使用 ...

  2. 4. Stacked AutoEncoder(堆栈自动编码器)

    1. AutoEncoder介绍 2. Applications of AutoEncoder in NLP 3. Recursive Autoencoder(递归自动编码器) 4. Stacked ...

  3. 3. Recursive AutoEncoder(递归自动编码器)

    1. AutoEncoder介绍 2. Applications of AutoEncoder in NLP 3. Recursive Autoencoder(递归自动编码器) 4. Stacked ...

  4. 2. AutoEncoder在NLP中的应用

    1. AutoEncoder介绍 2. Applications of AutoEncoder in NLP 3. Recursive Autoencoder(递归自动编码器) 4. Stacked ...

  5. Deep learning:四十八(Contractive AutoEncoder简单理解)

    Contractive autoencoder是autoencoder的一个变种,其实就是在autoencoder上加入了一个规则项,它简称CAE(对应中文翻译为?).通常情况下,对权值进行惩罚后的a ...

  6. Deep learning:四十二(Denoise Autoencoder简单理解)

    前言: 当采用无监督的方法分层预训练深度网络的权值时,为了学习到较鲁棒的特征,可以在网络的可视层(即数据的输入层)引入随机噪声,这种方法称为Denoise Autoencoder(简称dAE),由Be ...

  7. PRML读书会第十二章 Continuous Latent Variables(PCA,Principal Component Analysis,PPCA,核PCA,Autoencoder,非线性流形)

    主讲人 戴玮 (新浪微博: @戴玮_CASIA) Wilbur_中博(1954123) 20:00:49 我今天讲PRML的第十二章,连续隐变量.既然有连续隐变量,一定也有离散隐变量,那么离散隐变量是 ...

  8. Deep Learning 1_深度学习UFLDL教程:Sparse Autoencoder练习(斯坦福大学深度学习教程)

    1前言 本人写技术博客的目的,其实是感觉好多东西,很长一段时间不动就会忘记了,为了加深学习记忆以及方便以后可能忘记后能很快回忆起自己曾经学过的东西. 首先,在网上找了一些资料,看见介绍说UFLDL很不 ...

  9. NiftyNet项目介绍

    NiftyNet项目介绍  简述  NiftyNet是一款开源的卷积神经网络平台,旨在通过实现医学图像分析的深度学习方法和模块,支持快速原型和再现性,由WEISS (Wellcome EPSRC Ce ...

随机推荐

  1. HDU 2208 唉,可爱的小朋友(DFS)

    唉,可爱的小朋友 Time Limit: 10000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

  2. 收集一些常用Javascripot

    获取一组单选框当前选择值: $("input[name='radGende']:checked").val();

  3. 【MySQL】MySQL之MySQL5.7中文乱码

    自己的MySQL服务器不能添加中文,于是自己使用 show variables like 'character%'; 查看了当前的编码格式 我又通过以下方法将其设置为utf-8 SET charact ...

  4. Windows 重装系统-用户转移User和Program Files 文件夹

    原文地址:https://blog.csdn.net/sinat_38799924/article/details/74059037 重装系统时为了让系统数据保持可用我们需要做一些备份处理.比如用户数 ...

  5. 解决Mac上adb: command not found问题

    使用mac进行开发的时候,有时候需要使用adb指令来进行一些操作,但是如果没有配置过Android环境变量,可能会出现adb: command not found的问题,查了一些资料,这里记录一下ma ...

  6. Python 文件 truncate() 方法

    概述 Python 文件 truncate() 方法用于截断文件并返回截断的字节长度. 指定长度的话,就从文件的开头开始截断指定长度,其余内容删除:不指定长度的话,就从文件开头开始截断到当前位置,其余 ...

  7. Vue-cli / webpack 加载静态js文件的方法

    一.html-webpack-plugin 编译 1.只需要在入口处定义一个chunks,如我们定义一个fuck模块 entry: { app: './src/main.js', fuck: ['./ ...

  8. activiti 6 查询api

    1 activiti 查询多字段排序 每个字段都要有 sortBy -> desc/asc [sortBy -> desc/asc] [sortBy -> desc/asc] 2 使 ...

  9. 模态推出 全屏 隐藏tabbar

    SearchVC * vc = [[SearchVC alloc] init]; /* 底部向上  UIModalTransitionStyleCoverVertical // 淡入     UIMo ...

  10. Universal USB Installer集开源软件之佳作

    有机会下载一份uui的源代码,翻看了一下,呵呵,有意思,几乎是一个开源软件的大杂烩,忽然,恍然大悟,原来,作者才是开源软件精神的代言人,不重复制造轮子的践行者啊. uui网址:https://www. ...