因为概率统计理论(随机信号分析?)的缺乏,只能从外观上简单地总结这几种和特征提取相关的算法。
自编码器 Autoencoder
自编码器就是一个全连接网络,就简单的三层,一个输入一个输出一个隐藏层。也可以把自编码器级联,形成多层的结构。自编码器的目的就是训练一个恒等映射,输入进去什么,就期望输出什么。简单的恒等映射没有意义,有意义的在于它的隐藏层神经元的个数往往和输入层不同。如果少于输入个数,这就相当于一个特征提取和重构的过程(降维);如果隐藏层个数大于输入层个数,此时如果还能再加上稀疏性约束,则就相当于稀疏编码。
如果是前者,Loss直接是输入和输出的的差,比如平方误差之类。
如果是后者,得加上稀疏性约束(稀疏性即提取出来的特征中,大量系数为零,非零系数尽量少)。为约束稀疏性,手段可以如下(来自UFLDL教程)。先定义隐藏层第 j j 单元的平均激活(在训练集上取平均)如下,其中
是训练集第 i i 个样本,一共有
个样本。
再引入一个接近于零的所谓的稀疏性参数 ρ ρ ,约束为 ρ^j ρ ^ j 接近 ρ ρ 。从而此时Loss可以定义为
稀疏编码 Sparse Coding
上面的自编码器,隐层单元数量大于输入层时,如果再有稀疏性的约束,则相当于稀疏编码。但是因为激活函数的非线性等等问题,总的来说,它不是线性的变换。而一般说的稀疏编码、稀疏表示,大多数都是线性变换。就线性变换而言,稀疏编码是在寻找超完备的一组基 { ϕi},i=1,2,⋯,k { ϕ i } , i = 1 , 2 , ⋯ , k ,使得输入向量表示成基的线性组合(这里不要求基的正交性)。