本博客已经迁往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. 拒绝低调,国内首家推出微软WP8.1移动开发全套免费课程

    活动类型:公开课 开始时间:2014-10-20 20:00 活动地点:YY频道:85155393 课程简介:学习本次公开课你将收获和体会到:      Windwos Phone8.1的推出正是微软 ...

  2. Nginx学习笔记(六) 源码分析&启动过程

    Nginx的启动过程 主要介绍Nginx的启动过程,可以在/core/nginx.c中找到Nginx的主函数main(),那么就从这里开始分析Nginx的启动过程. 涉及到的基本函数 源码: /* * ...

  3. [游戏模版19] Win32 物理引擎 匀速运动

    >_<:Learning the physical engine >_<:resource >_<:code #include <windows.h> ...

  4. iOS开发-【C语言】三目运算符

    1.N目运算符 像逻辑非(!).负号(-)这种只连接一个数据的符号,称为“单目运算符”,比如!5.-5.像算术运算符.关系运算符.逻辑运算符这种连接二个数据的负号,称为“双目运算符”,比如6+7.8* ...

  5. iOS开发实用技巧—项目新特性页面的处理

    iOS开发实用技巧篇—项目新特性页面的处理 说明:本文主要说明在项目开发中会涉及到的最最简单的新特性界面(实用UIScrollView展示多张图片的轮播)的处理. 代码示例: 新建一个专门的处理新特性 ...

  6. android: open failed: EACCES (Permission denied)

    1.  问题描述:在Android中,用程序访问Sdcard时,有时出现“java.io.IOException: open failed: EACCES (Permission denied)&qu ...

  7. 移动平台自动化测试从零开始-MonkeyRunner工具使用 (第二节)

    选自:http://yuedu.baidu.com/search?word=%D3%DA%D3%BF&pbook=0 第2节  MonkeyRunner 安装部署 如果您已经正确的安装部署了A ...

  8. Windows 8.1 with update 官方最新镜像汇总

    Windows 8.1 with update 官方最新镜像汇总,发布日期: 2014/12/16,Microsoft MSDN. 镜像更新日志: 12/29:32位大客户专业版中文版 12/24:6 ...

  9. 关于ORACLE的重启命令

    有时候数据死了,或者没有监听,不必重启机子,重启一下数据库服务行了,下面是linux下的启动步骤,没有在win下执行过,可能也可以!以oracle9i为例(1) 以oracle身份登录数据库,命令:s ...

  10. 关闭/开启 ubuntu 自动更新提示

    发现vps登陆后只有apt update后才知道有多少包需要更新不是很傻么,本地的ubuntu在登录时就有很好的提示,并且还能告知系统负载情况,很有用,这里就想开起来.首先这个提示的名字叫Motd. ...