6.13 Neurons Networks Stack Auto Encoder

对于6.12提到的加深网络深度带来的问题,(gradient diffuse  局部最优等)可以使用stack autoencoder的方法来避免

stack autoencoder是哟中逐层贪婪(Greedy layer-wise training)的训练方法,逐层贪婪的主要思路是每次只训练网络中的一层,即首先训练一个只含一个隐藏层的网络,仅当这层网络训练结束之后才开始训练一个有两个隐藏层的网络,以此类推。在每一步中,把已经训练好的前  层固定,然后增加第  层(也就是将已经训练好的前  的输出作为输入)。每一层的训练可以是有监督的(例如,将每一步的分类误差作为目标函数),但更通常使用无监督方法(例如自动编码器)。这些各层单独训练所得到的权重被用来初始化最终(或者说全部)的深度网络的权重,然后对整个网络进行“微调”(即把所有层放在一起来优化有标签训练集上的训练误差).

逐层贪婪的训练方法取得成功要归功于以下几方面:

1)数据获取:虽然获取有标签数据的代价是昂贵的,但获取大量的无标签数据是容易的。自学习方法(self-taught learning)的潜力在于它能通过使用大量的无标签数据来学习到更好的模型。该方法使用无标签数据来学习得到所有层(不包括用于预测标签的最终分类层) 的最佳初始权重。相比纯监督学习方法,这种自学习方法能够利用多得多的数据,并且能够学习和发现数据中存在的模式。因此该方法通常能够提高分类器的性能。

2)更优的局部极值:当用无标签数据训练完网络后,相比于随机初始化而言,各层初始权重会位于参数空间中较好的位置上。然后我们可以从这些位置出发进一步微调权重。从经验上来说,以这些位置为起点开始梯度下降更有可能收敛到比较好的局部极值点,这是因为无标签数据已经提供了大量输入数据中包含的模式的先验信息。

stack autoencoder 就是一种逐层贪婪的训练算法。

时间: 2024-10-28 05:33:22

6.13 Neurons Networks Stack Auto Encoder的相关文章

Auto Encoder用于异常检测

对基于深度神经网络的Auto Encoder用于异常检测的一些思考 from:https://my.oschina.net/u/1778239/blog/1861724 一.前言 现实中,大部分数据都是无标签的,人和动物多数情况下都是通过无监督学习获取概念,故而无监督学习拥有广阔的业务场景.举几个场景:网络流量是正常流量还是攻击流量.视频中的人的行为是否正常.运维中服务器状态是否异常等等.有监督学习的做法是给样本标出label,那么标label的过程肯定是基于某一些规则(图片除外),既然有了规则

CS229 6.1 Neurons Networks Representation

面对复杂的非线性可分的样本是,使用浅层分类器如Logistic等需要对样本进行复杂的映射,使得样本在映射后的空间是线性可分的,但在原始空间,分类边界可能是复杂的曲线.比如下图的样本只是在2维情形下的示例,假设有100维度,即特征数目是100,若使用logistic来做分类,对于这种线性不可分的情形,要对特征进行各种形式的组合映射,然后用映射后扩充的特征进行分类,可能会增加大量的参数,计算复杂性可想而知,而且可能会造成严重的over-fitting,可见logistic分类的局限性,下面引入NN.

C++ 性能剖析 (三):Heap Object对比 Stack (auto) Object

通常认为,性能的改进是90 ~ 10 规则, 即10%的代码要对90%的性能问题负责.做过大型软件工程的程序员一般都知道这个概念. 然而对于软件工程师来说,有些性能问题是不可原谅的,无论它们属于10%或是90%,都是“必须”改进的.这里就讲讲其中的一个问题:用heap还是用stack的问题. Java, C#,和JavaScript的程序员一般都不用管自己创建的object是在heap里还是在stack里,因为对于这些语言,object 只能“生活在”heap里.这无疑对于程序员来说简单了许多.

(六)6.15 Neurons Networks Deep Belief Networks

Hintion老爷子在06年的science上的论文里阐述了 RBMs 可以堆叠起来并且通过逐层贪婪的方式来训练,这种网络被称作Deep Belife Networks(DBN),DBN是一种可以学习训练数据的高层特征表示的网络,DBN是一种生成模型,可见变量  与  个隐层的联合分布: 这里 x = h0,为RBM在第 k 层的隐层单元条件下的可见单元的条件分布, 是一个DBN顶部可见层与隐层的条件分布,如图下: DBN的训练: 1. 首先充分训练第一个 RBM: 2. 固定第一个 RBM 的

TensorFlow实现去噪自编码器及使用—Masking Noise Auto Encoder

有关于自编码器的原理,请参考博客http://blog.csdn.net/xukaiwen_2016/article/details/70767518:对于对其与原理熟悉的可以直接看下面代码. 首先是使用到的相关库,数学运算相关操作库Numpy和对数据进行预处理的模块Scikit-lean中的preprocessing,使用TensorFlow的MNIST作为数据集. import numpy as np import sklearn.preprocessing as prep import t

(六)6.14 Neurons Networks Restricted Boltzmann Machines

1.RBM简介 受限玻尔兹曼机(Restricted Boltzmann Machines,RBM)最早由hinton提出,是一种无监督学习方法,即对于给定数据,找到最大程度拟合这组数据的参数,其网络结构如下: 以上的RBM的贝叶斯网络图,该网络可网络结构有 n个可视节点和m个隐藏节点 ,其中每个可视节点只与m个隐藏节点相关,与其他可视节点独立,对于隐藏节点同理,RBM中的参数有隐层与可见层的权重参数,还有上图没给出的偏置项,为可见层的偏置,为隐藏层的偏置,以上便是RBM中的所有参数. RBM的

(六) 6.3 Neurons Networks Gradient Checking

BP算法很难调试,一般情况下会隐隐存在一些小问题,比如(off-by-one error),即只有部分曾德权重得到训练,或者忘记计算bais unit,这虽然会得到一个正确的结果,但效果差于准确BP得到的结果. 有了cost function,目标是求出一组参数W,b,这里以表示,cost function 暂且记做.假设 ,则 ,即一维情况下的Gradient Descent: 根据6.2中对单个参数单个样本的求导公式: 可以得到每个参数的偏导数,对所有样本累计求和,可以得到所有训练数据对参数

(六)6.12 Neurons Networks from self-taught learning to deep network

self-taught learning 在特征提取方面完全是用的无监督的方法,对于有标记的数据,可以结合有监督学习来对上述方法得到的参数进行微调,从而得到一个更加准确的参数a. 在self-taught learning中,首先用 无标记数据训练一个sparse autoencoder,这样用对于原始输入x,经过sparse autoencoder得到隐层特征a: 这样对于分类问题,目标是预测样本的类别标号 .现在的标注数据集 ,包含  个标注样本.此前已经说明,可以利用稀疏自编码器获得的特征

(六)6.16 Neurons Networks linear decoders and its implements

Sparse AutoEncoder是一个三层结构的网络,分别为输入输出与隐层,前边自编码器的描述可知,神经网络中的神经元都采用相同的激励函数,Linear Decoders 修改了自编码器的定义,对输出层与隐层采用了不用的激励函数,所以 Linear Decoder 得到的模型更容易应用,而且对模型的参数变化有更高的鲁棒性. 在网络中的前向传导过程中的公式: 其中 a(3) 是输出. 在自编码器中, a(3) 近似重构了输入 x = a(1) . 对于最后一层为 sigmod(tanh) 激活