AICon 上海站|90%日程已就绪,解锁Al未来! 了解详情
写点什么

一文看懂 AutoEncoder 模型演进图谱

  • 2019-08-22
  • 本文字数:2788 字

    阅读完需:约 9 分钟

一文看懂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-08-22 13:0013093

评论

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

GaussDB(DWS)迁移实践丨row_number输出结果不一致

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 5 月 PK 榜

腾讯高工内产,Github都没的SpringBoot源码手册

做梦都在改BUG

Java spring Spring Boot 框架

首届百度商业AI技术创新大赛启动 点燃AIGC革新“星火”

百度Geek说

人工智能 百度 AIGC 企业号 5 月 PK 榜

如何设计一个自动化测试平台

老张

自动化测试 测试开发 测试平台

最佳实践:基于vite3的monorepo前端工程搭建 | 京东云技术团队

京东科技开发者

前端 vite Monorepo lodash vue3 vite 企业号 5 月 PK 榜

让初学者读懂代码的入门书

博文视点Broadview

NFTScan | 05.22~05.28 NFT 市场热点汇总

NFT Research

NFT 热点

【实践篇】手把手教你落地DDD | 京东云技术团队

京东科技开发者

DDD Archetype 企业号 5 月 PK 榜 三层架构

数字化转型,低代码开发真的靠谱?

引迈信息

低代码 数字化 JNPF

阿里技术大佬限产的Netty核心原理剖析手册,看完你不心动?

做梦都在改BUG

Netty

盘点一款好用的运维团队协同软件,用过真香!

行云管家

运维 IT运维 协同合作

软件测试 | 软件危机的几个体现

测吧(北京)科技有限公司

测试

离线版Gerber查看器+PCB/PCBA检测神器新功能!

华秋PCB

工具 电路 元器件 PCB PCB设计

堪称一绝!阿里技术人都用的Nginx笔记手册,应用到架构齐全

做梦都在改BUG

nginx

深度学习进阶篇-国内预训练模型[6]:ERNIE-Doc、THU-ERNIE、K-Encoder融合文本信息和KG知识;原理和模型结构详解。

汀丶人工智能

人工智能 自然语言处理 深度学习 预训练模型 Transformer

架构实战营 模块1作业

吴俊

架构实战营

亿级 GPS 数据如何实现高效存储和查询?不同类型数据库选型分析

爱倒腾的程序员

涛思数据 时序数据库 ​TDengine taosdata

校园共享电动车发展现状及未来趋势

共享电单车厂家

共享电动车厂家 校园共享电单车 校内共享电动车

Python压缩JS文件,重点是 slimit

华为云开发者联盟

Python 开发 华为云 华为云开发者联盟 企业号 5 月 PK 榜

新手系列 I 如何使用 TDesign 轻松开发项目,秘诀都在这里

TDesign

#开源项目 项目搭建

Tomcat处理http请求之源码分析 | 京东云技术团队

京东科技开发者

tomcat container HTTP 企业号 5 月 PK 榜

OpenAI如何让ChatGPT遵守了伦理道德的底线

陈磊@Criss

Mac电脑上的系统监控工具:iStat Menus 中文激活版

真大的脸盆

Mac Mac 软件 系统监控

通义千问预体验,如何让 AI 模型应用“奔跑”在函数计算上?

Serverless Devs

敏捷项目管理中缺陷bug的跟踪和管理

顿顿顿

Scrum 敏捷开发 缺陷管理 敏捷项目管理 敏捷开发管理工具

惊艳!京东T8纯手码的Redis核心原理手册,基础与源码齐下

做梦都在改BUG

Java 数据库 redis 缓存

5G和led显示屏有什么关系

Dylan

技术 5G LED显示屏

Flutter调优--深入探究MediaQuery引起界面Rebuild的原因及解决办法 | 京东云技术团队

京东科技开发者

flutter 企业号 5 月 PK 榜 MediaQuery rebuild

除了运行、休眠…进程居然还有僵尸、孤儿状态

华为云开发者联盟

Linux 开发 华为云 华为云开发者联盟 企业号 5 月 PK 榜

一文看懂AutoEncoder模型演进图谱_AI&大模型_深度传送门_InfoQ精选文章