当前位置: 首页 > article >正文

[文献阅读] Reducing the Dimensionality of Data with Neural Networks

文章目录

  • 摘要
  • Abstract:
  • RBM
  • 自编码器
  • 深层自编码器
    • 初始化
    • 展开
    • 微调
  • 实验
  • 总结

摘要

Reducing the Dimensionality of Data with Neural Networks Reducing the Dimensionality of Data with Neural Networks | Science 使用神经网络降低数据的维度

由Hinton在2006年于Science上发表。

当时的深度学习由于BP算法被指出存在梯度消失问题(当时还没有优化器的情况下),同时这也导致网络的初始化值对网络的训练结果影响很大。

为了解决这两个问题,本文提出一个新的降维算法:由一个非线性的、自适应的多层的编码器(encoder)来将高维的数据转化为低维的编码,和一个相似的解码器(decoder)来将低维编码恢复成原始高维数据,整个系统构成一个自编码器。一开始自编码器基于RBM的预训练来进行初始化,然后将权重转移到一个新的神经网络中用BP进行训练微调。

经过预训练初始化,再训练微调过后的自编码器,就能很好的还原数据原来的信息。而编码器部分,则能够有效的提取数据的特征,这种降维特征提取在分类、可视化、通信、高维数据的存储等方面都非常有促进作用,成为诸多任务的基础算法。

Abstract:

This week I read Reducing the Dimensionality of Data with Neural Networks. It introduce the concept of autoencoders. It discusses the use of Restricted Boltzmann Machines for pretraining and the subsequent fine-tuning of deep autoencoders to address gradient vanishing and initialization challenges.

RBM

*RBM*(Restricted Boltzmann machine)也是论文作者Hinton提出的,是一种生成式随机神经网络(generative stochastic neural network)。该网络由一些可见单元(visible unit,对应可见变量,亦即数据样本)和一些隐藏单元(hidden unit,对应隐藏变量)构成,可见变量和隐藏变量都是二元变量,亦即其状态取{0,1}。

整个网络是一个二部图,只有可见单元和隐藏单元之间才会存在边,可见单元之间以及隐藏单元之间都不会有边连接。

不过现在已经不在研究RBM了,更简单一点,可以将RBM理解为 输入输出均为2值的单层神经网络,即用明确的 0/1 来表示特征有无。

在这里插入图片描述

自编码器

最原始的自编码器可以看作只有三层的神经网络。

该网络包含两个主要部分:编码器(Encoder)和解码器(Decoder)。该网络的目标是学习一个恒等函数令 XR≈X 。通常损失函数被设置为与输入数据做均方根误差,要求输出层最大能力重建输入信息。

由于学习的是恒等函数,所以该网络是无监督的——只需要有输入样本,样本标签与样本一致即可。

在这里插入图片描述

深层自编码器

本文要提出的深层自动编码器,就是多层的自编码器。但在当时这样的深层网络难以训练。

在这里插入图片描述

由于网络更深了,所以梯度消失等问题也会很明显。本文为了解决这个问题,提出了一个逐层的、基于RBM的预训练来进行初始化,这样可以让网络在用BP算法训练前就有一个比较好的起步。

预训练包括学习一叠限制性玻尔兹曼机(RBM),每层只有一层特征检测器。学习到的一个RBM的特征激活作为’‘数据’’,用于训练堆栈中的下一个RBM。在预训练之后,RBMs被 "解压"以创建一个深度自动编码器,然后利用误差导数的反向传播进行微调。

在具有多个隐藏层的非线性自动编码器中,优化权重是很困难的。在初始权重大的情况下,自动编码器通常会找到很差的局部最小值;在初始权重小的情况下,早期层的梯度很小,因此训练具有多个隐藏层的自动编码器是不可行的。如果初始权重接近一个好的解,梯度下降法就能很好地工作,但寻找这样的初始权重需要一种非常不同类型的算法,一次学习一层特征。我们介绍了这种针对二进制数据的 "预训练 "程序,将其推广到实值数据,并表明它对各种数据集都有良好的效果

在这里插入图片描述

初始化

RBM通过学习两层之间的特征,这个过程不需要BP,通过4层RBM,获得了一个初始化的编码器权重。

以二值图像为例,给出的有效初始化autoencoder的方法是:

  1. autoencoder中每层的权重W_i视作一个RBM的权重,初始化用较小的随机初始化。
  2. 对第一层的RBM进行训练,直至收敛。
  3. 用同样的训练样本给第一层的RBM进行预测,得出激活值(隐藏层的值/编码)。将该激活值作为第二层的RBM的训练样本,进行训练。
  4. 重复类似第三步的工作,训练所有的权重(RBM)。

展开

初始化后,将编码器的权重连接起来,转移到一个深度神经网络里就得到初始化的编码器了。对于解码器,要将编码器的权重转置,再转移。为什么转置就能当做解码器,因为RBM本身就兼具编解码能力(通过重构训练解码能力),因此初始化出来的权重也同样兼具编解码能力。

在这里插入图片描述

可以看到初始化的自编码器已经能够进行一定程度的重建了,

微调

然后就可以对初始化自编码器使用BP反向传播进行微调了,损失函数用像素级对数(交叉熵)损失函数

在这里插入图片描述

其中 p i p_i pi为像素i的强度, p ^ i \hat p_i p^i为其重构强度。

在这里插入图片描述

实验

自编码器模型:编码器各层的shape为:(28 \times 28)=784 - 1000 - 500 - 250 - 30。最后一层30维的特征层是用线性激活,其余均是Logistic激活(\sigma函数)。

训练集和测试集:MNIST 60,000个训练数据以及10,000个测试数据。

结果:做了两个测试,第一个是手写数字压缩到30维特征;第二个是压缩到2维特征。

  1. 第一行为第一行为随机手写数字样本;第二行为降维至30个特征的autoencoder;第三、四行分别为30个主成分的logistic PCA和标准PCA;均方误差分别为3.00, 8.01, 13.87。

在这里插入图片描述

自动编码器由一个大小为(28 X 28)-400-200-100-50-25-6层的编码器和一个对称的解码器组成。码层中的6个单元是线性的,其他单元都是逻辑的。该网络在20000张图像上进行了训练,并在10000张新图像上进行了测试。自动编码器发现了如何将每张784像素的图像转换成六个实数,允许几乎完美的重建(如图2A)。PCA给出的重建效果要差得多。在没有预训练的情况下,很深的自动编码器总是重建训练数据的平均值,即使在长时间的微调后也是如此。较浅的自动编码器在数据和代码之间只有一个隐藏层,可以在没有预训练的情况下进行学习,但预训练大大减少了它们的总训练时间。当参数数量相同时,深层自动编码器在测试数据上产生的重构误差比浅层自动编码器低,但随着参数数量的增加,这种优势就会消失。

在这里插入图片描述

(A)取全部60000张训练图像的前两个主成分,生成的每类500个数字的二维编码;(B) 由784- 1000-500-250-2自动编码器发现的二维编码。

总结

Hinton提出的深度自编码器DAE开创了深度编码器的先河,其中蕴含的预训练的思想本来是通过初始化解决神经网络梯度消失和难以训练的问题。

虽然现代的神经网络配合优化器已经弥补了这个问题,而且传统的RBM也逐渐不被关注,但现在预训练依然被用在很多方面,来提升训练效率和质量,比如使用预训练的编码器,再配合半监督的微调,就可以使用很低的成本和资源达到很高的水平。


http://www.kler.cn/a/466284.html

相关文章:

  • 物体切割效果
  • Python入门教程 —— 模块和包
  • DeepSeek-V3 正式发布,已在网页端和 API 全面上线,性能领先,速度飞跃。
  • ValuesRAG:以检索增强情境学习强化文化对齐
  • 【Block总结】Conv2Former中的Block,卷积调制块,简化了自注意力机制,提高了内存效率
  • 安卓入门十一 常用网络协议四
  • 查找最长回文子串
  • 七种改进爬山算法的方法
  • 阿里巴巴Java 面试突击手册开源(涵盖 p5-p8 技术栈)
  • 数据结构排序
  • C. Line: 用扩展欧几里得算法求解整数解
  • 京东一面:MySQL 主备延迟有哪些坑?主备切换策略
  • TypyScript从入门到精通
  • 如何根据数据分布特性,选择合适的聚类算法,以优化K-Means算法对非球形分布数据的聚类效果?
  • 3blue1brow线代笔记
  • 使用 HEIC/HEIF 编码器将 HEIC 转换为 JPEG
  • SQLite 进阶:扩展功能与最佳实践
  • 深入解析爬虫中的算法设计:提升效率与准确度
  • Scala_【3】运算符
  • Upload-labs 第四关(学习记录)
  • Pytorch的自动求导模块
  • 【机器学习】交叉验证:数据世界的“多面侦探”
  • Linux实验报告15-添加系统调用
  • deepin环境下Docker实用指南:核心命令详解
  • 开发AI电子宠物 参考资料
  • 【Jboss/Windows】Tomcat 8 + JDK 8 升级为 Jboss eap 7 + JDK8