叠置去噪自编码器:用局部去噪准则学习深度网络中的有用表示

本文主要是介绍叠置去噪自编码器:用局部去噪准则学习深度网络中的有用表示,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Vincent P, Larochelle H, Lajoie I, Bengio Y, Manzagol P-A. Stacked denoising autoencoders: Learning useful representations in a deep network with a local denoising criterion. J Mach Learn Res. 2010;11:3371–408.

摘要

我们探索了一种构建深度网络的原始策略,该策略基于去噪自编码器的堆叠层,这些自编码器经过局部训练以去噪其输入的损坏版本。由此产生的算法是普通自编码器堆叠的直接变化。然而,在分类问题的基准测试中显示,它产生的分类误差显著降低,从而弥合了与深度信念网络(DBN)的性能差距,并在某些情况下超过了DBN。以这种纯无监督方式学习的更高级别表示也有助于提高后续SVM分类器的性能。定性实验表明,与普通自编码器不同,去噪自编码器能够从自然图像斑块中学习类gabor边缘检测器,从数字图像中学习更大的笔划检测器。这项工作清楚地确立了使用去噪标准作为可处理的无监督目标来指导有用的高级表示学习的价值。

关键词:深度学习,无监督特征学习,深度信念网络,自编码器,去噪

1.   介绍

长期以来,神经网络研究领域一直认为,多层非线性的组合将是有效地对变量之间的复杂关系进行建模,并在困难的识别任务中获得更好的泛化性能的关键(McClelland et al., 1986;辛顿,1989; Utgoff and Stracuzzi, 2002)。

这一观点的产生部分源于对人类大脑区域(如视觉皮层)分层结构的了解,部分源于对其有利的理论论证(H˚astad, 1986;H˚astad and Goldmann, 1991;Bengio and LeCun, 2007;Bengio, 2009)。然而,回顾多层神经网络的历史,它们存在问题的非凸优化长期以来阻碍了获得预期的收益(Bengio et al., 2007;Bengio, 2009)超越一个或两个隐藏层因此,许多机器学习研究在允许凸优化的浅层架构中取得了进展,而在深度网络中学习的难题则处于休眠状态。

最近对这种深度架构的兴趣的复兴是由于新方法的发现(Hinton et al., 2006;Hinton and Salakhutdinov, 2006;Bengio et al., 2007;Ranzato et al., 2007;Lee et al., 2008),证明在学习参数方面是成功的。自从Hinton et al.(2006)和Hinton and Salakhutdinov(2006)在深度信念网络(DBN)上的开创性工作以来,已经提出了几种替代技术和改进方法。然而,所有这些似乎都建立在同样的原则之上,我们可以总结如下:

•训练一个深度网络,从随机初始化参数开始,通过梯度下降直接优化感兴趣的监督目标(例如正确分类的对数概率),效果并不好。

•效果更好的是最初使用一个局部无监督标准依次(预)训练每一层,目标是学习从前一层输出的低级表示产生有用的高级表示。

从这个起点开始,在监督目标上的梯度下降导致在泛化性能方面更好的解决方案。经验表明,以这种方式训练的深层网络可以避免陷入只能随机初始化的那种糟糕的解决方案。参见Erhan et al.(2010)对该现象的可能解释进行了深入的实证研究和讨论。

除了与任务相关的监督标准外,似乎关键是使用额外的无监督标准来指导每一层的学习。从这个意义上说,这些技术与半监督学习方法有很多共同点,除了它们即使在所有示例都被标记的情况下也有用,利用数据的输入部分进行正则化,从而接近更好的泛化误差最小(Erhan等人,2010)。

对于什么构成初始化深度架构的“好”表示,或者什么明确的无监督标准可以最好地指导他们的学习,目前还没有明确的理解。我们知道,只有少数算法可以很好地实现这一目的,首先是受限玻尔兹曼机(RBMs) (Hinton等人,2006;Hinton和Salakhutdinov, 2006;Lee等人,2008年)和自动编码器(Bengio等人,2007年;Ranzato等人,2007年),以及半监督嵌入(Weston等人,2008年)和核PCA (Cho和Saul, 2010年)。

值得一提的是,RBMs (Hinton, 2002;Smolensky, 1986)和基本的经典自动编码器在功能形式上非常相似,尽管它们的解释和用于训练它们的程序非常不同。更具体地说,两个模型从输入映射到均值隐藏表示的确定性函数是相同的,将在2.2节详细介绍。一个重要的区别是,确定性自动编码器考虑实值均值作为其隐藏表示,而随机RBMs从该均值中采样二进制隐藏表示。然而,在初始预训练之后,当rbm堆叠在深度神经网络中时,在实践中通常使用这些实值均值(Hinton等人,2006;Hinton和Salakhutdinov, 2006)。这更符合确定性自动编码器的解释。还要注意,在RBM中,自编码器的重构误差可以被视为对数似然梯度的近似,在某种程度上,这与使用RBM的对比散度更新所做的近似类似(Bengio和Delalleau, 2009)。因此,通过堆叠自动编码器初始化深度网络产生的分类性能几乎与堆叠RBMs一样好就不足为奇了(Bengio等人,2007;Larochelle等人,2009a)。但为什么它几乎没有那么好呢?本研究的最初动机是寻找一种方法来弥合这种性能差距。

有了自动编码器范式,我们开始研究什么可以形成一个好的、有用的表示。我们一直在寻找无监督学习原则,这些原则可以帮助我们学习到能够检测输入模式中重要结构的特征检测器。第二节引导读者理解我们的推理过程。从保留信息的简单直观概念出发,提出了经典自编码器的一般化表述,然后强调了其局限性。这导致我们在第3节中提出了一个替代的去噪准则,并推导出去噪自编码器模型,还给出了一个可能的直观几何解释。仔细研究所考虑的噪声类型,将使我们能够推导出基本模型的进一步扩展。第4节讨论了已有的相关工作和方法。第5节提供了实验,定性地研究了在各种条件下由单层去噪自编码器学习的特征检测器。第6节描述了通过堆叠去噪自编码器获得的多层架构的实验,并将其分类性能与其他最先进的模型进行了比较。第7节尝试将堆叠(去噪)自动编码器转换为实用的生成模型,以便对生成的样本与dbn进行定性比较。第8节总结了我们的发现并总结了我们的工作。

2. 什么是好的表现?从互信息到自动编码器

从一开始,我们就可以对“好的”表示给出一个可操作的定义,即最终将有助于解决感兴趣的任务,从某种意义上说,它将帮助系统在这些任务上快速实现更高的性能,而不是首先学习形成表示。基于通常用于评估算法性能的客观指标,这可以表述为“一个好的表示就是能够产生性能更好的分类器的表示”。最终的分类性能通常会被用来客观地比较算法。然而,如果要从最近深度网络训练技术的突破中吸取教训,那就是来自单一狭义分类任务的错误信号不应该是用于指导表示学习的唯一或主要标准。首先,实验表明,通过优化一个无监督准则开始,而不考虑特定的分类问题,实际上可以极大地帮助最终实现该分类问题的卓越性能。其次,可以说,人类迅速精通新任务的能力在很大程度上是建立在他们面对该任务之前学习的基础上的。

在本节中,我们从保留信息和进展的简单概念开始,从这个更普遍的角度正式介绍传统的自动编码器范式。

2.1 保留输入信息

2.2传统自动编码器(AE)

这篇关于叠置去噪自编码器:用局部去噪准则学习深度网络中的有用表示的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/739727

相关文章

Java中ArrayList与顺序表示例详解

《Java中ArrayList与顺序表示例详解》顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构,:本文主要介绍Java中ArrayList与... 目录前言一、Java集合框架核心接口与分类ArrayList二、顺序表数据结构中的顺序表三、常用代码手动

Android使用java实现网络连通性检查详解

《Android使用java实现网络连通性检查详解》这篇文章主要为大家详细介绍了Android使用java实现网络连通性检查的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录NetCheck.Java(可直接拷贝)使用示例(Activity/Fragment 内)权限要求

SQL 注入攻击(SQL Injection)原理、利用方式与防御策略深度解析

《SQL注入攻击(SQLInjection)原理、利用方式与防御策略深度解析》本文将从SQL注入的基本原理、攻击方式、常见利用手法,到企业级防御方案进行全面讲解,以帮助开发者和安全人员更系统地理解... 目录一、前言二、SQL 注入攻击的基本概念三、SQL 注入常见类型分析1. 基于错误回显的注入(Erro

Java枚举类型深度详解

《Java枚举类型深度详解》Java的枚举类型(enum)是一种强大的工具,它不仅可以让你的代码更简洁、可读,而且通过类型安全、常量集合、方法重写和接口实现等特性,使得枚举在很多场景下都非常有用,本文... 目录前言1. enum关键字的使用:定义枚举类型什么是枚举类型?如何定义枚举类型?使用枚举类型:2.

Java中Redisson 的原理深度解析

《Java中Redisson的原理深度解析》Redisson是一个高性能的Redis客户端,它通过将Redis数据结构映射为Java对象和分布式对象,实现了在Java应用中方便地使用Redis,本文... 目录前言一、核心设计理念二、核心架构与通信层1. 基于 Netty 的异步非阻塞通信2. 编解码器三、

Java HashMap的底层实现原理深度解析

《JavaHashMap的底层实现原理深度解析》HashMap基于数组+链表+红黑树结构,通过哈希算法和扩容机制优化性能,负载因子与树化阈值平衡效率,是Java开发必备的高效数据结构,本文给大家介绍... 目录一、概述:HashMap的宏观结构二、核心数据结构解析1. 数组(桶数组)2. 链表节点(Node

Java 虚拟线程的创建与使用深度解析

《Java虚拟线程的创建与使用深度解析》虚拟线程是Java19中以预览特性形式引入,Java21起正式发布的轻量级线程,本文给大家介绍Java虚拟线程的创建与使用,感兴趣的朋友一起看看吧... 目录一、虚拟线程简介1.1 什么是虚拟线程?1.2 为什么需要虚拟线程?二、虚拟线程与平台线程对比代码对比示例:三

Python函数作用域与闭包举例深度解析

《Python函数作用域与闭包举例深度解析》Python函数的作用域规则和闭包是编程中的关键概念,它们决定了变量的访问和生命周期,:本文主要介绍Python函数作用域与闭包的相关资料,文中通过代码... 目录1. 基础作用域访问示例1:访问全局变量示例2:访问外层函数变量2. 闭包基础示例3:简单闭包示例4

Python实现简单封装网络请求的示例详解

《Python实现简单封装网络请求的示例详解》这篇文章主要为大家详细介绍了Python实现简单封装网络请求的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录安装依赖核心功能说明1. 类与方法概览2.NetHelper类初始化参数3.ApiResponse类属性与方法使用实

深度解析Python中递归下降解析器的原理与实现

《深度解析Python中递归下降解析器的原理与实现》在编译器设计、配置文件处理和数据转换领域,递归下降解析器是最常用且最直观的解析技术,本文将详细介绍递归下降解析器的原理与实现,感兴趣的小伙伴可以跟随... 目录引言:解析器的核心价值一、递归下降解析器基础1.1 核心概念解析1.2 基本架构二、简单算术表达