本博客已经迁往http://www.kemaswill.com/, 博客园这边也会继续更新, 欢迎关注~

Contractive Autoencoder(CAE)是Bengio等人在2011年提出的一种新的Autoencoder, 在传统的Autoencoder的重构误差上加上了新的惩罚项, 亦即编码器激活函数对于输入的雅克比矩阵(Jacobian matrix)的Frobenius Norm. CAE的核心思想是尽量捕获训练样本中观察到的variance, 而忽略其他的variance.

鲁棒特征

作者在围绕什么才是衡量特征好坏的标准上做了大量讨论(如同在DAE中一样).

  • sDAE(stacked DAE)和sparse coding的观点是尽量捕获每个训练样本的信息, 如果样本服从某个潜在的生成式分布的话.
  • RBM的观点是学到的特征可以很好地刻画输入的分布, 这可以通过直接优化一个生成式模型(比如RBM)的似然得到.

CAE的出发点是, 学到的特征应该对围绕训练样本的输入的细小变动有鲁棒性.

为了提高学到的特征的鲁棒性, CAE以编码器的激活函数对于输入的雅克比矩阵的Frobenius Norm为惩罚项:

$\|J_f(x)\|_F^2 = \sum_{ij}(\frac{\partial h_j(x)}{\partial x_i})^2$

惩罚$\|J_f\|_F^2$项使得到特征空间的映射在训练样本的邻域是紧缩的(contractive).

Contractive Auto-encoder

CAE的思想就是以$\|J_f\|_F^2$项作为autoencoder的正则化项, 亦即CAE的损失函数为

$\mathcal{J}_{CAE}(\theta)=\sum_{x\in D_n}(L(x, g(f(x))) + \lambda\|J_f(x)\|_F^2)$

CAE与其他Autoencoder变种的关系:

  1. 与AE + weight decay的关系: 雅克比矩阵的Frobenius Norm的二次根等同于带$L_2$正则化的线性编码器
  2. 与sparse autoencoder的关系: sparse autoencoder的目的是使得每个样本的大部分中间特征为0, 对于sigmoid函数来说, 这对应于其域的左半部分, 这意味着其导数很小, 亦即其雅克比矩阵的对应部分的值很小, 所以二者之间很相似.
  3. 与DAE之间的关系: CAE显式的鼓励中间特征的鲁棒性, 而DAE鼓励其重构$(g\circ f)(x)$的鲁棒性. 因为对于分类来说, 我们只需要用到编码器以便得到中间特征, 学到的中间特征的鲁棒性要比重构的鲁棒性重要, 所以CAE比DAE更容易学到鲁棒的特征.

CAE的理论解释

Hugo Larochelle做过一个关于CAE的非常精辟的理论解释:

可以把CAE的损失函数的两个组成部分看成是CAE的两个优化目标:

第一部分(亦即重构误差)使得CAE会尽力去捕获输入图像的好多信息, 第二部分(亦即雅克比矩阵的Frobenius Norm)可以看做是CAE在丢弃所有的信息(因为最小化雅克比矩阵的Frobenius Norm的后果就是梯度会接近于0, 这样的话, 如果改变输入数据, 隐层单元的值不会改变, 亦即如果在训练样本上加一些噪音, 隐层节点的值不变). 所以CAE的目的就是只捕获那些在训练数据中出现的variance, 而对于其他的variance不敏感[2](论文原文为The proposed criterion[Frobenius Norm of Jacobian] is trying to make the features invariant in all directions around the training examples, but the reconstruction error (or likelihood) is making sure that that the representation is faithful, i.e., can be used to reconstruct the input example.)

CAE的特性还可以通过manifold learning来解释:

我们把高维数据投影到二位平面上, 假设训练样本分布在如图所示的manifold上, 那么我们希望CAE对于沿着manifold的variance比较敏感(否则的话对于不同的训练样本, 我们很难去重构), 而对于垂直于manifold的variance不敏感(论文原文为Hence the directions that resist to this contracting pressure (strong invariance to input changes) are the directions present in the training set. Indeed, if the variations along these directions present in the training set were not preserved, neighboring training examples could not be distinguished and properly reconstructed.).

原论文中还用了紧缩曲线做了解释, 暂时不甚明了, 求高人解答. 紧缩曲线的定义如下

令输出空间内两个样本之间的距离和特征空间内两个样本的距离的比值为紧缩率(contraction ratio), 对于验证集中的每个样本$x_0$, 我们从以$x_0$为球心, $r$为半径的球内随机选取一点$x_1$, 计算$x_0$和$x_1$的紧缩率, 取其平均值作为平均紧缩率. 最后以$r$为横轴, 以该半径下的平均紧缩率为纵轴, 就可以得到紧缩曲线(contractive curve):

可以看到, 只有CAE和DAE-g(Gaussian corruption DAE)的紧缩率会首先上升, 而其他算法的都是直接下降. 暂时的理解是, 对于那些和训练样本(实际上是验证样本, 但是假设样本的划分完全随机, 二者很接近)比较接近的随机样本($r$比较小时), CAE能够比较好的学到其特征(亦即该样本和随机样本在特征空间比较接近), 所以紧缩率会首先上升, 但是对于那些和训练样本距离比较远的随机样本, 学到的特征比较差, 所以紧缩率会下降.

参考文献:

[1]. Contractive Auto-Encoders: Explicit Invariance During Feature Extraction. S. Rifai, P. Vincent, X. Muller, X. Glorot, Y. Bengio. ICML, 2011.

[2]. Hugo Larochelle's Slides on CAE.

[3]. Extracting and Composing Robust Features with Denoising Autoencoders. Pascal Vincent, Hugo Larochelle, Yoshua Bengio, Poerre-Antoine Manzagol. ICML, 2008.

Contractive 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. 使用VAE、CNN encoder+孤立森林检测ssl加密异常流的初探——真是一个忧伤的故事!!!

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

  4. Deep Learning and Shallow Learning

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

  5. 堆叠降噪自编码器SDAE

    https://blog.csdn.net/satlihui/article/details/81006906 https://blog.csdn.net/github_39611196/articl ...

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

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

  7. 【原】KMeans与深度学习自编码AutoEncoder结合提高聚类效果

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

  8. (zhuan) Some Talks about Dual Learning

    研究|对偶学习:一种新的机器学习范式  this blog copy from: http://www.msra.cn/zh-cn/news/blogs/2016/12/dual-learning-2 ...

  9. kaggle-Corporación Favorita Grocery Sales Forecasting

    https://blog.csdn.net/bitcs_zt/article/details/79256688 该项比赛1月15日就已经结赛了,但由于之后进入期末,备考花费了大量的时间,没来得及整理相 ...

  10. 使用SAE(VAE)检测信用卡欺诈——感觉误报率还是比较高啊 70%+误报 蛋疼

    from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScale ...

随机推荐

  1. [JS3] 立即执行JS

    <html> <head> <title>立即执行</title> <SCRIPT TYPE="text/JavaScript" ...

  2. Jenkins与.NET项目

    转自: https://blog.dangl.me/categories Continuous Integration RSS Date Post 2016-10-20 Set Up Private ...

  3. Java程序员的日常——经验贴(纯干货)

    工作当中遇到的事情比较杂,因此涉及的知识点也很多.这里暂且记录一下,今天遇到的知识点,纯干货~ 关于文件的解压和压缩 如果你的系统不支持tar -z命令 如果是古老的Unix系统,可能并不认识tar ...

  4. atitit.获取北京时间CST 功能api总结 O7

    atitit.获取北京时间CST 功能api总结 O7 1. 获取cst时间(北京时间)两布:1.抓取url timtstamp >>format 到cst 1 2. 设置本机时间  se ...

  5. 海康威视 NET_DVR_FindFile NET_DVR_PlayBackByTime 尝试读取或写入受保护的内存,这通常指示其他内存已损坏

    从农民伯伯那下载的代码 NET_DVR_PlayBackByTime NET_DVR_FindFile 这两个方法执行不了 下面是我改的 经过测试了 [DllImport("HCNetSDK ...

  6. Vue.js:轻量高效的前端组件化方案(转载)

    摘要:Vue.js通过简洁的API提供高效的数据绑定和灵活的组件系统.在前端纷繁复杂的生态中,Vue.js有幸受到一定程度的关注,目前在GitHub上已经有5000+的star.本文将从各方面对Vue ...

  7. Log4cpp介绍及使用

    Log4cpp是一个开源的C++类库,它提供了在C++程序中使用日志和跟踪调试的功能.使用log4cpp,可以很便利地将日志或者跟踪调试信息写入字符流.内存字符串队列.文件.回滚文件.调试器.Wind ...

  8. C# 标签(条码)的打印与设计(一)

    C# 标签(条码)的打印与设计(一) C# 标签(条码)的打印与设计(二) 总结:自定义设计条码器.

  9. GTD时间管理(1)---捕获搜集

    前一段时间感觉自己的整个思路很混乱,每一天觉得自己有很多事情很多,但是坐着做着不知道自己做了多少,做项目的时候做着做着时常东想西想.我个人觉得这种想法是不对经的. 于是在google上都出去寻找这方面 ...

  10. Adobe Illustrator里使用fontawesome矢量图标

     简单教程:1.安装FontAwesome.otf字体2.打开http://fontawesome.io/cheatsheet/3.选中图标图片,ctrl+c4.粘贴到AI中5.选中粘贴的内容,修改字 ...