autoencoder可以用于数据压缩、降维,预训练神经网络,生成数据等等。

autoencoder的架构

autoencoder的架构是这样的:

需要分别训练一个Encoder和一个Decoder。

比如,一张数字图片784维,放入Encoder进行压缩,编程code,通常要小于原来的784维;

然后可以将压缩后的code,放入Decoder进行reconsturct,产生和原来相似的图片。

Encoder和Decoder需要一起进行训练。

下面看看PCA对于数据的压缩:

输入同样是一张图片,通过选择W,找到数据的主特征向量,压缩图片得到code,然后使用W的转置,恢复图片。

我们知道,PCA对数据的降维是线性的(linear),恢复数据会有一定程度的失真。上面通过PCA恢复的图片也是比较模糊的。

所以,我们也可以把PCA理解成为一个线性的autoencoder,W就是encode的作用,w的转置就是decode的作用,最后的目的是decode的结果和原始图片越接近越好。

现在来看真正意义上的Deep Auto-encoder的结构。通常encoder每层对应的W和decoder每层对应的W不需要对称(转置)。

从上面可以看出,Auto-encoder产生的图片,比PCA还原的图片更加接近真实图片。

上面是使用PCA和autoencoder对于数字图片压缩后的可视化结果,明显autoencoder的区分度更高。

De-noising auto-encoder

为了让aotoencoder训练的更好,更加robust,我们在训练的时候加入一些noise,这就是De-noising auto-encoder。

examples

接下来再看两个例子。

文本检索,简单的词袋模型,将文本转化成词向量。

当搜索的词和文本向量角度越接近,就说明内容越相关。

将词向量放入autoencoder中进行压缩,得到code,内容相近的文本,code也越接近。

不同主题的文本被明显的分开,得到右上的2维图像。

搜索图片的相似性。

搜索红框中的迈克杰克逊的照片,下面是使用像素点之间的欧式距离得到的搜索结果。

下面使用autoencoder编码后的code,进行相似性的搜索结果。

使用CNN实现autoencoder

经过多次convolution和pooling后的code,可以再经过deconvolution和unpooling恢复。

下面将如何实现unpooling和deconvolution。

在maxpooling时,需要记住max值在图片中的位置。

当进行unpooling时,把小的图片做扩展,先把max值恢复到之前的位置,然后在之前进行maxpooling的field内的像素都置为0.

接下来看Deconvolution

现在假设一个field里面有3个像素点,每个filter的3个weight作用下得到一个output,如图左。

而deconvolution就是要让这3个output复原成原来那么多的点,一个output变成3各点,把重叠的点加起来,如图中。

现在,将3个output进行扩展,给扩展的点的值为0,然后就依然做convolution,还是可以得到和图中相同的结果。

所以,deconvolution其实就是convolution。

最后,我们可以使用autoencoder压缩后的code,输入到decoder里,得到一张新的图像,如下所示。

Deep Auto-encoder的更多相关文章

  1. Auto Encoder用于异常检测

    对基于深度神经网络的Auto Encoder用于异常检测的一些思考 from:https://my.oschina.net/u/1778239/blog/1861724 一.前言 现实中,大部分数据都 ...

  2. Auto Encoder

    对自编码器的理解: 对于给定的原始输入x,让网络自动找到一种编码方式(特征提取,原始数据的另一种表达),使其解码后的输出x'尽可能复现原始输入x. 知乎参考:https://www.zhihu.com ...

  3. Deep Learning and Shallow Learning

    Deep Learning and Shallow Learning 由于 Deep Learning 现在如火如荼的势头,在各种领域逐渐占据 state-of-the-art 的地位,上个学期在一门 ...

  4. 论文翻译:2021_DeepFilterNet: A Low Complexity Speech Enhancement Framework for Full-Band Audio based on Deep Filtering

    论文地址:DeepFilterNet:基于深度滤波的全频带音频低复杂度语音增强框架 论文代码:https://github.com/ Rikorose/DeepFilterNet 引用:Schröte ...

  5. 论文解读(DFCN)《Deep Fusion Clustering Network》

    Paper information Titile:Deep Fusion Clustering Network Authors:Wenxuan Tu, Sihang Zhou, Xinwang Liu ...

  6. 使用VAE、CNN encoder+孤立森林检测ssl加密异常流的初探——真是一个忧伤的故事!!!

    ssl payload取1024字节,然后使用VAE检测异常的ssl流. 代码如下: from sklearn.model_selection import train_test_split from ...

  7. 无监督学习:Deep Generative Mode(深度生成模型)

    一 前言 1.1 Creation 据说在费曼死后,人们在他生前的黑板上拍到如图画片,在左上角有道:What i cannot create ,I do not understand. Generat ...

  8. 人工智能之深度学习-初始环境搭建(安装Anaconda3和TensorFlow2步骤详解)

    前言: 本篇文章主要讲解的是在学习人工智能之深度学习时所学到的知识和需要的环境配置(安装Anaconda3和TensorFlow2步骤详解),以及个人的心得体会,汇集成本篇文章,作为自己深度学习的总结 ...

  9. 论文翻译:2020_Lightweight Online Noise Reduction on Embedded Devices using Hierarchical Recurrent Neural Networks

    论文地址:基于分层递归神经网络的嵌入式设备轻量化在线降噪 引用格式:Schröter H, Rosenkranz T, Zobel P, et al. Lightweight Online Noise ...

  10. 【原】KMeans与深度学习模型结合提高聚类效果

    这几天在做用户画像,特征是用户的消费商品的消费金额,原始数据(部分)是这样的: id goods_name goods_amount 男士手袋 1882.0 淑女装 2491.0 女士手袋 345.0 ...

随机推荐

  1. python入门(二):数据类型和结构

    Python3 中有六个标准的数据类型:tips:用type()函数或者是isinstance(x,int)来判断数据类型,然后for i in 来遍历集合1.Number(数字支持 int.floa ...

  2. apache的ab命令做压力测试

    1. 最基本的关心两个选项 -c -n 例: ./ab -c 100 -n 10000 http://127.0.0.1/index.php -c 100 即:每次并发100个-n 10000 即: ...

  3. boost::archive::binary_iarchive

    #include <iostream> #include <string> #include <sstream> #include <vector> # ...

  4. JavaScript学习笔记-构造函数

    什么是构造函数 简单说构造函数是类函数,函数名与类名完全相同,且无返回值.构造函数是类的一个特殊成员函数. JavaScript构造函数 * 在JavaScript的世界里没有类的概念,JavaScr ...

  5. Minecraft Forge编程入门一 “环境搭建”

    什么是Forge Minecraft Forge is a Minecraft application programming interface (API) which allows almost ...

  6. Android 界面滑动卡顿分析与解决方案(入门)

    Android 界面滑动卡顿分析与解决方案(入门) 导致Android界面滑动卡顿主要有两个原因: 1.UI线程(main)有耗时操作 2.视图渲染时间过长,导致卡顿 目前只讲第1点,第二点相对比较复 ...

  7. Net应用架构设计

    N-Tier 是从架构更大的维度上划分,每一个维度都是一个Tier(在微软的ESP2.0里翻译为”级”),比如电商架构划分如下: UI 服务接口 消息.缓存中间件 数据库 ...... Tier与Ti ...

  8. FineReport----单元格元素(数据列、公式、斜线)

    一.绑定.插入数据列 数据集字段绑定 二.公式 1.单元 格计算 1.两个单元格(C7,I7)和 2.等于某单元格的值 D7等C7单元格的值 3.C7/8(除) 4.除数被除数为零.空的处理 http ...

  9. iOS之block,一点小心得

    作为一个iOS开发程序员,没用过block是不可能的.这次我探讨的是block原理,但是有些更深层次的东西,我也不是很清楚,以后随着更加了解block将会慢慢完善. 第一个问题,什么是block? 我 ...

  10. MFC DLL获取当前路径

    .首先定义此获取模块的静态方法 #if _MSC_VER >= 1300 // for VC 7.0 // from ATL 7.0 sources #ifndef _delayimp_h ex ...