上海架构师集结!4月25-26日,全球架构师峰会首次落地上海,吴翰清、汪源、叶绍志等大咖确认出席 了解详情
写点什么

一文看懂 AutoEncoder 模型演进图谱

2019 年 8 月 22 日

一文看懂AutoEncoder模型演进图谱

本文来自“深度推荐系统”专栏,这个系列将介绍在深度学习的强力驱动下,给推荐系统工业界所带来的最前沿的变化。本文则结合作者在工作中的经验总结,着重于串讲 AutoEncoder 模型框架的演进图谱。


AutoEncoder 作为 NN 里的一类模型,采用无监督学习的方式对高维数据进行高效的特征提取和特征表示,并且在学术界和工业界都大放异彩。本文主要介绍 AutoEncoder 系列模型框架的演进,旨在梳理 AutoEncoder 的基本原理。首先上图,然后再对他们进行逐一介绍。



AutoEncoder 的思想最早被提出来要追溯到 1988 年[1],当时的模型由于数据过于稀疏高维计算复杂度高很难优化,没能得到广泛的引用。直到 2006 年,Hinton 等人[2]采用梯度下降来逐层优化 RBM 从而实现对原始样本/特征的抽象表示,并在特征降维上取得显著效果。这才使得采用神经网络来构建 AutoEncoder 的方法得到广泛关注。


AutoEncoder

在介绍经典的基于神经网络的 AutoEncoder 模型之前,先来整体看一下 AutoEncoder 框架的基本思想,如下图所示。AutoEncoder 框架包含两大模块:编码过程和解码过程。通过 encoder(g)将输入样本 x 映射到特征空间 z,即编码过程;然后再通过 decoder(f)将抽象特征 z 映射回原始空间得到重构样本 x’,即解码过程。优化目标则是通过最小化重构误差来同时优化 encoder 和 decoder,从而学习得到针对样本输入 x 的抽象特征表示 z。



这里我们可以看到,AutoEncoder 在优化过程中无需使用样本的 label,本质上是把样本的输入同时作为神经网络的输入和输出,通过最小化重构误差希望学习到样本的抽象特征表示 z。这种无监督的优化方式大大提升了模型的通用性。


对于基于神经网络的 AutoEncoder 模型来说,则是 encoder 部分通过逐层降低神经元个数来对数据进行压缩;decoder 部分基于数据的抽象表示逐层提升神经元数量,最终实现对输入样本的重构。


这里指的注意的是,由于 AutoEncoder 通过神经网络来学习每个样本的唯一抽象表示,这会带来一个问题:当神经网络的参数复杂到一定程度时 AutoEncoder 很容易存在过拟合的风险。


Denoising AutoEncoder

为了缓解经典 AutoEncoder 容易过拟合的问题,一个办法是在输入中加入随机噪声;Vincent 等人[3]提出了 Denoising AutoEncoder,在传统 AutoEncoder 输入层加入随机噪声来增强模型的鲁棒性。另一个办法就是结合正则化思想,Rifai 等人[4]提出了 Contractive AutoEncoder,通过在 AutoEncoder 目标函数中加上 encoder 的 Jacobian 矩阵范式来约束使得 encoder 能够学到具有抗干扰的抽象特征。


下图是 Denoising AutoEncoder 的模型框架。目前添加噪声的方式大多分为两种:添加服从特定分布的随机噪声;随机将输入 x 中特定比例置为 0。有没有觉得第二种方法跟现在广泛石红的 Dropout 很相似,但是 Dropout 方法是 Hinton 等人在 2012 年才提出来的,而第二种加噪声的方法在 08 年就已经被应用了。这其中的关系,就留给你思考一下。



Denoising AutoEncoder 模型框架


Sparse AutoEncoder

为了在学习输入样本表示的时候可以得到稀疏的高维抽象特征表示,Ng 等人[5]在原来的损失函数中加入了一个控制稀疏化的正则项。稀疏约束能迫使 encoder 的各层只有部分神经元被激活,从而将样本映射成低维稀疏特征向量。


具体来说,如果单个神经元被激活的概率很小,则可认为该网络具有稀疏性。神经元是否被激活可以看做服从概率的伯努利分布。因此可以使用 KL 散度来衡量神经元被激活的概率ρ^与期望概率ρ之间的 loss:



通过将 D_KL 加入到 AutoEncoder 的目标函数中,即可实现对神经网络稀疏性的约束。另外,还有一种方法就是对神经网络各层的输出加入 L1 约束。


CNN/LSTM AutoEncoder

其实无论是 Convolutional Autoencoder[6]、 Recursive Autoencoder 还是 LSTM Autoencoder[7]等等,思路都是将传统 NN 网络的结构融入到 AutoEncoder 中。


以 LSTM AutoEncoder 为例,目标是针对输入的样本序列学习得到抽象特征 z。因此 encoder 部分是输入一个样本序列输出抽象特征 z,采用如下的 Many-to-one LSTM;而 decoder 部分则是根据抽象特征 z,重构出序列,采用如下的 One-to-many LSTM。



将传统 NN 网络的结构引入 AutoEncoder 其实更多是一个大概的思想,具体实现的时候,编码器和解码器都是不固定的,可选的有 CNN/RNN/双向 RNN/LSTM/GRU 等等,而且可以根据需要自由组合。


Variational AutoEncoder

Vairational AutoEncoder(VAE)是 Kingma 等人与 2014 年提出。VAE 比较大的不同点在于:VAE 不再将输入 x 映射到一个固定的抽象特征 z 上,而是假设样本 x 的抽象特征 z 服从(μ,σ^2)的正态分布,然后再通过分布生成抽象特征 z。最后基于 z 通过 decoder 得到输出。模型框架如下图所示:



由于抽象特征 z 是从正态分布采样生成而来,因此 VAE 的 encoder 部分是一个生成模型,然后再结合 decoder 来实现重构保证信息没有丢失。VAE 是一个里程碑式的研究成果,倒不是因为他是一个效果多么好的生成模型,主要是提供了一个结合概率图的思路来增强模型的鲁棒性。后续有很多基于 VAE 的扩展,包括 infoVAE、betaVAE 和 factorVAE 等。


Adversarial AutoEncoder

既然说到生成模型引入 AutoEncoder,那必定也少不了将 GAN 的思路引入 AutoEncoder[9],也取得了不错的效果。


对抗自编码器的网络结构主要分成两大部分:自编码部分(上半部分)、GAN 判别网络(下半部分)。整个框架也就是 GAN 和 AutoEncoder 框架二者的结合。训练过程分成两个阶段:首先是样本重构阶段,通过梯度下降更新自编码器 encoder 部分、以及 decoder 的参数、使得重构损失函数最小化;然后是正则化约束阶段,交替更新判别网络参数和生成网络(encoder 部分)参数以此提高 encoder 部分混淆判别网络的能力。


一旦训练完毕,自编码器的 encoder 部分便学习到了从样本数据 x 到抽象特征 z 的映射关系。



参考文献

[1] Auto-association by multilayer perceptrons and singular value decomposition, Bourlard etc, 1988


[2] Reducing the dimensionality of data with neural networks, Geoffrey Hinton etc, 2006


[3] Extracting and composing robust features with denoising autoencoders, Pascal Vincent etc, 2008


[4] Contractive auto-encoders: Explicit invariance during feature extraction, Rifai S etc, 2011


[5] Sparse autoencoder, Andrew Ng, etc, 2011


[6] Stacked Convolutional Auto-Encoders for Hierarchical Feature, Jonathan Masci, Jurgen Schmidhuber etc, 2011


[7] Unsupervised Learning of Video Representations using LSTMs, Nitish Srivastava etc, 2015


[8] Auto-encoding variational bayes, Diederik Kingma etc, ICLR 2014


[9] Adversarial Autoencoders, Alireza Makhzani, Ian Goodfellow etc, 2015


本文授权转载自知乎专栏“深度推荐系统”。原文链接:https://zhuanlan.zhihu.com/p/68903857


2019 年 8 月 22 日 13:009104

评论

发布
暂无评论
发现更多内容

股东变员工,所以不发工资?| 法庭上的CTO(18)

赵新龙

CTO 法庭上的CTO

SGY奇点交易所系统源码开发

DV:19924636653

软件开发

甲方日常 75

句子

工作 随笔杂谈 日常

Spring 源码学习 11:invokeBeanFactoryPostProcessors

程序员小航

Java spring 源码 源码阅读

像用户一样测试:打破知识的诅咒

QualityFocus

测试 软件质量 可用性 用户体验

重学JS | 数组遍历的7种方法及兼容性处理(polyfill)

梁龙先森

前端 编程语言

生产环境全链路压测建设历程 21:某快递 A 股上市公司的生产压测案例之基于测试流量的混沌工程(故障演练)

数列科技杨德华

全链路压测 七日更

智能合约交易所系统开发

DV:19924636653

软件开发

劫持Chrome浏览器“获利”8000万元 | 法庭上的CTO(13)

赵新龙

CTO 法庭上的CTO

混合用工、被拖欠工资的 CTO | 法庭上的 CTO(16)

赵新龙

CTO 法庭上的CTO

计算机网络简述

lee

计算机网络 网络协议 网络

英特尔力邀150家产业大咖推动Evo严苛认证,打造PC界的奥斯卡

intel001

重磅|中国PostgreSQL分会与腾讯云战略合作协议签订

PostgreSQLChina

数据库 postgresql 软件 开源社区

犯“走私罪”的CTO | 法庭上的CTO(19)

赵新龙

CTO 法庭上的CTO

为什么要TDD(测试驱动开发)

sherlockq

敏捷开发 TDD 极限编程

anonymous匿名者场外交易系统APP软件开发

开發I852946OIIO

系统开发

从MongoID的生成讨论分布式唯一ID生成方案

行如风

雪花算法 分布式ID 全局唯一ID 流星算法

快速接入 | 从 0 到 1 构建语音聊天室

拍乐云Pano

音视频 RTC 实时语音 语音聊天室 语聊房

大作业一

黄立

人工智能不过尔尔,基于Python3深度学习库Keras/TensorFlow打造属于自己的聊天机器人(ChatRobot)

刘悦的技术博客

人工智能 tensorflow chatbot 聊天机器人 keras

创建493个测试账户,被公司索赔527万 | 法庭上的 CTO(14)

赵新龙

CTO 法庭上的CTO

这个问题值得讨论吗?

Alan

沟通 团队文化 七日更 28天写作

“盗窃”公司源代码被开除的CTO | 法庭上的CTO(20)

赵新龙

CTO 法庭上的CTO

英特尔赵宏:从硬件创新到平台突破,PC的未来非常值得期待

intel001

智慧仓储管理系统,是否能解决购物狂欢节后新一轮爆仓危机?

一只数据鲸鱼

物联网 数据可视化 智慧物流 智慧仓储

从一个模糊词查询需求的处理方案讨论到一种极速匹配方案的实现

行如风

模糊匹配 双数组trie树 ahocorasick ac自动机 黑名单过滤

“有点技术之外,基本什么都没有”的CTO | 法庭上的CTO(15)

赵新龙

CTO 法庭上的CTO

未签订劳动合同的CTO | 法庭上的 CTO(17)

赵新龙

CTO 法庭上的CTO

深入浅出 ZooKeeper

vivo互联网技术

zookeeper 分布式 ZAB

什么是浮点数?

Kaito

计算机基础 浮点数

直播中不可缺少的一环-rtmp直播推流

anyRTC开发者

音视频 WebRTC CDN RTC RTMP

OCR技术的未来发展与演进

OCR技术的未来发展与演进

一文看懂AutoEncoder模型演进图谱-InfoQ