本博客已经迁往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. git tag查看、创建与删除

    tag管理 查看tag 太多的话用 grep 过滤 $ git tag | grep dev_20150525 # 创建tag $ git tag -a dev_20150525_16 -m 'xxx ...

  2. libevent (一) socket属性设置与初始化操作

    socket属性设置与初始化操作 libevent是一个事件触发的网络库,适用于windows.linux.bsd等多种平台,内部使用select.epoll.kqueue等系统调用管理事件机制.著名 ...

  3. Windows 8.1——将网站固定到开始菜单,自定义图标、颜色和Windows推送通知

    记得在IE 9和Windows 7刚出来那会儿我写过一篇文章来介绍如何自定义网站将其固定到Windows的任务栏上,同时自定义图标及任务内容.那个功能在IE 9中被称之为JumpList.http:/ ...

  4. [译]JavaScript中,{}+{}等于多少?

    最近,Gary Bernhardt在一个简短的演讲视频“Wat”中指出了一个有趣的JavaScript怪癖:在把对象和数组混合相加时,会得到一些你意想不到的结果.本篇文章会依次讲解这些计算结果是如何得 ...

  5. 【UML】UML序列图总结

    序列图主要用于展示对象之间交互的顺序. 序列图将交互关系表示为一个二维图. 纵向是时间轴,时间沿竖线向下延伸. 横向轴代表了在协作中各独立对象的类元角色. 类元角色用生命线表示. 当对象存在时,角色用 ...

  6. Python 实现有道翻译命令行版

    一.个人需求 由于一直用Linux系统,对于词典的支持特别不好,对于我这英语渣渣的人来说,当看英文文档就一直卡壳,之前用惯了有道词典,感觉很不错,虽然有网页版的但是对于全站英文的网页来说并不支持.索性 ...

  7. js Array 交集 并集 差集 去重

    最劲项目需要用到js数组去重和交集的一些运算,我的数组元素个数可能到达1000以上,网上的实现方式都是2次循环,性能不适合我的需求,1000*1000那循环次数太多了,所以我这里采用对象object来 ...

  8. 小白学数据分析----->什么才是留存率的关键?

    最近花了很多的时间在体验各种游戏,从火爆的卡牌,到策略,RPG等等,有一个问题在影响我,什么才是留存率的关键?今天就先讨论一些我的想法. 留存率已经成为大家最常提到的词汇,也是拿出来show一下的武器 ...

  9. Spring 4.3.2+quartz2.2.3单机、集群+websocket集群实现文本或图片推送、接收及显示

    相关环境 Nginx,Spring4.x当前(要选择4.0+),tomcat8.x,Quartz 2.x集群 测试面页:http://sms.reyo.cn/socket.html 测试面页是文本和图 ...

  10. GTD时间管理(3)---梳理总结

    一:收集箱   1:灵感和想法 2:交代事情 3:任何困扰你的事     二:清单容器     1:通过行动性和非行动性原则 2:通过2分钟原则 3:通过人员性质原则  三:组织 (人,事,时 的组合 ...