论文阅读---Reducing the Dimensionality of Data with Neural Networks
通过训练多层神经网络可以将高维数据转换成低维数据,其中有对高维输入向量进行改造的网络层。梯度下降可以用来微调如自编码器网络的权重系数,但是对权重的初始化要求比较高。这里提出一种有效初始化权重的方法,允许自编码器学习低维数据,这种降维方式比PCA表现效果更好。
降维有利于高维数据的分类、可视化、通信和存储。简单而普遍使用的降维方法是PCA(主要成分分析)--首先寻找数据集中方差最大的几个方向,然后用数据点在方向上的坐标来表示这条数据。我们将PCA称作一种非线性生成方法,它使用适应性的、多层“编码”网络将高维数据转换成低维数据,以及一个相似的“解码”网络将低维数据恢复到高维上。两种网络权重系数进行随机初始化,可以通过最小化原始数据和生成数据之间的差异对网络进行训练。梯度计算可以通过BP反向传播算法求解,由decoder网络梯度传到encoder网络中。

在有多隐层的非线性的autoencoder网络中,权重的优化工作很难进行。初始权重过大,autoencoders(自编码器)容易陷入局部最小值;初始权值过小,网络层的梯度很小,对于多层网络的自编码来说,训练过程变得更加困难。如果权重的初始值接近全局最优解,容易进行梯度计算;但是要找到这样的初始值要求提出一种每次学习一层特征的与之前完全不同的学习算法。对于图片中的二进制数据的预训练过程,推广到实值数据上,发现对于许多数据集这种方法都行之有效。
对于二进制向量组可以通过二层网络的RBM(restricted Boltzmann machine受限玻尔兹曼机)来进行建模,在RBM中,随机二进制像素连接到使用对称加权连接的随机二进制特征检测器。像素对应于受限玻尔兹曼机中的“可视化”单元,因为它们的状态是可以观察的,特征检测器对应于“隐藏”单元。可视化单元v 、隐藏单元h构成元组(v,h)对应的函数值为:
\[E(v,h) = -\sum_{i\in pixels}b_iv_i -\sum_{j\in features}b_j h_j - \sum_{i,j}v_ih_jw_{ij} \]
其中,
| 符号 | 含义 |
|---|---|
| \(v_i\) | 像素i的二进制状态 |
| \(h_j\) | j特征的二进制状态,即神经元的输出 |
| \(b_i\), \(b_j\) | i,j的偏置 |
| \(w_{ij}\) | i像素和j特征之间的权重系数值 |
受限玻尔兹曼机通过这个函数把每张图片赋予了一个概率值。训练图片的概率值可以提高,通过调整权重和偏置来降低图片的能量函数值,提高相似的、“虚构”图像的能量函数值。对于一张训练样本图片,每个特征检测器j的二进制状态\(h_j\)设为1,概率为\(\sigma(b_j+\sum_i v_i w_{ij})\) ,其中\(\sigma(x)\)是logistic函数\(1/[1+exp(-x)]\) ,参数意义和表格中的意义相同[全连接,输入和第一隐层中的神经元全连接]。一旦隐含单元的二进制状态确定,可以通过设定每个\(v_i\)为1,概率为\(\sigma(b_i+\sum_j h_j w_{ij})\)产生一张新图片。然后再次更新隐含单元的状态,这样才能表示虚构出来的图片。权重系数的变化可以表示为:\[\Delta w_{ij} = \epsilon(<v_i h_j>_{data} - <v_i h_j>_{recon})\],其中\(\epsilon\)是学习率,\(<v_i h_j>_{data}\) 表示数据中像素i和特征检测器j同为1的频率,\(<v_i h_j>_{recon}\) 是对应生成图片中为1的频率。相同学习规则的简化版本用于偏差。尽管它并不完全遵循训练数据的对数概率梯度,但学习效果很好。
单层二进制特征并不是在一组图像中建模结构的最佳方式。在一层特征检测器学习完毕之后,我们可以把它们的激活值当做下一层网络的输入。第一层特征检测器成为学习下一个受限玻尔兹曼机的可见单元。这种逐层学习的方式可以重复多次。可以证明:在每层网络的特征检测器数目不变以及权重系数初始化非常理想的情况下,增加额外的一层总会提高训练数据的log概率的下限值。当网络较高层具有较少的特征检测器(神经元)时,这种log概率下界并不适用,但是逐层学习算法对于深度自编码器权重的预训练来说仍然是一种非常有效的方法。每个特征层捕获下层网络单元的激活值之间的强烈、高阶相关性。对于各种各样的数据集,这是一种非常有效的方法--逐渐显示/揭示/探索低维的、非线性的结构。
在预训练之后,模型“展开”形成--共享权值的编码器网络和解码器网络。在参数微调阶段,使用确定性的、实值概率代替随机性活动,在整个自编码器中使用BP反向传播算法调整权重系数,以便优化图像重构过程。
对于连续数据,第一层RBM的隐藏单元保持二进制状态,但是对可见单元使用高斯噪声Gaussian Noise代替线性单元。如果噪声方差为1,隐藏单元的随机更新规则与前面保持一致,可见单元\(i\) 的更新规则:在方差为1,均值为\(b_i + \sum_j h_j w_{ij}\) 的高斯过程中随机取样。
在进行的所有实验中,每个受限玻尔兹曼机的可见单元都有实值输出,对于logistic单元来说输出在[0,1]范围内。在训练高层RBMs时,上一层RBM隐藏单元的输出当做下一层RBMs网络可见单元值,但是除了最顶层RBMs以后每个RBM的隐藏单元都是随机二进制值。最顶层RBM网络的隐藏单元为随机实值,这些值来源于单位方差、均值由RBMs logistic可见单元决定的高斯过程。这允许低维数据利用连续数据变量,方便和PCA做比较。
为了说明预训练算法能有效地微调深度神经网络,我们在人造数据上训练一个深度自编码器,数据包含在二维上随机选择三个点构成的曲线图。对于这个数据集,数据的维度是已知的,像素强度和其6个数之间的关系时高度非线性的。像素强度值在0,1之间,非高斯过程变量,所以,在自编码器中使用logistic输出单元,微调阶段最小化交叉熵误差函数:\([-\sum_i p_i log \hat{p}_i - \sum_i (1-p_i) log (1-\hat{p}_i)]\) ,其中\(p_i\)是\(i\) 像素的intensity,\(\hat{p}_i\)是重构图片的intensity。
自编码器架构为:(28 x 28)-400-200-100-50-25-6的编码器和与之对称的解码器。在code编码层的6个单元是线性的,其他单元都是logistic函数单元。网络的训练样本为20000张图片,测试样本为10000张图片。自编码器学习到如何将784个像素值的图片转换为6个实值向量,这6个实数值能重构出新的图片。PCA重构出的图片更加糟糕。没有预训练阶段,尽管经过长期的参数微调,深度autoencoders总是重建训练数据的平均值。在数据和code之间只有一层隐含层的浅autoencoders在不经过预训练阶段也可以训练学习,但是预训练阶段可以大量地减少训练时间。当参数数量相同时,深度autoencoders比浅层autoencoders重构误差更小;当参数数量增加时,深度autoencoders的这个特点就不复存在了。
之后,我们使用一个784-1000-500-250-30的自编码器来提取MNIST手写数字字体的降维数据。预训练和参数微调的MATLAB代码 .除了code层的30个是线性单元之外,都是logistic函数单元。在60000张训练图片进行参数微调之后,autoencoder在10000张新图片上进行测试,其重构结果优于PCA。
对于分类和回归问题,也可以使用逐层预训练方法。在MNIST手写数字识别上,权重随机初始化使用BP算法的网络错误率最低为1.6%,SVM为1.4%。在经过784-500-500-2000-10网络逐层预训练之后的,BP算法、低学习率最终识别错误率低至1.2%。预训练有助于提高泛化能力。
假设计算机计算速度足够迅速,数据集足够大,初始权重足够理想,从1980s年代开始,使用BP算法的深度自编码器对于非线性降维是一种非常有效的方式。这些假设条件当下已经满足。与非参数方法不同,自动编码器提供数据和code之间的双向映射,并且它们可以应用于非常大的数据集,因为两者训练和微调在时间和空间上与训练案例的数量成线性关系。
论文阅读---Reducing the Dimensionality of Data with Neural Networks的更多相关文章
- Reducing the Dimensionality of data with neural networks / A fast learing algorithm for deep belief net
Deeplearning原文作者Hinton代码注解 Matlab示例代码为两部分,分别对应不同的论文: . Reducing the Dimensionality of data with neur ...
- Deep Learning 16:用自编码器对数据进行降维_读论文“Reducing the Dimensionality of Data with Neural Networks”的笔记
前言 论文“Reducing the Dimensionality of Data with Neural Networks”是深度学习鼻祖hinton于2006年发表于<SCIENCE > ...
- 一天一经典Reducing the Dimensionality of Data with Neural Networks [Science2006]
别看本文没有几页纸,本着把经典的文多读几遍的想法,把它彩印出来看,没想到效果很好,比在屏幕上看着舒服.若用蓝色的笔圈出重点,这篇文章中几乎要全蓝.字字珠玑. Reducing the Dimensio ...
- Reducing the Dimensionality of Data with Neural Networks:神经网络用于降维
原文链接:http://www.ncbi.nlm.nih.gov/pubmed/16873662/ G. E. Hinton* and R. R. Salakhutdinov . Science. ...
- 【神经网络】Reducing the Dimensionality of Data with Neural Networks
这篇paper来做什么的? 用神经网络来降维.之前降维用的方法是主成分分析法PCA,找到数据集中最大方差方向.(附:降维有助于分类.可视化.交流和高维信号的存储) 这篇paper提出了一种非线性的PC ...
- 【Deep Learning】Hinton. Reducing the Dimensionality of Data with Neural Networks Reading Note
2006年,机器学习泰斗.多伦多大学计算机系教授Geoffery Hinton在Science发表文章,提出基于深度信念网络(Deep Belief Networks, DBN)可使用非监督的逐层贪心 ...
- Reducing the Dimensionality of Data with Neural Networks
****************内容加密中********************
- 论文阅读-(CVPR 2017) Kernel Pooling for Convolutional Neural Networks
在这篇论文中,作者提出了一种更加通用的池化框架,以核函数的形式捕捉特征之间的高阶信息.同时也证明了使用无参数化的紧致清晰特征映射,以指定阶形式逼近核函数,例如高斯核函数.本文提出的核函数池化可以和CN ...
- [论文阅读笔记] metapath2vec: Scalable Representation Learning for Heterogeneous Networks
[论文阅读笔记] metapath2vec: Scalable Representation Learning for Heterogeneous Networks 本文结构 解决问题 主要贡献 算法 ...
随机推荐
- 【Redis】命令学习笔记——列表(list)+集合(set)+有序集合(sorted set)(17+15+20个超全字典版)
本篇基于redis 4.0.11版本,学习列表(list)和集合(set)和有序集合(sorted set)相关命令. 列表按照插入顺序排序,可重复,可以添加一个元素到列表的头部(左边)或者尾部(右边 ...
- TableView的cell加载倒计时重用问题解决方案
TableView的cell加载倒计时重用问题解决方案 效果 说明 1. 写过类似需求的朋友一定知道,TableView上面加载倒计时功能会遇到复杂的重用问题难以解决 2. 本人提供一种解决思路,高效 ...
- iOS手势处理
iOS手势处理 iOS手势有着如下几种: UITapGestureRecognizer UIPinchGestureRecognizer UIRotationGestureRecognizer UIS ...
- Custom Settings.ini 和 bootstrap.ini 配置
[Settings]Priority=DefaultProperties=MyCustomProperty [Default] ;SkipWizard=YES 如果跳过部署向导,则即使 SkipCap ...
- SpringBoot Mybatis 执行自定义SQL
1.XML中执行自定义SQL. https://blog.csdn.net/u012427355/article/details/80654806 2.注解执行自定义SQL @Select(" ...
- zabbix之自动发现Tomcat多实例(第一种:已经部署完成,后续不再添加;第二种:后续或根据需要添加Tomcat实例)
单一实例手动部署:https://www.cnblogs.com/huangyanqi/p/8522526.html 注释:参考的一位博主的博客后续做的修改,那个博主的网址找不到了!!!! 背景: 1 ...
- SQL——快速定位相关的外键表
- pathlib
导入Path类 from pathlib import Path 创建Path对象 p = Path('C:\Windows\System32') # 用C:\Windows\System32创建Pa ...
- HTML5 JS 实现浏览器全屏(F11的效果)
项目中有需要使用JS来控制浏览器全屏的方法 DEMO地址: http://zhongxia245.github.io/demo/js2fullpanel.html function fullScree ...
- 【笔记】JS脚本为什么要放在body最后面以及async和defer的异同点
1.没有defer或async 浏览器遇到脚本的时候会暂停渲染并立即加载执行脚本(外部脚本),"立即"指的是在渲染该 script 标签之下的文档元素之前,也就是说不等待后续载入的 ...