Contractive Auto-Encoder
本博客已经迁往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变种的关系:
- 与AE + weight decay的关系: 雅克比矩阵的Frobenius Norm的二次根等同于带$L_2$正则化的线性编码器
- 与sparse autoencoder的关系: sparse autoencoder的目的是使得每个样本的大部分中间特征为0, 对于sigmoid函数来说, 这对应于其域的左半部分, 这意味着其导数很小, 亦即其雅克比矩阵的对应部分的值很小, 所以二者之间很相似.
- 与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的更多相关文章
- Auto Encoder用于异常检测
对基于深度神经网络的Auto Encoder用于异常检测的一些思考 from:https://my.oschina.net/u/1778239/blog/1861724 一.前言 现实中,大部分数据都 ...
- Auto Encoder
对自编码器的理解: 对于给定的原始输入x,让网络自动找到一种编码方式(特征提取,原始数据的另一种表达),使其解码后的输出x'尽可能复现原始输入x. 知乎参考:https://www.zhihu.com ...
- 使用VAE、CNN encoder+孤立森林检测ssl加密异常流的初探——真是一个忧伤的故事!!!
ssl payload取1024字节,然后使用VAE检测异常的ssl流. 代码如下: from sklearn.model_selection import train_test_split from ...
- Deep Learning and Shallow Learning
Deep Learning and Shallow Learning 由于 Deep Learning 现在如火如荼的势头,在各种领域逐渐占据 state-of-the-art 的地位,上个学期在一门 ...
- 堆叠降噪自编码器SDAE
https://blog.csdn.net/satlihui/article/details/81006906 https://blog.csdn.net/github_39611196/articl ...
- 【原】KMeans与深度学习模型结合提高聚类效果
这几天在做用户画像,特征是用户的消费商品的消费金额,原始数据(部分)是这样的: id goods_name goods_amount 男士手袋 1882.0 淑女装 2491.0 女士手袋 345.0 ...
- 【原】KMeans与深度学习自编码AutoEncoder结合提高聚类效果
这几天在做用户画像,特征是用户的消费商品的消费金额,原始数据(部分)是这样的: id goods_name goods_amount 男士手袋 1882.0 淑女装 2491.0 女士手袋 345.0 ...
- (zhuan) Some Talks about Dual Learning
研究|对偶学习:一种新的机器学习范式 this blog copy from: http://www.msra.cn/zh-cn/news/blogs/2016/12/dual-learning-2 ...
- kaggle-Corporación Favorita Grocery Sales Forecasting
https://blog.csdn.net/bitcs_zt/article/details/79256688 该项比赛1月15日就已经结赛了,但由于之后进入期末,备考花费了大量的时间,没来得及整理相 ...
- 使用SAE(VAE)检测信用卡欺诈——感觉误报率还是比较高啊 70%+误报 蛋疼
from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScale ...
随机推荐
- thrift之TTransport层的堵塞的套接字I/O传输类TSocket
本节将介绍第一个实现具体传输功能的类TSocket,这个类是基于TCP socket实现TTransport的接口.下面具体介绍这个类的相关函数功能实现. 1.构造函数 分析一个类的功能首先看它的定义 ...
- HighCharts之2D柱状图
1.HighCharts之2D柱状图源码 column.html: <!DOCTYPE html> <html> <head> <meta charset=& ...
- JS几种数组遍历方式以及性能分析对比
前言 这一篇与上一篇 JS几种变量交换方式以及性能分析对比 属于同一个系列,本文继续分析JS中几种常用的数组遍历方式以及各自的性能对比 起由 在上一次分析了JS几种常用变量交换方式以及各自性能后,觉得 ...
- js中的hasOwnProperty()和isPrototypeOf()
js中的hasOwnProperty()和isPrototypeOf() 这两个属性都是Object.prototype所提供:Object.prototype.hasOwnProperty()和Ob ...
- struts2学习笔记之一:基本简介
Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个Servlet,在MVC设计模式中,Struts2作为控制器来建立模型与视图的数据交互(所有的访问都会被控制器操作控制) ...
- 样式中的url加载探疑
当一个项目多人维护,特别是接手别人的项目,而项目又在改之又改的基础上再改,我一直遵循,别人的样式我不动的原则,尽量不因为一时不察,导致整站或部分页面出现错位的现象,因些在修改样式与写样式时都是在原有的 ...
- atitit. 解决org.hibernate.SessionException Session is closed
atitit. 解决org.hibernate.SessionException Session is closed #--现象:: org.hibernate.SessionException ...
- SQL 2012 镜像 图解(解决1418)
概念:http://blog.chinaunix.net/uid-11231963-id-2150268.html 写的不错 1.环境准备 1.WIN7+SQL 2012 两台机器 如:10.58.8 ...
- uva111动态规划之最长公共子序列
http://acm.hust.edu.cn/vjudge/contest/view.action?cid=74662#problem/C A B C D E C - Largest Rect ...
- 详解Bootstrap缩略图组件及警示框组件
缩略图组件 缩略图在网站中最常用的就是产品列表页面,一行显示几张图片,有的在图片底下带有标题.描述内容.按钮等信息.bootstrap框架将这部分独立成一个模块组件,通过类名.thumbnail配合b ...