深度自动编码器

深度自动编码器由两个对称的深度置信网络组成,其中一个深度置信网络通常有四到五个浅层,构成负责编码的部分,另一个四到五层的网络则是解码部分。

这些层都是受限玻尔兹曼机(RBM)(注:也可以采用自编码器预训练?),即构成深度置信网络的基本单元,它们有一些特殊之处,我们将在下文中介绍。以下是简化的深度自动编码器架构示意图,下文会作具体说明。

处理基准数据集MNIST时,深度自动编码器会在每个RBM之后使用二进制变换。深度自动编码器还可以用于包含实数数据的其他类型的数据集,此时编码器中的RBM可以改用高斯修正变换。

编码

让我们用以下的示例来描绘一个编码器的大致结构:

784 (输入) ----> 1000 ----> 500 ----> 250 ----> 100 -----> 30

假设进入网络的输入是784个像素(MNIST数据集中28 x 28像素的图像),那么深度自动编码器的第一层应当有1000个参数,即相对较大。 (注意这里的解释:首层的扩张!)

这可能会显得有违常理,因为参数多于输入往往会导致神经网络过拟合。

在这个例子当中, 增加参数从某种意义上来看也就是增加输入本身的特征,而这将使经过自动编码的数据最终能被解码。

其原因在于每个层中用于变换的sigmoid置信单元的表示能力。sigmoid置信单元无法表示与实数数据等量的信息和差异,而补偿方法之一就是扩张第一个层。

各个层将分别有1000、500、250、100个节点,直至网络最终生成一个30个数值长的向量。这一30个数值的向量是深度自动编码器负责预定型的前半部分的最后一层,由一个普通的RBM生成,而不是一个通常会出现在深度置信网络末端的Softmax或逻辑回归分类输出层。

解码

这30个数值是28 x 28像素图像被编码后的版本。深度自动编码器的后半部分会学习如何解码这一压缩后的向量,将其作为输入一步步还原。

深度自动编码器的解码部分是一个前馈网络,它的各个层分别有100、250、500和1000个节点。 层的权重以随机方式初始化。

定型细节

在解码器的反向传播阶段,学习速率应当降低,减慢速度:大约取在1e-3和1e-6之间,具体取决于处理的是二进制数据还是连续数据(分别对应区间的两端)。

应用案例

图像搜索

如上文所述,深度自动编码器可以将图像压缩为30个数值的向量。

因此图像搜索的过程就变成:上传图像,搜索引擎将图像压缩为30个数值,然后将这个向量与索引中的所有其他向量进行比较。

包含相似数值的向量将被返回,再转换为与之匹配的图像,成为搜索查询的结果。

数据压缩

图像压缩更广泛的应用是数据压缩。正如Geoff Hinton在这篇论文中所述,深度自动编码器可用于语义哈希。

主题建模和信息检索(IR)

深度自动编码器可用于主题建模,即以统计学方式对分布于一个文档集合中的抽象主题建模。

这是沃森等问答系统的一个重要环节。

简而言之,集合中的每篇文档会被转换为一个词袋(即一组词频),而这些词频会被缩放为0到1之间的小数,可以视之为词在文档中出现的概率。

缩放后的词频被输入由受限玻尔兹曼机堆叠构成的深度置信网络,而受限玻尔兹曼机本身就是一种前馈式反向传播自动编码器。这些深度置信网络(DBN)通过一系列sigmoid变换将文档映射至特征空间,从而把每篇文档压缩为10个数值。

每篇文档的数值组,即向量会被引入同一个向量空间,测量它到其他各个文档向量的距离。彼此接近的文档向量大致上可以归为同一个主题。

例如,一篇文档可能是“问题”,而其他的文档可能是“回答”,软件可以通过在向量空间中测量距离来完成这样的匹配。

代码示例

深度自动编码器可以通过拓展Deeplearning4j的MultiLayerNetwork类来构建。

代码大致如下:

final int numRows = 28;
    final int numColumns = 28;
    int seed = 123;
    int numSamples = MnistDataFetcher.NUM_EXAMPLES;
    int batchSize = 1000;
    int iterations = 1;
    int listenerFreq = iterations/5;

    log.info("Load data....");
    DataSetIterator iter = new MnistDataSetIterator(batchSize,numSamples,true);

    log.info("Build model....");
    MultiLayerConfiguration conf = new NeuralNetConfiguration.Builder()
            .seed(seed)
            .iterations(iterations)
            .optimizationAlgo(OptimizationAlgorithm.STOCHASTIC_GRADIENT_DESCENT)
            .list(10)
            .layer(0, new RBM.Builder().nIn(numRows * numColumns).nOut(1000).lossFunction(LossFunctions.LossFunction.RMSE_XENT).build())
            .layer(1, new RBM.Builder().nIn(1000).nOut(500).lossFunction(LossFunctions.LossFunction.RMSE_XENT).build())
            .layer(2, new RBM.Builder().nIn(500).nOut(250).lossFunction(LossFunctions.LossFunction.RMSE_XENT).build())
            .layer(3, new RBM.Builder().nIn(250).nOut(100).lossFunction(LossFunctions.LossFunction.RMSE_XENT).build())
            .layer(4, new RBM.Builder().nIn(100).nOut(30).lossFunction(LossFunctions.LossFunction.RMSE_XENT).build()) 

            //编码停止
            .layer(5, new RBM.Builder().nIn(30).nOut(100).lossFunction(LossFunctions.LossFunction.RMSE_XENT).build()) 	

            //解码开始
            .layer(6, new RBM.Builder().nIn(100).nOut(250).lossFunction(LossFunctions.LossFunction.RMSE_XENT).build())
            .layer(7, new RBM.Builder().nIn(250).nOut(500).lossFunction(LossFunctions.LossFunction.RMSE_XENT).build())
            .layer(8, new RBM.Builder().nIn(500).nOut(1000).lossFunction(LossFunctions.LossFunction.RMSE_XENT).build())
            .layer(9, new OutputLayer.Builder(LossFunctions.LossFunction.RMSE_XENT).nIn(1000).nOut(numRows*numColumns).build())
            .pretrain(true).backprop(true)
            .build();

     MultiLayerNetwork model = new MultiLayerNetwork(conf);
     model.init();

     model.setListeners(Arrays.asList((IterationListener) new ScoreIterationListener(listenerFreq)));

     log.info("Train model....");
     while(iter.hasNext()) {
        DataSet next = iter.next();
        model.fit(new DataSet(next.getFeatureMatrix(),next.getFeatureMatrix()));

如需构建深度自动编码器,请确保您已安装Deeplearning4j及其示例的最新版本。

如有关于深度自动编码器的问题,请在Gitter与我们联系。

转自:https://deeplearning4j.org/cn/deepautoencoder

原文地址:https://www.cnblogs.com/jiangkejie/p/11241496.html

时间: 2024-08-08 02:05:53

深度自动编码器的相关文章

卷积在深度学习中的作用(转自http://timdettmers.com/2015/03/26/convolution-deep-learning/)

卷积可能是现在深入学习中最重要的概念.卷积网络和卷积网络将深度学习推向了几乎所有机器学习任务的最前沿.但是,卷积如此强大呢?它是如何工作的?在这篇博客文章中,我将解释卷积并将其与其他概念联系起来,以帮助您彻底理解卷积. 已经有一些关于深度学习卷积的博客文章,但我发现他们都对不必要的数学细节高度混淆,这些细节没有以任何有意义的方式进一步理解.这篇博客文章也会有很多数学细节,但我会从概念的角度来看待他们,在这里我用每个人都应该能够理解的图像表示底层数学.这篇博文的第一部分是针对任何想要了解深度学习中

语义分析的一些方法

语义分析的一些方法 作者:火光摇曳 语义分析的一些方法(上篇) 语义分析的一些方法(中篇) 语义分析的一些方法(下篇) 语义分析,本文指运用各种机器学习方法,挖掘与学习文本.图片等的深层次概念.wikipedia上的解释:In machine learning, semantic analysis of a corpus is the task of building structures that approximate concepts from a large set of documen

图片搜索的原理

http://www.zhihu.com/question/19726630 Google 图片搜索的原理是什么? 1 条评论 分享 按投票排序按时间排序 18 个回答 389赞同反对,不会显示你的姓名 知乎用户,安全行业 XsXs.知乎用户.知乎用户 等人赞同 针对这个问题,请教了算法组的同事,他分享了基本的思路: 对于这种图像搜索的算法,一般是三个步骤: 1. 将目标图片进行特征提取,描述图像的算法很多,用的比较多的是:SIFT描述子,指纹算法函数,bundling features算法,h

强化学习网络中谷歌新型PlaNet最牛,它到底牛在哪里?

来源商业新知,原标题:行业前沿:谷歌新型PlaNet强化学习网络牛在哪里 现如今,迁移学习在机器学习领域中十分流行. 迁移学习是谷歌.Salesforce.IBM和微软Azure提供的多种自动机器学习管理服务的基础.由谷歌提出的BERT模型以及由Sebastian Ruder和Jeremy Howard共同提出的ULMFIT(通用语言模型微调文本分类)模型都重点突出了迁移学习,可见迁移学习是目前NLP(自然语言处理)的研究重点. 正如Sebastian在博文<NLP的ImageNet时代已经到来

从统计学角度来看深度学习(2):自动编码器和自由能

从统计学角度来看深度学习(2):自动编码器和自由能 原文链接:http://blog.shakirm.com/2015/03/a-statistical-view-of-deep-learning-ii-auto-encoders-and-free-energy/ 作者:Shakir Mohamed  翻译:钟琰    审校:何通    编辑:王小宁 本文得到了原英文作者Shakir Mohamed的授权同意,由钟琰翻译.何通审校.感谢他们的支持和帮助. 基于前馈深度神经网络的判别模型已经在许多

深度学习UFLDL教程翻译之自动编码器

一.自动编码器 目前为止,我们介绍了神经网络在有标签的训练样本的有监督学习中的应用.现在假设我们只有一个未标记的训练集{x(1),x(2),x(3),-},其中x是n维的.自动编码器神经网络是一种采用反向传播的无监督学习算法,让目标值和输入相等,即让y(i)=x(i). 这是一个自动编码器: 自动编码器试图学习函数hW,b(x)≈x.换句话说,它试图学习恒等函数的逼近,使得输出x^与x类似.这个将要学习的恒等函数看起来是个特别无关紧要的函数;但通过在网络中做些限制,例如限制隐藏单元的个数,我们可

Deep Learning(深度学习)学习笔记整理系列七

Deep Learning(深度学习)学习笔记整理系列 声明: 1)该Deep Learning的学习系列是整理自网上很大牛和机器学习专家所无私奉献的资料的.具体引用的资料请看参考文献.具体的版本声明也参考原文献. 2)本文仅供学术交流,非商用.所以每一部分具体的参考资料并没有详细对应.如果某部分不小心侵犯了大家的利益,还望海涵,并联系博主删除. 3)本人才疏学浅,整理总结的时候难免出错,还望各位前辈不吝指正,谢谢. 4)阅读本文需要机器学习.计算机视觉.神经网络等等基础(如果没有也没关系了,没

Deep Learning(深度学习)学习笔记整理系列之(五)

Deep Learning(深度学习)学习笔记整理系列 [email protected] http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04-08 声明: 1)该Deep Learning的学习系列是整理自网上很大牛和机器学习专家所无私奉献的资料的.具体引用的资料请看参考文献.具体的版本声明也参考原文献. 2)本文仅供学术交流,非商用.所以每一部分具体的参考资料并没有详细对应.如果某部分不小心侵犯了大家的利益,还望海涵,并联系博主

Deep Learning(深度学习)学习笔记整理系列之(三)

Deep Learning(深度学习)学习笔记整理系列 [email protected] http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04-08 声明: 1)该Deep Learning的学习系列是整理自网上很大牛和机器学习专家所无私奉献的资料的.具体引用的资料请看参考文献.具体的版本声明也参考原文献. 2)本文仅供学术交流,非商用.所以每一部分具体的参考资料并没有详细对应.如果某部分不小心侵犯了大家的利益,还望海涵,并联系博主