深度学习:AE自编码器详细解读(图文并茂,值得一看)
本文参照了大量的网上文献,提取出了关于AE自编码器最重要的概念部分整理而成,为了增加文章的可读性,文章搭配了大量的插图。
参考文章如下:
自编码器是什么?有什么用?这里有一份入门指南(附代码)
TensorFlow实战之实现自编码器过程
深度学习之自编码器
首先跟大家展示一下本文的流程:
如上所示,本文分为三个大的段落,其中每个大段落又包含详细的分支,且看下面详细分解。
自编码的过程简单的说可以分为两部分:输入到隐层的编码过程和隐层到输出的解码过程。
那么这个过程有什么意义呢?我们接着看:
在学习自编码器之前,我们还需要再了解一下AE自编码器的相关概念。
稀疏性:
Sparsity 是当今机器学习领域中的一个重要话题。
Sparsity 的最重要的“客户”大概要属 high dimensional data 了吧。现在的机器学习问题中,具有非常高维度的数据随处可见。例如,在文档或图片分类中常用的 bag of words 模型里,如果词典的大小是一百万,那么每个文档将由一百万维的向量来表示。高维度带来的的一个问题就是计算量:在一百万维的空间中,即使计算向量的内积这样的基本操作也会是非常费力的。不过,如果向量是稀疏的的话(事实上在 bag of words 模型中文档向量通常都是非常稀疏的),例如两个向量分别只有 L 1 L1 L1和 L 2 L2 L2 两个非零元素,那么计算内积可以只使用 m i n ( L 1 , L 2 ) min(L1,L2) min(L1,L2) 次乘法完成。因此稀疏性对于解决高维度数据的计算量问题是非常有效的。
稀疏编码(Sparse Coding)算法是一种无监督学习方法,它用来寻找一组“超完备”基向量来更高效地表示样本数据。稀疏编码算法的目的就是找到一组基向量 ϕ i \phi _{i} ϕi ,使得我们能将输入向量 X X X表示为这些基向量的线性组合:
X = ∑ i = 1 k a i ϕ i X=\sum_{i=1}^{k}a_{i}\phi _{i} X=∑i=1kaiϕi
自编码(AutoEncoder):
顾名思义,即可以使用自身的高阶特征编码自己。自编码器其实也是一种神经网络,它的输入和输出是一致的,它借助稀疏编码的思想,目标是使用稀疏的一些高阶特征重新组合来重构自己,即 :对所有的自编码器来讲,目标都是样本重构。
在机器学习中,自编码器的使用十分广泛。自编码器首先通过编码层,将高维空间的向量,压缩成低维的向量(潜在变量),然后通过解码层将低维向量解压重构出原始样本。
隐含层:
指输入层和输出层以外,中间的那些层。输入层和输出层是可见的,且层的结构是相对固定的,而隐含层结构不固定,相当于不可见。只要隐含的节点足够多,即是只有一个隐含层的神经网络也可以拟合任意函数。隐含层层数越多,越容易拟合复杂的函数。拟合复杂函数需要的隐含节点数目随着层数的增多而呈指数下降。即层数越深,概念越抽象,这就是深度学习。
过拟合:
指模型预测准确率在训练集上升高,但在测试集上反而下降。这是模型的泛化性不好,只记住了当前数据的特征。
Dropout:
Dropout:防止过拟合的一种方法。将神经网络某一层的输出节点数据随机丢弃一部分。可以理解为是对特征的采样。
优化函数:
优化调试网络中的参数。一般情况下,在调参时,学习率的设置会导致最后结果差异很大。神经网络通常不是凸优化,充满局部最优,但是神经网络可能有很多个局部最优都能达到良好效果,反而全局最优容易出现过拟合。
对于SGD,通常一开始学习率大一些,可以快速收敛,但是训练的后期,希望学习率可以小一些,可以比较稳定地落到一个局部最优解。</