编码器-解码器入门级理解

编码器-解码器使用场景

编码器-解码器在我们的日常生活中并不陌生,这个编码和解码的过程最简单的例子,就是打电话。在电话前讲话,声音信号将被转换为电信号进行传输,传输到另一端后又会转换为声音信号被对方听见。声音信号转化为电信号可以看做编码过程,相反则为解码过程,这里电信号是声音信号的另一种表现形式,只不过是通过硬件实现的转换。

在机器学习中也有这样类似的模型,比如机器翻译、自动摘要、图像解说等等。

在机器翻译中,需要将一种语言的句子转化为另一种语言的句子。
在自动摘要中,需要将一段文字提取出摘要。
在图像解说中,需要为一张图像形成一段说明文字。

一、PCA

PCA,也就是主成分分析,是一个无监督数据降维算法,主要作用是将高维的向量x投影到低维向量y,要尽量保留主要信息。PCA与这个过程可以用以下变换实现:
在这里插入图片描述
其中W为投影矩阵,m为样本集的均值向量。这个投影过程也就类似于编码器。

而有时想要从降维后的向量y来重构高维向量x,就需要乘上投影矩阵的转置再加上均值向量,相当于上面的反过程,如以下变换:
在这里插入图片描述
这个过程也就类似于解码器。

二、自编码器(AE)

自编码器的主要作用是进行特征提取和数据降维。最简单的自编码器由3层组成:1个输入层,1个隐藏层,1个输出层。如下图:
在这里插入图片描述
输入:x∈Rn
输入层到隐藏层变换矩阵:Wenc∈Rd*n
编码后特征:h∈Rd
隐藏层到输出层变换矩阵:Wdec∈Rn*d
重构输出x’∈Rn
即:
编码: h=σ(Wencx+benc)
解码: x’=σ(Wdecx+bdec)

通过不断最小化输入输出之间的重构误差进行训练,基于损失函数,通过反向传播计算梯度,使用梯度下降法不断优化参数Wenc、benc、Wdec、bdec。损失函数为:L=1/N∑||xi=xi’||22

更复杂的编码和解码可由f和g表示,损失函数为:L=1/N∑||xi=g(f(xi’))||22

1、欠完备自编码器

为提取有用特征,限定h维度比x维度小,即d<n。

2、过完备自编码器

允许编码器维度大于等于输入的维度,即d>=n,此时需加以正则化约束才有意义,否则编码器会倾向于直接将输入拷贝到输出。

3、正则化自编码器

①、去噪自编码器

在原始输入的基础上添加噪声作为输入,解码器需重构出不加噪声的元时输入,具体讲就是将输入x的一部分随机置0变为xδ

损失函数为:L=1/N∑||xi=g(f(xδ’))||

②、稀疏自编码器

限制神经元的活跃度,定义活跃度为神经元在所有样本上取值的平均值。用ρ’i表示,限制ρ’ii,ρi为超参数,接近于0,为期望的活跃度。对偏离ρi较大的神经元进行惩罚。

使用相对熵做正则项:Lsparse=∑dj=1ρlog(ρ/ρi)+(1-ρ)log(1-ρ/1-ρi)
偏离ρi越大,该值就越大。

损失函数为:L=L(xi,g(f(xi)))+λLsparse,λ为调节重构项与稀疏正则的权重。

三、变分自编码器(VAE)

变分自编码器主要用于生成新的样本数据,其本质为生成模型,假设样本服从某个复杂的分布P(X),即x~P(X),生成模型就是建模该分布P(X),来从中采样得到新样本。

每个样本会受一些因素控制,如手写数字会受数字是什么、数字的大小、画笔的粗细等因素影响。这些因素就是隐变量,多个隐变量组成隐变量向量。

其主要结构为:
在这里插入图片描述
核心公式为:
在这里插入图片描述
推导略。比较详细的解释见:http://www.noobyard.com/article/p-nltlngkp-vc.html

训练完成后,预测阶段可以直接生成样本。具体来说,会从正态分布z~N(0,1)中产生一个随机数,送入编码器,得到预测结果即为生成的样本,不再需要编码器,也不需要对随机数进行均值和方差变换。