关于自编码器的核心点理解

参考文献

1.一文看懂AutoEncoder模型演进图谱
2.《神经网络与深度学习》
3.自编码器是什么?有什么用?这里有一份入门指南(附代码)
4.自动编码器
5.自编码器实现代码(可视化版本)


在这里插入图片描述

一、稀疏编码

1.生物学背景

稀疏编码(Sparse Coding)也是一种受哺乳动物视觉系统中简单细胞感受野而启发的模型。外界刺激在视觉神经系统的表示具有很高的稀疏性。编码的稀疏性在一定程度上符合生物学的低功耗特性。

从维度上分析,稀疏编码本质上属于一种升维操作。

2.表示

为了得到稀疏的编码,我们需要找到一组 “超完备” 的基向量(即 p > d)来进行编码。在超完备基向量之间往往会存在一些冗余性,因此对于一个输入样本,会存在很多有效的编码。如果加上稀疏性限制,就可以减少解空间的大小,得到 “唯一” 的稀疏编码。

在这里插入图片描述
稀疏性衡量函数有很多种选择,如:L0范数、对数函数、指数函数等。

3.训练方法

在这里插入图片描述

4.优点

计算量降低、可解释性提高、可以实现特征的自动选择


二、自编码器

1.最基本的自编码器

在这里插入图片描述
自编码器的学习目标:最小化重构错误(reconstruction errors):
在这里插入图片描述
实际中,加入正则项后,目标函数变为:
在这里插入图片描述

自编码器利用类似神经网络的双隐层的方式,简单粗暴地提取了样本的特征。
这个双隐层是有争议的,最初的编码器确实使用了两组(W,b),但是Vincent在2010年的论文中做了研究,发现只要单组W就可以了。即W’=WT, W 和 W’ 称为Tied Weights。实验证明,W’ 真的只是在打酱油,完全没有必要去做训练。

逆向重构矩阵让人想起了逆矩阵,若W-1=WT的话,W就是个正交矩阵了,即W是可以训成近似正交阵的。

由于W’就是个酱油,训练完之后就没它事了。正向传播用W即可,相当于为input预先编个码,再导入到下一layer去。所以叫自动编码器,而不叫自动编码解码器。

我们使用自编码器是为了得到有效的数据表示,因此在训练结束后,我们一般去掉解码器,只保留编码器。编码器的输出可以直接作为后续机器学习模型的输入。


2.稀疏自编码器

假设中间隐藏层 z 的维度为 p 大于输入样本 x 的维度 d,并让 z 尽量稀疏,这就是稀疏自编码器(Sparse Auto-Encoder)。

目标函数如下:
在这里插入图片描述
其中稀疏性度量函数 ρ(·)除了可以选择为L0范数、对数函数、指数函数外,还可以定义为一组训练样本中每一个神经元激活的频率


3.栈式自编码器(SAE)

在实践中经常使用逐层堆叠的方式来训练一个深层的自编码器,称为堆叠自编码器(Stacked Auto-Encoder, SAE)。堆叠自编码一般可以采用逐层训练(layer-wise training)来学习网络参数。

当然,这种做法就有一个问题,AutoEncoder可以看作是PCA的非线性补丁加强版,PCA的取得的效果是建立在降维基础上的。仔细想想CNN这种结构,随着layer的推进,每层的神经元个数在递增,如果用了AutoEncoder去预训练,岂不是增维了?真的没问题?
paper中给出的实验结果认为AutoEncoder的增维效果还不赖,原因可能是非线性网络能力很强,尽管神经元个数增多,但是每个神经元的效果在衰减。同时,随机梯度算法给了后续监督学习一个良好的开端。整体上,增维是利大于弊的。

SAE本质上都是非监督学习,SAE各层的输出都是原始数据的不同表达。对于分类任务,往往在SAE顶端再添加一分类层(如Softmax层),并结合有标注的训练数据,在误差函数的指导下,对系统的参数进行微调,以使得整个网络能够完成所需的分类任务。

对于微调过程,既可以只调整分类层的参数(此时相当于把整个SAE当做一个feature extractor),也可以调整整个网络的参数(适合训练数据量比较大的情况)。
在这里插入图片描述
栈式自编码器采用了2006年提出的逐层预训练技术,这一技术真正推动了第三次深度学习浪潮的兴起,虽然后期不断有新技术的提出,使得逐层预训练不再那么必要,但是这一技术仍然有很好的用途,下面是Bingio先生在2015年所作出的评价:

Stacks of unsupervised feature learning layers are STILL useful when you are in a regime with insufficient labeled examples, for transfer learning or domain adaptation. It is a regularizer. But when the number of labeled examples becomes large enough, the advantage of that regularizer becomes much less. I suspect however that this story is far from ended! There are other ways besides pre-training of combining supervised and unsupervised learning, and I believe that we still have a lot to improve in terms of our unsupervised learning algorithms.


4.降噪自编码器(DAE)

为了提高模型对数据部分损坏的鲁棒性,提出了降噪自编码器。

降噪自编码器(Denoising Autoencoder)就是一种通过引入噪声来增加编码鲁棒性的自编码器。
引入噪声的方法有两种:
【1】对于一个向量 x,我们首先根据一个比例 µ 随机将 x 的一些维度的值设置为 0,得到一个被损坏的向量 x˜。然后将损坏比例 µ 一般不超过 0.5;
【2】也可以使用其它的方法来损坏数据,比如引入高斯噪声。
被损坏的向量 x˜ 输入给自编码器得到编码 z,并重构出原始的无损输入 x , 流程如下图所示:
在这里插入图片描述


思考:这些衍生的自编码器的产生动机是怎么来的??

实际上这些衍生模型,来自于问题:隐层的维度到底怎么确定?怎么才能称得上是一个好的表达?

事实上,这个问题回答并不唯一,也正是从不同的角度去思考这个问题,导致了自编码器的各种变种形式出现。
在这里插入图片描述


  • 6
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《Python 核心编程》是一本介绍 Python 语言的经典教材,由 Wesley Chun 和 Jeffery E. Friedl 共同编写。本书涵盖了从基础语法到高级主题的广泛知识,包括循环、函数、模块、面向对象编程等内容。 此外,该书还介绍了使用 Python 解决实际问题的方法,例如文件处理、网络编程、数据库连接、GUI 编程等。书中使用了许多实例,通过实例来讲解概念和使用方法,使读者能更好地理解 Python 编程的基本思想和实践技巧。 总的来说,《Python 核心编程》是一本适合 Python 初学者和有一定经验的程序员的参考书籍。读者可以根据自己的需要选择适当的章节进行阅读,也可以作为工具书在实际编程中使用。此外,本书还附有 Python 编译器,读者可以通过编写代码来练习书中的知识点。如果你想学习 Python,那么《Python 核心编程》绝对是一本值得推荐的好书。 ### 回答2: Python核心编程指的是一本以Python编程语言为主题的编程书籍。该书的作者为Wesley Chun,是一本经典的Python编程指南,以深入浅出、通俗易懂的方式介绍了Python语法、常用模块以及实际应用等方面的知识。 Python是一门跨平台高级编程语言,具有易读易写、开发效率高、支持面向对象编程等优点,因此在科学计算、数据处理、网络爬虫、人工智能、机器学习等领域都得到了广泛的应用。 Python核心编程通过优美的代码示例和实用的工具让读者快速掌握Python语法,同时详细介绍了List、Tuple、Dictionary、Set等常用数据结构以及条件语句、循环语句等Python编程基础知识。在程序设计和编码过程中,读者还可以学习如何使用面向对象编程(OOP)的方式来设计解决实际问题的程序。此外,该书还特别介绍了常用的模块和库,包括网络编程、多线程、数据库访问等方面的内容,帮助读者丰富和拓展Python的应用领域。 总的来说,Python核心编程是一本通俗易懂、具有实用价值和实用性的Python编程指南,是Python程序员必备的参考书。对于初学者和中级开发者来说,这本书是很好的“翻译书”,能够帮助他们更好地理解Python编程的概念和应用。对于高级程序员而言,该书更像是一本手册,用于解决一些高级编程难题和实际应用问题。 ### 回答3: Python核心编程是一本极具权威性和实用性的Python编程入门教材。该教材结合了Python的主要语言特征和使用技巧,并通过海量的实例、案例、范例,帮助读者快速入门Python编程,开发Python应用程序。 该教材的目录由浅入深,从Python语言基础概念入手,逐步深入讲解Python数据类型、控制结构、函数、模块、面向对象编程等方面的知识。同时,该教材还具有较为深入的章节讲解,如Python正则表达式、多线程编程、GUI编程等专项技能。 在Python核心编程中,读者还可以学习到如何使用Python编写各种类型的程序,例如网络编程、Web编程、数据库编程、操作系统编程等等。另外,该教材还介绍了大量的Python概念,如递归、异常处理、装饰器、迭代器、生成器等等,这些概念都是Python开发过程中所必须掌握的,对Python编程的提升具有极大的帮助。 总而言之,Python核心编程的核心价值在于为读者提供了全面的Python编程指南,把Python编程的方法和技巧讲解得深入浅出,易于理解。如果你想学习Python编程或提高Python编程技能,这是一个非常好的参考资料。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值