参考:
https://www.cnblogs.com/shuzirank/p/5818320.html
https://baijiahao.baidu.com/s?id=1599798281463567369&wfr=spider&for=pc&isFailFlag=1
https://www.cnblogs.com/cmybky/p/11773048.html
https://www.zhihu.com/question/38319536
https://blog.csdn.net/dagongsmallguy/article/details/85161223?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2allsobaiduend~default-1-85161223.nonecase&utm_term=%E8%87%AA%E5%8A%A8%E7%BC%96%E7%A0%81%E6%9C%BA%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0&spm=1000.2123.3001.4430
还需要再细化:
增加中英版
代码过一遍
论文主要讲了通过训练一个具有小中心层的多层神经网络来重建高维输入向量,可以将高维数据转换为低维代码,它是PCA的非线性泛化,这里坐着称其为autoencoder
它处理的过程分为3个步骤:预处理Pretraining,反卷unrolling,微调Fine-tuning
1)预训练包括学习一叠限制性玻尔兹曼机(RBM),输入层成为可见层,输出层为隐藏层,也就是特征检测器,每层只有一层特征检测器。学习到的一个RBM的特征激活作为’‘数据’’,用于训练堆栈中的下一个RBM。
RBM的其主要思想是是利用能量函数:
给定一张输入图像(暂时是以二值图像为例),我们可以通过调整网络的权值和偏置值使得网络对该输入图像的能量最低。
2)反卷:在预训练之后,RBMs就生成了一个深度自动编码器,将生成的编码反卷即可催原图像进行重建
3)微调:使用真实图像作为标签中非常有限的信息只用来稍微调整预训练发现的权重。
例子
论文中给出了几个例子,测试了在图像重建,数据重建,手写数据提取,自动编码器的效果都优与PCA重构的结果,在文档检索检索的效果优先于潜在语义分析(LSA)等方面:
例子1原图重构:深度自动编码器产生的重构原图和使用逻辑PCA和标准PCA重构对比。深度自动编码器重构的平方误差相对更小
例子:自动编码器发现了如何将每张784像素的图像转换成六个实数,允许几乎完美的重建(如图2A)。PCA给出的重建效果要差得多
例子2:使用784-1000-500-250-30自动编码器来提取MNIST训练集中所有手写数字的代码
例子3:
使用625-2000-1000-500-30自动编码器与线性输入单元来发现从Olivetti人脸数据集中获得的灰度图像补丁的30维代码。自动编码器的性能明显优于PCA
例子4:自动编码器产生的代码可以进行快速检索
训练了2000-500-250-125-10自动编码器,并使用多类交叉熵误差函数进行微调
论文中一些其他的注意点:
1)增加隐藏层的效果:
增加一个额外的层总是能提高模型分配给训练数据的对数概率的下限。当较高层的特征检测器较少时,这个约束并不适用,但逐层学习算法仍然是预训练深度自动编码器的权重的一种非常有效的方法。每一层的特征都能捕捉到下一层中单位活动之间的强烈的高阶相关性。对于各种各样的数据集,这是一种逐步揭示低维、非线性结构的有效方法。
当参数数量相同时,深层自动编码器在测试数据上产生的重构误差比浅层自动编码器低,但随着参数数量的增加,这种优势就会消失。
2)中间数据和输出数据:一级RBM的隐藏单元仍然是二进制的,但可见单元被具有高斯噪声的线性单元所取代,对于逻辑单元来说,其活动范围为[0,1]。在训练更高级别的RBM时,可见单元被设置为前一个RBM中隐藏单元的激活概率。这使得低维代码能够很好地利用连续变量,并有利于与PCA进行比较。
3)自动编码器不仅可以用来进行多层神经网络中的权重学习,也可以用来进行偏值得训练
4)其他应用:逐层预训练也可以用于分类和回归
网友评论